Project import generated by Copybara.

GitOrigin-RevId: f70580d4e9be3db690b9b6bdfb8e253a496b0ecd
Change-Id: I88739121e946b84d3268a4fb62731070c76b309d
diff --git a/nearby/presence/CMakeLists.txt b/nearby/presence/CMakeLists.txt
index 6fdeed6..2b4b66e 100644
--- a/nearby/presence/CMakeLists.txt
+++ b/nearby/presence/CMakeLists.txt
@@ -12,27 +12,72 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.0)
+cmake_minimum_required(VERSION 3.14)
 
-project(ldt)
+project(NearbyProtocol)
 
-set(CMAKE_C_FLAGS_DEBUG "-g -DDEBUG")
-set(CMAKE_CXX_FLAGS_DEBUG "-g -DDEBUG")
+# required for designated initializers on MSVC
+set(CMAKE_CXX_STANDARD 17)
 
-add_compile_options(-Wall -g -O1 -Wno-deprecated -Wno-deprecated-declarations)
+# root directory of repo
+set(BETO_CORE_ROOT ${CMAKE_SOURCE_DIR}/../..)
+
+# location of external third_party dependencies
+set(THIRD_PARTY_DIR ${BETO_CORE_ROOT}/third_party)
+
+set(CMAKE_C_FLAGS_DEBUG "-DDEBUG")
+set(CMAKE_CXX_FLAGS_DEBUG "-DDEBUG")
+if (UNIX)
+    set(CMAKE_C_FLAGS_DEBUG "-g ${CMAKE_C_FLAGS_DEBUG}")
+    set(CMAKE_CXX_FLAGS_DEBUG "-g ${CMAKE_C_FLAGS_DEBUG}")
+endif ()
+
+if (UNIX)
+    add_compile_options(-Wall -Wextra -Wimplicit-fallthrough -Wextra-semi
+            -Wno-missing-field-initializers -Wno-unused-parameter -Wno-psabi
+            -Wshadow
+            -Wsign-compare)
+elseif (MSVC)
+    add_compile_options(-W4 -O1)
+endif ()
 
 find_package(OpenSSL REQUIRED)
-if ( OPENSSL_FOUND )
+if (OPENSSL_FOUND)
     message(STATUS "OpenSSL Found: ${OPENSSL_VERSION}")
     message(STATUS "OpenSSL Include: ${OPENSSL_INCLUDE_DIR}")
     message(STATUS "OpenSSL Libraries: ${OPENSSL_LIBRARIES}")
-endif()
+endif ()
 
+if (ENABLE_TESTS)
+    message(STATUS "Enabling workspace wide tests")
+
+    # Setup GoogleTest
+    include(FetchContent)
+    FetchContent_Declare(
+            googletest
+            GIT_REPOSITORY https://github.com/google/googletest.git
+            GIT_TAG release-1.12.1
+    )
+    FetchContent_MakeAvailable(googletest)
+    enable_testing()
+    include(GoogleTest)
+
+    # Find GoogleBenchmark
+    find_package(benchmark REQUIRED)
+
+    # Setup jsoncpp
+    set(JSONCPP_DIR ${THIRD_PARTY_DIR}/jsoncpp)
+    include_directories(${JSONCPP_DIR})
+    add_library(
+            jsoncpp
+            ${JSONCPP_DIR}/jsoncpp.cpp
+    )
+endif ()
+
+add_subdirectory(np_cpp_ffi)
 add_subdirectory(ldt_np_c_sample)
 
 if (ENABLE_FUZZ)
     message(STATUS "Building fuzzers")
     add_subdirectory(ldt_np_adv_ffi_fuzz)
-endif()
-
-
+endif ()
diff --git a/nearby/presence/README.md b/nearby/presence/README.md
index 8f38f7d..fe63af1 100644
--- a/nearby/presence/README.md
+++ b/nearby/presence/README.md
@@ -5,17 +5,20 @@
 See the appendix below for more details on XTS and LDT.
 
 ## Project structure
-*Note all new crates follow the convention of using underscore `_` instead of hyphen `-` in crate names
+
+*Note all new crates follow the convention of using underscore `_` instead of
+hyphen `-` in crate names
 
 ### `ldt`
 
 An implementation
 of [`LDT`](https://luca-giuzzi.unibs.it/corsi/Support/papers-cryptography/1619-2007-NIST-Submission.pdf)
- which can use `xts-aes` as its tweakable block cipher.
+which can use `xts-aes` as its tweakable block cipher.
 
- ### `ldt_tbc`
+### `ldt_tbc`
 
-The Tweakable Block Cipher traits for use in LDT. These traits have implementations in the `xts_aes`
+The Tweakable Block Cipher traits for use in LDT. These traits have
+implementations in the `xts_aes`
 
 ### `ldt_np_adv`
 
@@ -24,24 +27,27 @@
 
 ### `ldt_np_adv_ffi`
 
-C API for rust library, currently exposes C/C++ clients the needed API's to use the NP specific LDT rust implementation.
-For an example of how to integrate with these API's see program in `ldt_np_c_sample`
+C API for rust library, currently exposes C/C++ clients the needed API's to use
+the NP specific LDT rust implementation.
+For an example of how to integrate with these API's see program
+in `ldt_np_c_sample`
 
 ### `ldt_np_c_sample`
 
-Sample c program which provides its own OpenSSL based AES implementation to encrypt data through the LDT rust implementation
+Sample c program which provides its own OpenSSL based AES implementation to
+encrypt data through the LDT rust implementation
 An example of how to interface with the `ldt_np_adv_ffi` API's
 
 ### `np_hkdf`
 
-The Key Derivation functions used for creating keys used by nearby presence from a key_seed
+The Key Derivation functions used for creating keys used by nearby presence from
+a key_seed
 
 ### `xts_aes`
 
 An implementation
 of [`XTS-AES`](https://luca-giuzzi.unibs.it/corsi/Support/papers-cryptography/1619-2007-NIST-Submission.pdf)
 
-
 ## Setup for MacOS local development
 
 Dependencies:
@@ -50,37 +56,51 @@
 brew install protobuf rapidjson google-benchmark
 ```
 
-We depend on OpenSSL of version at least 3.0.5 being installed on your machine to build the fuzzers, for macOS run:
+We depend on OpenSSL of version at least 3.0.5 being installed on your machine
+to build the fuzzers, for macOS run:
 
 ```
 brew install openssl@3
 ```
 
-Your build system may still be picking up an older version so you will have to symlink to the brew installed version:
+Your build system may still be picking up an older version so you will have to
+symlink to the brew installed version:
+
 ```
 brew link --force openssl
 ```
 
-The in-box version of Clang which comes from XCode developer tools does not have a fuzzer runtime so we will have to use our own
+The in-box version of Clang which comes from XCode developer tools does not have
+a fuzzer runtime so we will have to use our own
+
 ```
 brew install llvm
 ```
-then to override the default version it needs to come before it in $PATH. first find your path:
+
+then to override the default version it needs to come before it in $PATH. first
+find your path:
+
 ```
 $(brew --prefix llvm)/bin
 ```
+
 then add this to the beginning of your path
+
 ```
 echo 'export PATH="/opt/homebrew/opt/llvm/bin:$PATH"' >> ~/.bash_profile
 export PATH="/opt/homebrew/opt/llvm/bin:$PATH"
 ```
+
 verify success with:
+
 ```
 clang --version
 ```
+
 it should display the path to the homebrew version and not the xcode version.
 
 Some other dependencies you may need include:
+
 ```
 brew install ninja bindgen
 ```
@@ -117,7 +137,9 @@
 ```
 
 ### `ldt_np_c_sample`
-From the root directory run the following commands to build and run the C sample.
+
+From the root directory run the following commands to build and run the C
+sample.
 
 ```
 mkdir -p cmake-build && cd cmake-build
@@ -127,7 +149,9 @@
 ```
 
 ### `ldt_np_c_sample/tests`
-Test cases for the ldt_np_adv_ffi C API which are built alongside the sample, use the following commands to run the tests, from root of repo:
+
+Test cases for the ldt_np_adv_ffi C API which are built alongside the sample,
+use the following commands to run the tests, from root of repo:
 
 ```
 mkdir -p cmake-build && cd cmake-build
@@ -135,7 +159,9 @@
 make
 cd ldt_np_c_sample/tests && ctest
 ```
-you can then view the output of the tests in `ldt_np_c_sample/tests/Testing/Temporary/LastTest.log`
+
+you can then view the output of the tests
+in `ldt_np_c_sample/tests/Testing/Temporary/LastTest.log`
 
 To run the benchmarks:
 
@@ -155,7 +181,15 @@
 
 ### C
 
-Build w/ cmake as per `ldt_np_c_sample` instructions. Fuzzers will be in `np_ffi_fuzz` in the build directory.
+Build cmake project with `-DENABLE_FUZZ=true`<br>
+Fuzz targets will be output to the build dir for:<br>
+
+- `ldt_np_adv_ffi_fuzz`<br>
+- `np_cpp_ffi/fuzz`
+    - To run `fuzzer_np_cpp_deserialize`
+      use: `./fuzzer_np_cpp_deserialize -max_len=255 corpus`
+    - The `corpus` directory provides seed data to help the fuzzer generate
+      more relevant data to input
 
 ## Cross-compilation for Android
 
@@ -198,15 +232,20 @@
 - In your `adb shell`, run the benchmark
 
     - `./ldt_scan-... --bench`
+
 ### Building min-sized release cross-compiled for Android
-- Copy and paste the following into your `~/.cargo/config.toml`, replacing with a path to your NDK and Host OS
+
+- Copy and paste the following into your `~/.cargo/config.toml`, replacing with
+  a path to your NDK and Host OS
+
 ```
 [target.aarch64-linux-android]
 # Replace this with a path to your ndk version and the prebuilt toolchain for your Host OS
 linker = "Library/Android/sdk/ndk/23.2.8568313/toolchains/llvm/prebuilt/darwin-x86_64/bin/aarch64-linux-android21-clang"
 ```
+
 - then run:
-`cargo +nightly build -Z build-std=core,alloc -Z build-std-features=panic_immediate_abort --target aarch64-linux-android --profile release-min-size`
+  `cargo +nightly build -Z build-std=core,alloc -Z build-std-features=panic_immediate_abort --target aarch64-linux-android --profile release-min-size`
 
 ## Appendix
 
diff --git a/nearby/presence/array_view/src/lib.rs b/nearby/presence/array_view/src/lib.rs
index 9ba21b1..c57e959 100644
--- a/nearby/presence/array_view/src/lib.rs
+++ b/nearby/presence/array_view/src/lib.rs
@@ -45,6 +45,10 @@
 }
 
 impl<T, const N: usize> ArrayView<T, N> {
+    /// Destructures this ArrayView into a (length, payload) pair.
+    pub fn into_raw_parts(self) -> (usize, [T; N]) {
+        (self.len, self.array)
+    }
     /// A version of [`ArrayView#try_from_array`] which panics if `len > buffer.len()`,
     /// suitable for usage in `const` contexts.
     pub const fn const_from_array(array: [T; N], len: usize) -> ArrayView<T, N> {
diff --git a/nearby/presence/handle_map/Cargo.toml b/nearby/presence/handle_map/Cargo.toml
new file mode 100644
index 0000000..8f00bf7
--- /dev/null
+++ b/nearby/presence/handle_map/Cargo.toml
@@ -0,0 +1,19 @@
+[package]
+name = "handle_map"
+version.workspace = true
+edition.workspace = true
+publish.workspace = true
+
+[dependencies]
+hashbrown.workspace = true
+lock_api.workspace = true
+portable-atomic.workspace = true
+spin.workspace = true
+crypto_provider.workspace = true
+
+[dev-dependencies]
+criterion.workspace = true
+
+[[bench]]
+name = "benches"
+harness = false
diff --git a/nearby/presence/handle_map/benches/benches.rs b/nearby/presence/handle_map/benches/benches.rs
new file mode 100644
index 0000000..f1ee427
--- /dev/null
+++ b/nearby/presence/handle_map/benches/benches.rs
@@ -0,0 +1,330 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+use criterion::{black_box, criterion_group, criterion_main, Criterion};
+use handle_map::*;
+use std::sync::Arc;
+use std::thread;
+use std::time::{Duration, Instant};
+
+// For the sake of these benchmarks, we just want
+// to be able to allocate an almost-arbitrary number of handles
+// if needed by the particular benchmark.
+const MAX_ACTIVE_HANDLES: u32 = u32::MAX - 1;
+
+// The default number of threads+shards to use
+// in multi-threaded benchmarks, chosen
+// to represent a typical multi-threaded use-case.
+const DEFAULT_SHARDS_AND_THREADS: u8 = 8;
+
+/// We're using u8's for the wrapped object type to deliberately ignore
+/// costs related to accessing the underlying data - we just care about
+/// benchmarking handle-map operations.
+type BenchHandleMap = HandleMap<u8>;
+
+fn build_handle_map(num_shards: u8) -> BenchHandleMap {
+    let dimensions = HandleMapDimensions { num_shards, max_active_handles: MAX_ACTIVE_HANDLES };
+    HandleMap::with_dimensions(dimensions)
+}
+
+/// Benchmark for repeated reads on a single thread
+fn single_threaded_read_benchmark(c: &mut Criterion) {
+    // The number of shards should not matter much here.
+    let handle_map = build_handle_map(8);
+    // Pre-populate the map with a single handle.
+    let handle = handle_map.allocate(|| 0xFF).unwrap();
+    let handle_map_ref = &handle_map;
+    // Perform repeated reads
+    c.bench_function("single-threaded reads", |b| {
+        b.iter(|| {
+            let guard = handle_map_ref.get(black_box(handle)).unwrap();
+            black_box(*guard)
+        })
+    });
+}
+
+/// Benchmark for repeated writes on a single thread
+fn single_threaded_write_benchmark(c: &mut Criterion) {
+    // The number of shards should not matter much here.
+    let handle_map = build_handle_map(8);
+    // Pre-populate the map with a single handle.
+    let handle = handle_map.allocate(|| 0xFF).unwrap();
+    let handle_map_ref = &handle_map;
+    // Perform repeated writes
+    c.bench_function("single-threaded writes", |b| {
+        b.iter(|| {
+            let mut guard = handle_map_ref.get_mut(black_box(handle)).unwrap();
+            *guard *= black_box(0);
+        })
+    });
+}
+
+/// Benchmark for repeated allocations on a single thread
+#[allow(unused_must_use)]
+fn single_threaded_allocate_benchmark(c: &mut Criterion) {
+    // The number of shards here is chosen to be quasi-reasonable.
+    // Realistically, performance will fluctuate somewhat with this
+    // due to the difference in the number of internal hash-map collisions,
+    // but ultimately we only care about the asymptotic behavior.
+    let handle_map = build_handle_map(8);
+    let handle_map_ref = &handle_map;
+    // Perform repeated allocations
+    c.bench_function("single-threaded allocations", |b| {
+        b.iter(|| {
+            handle_map_ref.allocate(|| black_box(0xEE));
+        })
+    });
+}
+
+/// Benchmark for repeated allocation->deallocation on a single thread
+/// starting from an empty map.
+#[allow(unused_must_use)]
+fn single_threaded_allocate_deallocate_near_empty_benchmark(c: &mut Criterion) {
+    // The number of shards should not matter much here.
+    let handle_map = build_handle_map(8);
+    let handle_map_ref = &handle_map;
+    // Perform repeated allocation/deallocation pairs
+    c.bench_function("single-threaded allocate/deallocate pairs (empty init state)", |b| {
+        b.iter(|| {
+            let handle = handle_map_ref.allocate(|| black_box(0xDD)).unwrap();
+            handle_map_ref.deallocate(handle);
+        })
+    });
+}
+
+/// Benchmark for repeated allocation->deallocation starting
+/// from a map with a thousand elements per shard.
+#[allow(unused_must_use)]
+fn single_threaded_allocate_deallocate_one_thousand_benchmark(c: &mut Criterion) {
+    let handle_map = build_handle_map(8);
+    for _ in 0..(8 * 1000) {
+        handle_map.allocate(|| black_box(0xFF)).unwrap();
+    }
+    let handle_map_ref = &handle_map;
+
+    // Perform repeated allocation/deallocation pairs
+    c.bench_function(
+        "single-threaded allocate/deallocate pairs (init one thousand elements per shard)",
+        |b| {
+            b.iter(|| {
+                let handle = handle_map_ref.allocate(|| black_box(0xDD)).unwrap();
+                handle_map_ref.deallocate(handle);
+            })
+        },
+    );
+}
+
+/// Benchmark for repeated allocation->deallocation starting
+/// from a map with a million elements per shard.
+#[allow(unused_must_use)]
+fn single_threaded_allocate_deallocate_one_million_benchmark(c: &mut Criterion) {
+    let handle_map = build_handle_map(8);
+    for _ in 0..(8 * 1000000) {
+        handle_map.allocate(|| black_box(0xFF)).unwrap();
+    }
+    let handle_map_ref = &handle_map;
+
+    // Perform repeated allocation/deallocation pairs
+    c.bench_function(
+        "single-threaded allocate/deallocate pairs (init one million elements per shard)",
+        |b| {
+            b.iter(|| {
+                let handle = handle_map_ref.allocate(|| black_box(0xDD)).unwrap();
+                handle_map_ref.deallocate(handle);
+            })
+        },
+    );
+}
+
+/// Helper function for creating a multi-threaded benchmark
+/// with the set number of threads. Untimed Initialization of state
+/// should occur prior to this call. This method will repeatedly
+/// execute the benchmark code on all threads
+fn bench_multithreaded<F>(name: &str, num_threads: u8, benchable_fn_ref: Arc<F>, c: &mut Criterion)
+where
+    F: Fn() + Send + Sync + 'static,
+{
+    c.bench_function(name, move |b| {
+        b.iter_custom(|iters| {
+            // The returned results from the threads will be their timings
+            let mut join_handles = Vec::new();
+            for _ in 0..num_threads {
+                let benchable_fn_ref_clone = benchable_fn_ref.clone();
+                let join_handle = thread::spawn(move || {
+                    let start = Instant::now();
+                    for _ in 0..iters {
+                        benchable_fn_ref_clone();
+                    }
+                    start.elapsed()
+                });
+                join_handles.push(join_handle);
+            }
+            //Threads spawned, now collect the results
+            let mut total_duration = Duration::from_nanos(0);
+            for join_handle in join_handles {
+                let thread_duration = join_handle.join().unwrap();
+                total_duration += thread_duration;
+            }
+            total_duration /= num_threads as u32;
+            total_duration
+        })
+    });
+}
+
+/// Defines a number of reads/writes to perform [relative
+/// to other operations performed in a given test]
+#[derive(Debug, Clone, Copy)]
+struct ReadWriteCount {
+    num_reads: usize,
+    num_writes: usize,
+}
+
+const READS_ONLY: ReadWriteCount = ReadWriteCount { num_reads: 4, num_writes: 0 };
+
+const READ_LEANING: ReadWriteCount = ReadWriteCount { num_reads: 3, num_writes: 1 };
+
+const BALANCED: ReadWriteCount = ReadWriteCount { num_reads: 2, num_writes: 2 };
+
+const WRITE_LEANING: ReadWriteCount = ReadWriteCount { num_reads: 1, num_writes: 3 };
+
+const WRITES_ONLY: ReadWriteCount = ReadWriteCount { num_reads: 0, num_writes: 4 };
+
+const READ_WRITE_COUNTS: [ReadWriteCount; 5] =
+    [READS_ONLY, READ_LEANING, BALANCED, WRITE_LEANING, WRITES_ONLY];
+
+/// Benchmarks a repeated allocate/[X writes]/[Y reads]/deallocate workflow across
+/// the default number of threads and shards.
+fn lifecycle_read_and_write_multithreaded(per_object_rw_count: ReadWriteCount, c: &mut Criterion) {
+    let name = format!(
+        "lifecycle_read_and_write_multithreaded(reads/object: {}, writes/object:{})",
+        per_object_rw_count.num_reads, per_object_rw_count.num_writes
+    );
+    // We need an Arc to be able to pass this off to `bench_multithreaded`.
+    let handle_map = Arc::new(build_handle_map(DEFAULT_SHARDS_AND_THREADS));
+    bench_multithreaded(
+        &name,
+        DEFAULT_SHARDS_AND_THREADS,
+        Arc::new(move || {
+            let handle = handle_map.allocate(|| black_box(0xFF)).unwrap();
+            for _ in 0..per_object_rw_count.num_writes {
+                let mut write_guard = handle_map.get_mut(handle).unwrap();
+                *write_guard *= black_box(1);
+            }
+            for _ in 0..per_object_rw_count.num_reads {
+                let read_guard = handle_map.get_mut(handle).unwrap();
+                black_box(*read_guard);
+            }
+            handle_map.deallocate(handle).unwrap();
+        }),
+        c,
+    );
+}
+
+fn lifecycle_benchmarks(c: &mut Criterion) {
+    for read_write_count in READ_WRITE_COUNTS {
+        // Using 8 separate shards to roughly match the number of active threads.
+        lifecycle_read_and_write_multithreaded(read_write_count, c);
+    }
+}
+
+/// Benchmarks repeated cycles of accessing the given number of distinct objects, each
+/// with the given number of reads and writes across the given number of threads.
+fn read_and_write_contention_multithreaded(
+    num_threads: u8,
+    num_distinct_objects: u32,
+    per_object_rw_count: ReadWriteCount,
+    c: &mut Criterion,
+) {
+    let name = format!("read_and_write_contention_multithreaded(threads: {}, objects: {}, reads/object: {}, writes/object:{})",
+                       num_threads, num_distinct_objects, per_object_rw_count.num_reads, per_object_rw_count.num_writes);
+    // Default to 8 shards, ultimately doesn't matter much since we only ever access a few shards.
+    // This needs to be `'static` in order to pass a ref off to `bench_multithreaded`.
+    let handle_map = Arc::new(build_handle_map(8));
+    let mut handles = Vec::new();
+    for i in 0..num_distinct_objects {
+        let handle = handle_map.allocate(|| i as u8).unwrap();
+        handles.push(handle);
+    }
+
+    bench_multithreaded(
+        &name,
+        num_threads,
+        Arc::new(move || {
+            // Deliberately performing all writes first, with
+            // the goal of getting staggered timings from
+            // all of the threads for subsequent iterations.
+            // We also perform reads and writes across all objects
+            // in batches to get something resembling uniform access.
+            for _ in 0..per_object_rw_count.num_writes {
+                for handle in handles.iter() {
+                    let mut write_guard = handle_map.get_mut(*handle).unwrap();
+                    *write_guard *= black_box(1);
+                }
+            }
+            for _ in 0..per_object_rw_count.num_reads {
+                for handle in handles.iter() {
+                    let read_guard = handle_map.get(*handle).unwrap();
+                    black_box(*read_guard);
+                }
+            }
+        }),
+        c,
+    );
+}
+
+fn read_write_contention_benchmarks(c: &mut Criterion) {
+    for num_threads in [2, 4, 8].iter() {
+        for num_distinct_objects in [1u32, 2u32, 4u32].iter() {
+            if num_distinct_objects >= &(*num_threads as u32) {
+                continue;
+            }
+            for read_write_count in READ_WRITE_COUNTS {
+                read_and_write_contention_multithreaded(
+                    *num_threads,
+                    *num_distinct_objects,
+                    read_write_count,
+                    c,
+                );
+            }
+        }
+    }
+}
+
+/// Benchmarks allocation (starting from empty) for the default number of shards and threads
+fn allocator_contention_benchmark(c: &mut Criterion) {
+    let name = "allocator_contention_multithreaded";
+    // We need an Arc to pass this off to `bench_multithreaded`
+    let handle_map = Arc::new(build_handle_map(DEFAULT_SHARDS_AND_THREADS));
+    bench_multithreaded(
+        name,
+        DEFAULT_SHARDS_AND_THREADS,
+        Arc::new(move || {
+            handle_map.allocate(|| black_box(0xFF)).unwrap();
+        }),
+        c,
+    );
+}
+
+criterion_group!(
+    benches,
+    single_threaded_read_benchmark,
+    single_threaded_write_benchmark,
+    single_threaded_allocate_benchmark,
+    single_threaded_allocate_deallocate_near_empty_benchmark,
+    single_threaded_allocate_deallocate_one_thousand_benchmark,
+    single_threaded_allocate_deallocate_one_million_benchmark,
+    lifecycle_benchmarks,
+    read_write_contention_benchmarks,
+    allocator_contention_benchmark,
+);
+criterion_main!(benches);
diff --git a/nearby/presence/handle_map/src/lib.rs b/nearby/presence/handle_map/src/lib.rs
new file mode 100644
index 0000000..745aec4
--- /dev/null
+++ b/nearby/presence/handle_map/src/lib.rs
@@ -0,0 +1,608 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//! A thread-safe implementation of a map for managing object handles,
+//! a safer alternative to raw pointers for FFI interop.
+#![cfg_attr(not(test), no_std)]
+#![forbid(unsafe_code)]
+#![deny(missing_docs)]
+extern crate alloc;
+extern crate core;
+
+use alloc::boxed::Box;
+use alloc::vec::Vec;
+use core::ops::{Deref, DerefMut};
+use core::sync::atomic::Ordering;
+use hashbrown::hash_map::EntryRef;
+use portable_atomic::{AtomicU32, AtomicU64};
+use spin::lock_api::*;
+
+#[cfg(test)]
+mod tests;
+
+/// A RAII read lock guard for an object in a [`HandleMap`]
+/// pointed-to by a given [`Handle`]. When this struct is
+/// dropped, the underlying read lock on the associated
+/// shard will be dropped.
+pub struct ObjectReadGuard<'a, T> {
+    guard: lock_api::MappedRwLockReadGuard<'a, spin::RwLock<()>, T>,
+}
+
+impl<'a, T> Deref for ObjectReadGuard<'a, T> {
+    type Target = T;
+
+    fn deref(&self) -> &Self::Target {
+        self.guard.deref()
+    }
+}
+
+/// A RAII read-write lock guard for an object in a [`HandleMap`]
+/// pointed-to by a given [`Handle`]. When this struct is
+/// dropped, the underlying read-write lock on the associated
+/// shard will be dropped.
+pub struct ObjectReadWriteGuard<'a, T> {
+    guard: lock_api::MappedRwLockWriteGuard<'a, spin::RwLock<()>, T>,
+}
+
+impl<'a, T> Deref for ObjectReadWriteGuard<'a, T> {
+    type Target = T;
+
+    fn deref(&self) -> &Self::Target {
+        self.guard.deref()
+    }
+}
+
+impl<'a, T> DerefMut for ObjectReadWriteGuard<'a, T> {
+    fn deref_mut(&mut self) -> &mut Self::Target {
+        self.guard.deref_mut()
+    }
+}
+
+/// FFI-transmissible structure expressing the dimensions
+/// (max # of allocatable slots, number of shards) of a handle-map
+/// to be used upon initialization.
+#[repr(C)]
+#[derive(Clone, Copy)]
+pub struct HandleMapDimensions {
+    /// The number of shards which are employed
+    /// by the associated handle-map.
+    pub num_shards: u8,
+    /// The maximum number of active handles which may be
+    /// stored within the associated handle-map.
+    pub max_active_handles: u32,
+}
+
+/// Trait for marker structs containing information about a
+/// given [`SingletonHandleMap`], including the underlying
+/// object type and the dimensions of the map.
+/// Used primarily to enforce type-level constraints
+/// on `SingletoneHandleMap`s, including
+/// ensuring that they are truly singletons.
+pub trait SingletonHandleMapInfo {
+    /// The underlying kind of object pointed-to by handles
+    /// derived from the associated handle-map.
+    type Object: Send + Sync;
+
+    /// Gets the dimensions of the corresponding handle-map.
+    fn dimensions(&self) -> HandleMapDimensions;
+
+    /// Gets a static reference to the global handle-map
+    fn get_handle_map() -> &'static HandleMap<Self::Object>;
+}
+
+/// An individual handle to be given out by a [`HandleMap`].
+/// This representation is untyped, and just a wrapper
+/// around a handle-id, in contrast to implementors of `HandleLike`.
+#[derive(Clone, Copy, PartialEq, Eq, Hash)]
+pub struct Handle {
+    handle_id: u64,
+}
+
+impl From<&Handle> for Handle {
+    fn from(handle: &Handle) -> Self {
+        *handle
+    }
+}
+
+impl Handle {
+    /// Constructs a handle wrapping the given ID.
+    ///
+    /// No validity checks are done on the wrapped ID
+    /// to ensure that the given ID is active in
+    /// any specific handle-map, and the type
+    /// of the handle is not represented.
+    ///
+    /// As a result, this method is only useful for
+    /// allowing access to handles from an FFI layer.
+    pub fn from_id(handle_id: u64) -> Self {
+        Self { handle_id }
+    }
+    /// Gets the ID for this handle.
+    ///
+    /// Since the underlying handle is un-typed,`
+    /// this method is only suitable for
+    /// transmitting handles across an FFI layer.
+    pub fn get_id(&self) -> u64 {
+        self.handle_id
+    }
+    /// Derives the shard index from the handle id
+    fn get_shard_index(&self, num_shards: u8) -> usize {
+        (self.handle_id % (num_shards as u64)) as usize
+    }
+}
+
+/// Error raised when attempting to allocate into a full handle-map.
+#[derive(Debug)]
+pub struct HandleMapFullError;
+
+/// Internal error enum for failed allocations into a given shard.
+enum ShardAllocationError<T, F: FnOnce() -> T> {
+    /// Error for when the entry for the handle is occupied,
+    /// in which case we spit out the object-provider to try again
+    /// with a new handle-id.
+    EntryOccupied(F),
+    /// Error for when we would exceed the maximum number of allocations.
+    ExceedsAllocationLimit,
+}
+
+/// Error raised when the entry for a given [`Handle`] doesn't exist.
+#[derive(Debug)]
+pub struct HandleNotPresentError;
+
+/// Wrapper around a `HandleMap` which is specifically tailored for maintaining
+/// a global singleton `'static` reference to a handle-map.
+/// The wrapper handles initialization of the singleton in a const-context
+/// and subsequent accesses to ensure that the underlying map is always
+/// initialized upon attempts to access it.
+pub struct SingletonHandleMap<I: SingletonHandleMapInfo> {
+    info: I,
+    wrapped: spin::once::Once<HandleMap<I::Object>, spin::relax::Spin>,
+}
+
+impl<I: SingletonHandleMapInfo> SingletonHandleMap<I> {
+    /// Constructs a new global handle-map using the given
+    /// singleton handle-map info. This method is callable
+    /// from a `const`-context to allow it to be used to initialize
+    /// `static` variables.
+    pub const fn with_info(info: I) -> Self {
+        Self { info, wrapped: spin::once::Once::new() }
+    }
+    /// Initialize the handle-map if it's not already initialized,
+    /// and return a reference to the result.
+    pub fn get(&self) -> &HandleMap<I::Object> {
+        self.wrapped.call_once(|| {
+            let dimensions = self.info.dimensions();
+            HandleMap::with_dimensions(dimensions)
+        })
+    }
+}
+
+/// A thread-safe mapping from "handle"s [like pointers, but safer]
+/// to underlying structures, supporting allocations, reads, writes,
+/// and deallocations of objects behind handles.
+pub struct HandleMap<T: Send + Sync> {
+    /// The dimensions of this handle-map
+    dimensions: HandleMapDimensions,
+
+    /// The individually-lockable "shards" of the handle-map,
+    /// among which the keys will be roughly uniformly-distributed.
+    handle_map_shards: Box<[HandleMapShard<T>]>,
+
+    /// An atomically-incrementing counter which tracks the
+    /// next handle ID which allocations will attempt to use.
+    new_handle_id_counter: AtomicU64,
+
+    /// An atomic integer roughly tracking the number of
+    /// currently-outstanding allocated entries in this
+    /// handle-map among all [`HandleMapShard`]s.
+    outstanding_allocations_counter: AtomicU32,
+}
+
+impl<T: Send + Sync> HandleMap<T> {
+    /// Creates a new handle-map with the given `HandleMapDimensions`.
+    pub fn with_dimensions(dimensions: HandleMapDimensions) -> Self {
+        let mut handle_map_shards = Vec::with_capacity(dimensions.num_shards as usize);
+        for _ in 0..dimensions.num_shards {
+            handle_map_shards.push(HandleMapShard::default());
+        }
+        let handle_map_shards = handle_map_shards.into_boxed_slice();
+        Self {
+            dimensions,
+            handle_map_shards,
+            new_handle_id_counter: AtomicU64::new(0),
+            outstanding_allocations_counter: AtomicU32::new(0),
+        }
+    }
+}
+
+impl<T: Send + Sync> HandleMap<T> {
+    /// Allocates a new object within the given handle-map, returning
+    /// a handle to the location it was stored at. This operation
+    /// may fail if attempting to allocate over the `dimensions.max_active_handles`
+    /// limit imposed on the handle-map, in which case this method
+    /// will return a `HandleMapFullError`.
+    pub fn allocate(
+        &self,
+        initial_value_provider: impl FnOnce() -> T,
+    ) -> Result<Handle, HandleMapFullError> {
+        let mut initial_value_provider = initial_value_provider;
+        loop {
+            // Increment the new-handle-ID counter using relaxed memory ordering,
+            // since the only invariant that we want to enforce is that concurrently-running
+            // threads always get distinct new handle-ids.
+            let new_handle_id = self.new_handle_id_counter.fetch_add(1, Ordering::Relaxed);
+            let new_handle = Handle::from_id(new_handle_id);
+            let shard_index = new_handle.get_shard_index(self.dimensions.num_shards);
+
+            // Now, check the shard to see if we can actually allocate into it.
+            let shard_allocate_result = self.handle_map_shards[shard_index].try_allocate(
+                new_handle,
+                initial_value_provider,
+                &self.outstanding_allocations_counter,
+                self.dimensions.max_active_handles,
+            );
+            match shard_allocate_result {
+                Ok(_) => {
+                    return Ok(new_handle);
+                }
+                Err(ShardAllocationError::ExceedsAllocationLimit) => {
+                    return Err(HandleMapFullError);
+                }
+                Err(ShardAllocationError::EntryOccupied(thrown_back_provider)) => {
+                    // We need to do the whole thing again with a new ID
+                    initial_value_provider = thrown_back_provider;
+                }
+            }
+        }
+    }
+
+    /// Gets a read-only reference to an object within the given handle-map,
+    /// if the given handle is present. Otherwise, returns [`HandleNotPresentError`].
+    pub fn get(&self, handle: Handle) -> Result<ObjectReadGuard<T>, HandleNotPresentError> {
+        let shard_index = handle.get_shard_index(self.dimensions.num_shards);
+        self.handle_map_shards[shard_index].get(handle)
+    }
+
+    /// Gets a read+write reference to an object within the given handle-map,
+    /// if the given handle is present. Otherwise, returns [`HandleNotPresentError`].
+    pub fn get_mut(
+        &self,
+        handle: Handle,
+    ) -> Result<ObjectReadWriteGuard<T>, HandleNotPresentError> {
+        let shard_index = handle.get_shard_index(self.dimensions.num_shards);
+        self.handle_map_shards[shard_index].get_mut(handle)
+    }
+
+    /// Removes the object pointed to by the given handle in
+    /// the handle-map, returning the removed object if it
+    /// exists. Otherwise, returns [`HandleNotPresentError`].
+    pub fn deallocate(&self, handle: Handle) -> Result<T, HandleNotPresentError> {
+        let shard_index = handle.get_shard_index(self.dimensions.num_shards);
+        self.handle_map_shards[shard_index]
+            .deallocate(handle, &self.outstanding_allocations_counter)
+    }
+
+    /// Gets the actual number of elements stored in the entire map.
+    /// Only suitable for single-threaded sections of tests.
+    #[cfg(test)]
+    pub(crate) fn len(&self) -> usize {
+        self.handle_map_shards.iter().map(|s| s.len()).sum()
+    }
+
+    /// Sets the new-handle-id counter to the given value.
+    /// Only suitable for tests.
+    #[cfg(test)]
+    pub(crate) fn set_new_handle_id_counter(&mut self, value: u64) {
+        self.new_handle_id_counter = AtomicU64::new(value);
+    }
+}
+
+// Bunch o' type aliases to make talking about them much easier in the shard code.
+type ShardMapType<T> = hashbrown::HashMap<Handle, T>;
+type ShardReadWriteLock<T> = RwLock<ShardMapType<T>>;
+type ShardReadGuard<'a, T> = RwLockReadGuard<'a, ShardMapType<T>>;
+type ShardUpgradableReadGuard<'a, T> = RwLockUpgradableReadGuard<'a, ShardMapType<T>>;
+type ShardReadWriteGuard<'a, T> = RwLockWriteGuard<'a, ShardMapType<T>>;
+
+/// An individual handle-map shard, which is ultimately
+/// just a hash-map behind a lock.
+pub(crate) struct HandleMapShard<T: Send + Sync> {
+    data: RwLock<ShardMapType<T>>,
+}
+
+impl<T: Send + Sync> Default for HandleMapShard<T> {
+    fn default() -> Self {
+        Self { data: RwLock::new(hashbrown::HashMap::new()) }
+    }
+}
+
+impl<T: Send + Sync> HandleMapShard<T> {
+    fn get(&self, handle: Handle) -> Result<ObjectReadGuard<T>, HandleNotPresentError> {
+        let map_read_guard = ShardReadWriteLock::<T>::read(&self.data);
+        let read_only_map_ref = map_read_guard.deref();
+        if read_only_map_ref.contains_key(&handle) {
+            let object_read_guard = ShardReadGuard::<T>::map(map_read_guard, move |map_ref| {
+                // We know that the entry exists, since we've locked the
+                // shard and already checked that it exists prior to
+                // handing out this new, mapped read-lock.
+                map_ref.get(&handle).unwrap()
+            });
+            Ok(ObjectReadGuard { guard: object_read_guard })
+        } else {
+            // Auto-drop the read guard, and return an error
+            Err(HandleNotPresentError)
+        }
+    }
+    /// Gets a read-write guard on the entire shard map if an entry for the given
+    /// handle exists, but if not, yield [`HandleNotPresentError`].
+    fn get_read_write_guard_if_entry_exists(
+        &self,
+        handle: Handle,
+    ) -> Result<ShardReadWriteGuard<T>, HandleNotPresentError> {
+        // Start with an upgradable read lock and then upgrade to a write lock.
+        // By doing this, we prevent new readers from entering (see `spin` documentation)
+        let map_upgradable_read_guard = ShardReadWriteLock::<T>::upgradable_read(&self.data);
+        let read_only_map_ref = map_upgradable_read_guard.deref();
+        if read_only_map_ref.contains_key(&handle) {
+            // If we know that the entry exists, and we're currently
+            // holding a read-lock, we know that we're safe to request
+            // an upgrade to a write lock, since only one write or
+            // upgradable read lock can be outstanding at any one time.
+            let map_read_write_guard =
+                ShardUpgradableReadGuard::<T>::upgrade(map_upgradable_read_guard);
+            Ok(map_read_write_guard)
+        } else {
+            // Auto-drop the read guard, we don't need to allow a write.
+            Err(HandleNotPresentError)
+        }
+    }
+
+    fn get_mut(&self, handle: Handle) -> Result<ObjectReadWriteGuard<T>, HandleNotPresentError> {
+        let map_read_write_guard = self.get_read_write_guard_if_entry_exists(handle)?;
+        // Expose only the pointed-to object with a mapped read-write guard
+        let object_read_write_guard =
+            ShardReadWriteGuard::<T>::map(map_read_write_guard, move |map_ref| {
+                // Already checked that the entry exists while holding the lock
+                map_ref.get_mut(&handle).unwrap()
+            });
+        Ok(ObjectReadWriteGuard { guard: object_read_write_guard })
+    }
+    fn deallocate(
+        &self,
+        handle: Handle,
+        outstanding_allocations_counter: &AtomicU32,
+    ) -> Result<T, HandleNotPresentError> {
+        let mut map_read_write_guard = self.get_read_write_guard_if_entry_exists(handle)?;
+        // We don't need to worry about double-decrements, since the above call
+        // got us an upgradable read guard for our read, which means it's the only
+        // outstanding upgradeable guard on the shard. See `spin` documentation.
+        // Remove the pointed-to object from the map, and return it,
+        // releasing the lock when the guard goes out of scope.
+        let removed_object = map_read_write_guard.deref_mut().remove(&handle).unwrap();
+        // Decrement the allocations counter. Release ordering because we want
+        // to ensure that clearing the map entry never gets re-ordered to after when
+        // this counter gets decremented.
+        outstanding_allocations_counter.sub(1, Ordering::Release);
+        Ok(removed_object)
+    }
+
+    fn try_allocate<F>(
+        &self,
+        handle: Handle,
+        object_provider: F,
+        outstanding_allocations_counter: &AtomicU32,
+        max_active_handles: u32,
+    ) -> Result<(), ShardAllocationError<T, F>>
+    where
+        F: FnOnce() -> T,
+    {
+        // Use an upgradeable read guard -> write guard to provide greater fairness
+        // toward writers (see `spin` documentation)
+        let map_upgradable_read_guard = ShardReadWriteLock::<T>::upgradable_read(&self.data);
+        let mut map_read_write_guard =
+            ShardUpgradableReadGuard::<T>::upgrade(map_upgradable_read_guard);
+        match map_read_write_guard.entry_ref(&handle) {
+            EntryRef::Occupied(_) => {
+                // We've already allocated for that handle-id, so yield
+                // the object provider back to the caller.
+                Err(ShardAllocationError::EntryOccupied(object_provider))
+            }
+            EntryRef::Vacant(vacant_entry) => {
+                // An entry is open, but we haven't yet checked the allocations count.
+                // Try to increment the total allocations count atomically.
+                // Use acquire ordering on a successful bump, because we don't want
+                // to invoke the allocation closure before we have a guaranteed slot.
+                // On the other hand, upon failure, we don't care about ordering
+                // of surrounding operations, and so we use a relaxed ordering there.
+                let allocation_count_bump_result = outstanding_allocations_counter.fetch_update(
+                    Ordering::Acquire,
+                    Ordering::Relaxed,
+                    |old_total_allocations| {
+                        if old_total_allocations >= max_active_handles {
+                            None
+                        } else {
+                            Some(old_total_allocations + 1)
+                        }
+                    },
+                );
+                match allocation_count_bump_result {
+                    Ok(_) => {
+                        // We're good to actually allocate
+                        let object = object_provider();
+                        vacant_entry.insert(object);
+                        Ok(())
+                    }
+                    Err(_) => {
+                        // The allocation would cause us to exceed the allowed allocations,
+                        // so release all locks and error.
+                        Err(ShardAllocationError::ExceedsAllocationLimit)
+                    }
+                }
+            }
+        }
+    }
+    /// Gets the actual number of elements stored in this shard.
+    /// Only suitable for single-threaded sections of tests.
+    #[cfg(test)]
+    fn len(&self) -> usize {
+        let guard = ShardReadWriteLock::<T>::read(&self.data);
+        guard.deref().len()
+    }
+}
+
+/// Externally-facing trait for things which behave like handle-map handles
+/// with a globally-defined handle-map for the type.
+pub trait HandleLike: Sized {
+    /// The underlying object type pointed-to by this handle
+    type Object: Send + Sync;
+
+    /// Tries to allocate a new handle using the given provider
+    /// to construct the underlying stored object as a new
+    /// entry into the global handle table for this type.
+    fn allocate(
+        initial_value_provider: impl FnOnce() -> Self::Object,
+    ) -> Result<Self, HandleMapFullError>;
+
+    /// Gets a RAII read-guard on the contents behind this handle.
+    fn get(&self) -> Result<ObjectReadGuard<Self::Object>, HandleNotPresentError>;
+
+    /// Gets a RAII read-write guard on the contents behind this handle.
+    fn get_mut(&self) -> Result<ObjectReadWriteGuard<Self::Object>, HandleNotPresentError>;
+
+    /// Deallocates the contents behind this handle.
+    fn deallocate(self) -> Result<Self::Object, HandleNotPresentError>;
+}
+
+#[macro_export]
+/// `declare_handle_map! { handle_module_name, handle_type_name, wrapped_type,
+/// map_dimension_provider }`
+///
+/// Declares a new public module with name `handle_module_name` which includes a new type
+/// `handle_type_name` which is `#[repr(C)]` and represents FFI-accessible handles
+/// to values of type `wrapped_type`.
+///
+/// Internal to the generated module, a new static `SingletonHandleMap` is created, where the
+/// maximum number of active handles and the number of shards are given by
+/// the dimensions returned by evaluation of the `map_dimension_provider` expression.
+///
+/// Note: `map_dimension_provider` will be evaluated within the defined module's scope,
+/// so you will likely need to use `super` to refer to definitions in the enclosing scope.
+///
+/// # Example
+/// The following code defines an FFI-safe type `StringHandle` which references
+/// the `String` data-type, and uses it to define a (contrived)
+/// function `sample` which will print "Hello World".
+///
+/// ```
+/// mod sample {
+///     use core::ops::Deref;
+///     use handle_map::{declare_handle_map, HandleMapDimensions, HandleLike};
+///
+///     fn get_string_handle_map_dimensions() -> HandleMapDimensions {
+///         HandleMapDimensions {
+///             num_shards: 8,
+///             max_active_handles: 100,
+///         }
+///     }
+///
+///     declare_handle_map! { string_handle, StringHandle, String,
+///                           super::get_string_handle_map_dimensions() }
+///
+///     use string_handle::StringHandle;
+///
+///     fn sample() {
+///         // Note: this method could panic if there are
+///         // more than 99 outstanding handles.
+///
+///         // Allocate a new string-handle pointing to the string "Hello"
+///         let handle = StringHandle::allocate(|| { "Hello".to_string() }).unwrap();
+///         {
+///             // Obtain a write-guard on the contents of our handle
+///             let mut handle_write_guard = handle.get_mut().unwrap();
+///             handle_write_guard.push_str(" World");
+///             // Write guard is auto-dropped at the end of this block.
+///         }
+///         {
+///             // Obtain a read-guard on the contents of our handle.
+///             // Note that we had to ensure that the write-guard was
+///             // dropped prior to doing this, or else execution
+///             // could potentially hang.
+///             let handle_read_guard = handle.get().unwrap();
+///             println!("{}", handle_read_guard.deref());
+///         }
+///         // Clean up the data behind the created handle
+///         handle.deallocate().unwrap();
+///     }
+/// }
+/// ```
+macro_rules! declare_handle_map {
+    ($handle_module_name:ident, $handle_type_name:ident, $wrapped_type:ty,
+     $map_dimension_provider:expr) => {
+        #[doc = concat!("Macro-generated (via `handle_map::declare_handle_map!`) module",
+                        " which defines the `", stringify!($handle_module_name), "::",
+                        stringify!($handle_type_name), "` FFI-transmissible handle type ",
+                        " which references values of type `", stringify!($wrapped_type), "`.")]
+        pub mod $handle_module_name {
+            use $crate::SingletonHandleMapInfo;
+
+            struct SingletonInfo;
+
+            static GLOBAL_HANDLE_MAP: $crate::SingletonHandleMap<SingletonInfo> =
+                $crate::SingletonHandleMap::with_info(SingletonInfo);
+
+            impl $crate::SingletonHandleMapInfo for SingletonInfo {
+                type Object = $wrapped_type;
+
+                fn dimensions(&self) -> $crate::HandleMapDimensions {
+                    $map_dimension_provider
+                }
+                fn get_handle_map() -> &'static $crate::HandleMap<$wrapped_type> {
+                    GLOBAL_HANDLE_MAP.get()
+                }
+            }
+
+            #[doc = concat!("A `#[repr(C)]` handle to a value of type `",
+                            stringify!($wrapped_type), "`.")]
+            #[repr(C)]
+            #[derive(Clone, Copy, PartialEq, Eq)]
+            pub struct $handle_type_name {
+                handle_id: u64,
+            }
+
+            impl $handle_type_name {
+                fn get_as_handle(&self) -> $crate::Handle {
+                    $crate::Handle::from_id(self.handle_id)
+                }
+            }
+            impl $crate::HandleLike for $handle_type_name {
+                type Object = $wrapped_type;
+                fn allocate(initial_value_provider: impl FnOnce() -> $wrapped_type,
+                ) -> Result<Self, $crate::HandleMapFullError> {
+                    SingletonInfo::get_handle_map().allocate(initial_value_provider)
+                        .map(|derived_handle| Self {
+                            handle_id: derived_handle.get_id(),
+                        })
+                }
+                fn get(&self) -> Result<$crate::ObjectReadGuard<$wrapped_type>, $crate::HandleNotPresentError> {
+                    SingletonInfo::get_handle_map().get(self.get_as_handle())
+                }
+                fn get_mut(&self) -> Result<$crate::ObjectReadWriteGuard<$wrapped_type>, $crate::HandleNotPresentError> {
+                    SingletonInfo::get_handle_map().get_mut(self.get_as_handle())
+                }
+                fn deallocate(self) -> Result<$wrapped_type, $crate::HandleNotPresentError> {
+                    SingletonInfo::get_handle_map().deallocate(self.get_as_handle())
+                }
+            }
+        }
+    }
+}
diff --git a/nearby/presence/handle_map/src/tests.rs b/nearby/presence/handle_map/src/tests.rs
new file mode 100644
index 0000000..d97657f
--- /dev/null
+++ b/nearby/presence/handle_map/src/tests.rs
@@ -0,0 +1,288 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+use crate::*;
+
+use hashbrown::HashSet;
+use std::sync::Arc;
+use std::thread;
+
+// Maximum number of active handles used across all tests
+// Chosen to be divisible by the number of active threads
+const MAX_ACTIVE_HANDLES: u32 = NUM_ACTIVE_THREADS * MAX_ACTIVE_HANDLES_PER_THREAD;
+
+const MAX_ACTIVE_HANDLES_PER_THREAD: u32 = 16384;
+
+// Deliberately picking a low number of shards so that we
+// are more likely to discover conflicts between threads.
+const NUM_SHARDS: u8 = 4;
+
+// Deliberately picking a higher number of threads.
+const NUM_ACTIVE_THREADS: u32 = 8;
+
+const DEFAULT_DIMENSIONS: HandleMapDimensions =
+    HandleMapDimensions { num_shards: NUM_SHARDS, max_active_handles: MAX_ACTIVE_HANDLES };
+
+fn build_handle_map<T: Send + Sync>() -> HandleMap<T> {
+    HandleMap::with_dimensions(DEFAULT_DIMENSIONS)
+}
+
+/// Performs the same testing function for each thread
+fn test_for_each_thread<F>(test_function_ref: Arc<F>, num_repetitions_per_thread: usize)
+where
+    F: Fn() + Send + Sync + 'static,
+{
+    let mut join_handles = Vec::new();
+    for _ in 0..NUM_ACTIVE_THREADS {
+        let test_function_clone = test_function_ref.clone();
+        let join_handle = thread::spawn(move || {
+            for _ in 0..num_repetitions_per_thread {
+                test_function_clone();
+            }
+        });
+        join_handles.push(join_handle);
+    }
+    for join_handle in join_handles {
+        join_handle.join().unwrap()
+    }
+}
+
+/// Tests the consistency of reads from the same handle across
+/// multiple threads.
+#[test]
+fn test_read_consistency_same_address() {
+    let num_repetitions_per_thread = 10000;
+    let handle_map = build_handle_map::<String>();
+    let handle = handle_map.allocate(|| "hello".to_string()).expect("Allocation shouldn't fail");
+    let test_fn = Arc::new(move || {
+        let value_ref = handle_map.get(handle).expect("Getting shouldn't fail");
+        assert_eq!("hello", value_ref.deref());
+    });
+    test_for_each_thread(test_fn, num_repetitions_per_thread);
+}
+
+/// Tests overloading the table with allocations to ensure
+/// that when all is said and done, we still haven't exceeded
+/// the allocations limit.
+#[test]
+#[allow(unused_must_use)]
+fn test_overload_with_allocations() {
+    let num_repetitions_per_thread = 2 * MAX_ACTIVE_HANDLES_PER_THREAD as usize;
+    let handle_map = build_handle_map::<u8>();
+
+    let handle_map_function_ref = Arc::new(handle_map);
+    let handle_map_post_function_ref = handle_map_function_ref.clone();
+
+    let test_fn = Arc::new(move || {
+        handle_map_function_ref.allocate(|| 0xFF);
+    });
+    test_for_each_thread(test_fn, num_repetitions_per_thread);
+
+    let actual_num_active_handles = handle_map_post_function_ref.len();
+    assert_eq!(MAX_ACTIVE_HANDLES as usize, actual_num_active_handles);
+}
+
+/// Tests deallocations and allocations near the allocation limit.
+#[test]
+#[allow(unused_must_use)]
+fn test_overload_allocations_deallocations() {
+    let num_repetitions_per_thread = 10000;
+
+    //Pre-fill the map so that there's only one available entry.
+    let handle_map = build_handle_map::<u8>();
+    for i in 0..(MAX_ACTIVE_HANDLES - 1) {
+        handle_map.allocate(|| (i % 256) as u8);
+    }
+
+    let handle_map_function_ref = Arc::new(handle_map);
+    let handle_map_post_function_ref = handle_map_function_ref.clone();
+
+    let test_fn = Arc::new(move || {
+        let allocation_result = handle_map_function_ref.allocate(|| 0xFF);
+        if let Ok(handle) = allocation_result {
+            handle_map_function_ref.deallocate(handle).unwrap();
+        }
+    });
+    test_for_each_thread(test_fn, num_repetitions_per_thread);
+
+    // No matter what happened above, we should have the same number
+    // of handles as when we started, because every successful allocation
+    // should have been paired with a successful deallocation.
+    let actual_num_active_handles = handle_map_post_function_ref.len();
+    assert_eq!((MAX_ACTIVE_HANDLES - 1) as usize, actual_num_active_handles);
+
+    //Verify that we still have space for one more entry after all that.
+    handle_map_post_function_ref.allocate(|| 0xEE).unwrap();
+}
+
+/// Tests the progress of allocate/read/write/read/deallocate
+/// to independent handles across multiple threads.
+#[test]
+fn test_full_lifecycle_independent_handles() {
+    let num_repetitions_per_thread = 10000;
+    let handle_map = build_handle_map::<String>();
+    let test_fn = Arc::new(move || {
+        let handle =
+            handle_map.allocate(|| "Hello".to_string()).expect("Allocation shouldn't fail");
+        {
+            let value_ref = handle_map.get(handle).expect("Getting the value shouldn't fail");
+            assert_eq!("Hello", &*value_ref);
+        };
+        {
+            let mut value_mut_ref =
+                handle_map.get_mut(handle).expect("Mutating the value shouldn't fail");
+            value_mut_ref.deref_mut().push_str(" World!");
+        };
+        {
+            let value_ref = handle_map
+                .get(handle)
+                .expect("Getting the value after modification shouldn't fail");
+            assert_eq!("Hello World!", &*value_ref);
+        };
+        let removed = handle_map.deallocate(handle).expect("Deallocation shouldn't fail");
+        assert_eq!("Hello World!", removed);
+    });
+    test_for_each_thread(test_fn, num_repetitions_per_thread);
+}
+
+/// Tests the consistency of reads+writes to the same handle,
+/// where threads modify and read different parts of an
+/// underlying structure.
+#[test]
+fn test_consistency_of_same_handle_multithreaded_modifications() {
+    let num_repetitions_per_thread = 10000;
+    let handle_map = Arc::new(build_handle_map::<(String, String)>());
+    let handle = handle_map
+        .allocate(|| ("A".to_string(), "B".to_string()))
+        .expect("Allocation shouldn't fail");
+
+    let handle_map_second_ref = handle_map.clone();
+
+    let join_handle_a = thread::spawn(move || {
+        for i in 1..num_repetitions_per_thread {
+            {
+                let value_ref =
+                    handle_map.get(handle).expect("Getting the value from thread A shouldn't fail");
+                let value = &value_ref.0;
+                assert_eq!(i, value.len());
+            }
+            {
+                let mut value_mut_ref = handle_map
+                    .get_mut(handle)
+                    .expect("Mutating the value from thread A shouldn't fail");
+                value_mut_ref.0.push('A');
+            }
+        }
+    });
+
+    let join_handle_b = thread::spawn(move || {
+        for i in 1..num_repetitions_per_thread {
+            {
+                let value_ref = handle_map_second_ref
+                    .get(handle)
+                    .expect("Getting the value from thread B shouldn't fail");
+                let value = &value_ref.1;
+                assert_eq!(i, value.len());
+            }
+            {
+                let mut value_mut_ref = handle_map_second_ref
+                    .get_mut(handle)
+                    .expect("Mutating the value from thread B shouldn't fail");
+                value_mut_ref.1.push('B');
+            }
+        }
+    });
+
+    join_handle_a.join().unwrap();
+    join_handle_b.join().unwrap();
+}
+
+/// Multi-threaded test to ensure that when attempting
+/// to allocate over handle IDs which are already allocated,
+/// all threads eventually get distinct, unused handle IDs
+/// for their own allocations.
+#[test]
+fn test_non_overwriting_old_handles() {
+    let mut all_handles: HashSet<Handle> = HashSet::new();
+    let num_repetitions_per_thread = 100;
+    let mut handle_map = build_handle_map::<u8>();
+    for _ in 0..(num_repetitions_per_thread * NUM_ACTIVE_THREADS) {
+        let handle = handle_map.allocate(|| 0xFF).expect("Initial allocations shouldn't fail");
+        all_handles.insert(handle);
+    }
+    // Reset the new-handle-id counter
+    handle_map.set_new_handle_id_counter(0);
+
+    let handle_map = Arc::new(handle_map);
+
+    let mut thread_handles: Vec<thread::JoinHandle<Vec<Handle>>> = Vec::new();
+    for _ in 0..NUM_ACTIVE_THREADS {
+        let handle_map_reference = handle_map.clone();
+        let thread_handle = thread::spawn(move || {
+            let mut handles = Vec::new();
+            for i in 0..num_repetitions_per_thread {
+                let handle = handle_map_reference
+                    .allocate(move || (i % 256) as u8)
+                    .expect("No allocation should fail");
+                handles.push(handle);
+            }
+            handles
+        });
+        thread_handles.push(thread_handle);
+    }
+    for thread_handle in thread_handles {
+        let handles: Vec<Handle> = thread_handle.join().expect("Individual threads shouldn't fail");
+        for handle in handles {
+            let was_distinct = all_handles.insert(handle);
+            assert!(was_distinct);
+        }
+    }
+}
+
+#[test]
+fn test_id_wraparound() {
+    let mut handle_map = build_handle_map::<u8>();
+    handle_map.set_new_handle_id_counter(u64::MAX);
+    handle_map.allocate(|| 0xAB).expect("Counter wrap-around allocation should not fail");
+    handle_map.allocate(|| 0xCD).expect("Post-counter-wrap-around allocation should not fail");
+}
+
+#[test]
+fn test_deallocate_unallocated_handle() {
+    let handle_map = build_handle_map::<usize>();
+    let handle = handle_map.allocate(|| 2).expect("Allocation shouldn't fail");
+    let deallocated = handle_map.deallocate(handle).expect("Deallocation shouldn't fail");
+    assert_eq!(2, deallocated);
+    let double_deallocate_result = handle_map.deallocate(handle);
+    assert!(double_deallocate_result.is_err());
+}
+
+#[test]
+fn test_get_unallocated_handle() {
+    let handle_map = build_handle_map::<u8>();
+    let handle = handle_map.allocate(|| 0xFE).expect("Allocation shouldn't fail");
+    let deallocated = handle_map.deallocate(handle).expect("Deallocation shouldn't fail");
+    assert_eq!(0xFE, deallocated);
+    let read_result = handle_map.get(handle);
+    assert!(read_result.is_err());
+}
+
+#[test]
+fn test_get_mut_unallocated_handle() {
+    let handle_map = build_handle_map::<(usize, usize, usize)>();
+    let handle = handle_map.allocate(|| (1, 2, 3)).expect("Allocation shouldn't fail");
+    let deallocated = handle_map.deallocate(handle).expect("Deallocation shouldn't fail");
+    assert_eq!((1, 2, 3), deallocated);
+    let get_mut_result = handle_map.get_mut(handle);
+    assert!(get_mut_result.is_err());
+}
diff --git a/nearby/presence/ldt/fuzz/Cargo.lock b/nearby/presence/ldt/fuzz/Cargo.lock
index 285bbca..767108f 100644
--- a/nearby/presence/ldt/fuzz/Cargo.lock
+++ b/nearby/presence/ldt/fuzz/Cargo.lock
@@ -4,9 +4,9 @@
 
 [[package]]
 name = "aead"
-version = "0.5.1"
+version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8"
+checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
 dependencies = [
  "bytes",
  "crypto-common",
@@ -15,9 +15,9 @@
 
 [[package]]
 name = "aes"
-version = "0.8.2"
+version = "0.8.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241"
+checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
 dependencies = [
  "cfg-if",
  "cipher",
@@ -69,9 +69,9 @@
 
 [[package]]
 name = "block-padding"
-version = "0.3.2"
+version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a90ec2df9600c28a01c56c4784c9207a96d2451833aeceb8cc97e4c9548bb78"
+checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93"
 dependencies = [
  "generic-array",
 ]
@@ -118,24 +118,24 @@
 
 [[package]]
 name = "const-oid"
-version = "0.9.2"
+version = "0.9.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913"
+checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747"
 
 [[package]]
 name = "cpufeatures"
-version = "0.2.5"
+version = "0.2.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
 dependencies = [
  "libc",
 ]
 
 [[package]]
 name = "crypto-bigint"
-version = "0.5.1"
+version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7"
+checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15"
 dependencies = [
  "generic-array",
  "rand_core",
@@ -193,23 +193,36 @@
 
 [[package]]
 name = "curve25519-dalek"
-version = "4.0.0-rc.2"
+version = "4.0.0-rc.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03d928d978dbec61a1167414f5ec534f24bea0d7a0d24dd9b6233d3d8223e585"
+checksum = "436ace70fc06e06f7f689d2624dc4e2f0ea666efb5aa704215f7249ae6e047a7"
 dependencies = [
  "cfg-if",
+ "cpufeatures",
+ "curve25519-dalek-derive",
  "digest",
  "fiat-crypto",
- "packed_simd_2",
  "platforms",
+ "rustc_version",
  "subtle",
 ]
 
 [[package]]
-name = "der"
-version = "0.7.1"
+name = "curve25519-dalek-derive"
+version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc906908ea6458456e5eaa160a9c08543ec3d1e6f71e2235cedd660cb65f9df0"
+checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "der"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c7ed52955ce76b1554f509074bb357d3fb8ac9b51288a65a3fd480d1dfba946"
 dependencies = [
  "const-oid",
  "zeroize",
@@ -217,9 +230,9 @@
 
 [[package]]
 name = "derive_arbitrary"
-version = "1.3.0"
+version = "1.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3cdeb9ec472d588e539a818b2dee436825730da08ad0017c4b1a17676bdc8b7"
+checksum = "53e0efad4403bfc52dc201159c4b842a246a14b98c64b55dfd0f2d89729dfeb8"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -228,9 +241,9 @@
 
 [[package]]
 name = "digest"
-version = "0.10.6"
+version = "0.10.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
 dependencies = [
  "block-buffer",
  "crypto-common",
@@ -248,9 +261,9 @@
 
 [[package]]
 name = "ed25519-dalek"
-version = "2.0.0-rc.2"
+version = "2.0.0-rc.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "798f704d128510932661a3489b08e3f4c934a01d61c5def59ae7b8e48f19665a"
+checksum = "faa8e9049d5d72bfc12acbc05914731b5322f79b5e2f195e9f2d705fca22ab4c"
 dependencies = [
  "curve25519-dalek",
  "ed25519",
@@ -260,9 +273,9 @@
 
 [[package]]
 name = "elliptic-curve"
-version = "0.13.2"
+version = "0.13.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ea5a92946e8614bb585254898bb7dd1ddad241ace60c52149e3765e34cc039d"
+checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b"
 dependencies = [
  "base16ct",
  "crypto-bigint",
@@ -295,9 +308,9 @@
 
 [[package]]
 name = "generic-array"
-version = "0.14.6"
+version = "0.14.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
 dependencies = [
  "typenum",
  "version_check",
@@ -306,9 +319,9 @@
 
 [[package]]
 name = "getrandom"
-version = "0.2.8"
+version = "0.2.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
 dependencies = [
  "cfg-if",
  "libc",
@@ -391,9 +404,9 @@
 
 [[package]]
 name = "libc"
-version = "0.2.140"
+version = "0.2.147"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
 
 [[package]]
 name = "libfuzzer-sys"
@@ -407,16 +420,10 @@
 ]
 
 [[package]]
-name = "libm"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a"
-
-[[package]]
 name = "once_cell"
-version = "1.17.1"
+version = "1.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
 
 [[package]]
 name = "opaque-debug"
@@ -426,25 +433,15 @@
 
 [[package]]
 name = "p256"
-version = "0.13.0"
+version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7270da3e5caa82afd3deb054cc237905853813aea3859544bc082c3fe55b8d47"
+checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
 dependencies = [
  "elliptic-curve",
  "primeorder",
 ]
 
 [[package]]
-name = "packed_simd_2"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282"
-dependencies = [
- "cfg-if",
- "libm",
-]
-
-[[package]]
 name = "platforms"
 version = "3.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -452,9 +449,9 @@
 
 [[package]]
 name = "polyval"
-version = "0.6.0"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6"
+checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb"
 dependencies = [
  "cfg-if",
  "cpufeatures",
@@ -470,27 +467,27 @@
 
 [[package]]
 name = "primeorder"
-version = "0.13.0"
+version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7613fdcc0831c10060fa69833ea8fa2caa94b6456f51e25356a885b530a2e3d0"
+checksum = "3c2fcef82c0ec6eefcc179b978446c399b3cdf73c392c35604e399eee6df1ee3"
 dependencies = [
  "elliptic-curve",
 ]
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.53"
+version = "1.0.66"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
 dependencies = [
  "unicode-ident",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.26"
+version = "1.0.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
 dependencies = [
  "proc-macro2",
 ]
@@ -524,10 +521,19 @@
 ]
 
 [[package]]
-name = "sec1"
-version = "0.7.1"
+name = "rustc_version"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "sec1"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
 dependencies = [
  "base16ct",
  "der",
@@ -537,10 +543,16 @@
 ]
 
 [[package]]
-name = "sha2"
-version = "0.10.6"
+name = "semver"
+version = "1.0.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
+
+[[package]]
+name = "sha2"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
 dependencies = [
  "cfg-if",
  "cpufeatures",
@@ -555,15 +567,15 @@
 
 [[package]]
 name = "subtle"
-version = "2.4.1"
+version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
 
 [[package]]
 name = "syn"
-version = "1.0.109"
+version = "2.0.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+checksum = "45c3457aacde3c65315de5031ec191ce46604304d2446e803d71ade03308d970"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -578,15 +590,15 @@
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.8"
+version = "1.0.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
 
 [[package]]
 name = "universal-hash"
-version = "0.5.0"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5"
+checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
 dependencies = [
  "crypto-common",
  "subtle",
@@ -606,9 +618,9 @@
 
 [[package]]
 name = "x25519-dalek"
-version = "2.0.0-rc.2"
+version = "2.0.0-rc.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fabd6e16dd08033932fc3265ad4510cc2eab24656058a6dcb107ffe274abcc95"
+checksum = "ec7fae07da688e17059d5886712c933bb0520f15eff2e09cfa18e30968f4e63a"
 dependencies = [
  "curve25519-dalek",
  "rand_core",
@@ -625,6 +637,6 @@
 
 [[package]]
 name = "zeroize"
-version = "1.5.7"
+version = "1.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f"
+checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
diff --git a/nearby/presence/ldt_np_adv/fuzz/Cargo.lock b/nearby/presence/ldt_np_adv/fuzz/Cargo.lock
index 92f2deb..5050ad0 100644
--- a/nearby/presence/ldt_np_adv/fuzz/Cargo.lock
+++ b/nearby/presence/ldt_np_adv/fuzz/Cargo.lock
@@ -4,9 +4,9 @@
 
 [[package]]
 name = "aead"
-version = "0.5.1"
+version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8"
+checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
 dependencies = [
  "bytes",
  "crypto-common",
@@ -15,9 +15,9 @@
 
 [[package]]
 name = "aes"
-version = "0.8.2"
+version = "0.8.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241"
+checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
 dependencies = [
  "cfg-if",
  "cipher",
@@ -73,9 +73,9 @@
 
 [[package]]
 name = "block-padding"
-version = "0.3.2"
+version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a90ec2df9600c28a01c56c4784c9207a96d2451833aeceb8cc97e4c9548bb78"
+checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93"
 dependencies = [
  "generic-array",
 ]
@@ -122,24 +122,24 @@
 
 [[package]]
 name = "const-oid"
-version = "0.9.2"
+version = "0.9.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913"
+checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747"
 
 [[package]]
 name = "cpufeatures"
-version = "0.2.5"
+version = "0.2.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
 dependencies = [
  "libc",
 ]
 
 [[package]]
 name = "crypto-bigint"
-version = "0.5.1"
+version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7"
+checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15"
 dependencies = [
  "generic-array",
  "rand_core",
@@ -197,23 +197,36 @@
 
 [[package]]
 name = "curve25519-dalek"
-version = "4.0.0-rc.2"
+version = "4.0.0-rc.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03d928d978dbec61a1167414f5ec534f24bea0d7a0d24dd9b6233d3d8223e585"
+checksum = "436ace70fc06e06f7f689d2624dc4e2f0ea666efb5aa704215f7249ae6e047a7"
 dependencies = [
  "cfg-if",
+ "cpufeatures",
+ "curve25519-dalek-derive",
  "digest",
  "fiat-crypto",
- "packed_simd_2",
  "platforms",
+ "rustc_version",
  "subtle",
 ]
 
 [[package]]
-name = "der"
-version = "0.7.1"
+name = "curve25519-dalek-derive"
+version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc906908ea6458456e5eaa160a9c08543ec3d1e6f71e2235cedd660cb65f9df0"
+checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "der"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c7ed52955ce76b1554f509074bb357d3fb8ac9b51288a65a3fd480d1dfba946"
 dependencies = [
  "const-oid",
  "zeroize",
@@ -221,9 +234,9 @@
 
 [[package]]
 name = "derive_arbitrary"
-version = "1.3.0"
+version = "1.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3cdeb9ec472d588e539a818b2dee436825730da08ad0017c4b1a17676bdc8b7"
+checksum = "53e0efad4403bfc52dc201159c4b842a246a14b98c64b55dfd0f2d89729dfeb8"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -232,9 +245,9 @@
 
 [[package]]
 name = "digest"
-version = "0.10.6"
+version = "0.10.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
 dependencies = [
  "block-buffer",
  "crypto-common",
@@ -252,9 +265,9 @@
 
 [[package]]
 name = "ed25519-dalek"
-version = "2.0.0-rc.2"
+version = "2.0.0-rc.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "798f704d128510932661a3489b08e3f4c934a01d61c5def59ae7b8e48f19665a"
+checksum = "faa8e9049d5d72bfc12acbc05914731b5322f79b5e2f195e9f2d705fca22ab4c"
 dependencies = [
  "curve25519-dalek",
  "ed25519",
@@ -264,9 +277,9 @@
 
 [[package]]
 name = "elliptic-curve"
-version = "0.13.2"
+version = "0.13.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ea5a92946e8614bb585254898bb7dd1ddad241ace60c52149e3765e34cc039d"
+checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b"
 dependencies = [
  "base16ct",
  "crypto-bigint",
@@ -299,9 +312,9 @@
 
 [[package]]
 name = "generic-array"
-version = "0.14.6"
+version = "0.14.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
 dependencies = [
  "typenum",
  "version_check",
@@ -310,9 +323,9 @@
 
 [[package]]
 name = "getrandom"
-version = "0.2.8"
+version = "0.2.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
 dependencies = [
  "cfg-if",
  "libc",
@@ -409,9 +422,9 @@
 
 [[package]]
 name = "libc"
-version = "0.2.140"
+version = "0.2.147"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
 
 [[package]]
 name = "libfuzzer-sys"
@@ -425,12 +438,6 @@
 ]
 
 [[package]]
-name = "libm"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a"
-
-[[package]]
 name = "np_hkdf"
 version = "0.1.0"
 dependencies = [
@@ -441,9 +448,9 @@
 
 [[package]]
 name = "once_cell"
-version = "1.17.1"
+version = "1.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
 
 [[package]]
 name = "opaque-debug"
@@ -453,25 +460,15 @@
 
 [[package]]
 name = "p256"
-version = "0.13.0"
+version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7270da3e5caa82afd3deb054cc237905853813aea3859544bc082c3fe55b8d47"
+checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
 dependencies = [
  "elliptic-curve",
  "primeorder",
 ]
 
 [[package]]
-name = "packed_simd_2"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282"
-dependencies = [
- "cfg-if",
- "libm",
-]
-
-[[package]]
 name = "platforms"
 version = "3.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -479,9 +476,9 @@
 
 [[package]]
 name = "polyval"
-version = "0.6.0"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6"
+checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb"
 dependencies = [
  "cfg-if",
  "cpufeatures",
@@ -497,27 +494,27 @@
 
 [[package]]
 name = "primeorder"
-version = "0.13.0"
+version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7613fdcc0831c10060fa69833ea8fa2caa94b6456f51e25356a885b530a2e3d0"
+checksum = "3c2fcef82c0ec6eefcc179b978446c399b3cdf73c392c35604e399eee6df1ee3"
 dependencies = [
  "elliptic-curve",
 ]
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.53"
+version = "1.0.66"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
 dependencies = [
  "unicode-ident",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.26"
+version = "1.0.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
 dependencies = [
  "proc-macro2",
 ]
@@ -551,10 +548,19 @@
 ]
 
 [[package]]
-name = "sec1"
-version = "0.7.1"
+name = "rustc_version"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "sec1"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
 dependencies = [
  "base16ct",
  "der",
@@ -564,10 +570,16 @@
 ]
 
 [[package]]
-name = "sha2"
-version = "0.10.6"
+name = "semver"
+version = "1.0.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
+
+[[package]]
+name = "sha2"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
 dependencies = [
  "cfg-if",
  "cpufeatures",
@@ -582,15 +594,15 @@
 
 [[package]]
 name = "subtle"
-version = "2.4.1"
+version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
 
 [[package]]
 name = "syn"
-version = "1.0.109"
+version = "2.0.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+checksum = "45c3457aacde3c65315de5031ec191ce46604304d2446e803d71ade03308d970"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -605,15 +617,15 @@
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.8"
+version = "1.0.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
 
 [[package]]
 name = "universal-hash"
-version = "0.5.0"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5"
+checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
 dependencies = [
  "crypto-common",
  "subtle",
@@ -633,9 +645,9 @@
 
 [[package]]
 name = "x25519-dalek"
-version = "2.0.0-rc.2"
+version = "2.0.0-rc.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fabd6e16dd08033932fc3265ad4510cc2eab24656058a6dcb107ffe274abcc95"
+checksum = "ec7fae07da688e17059d5886712c933bb0520f15eff2e09cfa18e30968f4e63a"
 dependencies = [
  "curve25519-dalek",
  "rand_core",
@@ -652,6 +664,6 @@
 
 [[package]]
 name = "zeroize"
-version = "1.5.7"
+version = "1.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f"
+checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
diff --git a/nearby/presence/ldt_np_adv_ffi/.cargo/config-boringssl.toml b/nearby/presence/ldt_np_adv_ffi/.cargo/config-boringssl.toml
index f5ab7fa..5a4a047 100644
--- a/nearby/presence/ldt_np_adv_ffi/.cargo/config-boringssl.toml
+++ b/nearby/presence/ldt_np_adv_ffi/.cargo/config-boringssl.toml
@@ -1,3 +1,3 @@
 paths = [
     "../../../boringssl-build/boringssl/rust/bssl-crypto",
-]
\ No newline at end of file
+]
diff --git a/nearby/presence/ldt_np_adv_ffi/Cargo.lock b/nearby/presence/ldt_np_adv_ffi/Cargo.lock
index e58cea8..1d13887 100644
--- a/nearby/presence/ldt_np_adv_ffi/Cargo.lock
+++ b/nearby/presence/ldt_np_adv_ffi/Cargo.lock
@@ -3,12 +3,6 @@
 version = 3
 
 [[package]]
-name = "Inflector"
-version = "0.11.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fe438c63458706e03479442743baae6c88256498e6431708f6dfc520a26515d3"
-
-[[package]]
 name = "aead"
 version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -21,9 +15,9 @@
 
 [[package]]
 name = "aes"
-version = "0.8.2"
+version = "0.8.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241"
+checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
 dependencies = [
  "cfg-if",
  "cipher",
@@ -144,24 +138,24 @@
 
 [[package]]
 name = "const-oid"
-version = "0.9.2"
+version = "0.9.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913"
+checksum = "6340df57935414636969091153f35f68d9f00bbc8fb4a9c6054706c213e6c6bc"
 
 [[package]]
 name = "cpufeatures"
-version = "0.2.6"
+version = "0.2.8"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "280a9f2d8b3a38871a3c8a46fb80db65e5e5ed97da80c4d08bf27fb63e35e181"
+checksum = "03e69e28e9f7f77debdedbaafa2866e1de9ba56df55a8bd7cfc724c25a09987c"
 dependencies = [
  "libc",
 ]
 
 [[package]]
 name = "crypto-bigint"
-version = "0.5.1"
+version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7"
+checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15"
 dependencies = [
  "generic-array",
  "rand_core",
@@ -246,24 +240,37 @@
 
 [[package]]
 name = "curve25519-dalek"
-version = "4.0.0-rc.2"
+version = "4.0.0-rc.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03d928d978dbec61a1167414f5ec534f24bea0d7a0d24dd9b6233d3d8223e585"
+checksum = "436ace70fc06e06f7f689d2624dc4e2f0ea666efb5aa704215f7249ae6e047a7"
 dependencies = [
  "cfg-if",
+ "cpufeatures",
+ "curve25519-dalek-derive",
  "digest",
  "fiat-crypto",
- "packed_simd_2",
  "platforms",
+ "rustc_version",
  "subtle",
  "zeroize",
 ]
 
 [[package]]
-name = "der"
-version = "0.7.3"
+name = "curve25519-dalek-derive"
+version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "82b10af9f9f9f2134a42d3f8aa74658660f2e0234b0eb81bd171df8aa32779ed"
+checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.22",
+]
+
+[[package]]
+name = "der"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c7ed52955ce76b1554f509074bb357d3fb8ac9b51288a65a3fd480d1dfba946"
 dependencies = [
  "const-oid",
  "zeroize",
@@ -271,9 +278,9 @@
 
 [[package]]
 name = "digest"
-version = "0.10.6"
+version = "0.10.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
 dependencies = [
  "block-buffer",
  "crypto-common",
@@ -292,9 +299,9 @@
 
 [[package]]
 name = "ed25519-dalek"
-version = "2.0.0-rc.2"
+version = "2.0.0-rc.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "798f704d128510932661a3489b08e3f4c934a01d61c5def59ae7b8e48f19665a"
+checksum = "faa8e9049d5d72bfc12acbc05914731b5322f79b5e2f195e9f2d705fca22ab4c"
 dependencies = [
  "curve25519-dalek",
  "ed25519",
@@ -306,9 +313,9 @@
 
 [[package]]
 name = "elliptic-curve"
-version = "0.13.3"
+version = "0.13.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "22cdacd4d6ed3f9b98680b679c0e52a823b8a2c7a97358d508fe247f2180c282"
+checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b"
 dependencies = [
  "base16ct",
  "crypto-bigint",
@@ -367,9 +374,9 @@
 
 [[package]]
 name = "getrandom"
-version = "0.2.9"
+version = "0.2.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c85e1d9ab2eadba7e5040d4e09cbd6d072b76a557ad64e797c2cb9d4da21d7e4"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
 dependencies = [
  "cfg-if",
  "libc",
@@ -388,6 +395,12 @@
 ]
 
 [[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
 name = "hkdf"
 version = "0.12.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -472,9 +485,9 @@
 
 [[package]]
 name = "libc"
-version = "0.2.141"
+version = "0.2.147"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3304a64d199bb964be99741b7a14d26972741915b3649639149b2479bb46f4b5"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
 
 [[package]]
 name = "libc_alloc"
@@ -483,16 +496,10 @@
 checksum = "6a090348b66d90d8507e30f0d2bd88e5a5c454bd1733fc6d617cbc3471bf69ea"
 
 [[package]]
-name = "libm"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a"
-
-[[package]]
 name = "lock_api"
-version = "0.4.9"
+version = "0.4.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "435011366fe56583b16cf956f9df0095b405b82d76425bc8981c0e22e60ec4df"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
 dependencies = [
  "autocfg",
  "scopeguard",
@@ -509,9 +516,9 @@
 
 [[package]]
 name = "once_cell"
-version = "1.17.1"
+version = "1.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
 
 [[package]]
 name = "opaque-debug"
@@ -521,9 +528,9 @@
 
 [[package]]
 name = "openssl"
-version = "0.10.49"
+version = "0.10.55"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4d2f106ab837a24e03672c59b1239669a0596406ff657c3c0835b6b7f0f35a33"
+checksum = "345df152bc43501c5eb9e4654ff05f794effb78d4efe3d53abc158baddc0703d"
 dependencies = [
  "bitflags",
  "cfg-if",
@@ -542,14 +549,14 @@
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 2.0.13",
+ "syn 2.0.22",
 ]
 
 [[package]]
 name = "openssl-sys"
-version = "0.9.84"
+version = "0.9.90"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3a20eace9dc2d82904039cb76dcf50fb1a0bba071cfd1629720b5d6f1ddba0fa"
+checksum = "374533b0e45f3a7ced10fcaeccca020e66656bc03dac384f852e4e5a7a8104a6"
 dependencies = [
  "cc",
  "libc",
@@ -559,48 +566,39 @@
 
 [[package]]
 name = "ouroboros"
-version = "0.15.6"
+version = "0.17.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1358bd1558bd2a083fed428ffeda486fbfb323e698cdda7794259d592ca72db"
+checksum = "d813b7b31a82efae94bd30ffaac09aec85efc18db2d5ec3aead1a220ee954351"
 dependencies = [
  "aliasable",
  "ouroboros_macro",
+ "static_assertions",
 ]
 
 [[package]]
 name = "ouroboros_macro"
-version = "0.15.6"
+version = "0.17.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5f7d21ccd03305a674437ee1248f3ab5d4b1db095cf1caf49f1713ddf61956b7"
+checksum = "5a56f651b4dd45ae3ac3d260ced32eaf0620cddaae5f26c69b554a9016594726"
 dependencies = [
- "Inflector",
+ "heck",
  "proc-macro-error",
  "proc-macro2",
  "quote",
- "syn 1.0.109",
+ "syn 2.0.22",
 ]
 
 [[package]]
 name = "p256"
-version = "0.13.0"
+version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7270da3e5caa82afd3deb054cc237905853813aea3859544bc082c3fe55b8d47"
+checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
 dependencies = [
  "elliptic-curve",
  "primeorder",
 ]
 
 [[package]]
-name = "packed_simd_2"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282"
-dependencies = [
- "cfg-if",
- "libm",
-]
-
-[[package]]
 name = "panic-abort"
 version = "0.3.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -618,9 +616,9 @@
 
 [[package]]
 name = "pkg-config"
-version = "0.3.26"
+version = "0.3.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ac9a59f73473f1b8d852421e59e64809f025994837ef743615c6d0c5b305160"
+checksum = "26072860ba924cbfa98ea39c8c19b4dd6a4a25423dbdf219c1eca91aa0cf6964"
 
 [[package]]
 name = "platforms"
@@ -630,9 +628,9 @@
 
 [[package]]
 name = "polyval"
-version = "0.6.0"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6"
+checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb"
 dependencies = [
  "cfg-if",
  "cpufeatures",
@@ -648,9 +646,9 @@
 
 [[package]]
 name = "primeorder"
-version = "0.13.0"
+version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7613fdcc0831c10060fa69833ea8fa2caa94b6456f51e25356a885b530a2e3d0"
+checksum = "3c2fcef82c0ec6eefcc179b978446c399b3cdf73c392c35604e399eee6df1ee3"
 dependencies = [
  "elliptic-curve",
 ]
@@ -681,18 +679,18 @@
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.56"
+version = "1.0.63"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2b63bdb0cd06f1f4dedf69b254734f9b45af66e4a031e42a7480257d9898b435"
+checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb"
 dependencies = [
  "unicode-ident",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.26"
+version = "1.0.29"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105"
 dependencies = [
  "proc-macro2",
 ]
@@ -728,6 +726,15 @@
 ]
 
 [[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
 name = "scopeguard"
 version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -735,9 +742,9 @@
 
 [[package]]
 name = "sec1"
-version = "0.7.1"
+version = "0.7.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e"
+checksum = "f0aec48e813d6b90b15f0b8948af3c63483992dee44c03e9930b3eebdabe046e"
 dependencies = [
  "base16ct",
  "der",
@@ -747,16 +754,22 @@
 ]
 
 [[package]]
-name = "serde"
-version = "1.0.159"
+name = "semver"
+version = "1.0.17"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3c04e8343c3daeec41f58990b9d77068df31209f2af111e059e9fe9646693065"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+
+[[package]]
+name = "serde"
+version = "1.0.164"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9e8c8cf938e98f769bc164923b06dce91cea1751522f46f8466461af04c9027d"
 
 [[package]]
 name = "sha2"
-version = "0.10.6"
+version = "0.10.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
 dependencies = [
  "cfg-if",
  "cpufeatures",
@@ -786,19 +799,25 @@
 
 [[package]]
 name = "spki"
-version = "0.7.1"
+version = "0.7.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "37a5be806ab6f127c3da44b7378837ebf01dadca8510a0e572460216b228bd0e"
+checksum = "9d1e996ef02c474957d681f1b05213dfb0abab947b446a62d37770b23500184a"
 dependencies = [
  "base64ct",
  "der",
 ]
 
 [[package]]
-name = "subtle"
-version = "2.4.1"
+name = "static_assertions"
+version = "1.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
 
 [[package]]
 name = "syn"
@@ -807,15 +826,14 @@
 checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
 dependencies = [
  "proc-macro2",
- "quote",
  "unicode-ident",
 ]
 
 [[package]]
 name = "syn"
-version = "2.0.13"
+version = "2.0.22"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4c9da457c5285ac1f936ebd076af6dac17a61cfe7826f2076b4d015cf47bc8ec"
+checksum = "2efbeae7acf4eabd6bcdcbd11c92f45231ddda7539edc7806bd1a04a03b24616"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -830,15 +848,15 @@
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.8"
+version = "1.0.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+checksum = "b15811caf2415fb889178633e7724bad2509101cde276048e013b9def5e51fa0"
 
 [[package]]
 name = "universal-hash"
-version = "0.5.0"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5"
+checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
 dependencies = [
  "crypto-common",
  "subtle",
@@ -864,9 +882,9 @@
 
 [[package]]
 name = "x25519-dalek"
-version = "2.0.0-rc.2"
+version = "2.0.0-rc.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fabd6e16dd08033932fc3265ad4510cc2eab24656058a6dcb107ffe274abcc95"
+checksum = "ec7fae07da688e17059d5886712c933bb0520f15eff2e09cfa18e30968f4e63a"
 dependencies = [
  "curve25519-dalek",
  "rand_core",
diff --git a/nearby/presence/ldt_np_adv_ffi/deny.toml b/nearby/presence/ldt_np_adv_ffi/deny.toml
index 07381d1..ca51e11 100644
--- a/nearby/presence/ldt_np_adv_ffi/deny.toml
+++ b/nearby/presence/ldt_np_adv_ffi/deny.toml
@@ -79,6 +79,7 @@
     "MIT",
     "Apache-2.0",
     "BSD-3-Clause",
+    "Unicode-DFS-2016",
 ]
 # List of explicitly disallowed licenses
 # See https://spdx.org/licenses/ for list of possible licenses
diff --git a/nearby/presence/ldt_np_adv_ffi_fuzz/CMakeLists.txt b/nearby/presence/ldt_np_adv_ffi_fuzz/CMakeLists.txt
index 3282533..2144811 100644
--- a/nearby/presence/ldt_np_adv_ffi_fuzz/CMakeLists.txt
+++ b/nearby/presence/ldt_np_adv_ffi_fuzz/CMakeLists.txt
@@ -15,10 +15,10 @@
 cmake_minimum_required(VERSION 3.0)
 
 # libfuzzer needs clang
-SET (CMAKE_C_COMPILER "clang")
+SET(CMAKE_C_COMPILER "clang")
 
 include_directories(
-    ${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi/include/)
+        ${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi/include/)
 
 # enable fuzzer with ASAN
 # Can't use MSAN since EVP_KDF_fetch seems to read uninitialized memory, maybe on purpose?
@@ -26,22 +26,22 @@
 
 # we need at least version 3.0.5 for the core.h header used in the fuzzers
 find_package(OpenSSL 3.0.5 REQUIRED)
-if ( OPENSSL_FOUND )
+if (OPENSSL_FOUND)
     message(STATUS "OpenSSL Found: ${OPENSSL_VERSION}")
     message(STATUS "OpenSSL Include: ${OPENSSL_INCLUDE_DIR}")
     message(STATUS "OpenSSL Libraries: ${OPENSSL_LIBRARIES}")
-endif()
+endif ()
 
 add_executable(fuzzer_decrypt_bad_mac src/fuzzer_decrypt_bad_mac.c)
 target_link_libraries(fuzzer_decrypt_bad_mac
-    optimized "${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi/target/release/${CMAKE_STATIC_LIBRARY_PREFIX}ldt_np_adv_ffi${CMAKE_STATIC_LIBRARY_SUFFIX}"
-    debug "${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi/target/debug/${CMAKE_STATIC_LIBRARY_PREFIX}ldt_np_adv_ffi${CMAKE_STATIC_LIBRARY_SUFFIX}"
-    dl pthread -fsanitize=fuzzer,address)
+        optimized "${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi/target/release/${CMAKE_STATIC_LIBRARY_PREFIX}ldt_np_adv_ffi${CMAKE_STATIC_LIBRARY_SUFFIX}"
+        debug "${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi/target/debug/${CMAKE_STATIC_LIBRARY_PREFIX}ldt_np_adv_ffi${CMAKE_STATIC_LIBRARY_SUFFIX}"
+        dl pthread -fsanitize=fuzzer,address)
 target_link_libraries(fuzzer_decrypt_bad_mac OpenSSL::SSL)
 
 add_executable(fuzzer_decrypt_correct_mac src/fuzzer_decrypt_correct_mac.c)
 target_link_libraries(fuzzer_decrypt_correct_mac
-    optimized "${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi/target/release/${CMAKE_STATIC_LIBRARY_PREFIX}ldt_np_adv_ffi${CMAKE_STATIC_LIBRARY_SUFFIX}"
-    debug "${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi/target/debug/${CMAKE_STATIC_LIBRARY_PREFIX}ldt_np_adv_ffi${CMAKE_STATIC_LIBRARY_SUFFIX}"
-    dl pthread -fsanitize=fuzzer,address)
+        optimized "${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi/target/release/${CMAKE_STATIC_LIBRARY_PREFIX}ldt_np_adv_ffi${CMAKE_STATIC_LIBRARY_SUFFIX}"
+        debug "${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi/target/debug/${CMAKE_STATIC_LIBRARY_PREFIX}ldt_np_adv_ffi${CMAKE_STATIC_LIBRARY_SUFFIX}"
+        dl pthread -fsanitize=fuzzer,address)
 target_link_libraries(fuzzer_decrypt_correct_mac OpenSSL::SSL)
diff --git a/nearby/presence/ldt_np_c_sample/CMakeLists.txt b/nearby/presence/ldt_np_c_sample/CMakeLists.txt
index 4341c3e..588078a 100644
--- a/nearby/presence/ldt_np_c_sample/CMakeLists.txt
+++ b/nearby/presence/ldt_np_c_sample/CMakeLists.txt
@@ -12,8 +12,6 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.0)
-
 include_directories(
     ${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi/include/
     ${CMAKE_SOURCE_DIR}/ldt_np_c_sample/)
@@ -28,13 +26,28 @@
     BINARY_DIR "${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi"
     INSTALL_COMMAND "")
 
-add_executable(sample main.c)
-target_link_libraries(sample
+add_executable(ldt_c_sample main.c)
+target_link_libraries(
+    ldt_c_sample
     optimized "${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi/target/release/${CMAKE_STATIC_LIBRARY_PREFIX}ldt_np_adv_ffi${CMAKE_STATIC_LIBRARY_SUFFIX}"
     debug "${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi/target/debug/${CMAKE_STATIC_LIBRARY_PREFIX}ldt_np_adv_ffi${CMAKE_STATIC_LIBRARY_SUFFIX}"
-    dl pthread)
+    OpenSSL::SSL
+)
+
+if(UNIX)
+  target_link_libraries(
+    ldt_c_sample
+    dl pthread
+  )
+elseif(MSVC)
+  target_link_libraries(
+    ldt_c_sample
+    bcrypt ntdll userenv ws2_32
+  )
+endif()
+
 
 if(ENABLE_TESTS)
-    message(STATUS "Building tests")
+    message(STATUS "Enabling ldt tests")
     add_subdirectory(tests)
 endif()
diff --git a/nearby/presence/ldt_np_c_sample/tests/CMakeLists.txt b/nearby/presence/ldt_np_c_sample/tests/CMakeLists.txt
index 2f0818d..6edfd63 100644
--- a/nearby/presence/ldt_np_c_sample/tests/CMakeLists.txt
+++ b/nearby/presence/ldt_np_c_sample/tests/CMakeLists.txt
@@ -12,67 +12,56 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-cmake_minimum_required(VERSION 3.14)
-
-# GoogleTest requires at least C++14
-set(CMAKE_CXX_STANDARD 14)
-add_compile_options(-Wall -Wextra -Wimplicit-fallthrough -Wextra-semi
-        -Wno-missing-field-initializers -Wno-unused-parameter -Wno-psabi
-        -Wno-unneeded-internal-declaration
-        -Wno-ignored-pragma-optimize
-        -Wno-bitfield-constant-conversion -Wno-deprecated-this-capture -Wshadow
-        -Wsign-compare)
-
-include(FetchContent)
-FetchContent_Declare(
-  googletest
-  GIT_REPOSITORY https://github.com/google/googletest.git
-  GIT_TAG release-1.12.1
-)
-FetchContent_MakeAvailable(googletest)
-enable_testing()
-
-
-find_package(benchmark REQUIRED)
-add_compile_options(-fsanitize=address)
-
 file(COPY ${CMAKE_SOURCE_DIR}/ldt_np_adv/resources/test/np_adv_test_vectors.json
      DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
 
-set(JSONCPP_DIR ${CMAKE_SOURCE_DIR}/../../third_party/jsoncpp)
-include_directories(${JSONCPP_DIR})
-
-add_library(
-  jsoncpp
-  ${JSONCPP_DIR}/jsoncpp.cpp
-)
-
 add_executable(
-  np_ffi_tests
-  np_ffi_tests.cc
-)
-
-add_executable(
-  benchmarks
-  benchmarks.cc
+  ldt_ffi_tests
+  ldt_ffi_tests.cc
 )
 
 target_link_libraries(
-  benchmarks
-  "${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi/target/release/${CMAKE_STATIC_LIBRARY_PREFIX}ldt_np_adv_ffi${CMAKE_STATIC_LIBRARY_SUFFIX}"
-  OpenSSL::SSL
-  benchmark::benchmark
-  dl pthread -fsanitize=address
-)
-
-target_link_libraries(
-  np_ffi_tests
+  ldt_ffi_tests
   "${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi/target/release/${CMAKE_STATIC_LIBRARY_PREFIX}ldt_np_adv_ffi${CMAKE_STATIC_LIBRARY_SUFFIX}"
   jsoncpp
   GTest::gtest_main
   OpenSSL::SSL
-  dl pthread -fsanitize=address
+)
+if(UNIX)
+  target_link_libraries(
+    ldt_ffi_tests
+    dl pthread -fsanitize=address
+  )
+elseif(MSVC)
+  target_link_libraries(
+    ldt_ffi_tests
+    bcrypt ntdll userenv ws2_32
+  )
+endif()
+
+gtest_discover_tests(ldt_ffi_tests)
+
+# Benchmarks
+add_executable(
+  ldt_benchmarks
+  ldt_benchmarks.cc
 )
 
-include(GoogleTest)
-gtest_discover_tests(np_ffi_tests)
+target_link_libraries(
+  ldt_benchmarks
+  "${CMAKE_SOURCE_DIR}/ldt_np_adv_ffi/target/release/${CMAKE_STATIC_LIBRARY_PREFIX}ldt_np_adv_ffi${CMAKE_STATIC_LIBRARY_SUFFIX}"
+  benchmark::benchmark
+  OpenSSL::SSL
+)
+
+if(UNIX)
+  target_link_libraries(
+    ldt_benchmarks
+    dl pthread -fsanitize=address
+  )
+elseif(MSVC)
+  target_link_libraries(
+    ldt_benchmarks
+    bcrypt ntdll userenv ws2_32
+  )
+endif()
diff --git a/nearby/presence/ldt_np_c_sample/tests/benchmarks.cc b/nearby/presence/ldt_np_c_sample/tests/ldt_benchmarks.cc
similarity index 100%
rename from nearby/presence/ldt_np_c_sample/tests/benchmarks.cc
rename to nearby/presence/ldt_np_c_sample/tests/ldt_benchmarks.cc
diff --git a/nearby/presence/ldt_np_c_sample/tests/ldt_ffi_tests.cc b/nearby/presence/ldt_np_c_sample/tests/ldt_ffi_tests.cc
new file mode 100644
index 0000000..e66af65
--- /dev/null
+++ b/nearby/presence/ldt_np_c_sample/tests/ldt_ffi_tests.cc
@@ -0,0 +1,300 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <gtest/gtest.h>
+#include <json/json.h>
+
+extern "C" {
+#include "np_ldt.h"
+}
+
+#include <algorithm>
+#include <fstream>
+
+// TODO: get multi threaded tests working on windows
+#ifndef _WIN32
+#include <pthread.h>
+#endif
+
+#ifdef LDT_TEST_VECTORS
+static const char *PATH_TO_DATA_FILE = LDT_TEST_VECTORS;
+#else
+static const char *PATH_TO_DATA_FILE = "np_adv_test_vectors.json";
+#endif
+static const uint8_t KEY_SEED_BYTES[] = {
+    204, 219, 36, 137, 233, 252, 172, 66,  179, 147, 72, 184, 148, 30, 209, 154,
+    29,  54,  14, 117, 224, 152, 200, 193, 94,  107, 28, 194, 182, 32, 205, 57};
+static const uint8_t KNOWN_HMAC_BYTES[] = {
+    223, 185, 10,  31,  155, 31, 226, 141, 24,  187, 204,
+    165, 34,  64,  181, 204, 44, 203, 95,  141, 82,  137,
+    163, 203, 100, 235, 53,  65, 202, 97,  75,  180};
+static const uint8_t TEST_DATA_BYTES[] = {205, 104, 63, 225, 161, 209, 248,
+                                          70,  84,  61, 10,  19,  212, 174,
+                                          164, 0,   64, 200, 214, 123};
+
+static NpLdtSalt salt = {{12, 15}};
+
+static NpLdtEncryptHandle create_enc_handle_from_test_key() {
+  NpLdtKeySeed key_seed;
+  memcpy(key_seed.bytes, KEY_SEED_BYTES, 32);
+
+  return NpLdtEncryptCreate(key_seed);
+}
+
+static NpLdtDecryptHandle create_dec_handle_from_test_key() {
+  NpLdtKeySeed key_seed;
+  memcpy(key_seed.bytes, KEY_SEED_BYTES, 32);
+
+  NpMetadataKeyHmac known_hmac;
+  memcpy(known_hmac.bytes, KNOWN_HMAC_BYTES, 32);
+
+  return NpLdtDecryptCreate(key_seed, known_hmac);
+}
+
+static void hex_string_to_bytes(const char *hexString, uint8_t *out,
+                                size_t len) {
+  for (size_t count = 0; count < len; count++) {
+    sscanf(hexString, "%2hhx", &out[count]); // NOLINT(cert-err34-c)
+    hexString += 2;
+  }
+}
+
+static void bytes_to_hex_string(uint8_t *data, char *out, size_t len) {
+  std::stringstream ss;
+  ss << std::hex;
+  for (size_t i = 0; i < len; ++i)
+    ss << std::setw(2) << std::setfill('0') << (int)data[i];
+
+  std::string result = ss.str();
+  transform(result.begin(), result.end(), result.begin(), ::toupper);
+  strcpy(out, result.c_str());
+}
+
+// Run through JSON data with test cases generated by Rust tests.
+// Using generated data for now because the C layer does not have the ability
+// to generate the ldt_key and hmac_key from a key_seed, this is an
+// implementation detail of the rust ldt library
+TEST(LdtFfiTests, TestJsonData) {
+  Json::Value root;
+  Json::Reader reader;
+  std::ifstream test(PATH_TO_DATA_FILE);
+  bool parsingSuccessful = reader.parse(test, root, false);
+  if (!parsingSuccessful) {
+    std::cout << reader.getFormattedErrorMessages() << "\n";
+  }
+  ASSERT_TRUE(root.size() == 1000);
+
+  for (const auto &v : root) {
+    auto key_seed = v["key_seed"].asCString();
+    auto metadata_key_hmac = v["metadata_key_hmac"].asCString();
+    auto adv_salt = v["adv_salt"].asCString();
+    auto plaintext = v["plaintext"].asCString();
+    auto ciphertext = v["ciphertext"].asCString();
+
+    NpLdtKeySeed np_key_seed;
+    auto len = strlen(key_seed) / 2;
+    hex_string_to_bytes(key_seed, np_key_seed.bytes, len);
+    ASSERT_EQ(len, 32);
+
+    NpMetadataKeyHmac known_hmac;
+    len = strlen(metadata_key_hmac) / 2;
+    hex_string_to_bytes(metadata_key_hmac, known_hmac.bytes, len);
+    ASSERT_EQ(len, 32);
+
+    NpLdtEncryptHandle enc_handle = NpLdtEncryptCreate(np_key_seed);
+    ASSERT_TRUE(enc_handle.handle != 0);
+
+    NpLdtSalt salt_data;
+    len = strlen(adv_salt) / 2;
+    hex_string_to_bytes(adv_salt, salt_data.bytes, len);
+    ASSERT_TRUE(len == 2);
+
+    len = strlen(plaintext) / 2;
+    auto buffer = (uint8_t *)malloc(len);
+    hex_string_to_bytes(plaintext, buffer, len);
+    NP_LDT_RESULT result = NpLdtEncrypt(enc_handle, buffer, len, salt_data);
+    ASSERT_EQ(result, NP_LDT_SUCCESS);
+
+    char *output = (char *)malloc(strlen(plaintext) + 1);
+    bytes_to_hex_string(buffer, output, len);
+    ASSERT_EQ(strcmp(output, ciphertext), 0);
+
+    NpLdtDecryptHandle dec_handle = NpLdtDecryptCreate(np_key_seed, known_hmac);
+    ASSERT_TRUE(dec_handle.handle != 0);
+
+    result = NpLdtDecryptAndVerify(dec_handle, buffer, len, salt_data);
+    ASSERT_EQ(result, NP_LDT_SUCCESS);
+
+    result = NpLdtEncryptClose(enc_handle);
+    ASSERT_EQ(result, NP_LDT_SUCCESS);
+
+    result = NpLdtDecryptClose(dec_handle);
+    ASSERT_EQ(result, NP_LDT_SUCCESS);
+
+    bytes_to_hex_string(buffer, output, len);
+    ASSERT_EQ(strcmp(output, plaintext), 0);
+    free(buffer);
+    free(output);
+  }
+  test.close();
+}
+
+TEST(LdtFfiTests, TestValidLength) {
+  auto plaintext = (uint8_t *)malloc(20 * sizeof(uint8_t));
+  memcpy(plaintext, TEST_DATA_BYTES, 20);
+
+  NpLdtEncryptHandle enc_handle = create_enc_handle_from_test_key();
+  ASSERT_TRUE(enc_handle.handle != 0);
+
+  NP_LDT_RESULT result = NpLdtEncrypt(enc_handle, plaintext, 20, salt);
+  ASSERT_EQ(result, NP_LDT_SUCCESS);
+
+  NpLdtDecryptHandle dec_handle = create_dec_handle_from_test_key();
+
+  result = NpLdtDecryptAndVerify(dec_handle, plaintext, 20, salt);
+  ASSERT_EQ(result, NP_LDT_SUCCESS);
+  free(plaintext);
+}
+
+TEST(LdtFfiTests, TestEncryptInvalidLength) {
+  auto plaintext = (uint8_t *)malloc(32 * sizeof(uint8_t));
+  memcpy(plaintext, TEST_DATA_BYTES, 20);
+
+  NpLdtEncryptHandle enc_handle = create_enc_handle_from_test_key();
+  ASSERT_TRUE(enc_handle.handle != 0);
+
+  NP_LDT_RESULT result = NpLdtEncrypt(enc_handle, plaintext, 32, salt);
+  ASSERT_EQ(result, NP_LDT_ERROR_INVALID_LENGTH);
+
+  result = NpLdtEncrypt(enc_handle, plaintext, 15, salt);
+  ASSERT_EQ(result, NP_LDT_ERROR_INVALID_LENGTH);
+  free(plaintext);
+}
+
+TEST(LdtFfiTests, TestDecryptInvalidLength) {
+  auto plaintext = (uint8_t *)malloc(32 * sizeof(uint8_t));
+  memcpy(plaintext, TEST_DATA_BYTES, 20);
+
+  NpLdtDecryptHandle dec_handle = create_dec_handle_from_test_key();
+  ASSERT_TRUE(dec_handle.handle != 0);
+
+  NP_LDT_RESULT result = NpLdtDecryptAndVerify(dec_handle, plaintext, 32, salt);
+  ASSERT_EQ(result, NP_LDT_ERROR_INVALID_LENGTH);
+
+  result = NpLdtDecryptAndVerify(dec_handle, plaintext, 15, salt);
+  ASSERT_EQ(result, NP_LDT_ERROR_INVALID_LENGTH);
+  free(plaintext);
+}
+
+// We want to make sure no decryption is performed when the hmac is invalid
+TEST(LdtFfiTests, TestDecryptMacMismatch) {
+  char test_text[] = "this text should not change!";
+  auto plaintext = (uint8_t *)malloc(30 * sizeof(char));
+  memcpy(plaintext, test_text, 29);
+
+  NpLdtDecryptHandle dec_handle = create_dec_handle_from_test_key();
+  ASSERT_TRUE(dec_handle.handle != 0);
+
+  NP_LDT_RESULT result = NpLdtDecryptAndVerify(dec_handle, plaintext, 24, salt);
+  ASSERT_EQ(result, NP_LDT_ERROR_MAC_MISMATCH);
+
+  ASSERT_EQ(strcmp((char *)plaintext, test_text), 0);
+  free(plaintext);
+}
+
+TEST(LdtFfiTests, TestInvalidHandle) {
+  auto plaintext = (uint8_t *)malloc(20 * sizeof(uint8_t));
+  memcpy(plaintext, TEST_DATA_BYTES, 20);
+
+  NP_LDT_RESULT result =
+      NpLdtEncrypt(NpLdtEncryptHandle{1234}, plaintext, 20, salt);
+  ASSERT_EQ(result, NP_LDT_INVALID_HANDLE);
+
+  result = NpLdtDecryptAndVerify(NpLdtDecryptHandle{1234}, plaintext, 20, salt);
+  ASSERT_EQ(result, NP_LDT_INVALID_HANDLE);
+  free(plaintext);
+
+  result = NpLdtEncryptClose(NpLdtEncryptHandle{1234});
+  ASSERT_EQ(result, NP_LDT_INVALID_HANDLE);
+
+  result = NpLdtDecryptClose(NpLdtDecryptHandle{1234});
+  ASSERT_EQ(result, NP_LDT_INVALID_HANDLE);
+}
+
+#ifndef _WIN32
+pthread_mutex_t my_mutex = PTHREAD_MUTEX_INITIALIZER;
+pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
+
+void *worker_thread(void *arg) {
+  (void)arg;
+  pthread_mutex_lock(&my_mutex);
+
+  pthread_cond_wait(&cond, &my_mutex);
+  pthread_mutex_unlock(&my_mutex);
+
+  auto plaintext = (uint8_t *)malloc(20 * sizeof(uint8_t));
+  memcpy(plaintext, TEST_DATA_BYTES, 20);
+
+  NpLdtEncryptHandle enc_handle = create_enc_handle_from_test_key();
+  if (enc_handle.handle == 0) {
+    printf("Error creating handle in thread!");
+    free(plaintext);
+    exit(2);
+  }
+
+  NP_LDT_RESULT result = NpLdtEncrypt(enc_handle, plaintext, 20, salt);
+  if (result != NP_LDT_SUCCESS) {
+    printf("Error in encrypt in thread!");
+    free(plaintext);
+    exit(2);
+  }
+
+  NpLdtDecryptHandle dec_handle = create_dec_handle_from_test_key();
+  if (dec_handle.handle == 0) {
+    printf("Error creating handle in thread!");
+    free(plaintext);
+    exit(2);
+  }
+  result = NpLdtDecryptAndVerify(dec_handle, plaintext, 20, salt);
+  if (result != NP_LDT_SUCCESS) {
+    printf("Error in decrypt in thread!");
+    free(plaintext);
+    exit(2);
+  }
+
+  free(plaintext);
+  pthread_exit(nullptr);
+}
+
+TEST(LdtFfiTests, MultiThreadedTests) {
+  int i, num_threads = 100;
+  pthread_t tid[num_threads];
+  memset(tid, 0, num_threads * sizeof(pthread_t));
+
+  // Create the threads
+  for (i = 0; i < num_threads; i++)
+    ASSERT_EQ(pthread_create(&tid[i], nullptr, worker_thread, (void *)&tid[i]),
+              0);
+
+  // give time for all threads to lock
+  sleep(1);
+
+  // unleash the threads!
+  pthread_cond_broadcast(&cond);
+
+  // Wait for them all to finish and check the status
+  for (i = 0; i < num_threads; i++)
+    ASSERT_EQ(pthread_join(tid[i], nullptr), 0);
+}
+#endif
diff --git a/nearby/presence/ldt_np_c_sample/tests/np_ffi_tests.cc b/nearby/presence/ldt_np_c_sample/tests/np_ffi_tests.cc
deleted file mode 100644
index 6359e7e..0000000
--- a/nearby/presence/ldt_np_c_sample/tests/np_ffi_tests.cc
+++ /dev/null
@@ -1,308 +0,0 @@
-// Copyright 2022 Google LLC
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-#include <gtest/gtest.h>
-#include <json/json.h>
-
-extern "C" {
-#include "np_ldt.h"
-}
-
-#include <algorithm>
-#include <fstream>
-
-// TODO: get multi threaded tests working on windows
-#ifndef _WIN32
-#include <pthread.h>
-#endif
-
-using namespace std;
-
-#ifdef LDT_TEST_VECTORS
-static const char* PATH_TO_DATA_FILE = LDT_TEST_VECTORS;
-#else
-static const char* PATH_TO_DATA_FILE = "np_adv_test_vectors.json";
-#endif
-static const uint8_t KEY_SEED_BYTES[] = {204, 219, 36, 137, 233, 252, 172, 66, 179, 147, 72, 184, 148, 30, 209, 154, 29, 54, 14, 117, 224, 152, 200, 193, 94, 107, 28, 194, 182, 32, 205, 57};
-static const uint8_t KNOWN_HMAC_BYTES[] = {223, 185, 10, 31, 155, 31, 226, 141, 24, 187, 204, 165, 34, 64, 181, 204, 44, 203, 95, 141, 82, 137, 163, 203, 100, 235, 53, 65, 202, 97, 75, 180};
-static const uint8_t TEST_DATA_BYTES[] = {205, 104, 63, 225, 161, 209, 248, 70, 84, 61, 10, 19, 212, 174, 164, 0, 64, 200, 214, 123};
-
-static NpLdtSalt salt  = {
-    {12, 15}
-};
-
-static NpLdtEncryptHandle create_enc_handle_from_test_key ()
-{
-    NpLdtKeySeed key_seed;
-    memcpy(key_seed.bytes, KEY_SEED_BYTES, 32);
-
-    return NpLdtEncryptCreate(key_seed);
-}
-
-static NpLdtDecryptHandle create_dec_handle_from_test_key ()
-{
-    NpLdtKeySeed key_seed;
-    memcpy(key_seed.bytes, KEY_SEED_BYTES, 32);
-
-    NpMetadataKeyHmac known_hmac;
-    memcpy(known_hmac.bytes, KNOWN_HMAC_BYTES, 32);
-
-    return NpLdtDecryptCreate(key_seed, known_hmac);
-}
-
-static void hex_string_to_bytes(const char * hexString, uint8_t * out, size_t len)
-{
-    for (size_t count = 0; count < len; count++) {
-        sscanf(hexString, "%2hhx", &out[count]);
-        hexString += 2;
-    }
-}
-
-static void bytes_to_hex_string(uint8_t * data, char * out, int len)
-{
-    std::stringstream ss;
-    ss << std::hex;
-    for(int i=0;i<len;++i)
-        ss << std::setw(2) << std::setfill('0') << (int)data[i];
-
-    string result = ss.str();
-    transform(result.begin(), result.end(), result.begin(), ::toupper);
-    strcpy(out, result.c_str());
-}
-
-// Run through JSON data with test cases generated by Rust tests.
-// Using generated data for now because the C layer does not have the ability
-// to generate the ldt_key and hmac_key from a key_seed, this is an implementation
-// detail of the rust ldt library
-TEST(NpFfiTests, TestJsonData) {
-    Json::Value root;
-    Json::Reader reader;
-    std::ifstream test(PATH_TO_DATA_FILE);
-    bool parsingSuccessful = reader.parse( test, root, false );
-    if ( !parsingSuccessful )
-    {
-        std::cout  << reader.getFormattedErrorMessages()
-               << "\n";
-    }
-    ASSERT_TRUE(root.size() == 1000);
-
-    for (Json::Value::ArrayIndex i = 0; i < root.size(); i++) {
-        const Json::Value& v = root[i];
-        auto key_seed = v["key_seed"].asCString();
-        auto metadata_key_hmac = v["metadata_key_hmac"].asCString();
-        auto adv_salt = v["adv_salt"].asCString();
-        auto plaintext = v["plaintext"].asCString();
-        auto ciphertext = v["ciphertext"].asCString();
-
-        NpLdtKeySeed np_key_seed;
-        int len = strlen(key_seed)/2;
-        hex_string_to_bytes(key_seed, np_key_seed.bytes, len);
-        ASSERT_EQ(len, 32);
-
-        NpMetadataKeyHmac known_hmac;
-        len = strlen(metadata_key_hmac)/2;
-        hex_string_to_bytes(metadata_key_hmac, known_hmac.bytes, len);
-        ASSERT_EQ(len, 32);
-
-        NpLdtEncryptHandle enc_handle = NpLdtEncryptCreate(np_key_seed);
-        ASSERT_TRUE(enc_handle.handle != 0);
-
-        NpLdtSalt saltdata;
-        len = strlen(adv_salt)/2;
-        hex_string_to_bytes(adv_salt, saltdata.bytes, len);
-        ASSERT_TRUE(len == 2);
-
-        len = strlen(plaintext)/2;
-        uint8_t* buffer = (uint8_t*)malloc(len);
-        hex_string_to_bytes(plaintext, buffer, len);
-        NP_LDT_RESULT result = NpLdtEncrypt(enc_handle, buffer, len, saltdata);
-        ASSERT_EQ(result, NP_LDT_SUCCESS);
-
-        char output[strlen(plaintext) + 1];
-        bytes_to_hex_string(buffer, output, len);
-        ASSERT_EQ(strcmp(output, ciphertext), 0);
-
-        NpLdtDecryptHandle dec_handle = NpLdtDecryptCreate(np_key_seed, known_hmac);
-        ASSERT_TRUE(dec_handle.handle != 0);
-
-        result = NpLdtDecryptAndVerify(dec_handle, buffer, len, saltdata);
-        ASSERT_EQ(result, NP_LDT_SUCCESS);
-
-        result = NpLdtEncryptClose(enc_handle);
-        ASSERT_EQ(result, NP_LDT_SUCCESS);
-
-        result = NpLdtDecryptClose(dec_handle);
-        ASSERT_EQ(result, NP_LDT_SUCCESS);
-
-        bytes_to_hex_string(buffer, output, len);
-        ASSERT_EQ( strcmp(output, plaintext), 0);
-        free(buffer);
-    }
-    test.close();
-}
-
-TEST(NpFfiTests, TestValidLength)
-{
-    uint8_t* plaintext = (uint8_t*) malloc(20 * sizeof(uint8_t));
-    memcpy(plaintext, TEST_DATA_BYTES, 20);
-
-    NpLdtEncryptHandle enc_handle = create_enc_handle_from_test_key();
-    ASSERT_TRUE(enc_handle.handle != 0);
-
-    NP_LDT_RESULT result = NpLdtEncrypt(enc_handle, plaintext, 20, salt);
-    ASSERT_EQ(result, NP_LDT_SUCCESS);
-
-    NpLdtDecryptHandle dec_handle = create_dec_handle_from_test_key();
-
-    result = NpLdtDecryptAndVerify(dec_handle, plaintext, 20, salt);
-    ASSERT_EQ(result, NP_LDT_SUCCESS);
-    free(plaintext);
-}
-
-TEST(NpFfiTests, TestEncryptInvalidLength)
-{
-    uint8_t* plaintext = (uint8_t*) malloc(32 * sizeof(uint8_t));
-    memcpy(plaintext, TEST_DATA_BYTES, 20);
-
-    NpLdtEncryptHandle enc_handle = create_enc_handle_from_test_key();
-    ASSERT_TRUE(enc_handle.handle != 0);
-
-    NP_LDT_RESULT result = NpLdtEncrypt(enc_handle, plaintext, 32, salt);
-    ASSERT_EQ(result, NP_LDT_ERROR_INVALID_LENGTH);
-
-    result = NpLdtEncrypt(enc_handle, plaintext, 15, salt);
-    ASSERT_EQ(result,  NP_LDT_ERROR_INVALID_LENGTH);
-    free(plaintext);
-}
-
-TEST(NpFfiTests, TestDecryptInvalidLength)
-{
-    uint8_t* plaintext = (uint8_t*) malloc(32 * sizeof(uint8_t));
-    memcpy(plaintext, TEST_DATA_BYTES, 20);
-
-    NpLdtDecryptHandle dec_handle = create_dec_handle_from_test_key();
-    ASSERT_TRUE(dec_handle.handle != 0);
-
-    NP_LDT_RESULT result = NpLdtDecryptAndVerify(dec_handle, plaintext, 32, salt);
-    ASSERT_EQ(result, NP_LDT_ERROR_INVALID_LENGTH);
-
-    result = NpLdtDecryptAndVerify(dec_handle, plaintext, 15, salt);
-    ASSERT_EQ(result, NP_LDT_ERROR_INVALID_LENGTH);
-    free(plaintext);
-}
-
-// We want to make sure no decryption is performed when the hmac is invalid
-TEST(NpFfiTests, TestDecryptMacMismatch)
-{
-    char test_text[] = "this text should not change!";
-    uint8_t* plaintext = (uint8_t*) malloc(30 * sizeof(char));
-    memcpy(plaintext, test_text, 29);
-
-    NpLdtDecryptHandle dec_handle = create_dec_handle_from_test_key();
-    ASSERT_TRUE(dec_handle.handle != 0);
-
-    NP_LDT_RESULT result = NpLdtDecryptAndVerify(dec_handle, plaintext, 24, salt);
-    ASSERT_EQ(result, NP_LDT_ERROR_MAC_MISMATCH);
-
-    ASSERT_EQ(strcmp((char *)plaintext, test_text), 0);
-    free(plaintext);
-}
-
-TEST(NpFfiTests, TestInvalidHandle)
-{
-    uint8_t* plaintext = (uint8_t*) malloc(20 * sizeof(uint8_t));
-    memcpy(plaintext, TEST_DATA_BYTES, 20);
-
-    NP_LDT_RESULT result = NpLdtEncrypt(NpLdtEncryptHandle{1234}, plaintext, 20, salt);
-    ASSERT_EQ(result, NP_LDT_INVALID_HANDLE);
-
-    result = NpLdtDecryptAndVerify(NpLdtDecryptHandle{1234}, plaintext, 20, salt);
-    ASSERT_EQ(result, NP_LDT_INVALID_HANDLE);
-    free(plaintext);
-
-    result = NpLdtEncryptClose(NpLdtEncryptHandle{1234});
-    ASSERT_EQ(result, NP_LDT_INVALID_HANDLE);
-
-    result = NpLdtDecryptClose(NpLdtDecryptHandle{1234});
-    ASSERT_EQ(result, NP_LDT_INVALID_HANDLE);
-}
-
-#ifndef _WIN32
-pthread_mutex_t my_mutex = PTHREAD_MUTEX_INITIALIZER;
-pthread_cond_t cond = PTHREAD_COND_INITIALIZER;
-
-void *worker_thread(void *arg)
-{
-    (void) arg;
-    pthread_mutex_lock(&my_mutex);
-
-    pthread_cond_wait(&cond, &my_mutex);
-    pthread_mutex_unlock(&my_mutex);
-
-    uint8_t* plaintext = (uint8_t*) malloc(20 * sizeof(uint8_t));
-    memcpy(plaintext, TEST_DATA_BYTES, 20);
-
-    NpLdtEncryptHandle enc_handle = create_enc_handle_from_test_key();
-    if (enc_handle.handle == 0){
-        printf("Error creating handle in thread!");
-        free(plaintext);
-        exit(2);
-    }
-
-    NP_LDT_RESULT result = NpLdtEncrypt(enc_handle, plaintext, 20, salt);
-    if (result != NP_LDT_SUCCESS){
-        printf("Error in encrypt in thread!");
-        free(plaintext);
-        exit(2);
-    }
-
-    NpLdtDecryptHandle dec_handle = create_dec_handle_from_test_key();
-    if (dec_handle.handle == 0){
-        printf("Error creating handle in thread!");
-        free(plaintext);
-        exit(2);
-    }
-    result = NpLdtDecryptAndVerify(dec_handle, plaintext, 20, salt);
-    if (result != NP_LDT_SUCCESS){
-        printf("Error in decrypt in thread!");
-        free(plaintext);
-        exit(2);
-    }
-
-    free(plaintext);
-    pthread_exit(NULL);
-}
-
-TEST(NpFfiTests, MultiThreadedTests)
-{
-    int i, num_threads = 100;
-    pthread_t tid[num_threads];
-    memset(tid, 0, num_threads * sizeof(pthread_t));
-
-    // Create the threads
-    for (i = 0; i < num_threads; i++)
-        ASSERT_EQ(pthread_create(&tid[i], NULL, worker_thread, (void *)&tid[i]),
-         0);
-
-    // give time for all threads to lock
-    sleep(1);
-
-    // unleash the threads!
-    pthread_cond_broadcast(&cond);
-
-    // Wait for them all to finish and check the status
-    for (i = 0; i < num_threads; i++)
-        ASSERT_EQ(pthread_join(tid[i], NULL), 0);
-}
-#endif
diff --git a/nearby/presence/ldt_np_jni/src/lib.rs b/nearby/presence/ldt_np_jni/src/lib.rs
index 6415a4f..8f7958e 100644
--- a/nearby/presence/ldt_np_jni/src/lib.rs
+++ b/nearby/presence/ldt_np_jni/src/lib.rs
@@ -235,7 +235,9 @@
         .try_into()
         .map_err(|_| {
             // resuscitate the Box so that its drop can run, otherwise we would leak on error
-            unsafe { Box::from_raw(pointer) };
+            unsafe {
+                let _ = Box::from_raw(pointer);
+            }
         })
         // Now that we know the pointer fits in 64 bits, can cast u64 to i64/jlong.
         .map(|ptr_64: u64| ptr_64 as jlong)
diff --git a/nearby/presence/np_adv/Cargo.toml b/nearby/presence/np_adv/Cargo.toml
new file mode 100644
index 0000000..4c8aff5
--- /dev/null
+++ b/nearby/presence/np_adv/Cargo.toml
@@ -0,0 +1,42 @@
+[package]
+name = "np_adv"
+version.workspace = true
+edition.workspace = true
+publish.workspace = true
+
+[dependencies]
+array_view = { path = "../array_view" }
+ldt_np_adv.workspace = true
+ldt.workspace = true
+np_hkdf.workspace = true
+np_ed25519.workspace = true
+xts_aes.workspace = true
+crypto_provider.workspace = true
+strum.workspace = true
+strum_macros.workspace = true
+nom = { version = "7.1.1", features = ["alloc"] }
+lazy_static.workspace = true
+sink.workspace = true
+tinyvec.workspace = true
+rand.workspace = true
+
+[features]
+default = []
+devtools = []
+testing = []
+
+[dev-dependencies]
+hex.workspace = true
+rand_ext = { path = "../rand_ext" }
+init_with = "1.1.0"
+serde_json.workspace = true
+anyhow.workspace = true
+test_helper = { path = "../test_helper" }
+criterion.workspace = true
+crypto_provider_default = {workspace = true, features = ["std", "rustcrypto"]}
+np_ed25519 = {workspace = true, features = ["std"]}
+sink = {workspace = true, features = ["std"]}
+
+[[bench]]
+name = "deser_adv"
+harness = false
diff --git a/nearby/presence/np_adv/benches/deser_adv.rs b/nearby/presence/np_adv/benches/deser_adv.rs
new file mode 100644
index 0000000..9699ebf
--- /dev/null
+++ b/nearby/presence/np_adv/benches/deser_adv.rs
@@ -0,0 +1,422 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use core::marker::PhantomData;
+use criterion::{black_box, criterion_group, criterion_main, Bencher, Criterion};
+use crypto_provider::{CryptoProvider, CryptoRng};
+use crypto_provider_default::CryptoProviderImpl;
+use ldt_np_adv::{LdtEncrypterXtsAes128, LegacySalt};
+
+use np_adv::{
+    credential::{simple::*, source::*, v0::*, v1::*},
+    de_type::EncryptedIdentityDataElementType,
+    deserialize_advertisement, deserialize_v0_advertisement, deserialize_v1_advertisement,
+    extended::{
+        data_elements::{GenericDataElement, TxPowerDataElement},
+        deserialize::VerificationMode,
+        serialize::{
+            AdvBuilder as ExtendedAdvBuilder, MicEncrypted, SectionBuilder, SectionIdentity,
+            SignedEncrypted,
+        },
+    },
+    legacy::{
+        actions::{ActionBits, ActionsDataElement},
+        serialize::{AdvBuilder as LegacyAdvBuilder, LdtIdentity},
+    },
+    shared_data::{ContextSyncSeqNum, TxPower},
+    PublicIdentity,
+};
+use rand::{Rng as _, SeedableRng as _};
+use strum::IntoEnumIterator;
+
+pub fn deser_adv_v1_encrypted(c: &mut Criterion) {
+    let mut crypto_rng = <CryptoProviderImpl as CryptoProvider>::CryptoRng::new();
+
+    for crypto_type in CryptoMaterialType::iter() {
+        for &identity_type in &[VerificationMode::Mic, VerificationMode::Signature] {
+            for &num_identities in &[10, 100, 1000] {
+                for &num_sections in &[1, 2] {
+                    // measure worst-case performance -- the correct identities will be the last
+                    // num_sections of the identities to be tried
+                    c.bench_function(
+                        &format!(
+                            "Deser V1 encrypted: crypto={crypto_type:?}/mode={identity_type:?}/ids={num_identities}/sections={num_sections}"
+                        ),
+                        |b| {
+                            let identities = (0..num_identities)
+                                .map(|_| V1Identity::random(&mut crypto_rng))
+                                .collect::<Vec<_>>();
+
+                            let mut adv_builder = ExtendedAdvBuilder::new();
+
+                            // take the first n identities, one section per identity
+                            for identity in identities.iter().take(num_sections) {
+                                let hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(
+                                    &identity.key_seed,
+                                );
+                                match identity_type {
+                                    VerificationMode::Mic => {
+                                        let mut sb = adv_builder
+                                            .section_builder(MicEncrypted::new_random_salt(
+                                                &mut crypto_rng,
+                                                EncryptedIdentityDataElementType::Private,
+                                                &identity.extended_metadata_key,
+                                                &hkdf,
+                                            ))
+                                            .unwrap();
+
+                                        add_des(&mut sb);
+                                        sb.add_to_advertisement();
+                                    }
+                                    VerificationMode::Signature => {
+                                        let mut sb = adv_builder
+                                            .section_builder(SignedEncrypted::new_random_salt(
+                                                &mut crypto_rng,
+                                                EncryptedIdentityDataElementType::Private,
+                                                &identity.extended_metadata_key,
+                                                &identity.key_pair,
+                                                &hkdf,
+                                            ))
+                                            .unwrap();
+
+                                        add_des(&mut sb);
+                                        sb.add_to_advertisement();
+                                    }
+                                }
+                            }
+
+                            let adv = adv_builder.into_advertisement();
+
+                            match crypto_type {
+                                CryptoMaterialType::MinFootprint => run_with_v1_creds::<
+                                    MinimumFootprintV1CryptoMaterial,
+                                    CryptoProviderImpl,
+                                >(
+                                    b, identities, adv.as_slice()
+                                ),
+                                CryptoMaterialType::Precalculated => {
+                                    run_with_v1_creds::<
+                                        PrecalculatedV1CryptoMaterial,
+                                        CryptoProviderImpl,
+                                    >(
+                                        b, identities, adv.as_slice()
+                                    )
+                                }
+                            }
+                        },
+                    );
+                }
+            }
+        }
+    }
+}
+
+pub fn deser_adv_v1_plaintext(c: &mut Criterion) {
+    let _rng = rand::rngs::StdRng::from_entropy();
+
+    for &num_sections in &[1, 2, 5, 8] {
+        // measure worst-case performance -- the correct identities will be the last
+        // num_sections of the identities to be tried
+        c.bench_function(&format!("Deser V1 plaintext: sections={num_sections}"), |b| {
+            let mut adv_builder = ExtendedAdvBuilder::new();
+
+            // take the first n identities, one section per identity
+            for _ in 0..num_sections {
+                let mut sb = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+
+                add_des(&mut sb);
+                sb.add_to_advertisement();
+            }
+
+            let adv = adv_builder.into_advertisement();
+
+            run_with_v1_creds::<MinimumFootprintV1CryptoMaterial, CryptoProviderImpl>(
+                b,
+                vec![],
+                adv.as_slice(),
+            )
+        });
+    }
+}
+
+pub fn deser_adv_v0_encrypted(c: &mut Criterion) {
+    let mut rng = rand::rngs::StdRng::from_entropy();
+    for crypto_type in CryptoMaterialType::iter() {
+        for &num_identities in &[10, 100, 1000] {
+            // measure worst-case performance -- the correct identities will be the last
+            // num_sections of the identities to be tried
+            c.bench_function(
+                &format!("Deser V0 encrypted: crypto={crypto_type:?}/ids={num_identities}"),
+                |b| {
+                    let identities = (0..num_identities)
+                        .map(|_| V0Identity::random(&mut rng))
+                        .collect::<Vec<_>>();
+
+                    let identity = &identities[0];
+                    let hkdf =
+                        np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&identity.key_seed);
+
+                    let mut adv_builder =
+                        LegacyAdvBuilder::new(LdtIdentity::<CryptoProviderImpl>::new(
+                            EncryptedIdentityDataElementType::Private,
+                            LegacySalt::from(rng.gen::<[u8; 2]>()),
+                            identity.legacy_metadata_key,
+                            LdtEncrypterXtsAes128::<CryptoProviderImpl>::new(
+                                &hkdf.legacy_ldt_key(),
+                            ),
+                        ));
+
+                    let mut action_bits = ActionBits::default();
+                    action_bits.set_action(ContextSyncSeqNum::try_from(3).unwrap());
+                    adv_builder.add_data_element(ActionsDataElement::from(action_bits)).unwrap();
+
+                    let adv = adv_builder.into_advertisement().unwrap();
+
+                    match crypto_type {
+                        CryptoMaterialType::MinFootprint => run_with_v0_creds::<
+                            MinimumFootprintV0CryptoMaterial,
+                            CryptoProviderImpl,
+                        >(
+                            b, identities, adv.as_slice()
+                        ),
+                        CryptoMaterialType::Precalculated => run_with_v0_creds::<
+                            PrecalculatedV0CryptoMaterial,
+                            CryptoProviderImpl,
+                        >(
+                            b, identities, adv.as_slice()
+                        ),
+                    }
+                },
+            );
+        }
+    }
+}
+
+type DefaultV0Credential = np_adv::credential::simple::SimpleV0Credential<
+    np_adv::credential::v0::MinimumFootprintV0CryptoMaterial,
+    (),
+>;
+type DefaultV1Credential = np_adv::credential::simple::SimpleV1Credential<
+    np_adv::credential::v1::MinimumFootprintV1CryptoMaterial,
+    (),
+>;
+type DefaultBothCredentialSource =
+    np_adv::credential::source::OwnedBothCredentialSource<DefaultV0Credential, DefaultV1Credential>;
+
+pub fn deser_adv_v0_plaintext(c: &mut Criterion) {
+    let mut adv_builder = LegacyAdvBuilder::new(PublicIdentity::default());
+
+    let mut action_bits = ActionBits::default();
+    action_bits.set_action(ContextSyncSeqNum::try_from(3).unwrap());
+    adv_builder.add_data_element(ActionsDataElement::from(action_bits)).unwrap();
+    let adv = adv_builder.into_advertisement().unwrap();
+
+    let cred_source: DefaultBothCredentialSource = DefaultBothCredentialSource::new_empty();
+
+    for &num_advs in &[1, 10, 100, 1000] {
+        c.bench_function(
+            format!("Deser V0 plaintext with {num_advs} advertisements").as_str(),
+            |b| {
+                b.iter(|| {
+                    for _ in 0..num_advs {
+                        black_box(
+                            deserialize_advertisement::<_, _, _, _, CryptoProviderImpl>(
+                                black_box(adv.as_slice()),
+                                black_box(&cred_source),
+                            )
+                            .expect("Should succeed"),
+                        );
+                    }
+                })
+            },
+        );
+    }
+}
+
+/// Benchmark decrypting a V0 advertisement with credentials built from the reversed list of
+/// identities
+fn run_with_v0_creds<M, C>(b: &mut Bencher, identities: Vec<V0Identity<C>>, adv: &[u8])
+where
+    M: V0CryptoMaterialExt,
+    C: CryptoProvider,
+{
+    let mut creds = identities
+        .into_iter()
+        .map(|i| {
+            let hkdf = np_hkdf::NpKeySeedHkdf::<C>::new(&i.key_seed);
+            SimpleV0Credential::new(
+                M::build_cred::<C>(
+                    i.key_seed,
+                    hkdf.legacy_metadata_key_hmac_key().calculate_hmac(&i.legacy_metadata_key),
+                ),
+                i.key_seed,
+            )
+        })
+        .collect::<Vec<_>>();
+
+    // reverse the identities so that we're scanning to the end of the
+    // cred source for predictably bad performance
+    creds.reverse();
+
+    let cred_source = SliceCredentialSource::new(&creds);
+    b.iter(|| {
+        black_box(deserialize_v0_advertisement::<_, _, C>(adv, &cred_source).map(|_| 0_u8).unwrap())
+    });
+}
+
+/// Benchmark decrypting a V1 advertisement with credentials built from the reversed list of
+/// identities
+fn run_with_v1_creds<M, C>(b: &mut Bencher, identities: Vec<V1Identity<C>>, adv: &[u8])
+where
+    M: V1CryptoMaterialExt,
+    C: CryptoProvider,
+{
+    let mut creds = identities
+        .into_iter()
+        .map(|i| {
+            let hkdf = np_hkdf::NpKeySeedHkdf::<C>::new(&i.key_seed);
+            SimpleV1Credential::new(
+                M::build_cred::<C>(
+                    i.key_seed,
+                    hkdf.extended_unsigned_metadata_key_hmac_key()
+                        .calculate_hmac(&i.extended_metadata_key),
+                    hkdf.extended_signed_metadata_key_hmac_key()
+                        .calculate_hmac(&i.extended_metadata_key),
+                    i.key_pair.public(),
+                ),
+                i.key_seed,
+            )
+        })
+        .collect::<Vec<_>>();
+
+    // reverse the identities so that we're scanning to the end of the
+    // cred source for predictably bad performance
+    creds.reverse();
+
+    let cred_source = SliceCredentialSource::new(&creds);
+    b.iter(|| {
+        black_box(deserialize_v1_advertisement::<_, _, C>(adv, &cred_source).map(|_| 0_u8).unwrap())
+    });
+}
+fn add_des<I: SectionIdentity>(sb: &mut SectionBuilder<I>) {
+    sb.add_de_res(|_| TxPower::try_from(17).map(TxPowerDataElement::from)).unwrap();
+    sb.add_de_res(|_| GenericDataElement::try_from(100_u32.into(), &[0; 10])).unwrap();
+}
+criterion_group!(
+    benches,
+    deser_adv_v1_encrypted,
+    deser_adv_v1_plaintext,
+    deser_adv_v0_encrypted,
+    deser_adv_v0_plaintext
+);
+criterion_main!(benches);
+
+struct V0Identity<C: CryptoProvider> {
+    key_seed: [u8; 32],
+    legacy_metadata_key: [u8; 14],
+    _marker: PhantomData<C>,
+}
+
+impl<C: CryptoProvider> V0Identity<C> {
+    /// Generate a new identity with random crypto material
+    fn random<R: rand::Rng + rand::CryptoRng>(rng: &mut R) -> Self {
+        Self { key_seed: rng.gen(), legacy_metadata_key: rng.gen(), _marker: PhantomData }
+    }
+}
+
+struct V1Identity<C: CryptoProvider> {
+    key_seed: [u8; 32],
+    extended_metadata_key: [u8; 16],
+    key_pair: np_ed25519::KeyPair<C>,
+}
+
+impl<C: CryptoProvider> V1Identity<C> {
+    /// Generate a new identity with random crypto material
+    fn random(rng: &mut C::CryptoRng) -> Self {
+        Self {
+            key_seed: rng.gen(),
+            extended_metadata_key: rng.gen(),
+            key_pair: np_ed25519::KeyPair::<C>::generate(),
+        }
+    }
+}
+
+#[derive(strum_macros::EnumIter, Debug)]
+enum CryptoMaterialType {
+    MinFootprint,
+    Precalculated,
+}
+
+// if we get confident this is a valid shared way, could move this to the main trait
+trait V0CryptoMaterialExt: V0CryptoMaterial {
+    fn build_cred<C: CryptoProvider>(
+        key_seed: [u8; 32],
+        legacy_metadata_key_hmac: [u8; 32],
+    ) -> Self;
+}
+
+trait V1CryptoMaterialExt: V1CryptoMaterial {
+    fn build_cred<C: CryptoProvider>(
+        key_seed: [u8; 32],
+        unsigned_metadata_key_hmac: [u8; 32],
+        signed_metadata_key_hmac: [u8; 32],
+        pub_key: np_ed25519::PublicKey<C>,
+    ) -> Self;
+}
+
+impl V0CryptoMaterialExt for MinimumFootprintV0CryptoMaterial {
+    fn build_cred<C: CryptoProvider>(
+        key_seed: [u8; 32],
+        legacy_metadata_key_hmac: [u8; 32],
+    ) -> Self {
+        Self::new(key_seed, legacy_metadata_key_hmac)
+    }
+}
+
+impl V0CryptoMaterialExt for PrecalculatedV0CryptoMaterial {
+    fn build_cred<C: CryptoProvider>(
+        key_seed: [u8; 32],
+        legacy_metadata_key_hmac: [u8; 32],
+    ) -> Self {
+        Self::new::<C>(&key_seed, legacy_metadata_key_hmac)
+    }
+}
+
+impl V1CryptoMaterialExt for MinimumFootprintV1CryptoMaterial {
+    fn build_cred<C: CryptoProvider>(
+        key_seed: [u8; 32],
+        unsigned_metadata_key_hmac: [u8; 32],
+        signed_metadata_key_hmac: [u8; 32],
+        pub_key: np_ed25519::PublicKey<C>,
+    ) -> Self {
+        Self::new(key_seed, unsigned_metadata_key_hmac, signed_metadata_key_hmac, pub_key)
+    }
+}
+
+impl V1CryptoMaterialExt for PrecalculatedV1CryptoMaterial {
+    fn build_cred<C: CryptoProvider>(
+        key_seed: [u8; 32],
+        unsigned_metadata_key_hmac: [u8; 32],
+        signed_metadata_key_hmac: [u8; 32],
+        pub_key: np_ed25519::PublicKey<C>,
+    ) -> Self {
+        let min_foot = MinimumFootprintV1CryptoMaterial::new(
+            key_seed,
+            unsigned_metadata_key_hmac,
+            signed_metadata_key_hmac,
+            pub_key,
+        );
+        min_foot.to_precalculated::<C>()
+    }
+}
diff --git a/nearby/presence/np_adv/resources/test/mic-encrypted-test-vectors.json b/nearby/presence/np_adv/resources/test/mic-encrypted-test-vectors.json
new file mode 100644
index 0000000..a7834ec
--- /dev/null
+++ b/nearby/presence/np_adv/resources/test/mic-encrypted-test-vectors.json
@@ -0,0 +1,2295 @@
+[
+  {
+    "adv_header_byte": "20",
+    "aes_key": "F3DB017C70E08EC5178C92F3AEA0C362",
+    "data_elements": [
+      {
+        "contents": "CF75D23EDA8F6E4A23",
+        "de_type": 383
+      },
+      {
+        "contents": "731B76151735869205CC41",
+        "de_type": 73
+      },
+      {
+        "contents": "7C2A8DE86B2CBB997703",
+        "de_type": 228
+      },
+      {
+        "contents": "99F5163DCA0BB9BE89755A6C5AB321",
+        "de_type": 446
+      }
+    ],
+    "encoded_section": "6D91100056F596D16E1F87B107EE86102FFC6D5E9002F00C41CDDF533667362CD14AC54A9388FA3D30AA7CA6603071B8B0FA19BF582479F773F1C7D0EADF98E98B9447139F244D571B780475ACD9CB248F33B2C085925213360732D44081C27CA6EB40BD8A626BC776D88C5FDB09",
+    "identity_type": "trusted",
+    "key_seed": "F0ED9126768CE7DC685FF74932AC5A876442C4E42359A43F720A575142A45043",
+    "metadata_key": "45795EE4C6533A830886E2C5885EB9E5",
+    "nonce": "40E95D525FAEA1C1FEE39A8E",
+    "section_mic_hmac_key": "A22386E85112EF883218A5B75669B7102E017E9AA149F408A079F60B1D14B4F4",
+    "section_salt": "56F596D16E1F87B107EE86102FFC6D5E"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "F076F2B4FA1F3704DDC4EC5CD60C4657",
+    "data_elements": [
+      {
+        "contents": "B62889",
+        "de_type": 72
+      },
+      {
+        "contents": "68FDB8895CB7ABCF18390616113107B73321A905D22FDB99",
+        "de_type": 175
+      },
+      {
+        "contents": "D5A173DC337EFA759D443C50F14F25AC18A06D44C4",
+        "de_type": 354
+      }
+    ],
+    "encoded_section": "6D911000CB9C39FAF5D89CEF1FD7E313DC2F95D79004919332D945C714DE3B58B0762E7F9378D80F35D0DE1E8BD321656B270EA3379F029FB09E44AAFB091B0678A0AB69B055CCE5C2F576EAE52DAC0D6C11FD6A878ABF337B9647FF259ED24F5687641E8ED13A612810F22EC240",
+    "identity_type": "provisioned",
+    "key_seed": "907E34F78FBC8CA40FCA224C12B95BA2C4A0148BA0D19BDADEE1798579EF7D35",
+    "metadata_key": "B524D8ABD8E7DCFD13CE922F2FD9EFAC",
+    "nonce": "AD0AC7BE3A89262786A55139",
+    "section_mic_hmac_key": "690542812A39DB48DD638AED6021A250767F79604C638E361A8F7F5FE92C5E40",
+    "section_salt": "CB9C39FAF5D89CEF1FD7E313DC2F95D7"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "B9549633BA2531AEF16D592815C12269",
+    "data_elements": [
+      {
+        "contents": "BA",
+        "de_type": 79
+      },
+      {
+        "contents": "796F131D0D034508",
+        "de_type": 141
+      },
+      {
+        "contents": "0245",
+        "de_type": 522
+      }
+    ],
+    "encoded_section": "48911000897E4DB6C940976334871B64811D8379900416AC9B5760E31F037634EED3B9C81AEF75B5134E7065DCEFF8CF3197BD2242BE4E29384125B35FB9A4BB7D4D1A650F1E30DBA3",
+    "identity_type": "provisioned",
+    "key_seed": "E66AECA540D070C5E430CE461A3E209F0650AAF3E69CC79C20935DEA3D468A46",
+    "metadata_key": "B2AC31CB7B88B7FA165B5E41AE706E04",
+    "nonce": "E3CB89790FEA866E19F4926A",
+    "section_mic_hmac_key": "EE72E920E379F06879BD8AED8EF9BF8D5903E5CF94A83815929260521F84C17C",
+    "section_salt": "897E4DB6C940976334871B64811D8379"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "088B6339D6D727E797DD1EA3EAC999B3",
+    "data_elements": [
+      {
+        "contents": "DDCCC496B0BE050B7607",
+        "de_type": 850
+      }
+    ],
+    "encoded_section": "429110008F292492B012ACE2C0EF4F25E0901F9490022CF669461319C1165AA131A7BF2835C97FC3ECD77522FB93CE0675D0313D7AB03E230DBE46E286192CD451E9FF",
+    "identity_type": "trusted",
+    "key_seed": "CB61506281210764CE5E3504BF3A41AF69196369375BFE16245B0CA19421650D",
+    "metadata_key": "B9696864507A1DC2EF99DF5441AD25EF",
+    "nonce": "9CC88703DA8A3C82DA5DF32D",
+    "section_mic_hmac_key": "8DE5B98089EEEAB5ABB079EE0C6C8F37289CFCDA74B81BE4F3599EA7F10B3A3C",
+    "section_salt": "8F292492B012ACE2C0EF4F25E0901F94"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "142EF4EFAA03C54D43958647B4A9053A",
+    "data_elements": [
+      {
+        "contents": "B8E42416CD4B3281EE2EDB1B36B89DFD17D35C46B354D6",
+        "de_type": 441
+      },
+      {
+        "contents": "72787349FDC162A25D13BA",
+        "de_type": 664
+      },
+      {
+        "contents": "E0A29FC658F199AFF9",
+        "de_type": 308
+      },
+      {
+        "contents": "8859EB742D3B433BD0F992285B9EEAA1",
+        "de_type": 319
+      }
+    ],
+    "encoded_section": "7C911000DFCC6FC56956B0D99F2F29682117B0759004E48F8DE2D74AC7FEAFBEA42F808B4DCE7D17F2841097DA561701AF9F365BA4F702A4CA79D40F6F88C383487B6524BFACDDF294D2DE20CCD7B2BF3A765598144323933CEAD4C1A5C6522A867A5BFDF562A43C537A50A3987AB4F9AE446043117F7A20E1C41B398F",
+    "identity_type": "provisioned",
+    "key_seed": "311F871B4605A04B3310C13D7297AEE745EE105A5D116D05B114A39C2DE27B85",
+    "metadata_key": "18C51BF65C261CFB2F8106AA4C8476B6",
+    "nonce": "1F562F760A35CE9445D40B28",
+    "section_mic_hmac_key": "6F25A84CB39DACD4B9DC7BB4354EE7BB268FBB559121D0F530BE2FDC212C7478",
+    "section_salt": "DFCC6FC56956B0D99F2F29682117B075"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "0C3C901C96C81D5822A42886F20E4D24",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 437
+      }
+    ],
+    "encoded_section": "38911000B3AF643914DD58250EF9795F77B0FA3B90018EACECB07EEC9E2E72550CB8C373FB6EDA5F1CAF378E19C6207AE3C6F7CDA7E1321B56",
+    "identity_type": "private",
+    "key_seed": "39739EA99CFB0EF8200B08C12213FB3370A4DFB58CEADA17764FBCA9FC05B914",
+    "metadata_key": "A1F9BE98BF2BE21F318FF60776ECF594",
+    "nonce": "E067B8B38B20F64D35EE4B1C",
+    "section_mic_hmac_key": "DB710921FA3969941C33329A0FC10AED0EB49A7BEA627ABBAB6E4BBBF6886478",
+    "section_salt": "B3AF643914DD58250EF9795F77B0FA3B"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "0DFF79575A76A69E5545F23F2D568BF5",
+    "data_elements": [
+      {
+        "contents": "8D530D2FF57D6A089257EEA03F2643CCF76DF103",
+        "de_type": 739
+      },
+      {
+        "contents": "88E7ABACA5E9",
+        "de_type": 563
+      },
+      {
+        "contents": "9CA636C900FFAEB51060B40D1E60D751840CA3",
+        "de_type": 831
+      },
+      {
+        "contents": "8AC0EC13CB0B",
+        "de_type": 944
+      },
+      {
+        "contents": "4FD1B972DDA8376DF7181799B3AEC3D4FA3875CDA0B9F2A244085CDD72",
+        "de_type": 263
+      }
+    ],
+    "encoded_section": "94911000A089A545FC2F1E048CCFEFF6FC7530BA9002D0BA12200150BF15A06427841CC00E9CC99FC3032DDB93D46A96DEC5F92DD89849328418BB27225CA77542A2BBDE1896CF76D0143EA351786BC3DB40228363971552E8CB5BF440F6B6569B610D0F09B6E6B46922D86E1DB35A2AE0507A10268AD4077867FF55C7286971DB6BF27D01B68BEF04B9FE12FF660A0ECE154D2B27",
+    "identity_type": "trusted",
+    "key_seed": "5CE70AB764EE544F6A9B48791033EDB78D6541368BE2A02C41C93BEE27645D15",
+    "metadata_key": "29F72458A212E09F3E13A14D927CBB97",
+    "nonce": "C6002C4E093E3ACD57A0DA8A",
+    "section_mic_hmac_key": "BF94C21240800483EE76C69F94D1E7E867EFC9AB11CE74E672C936634C0F7883",
+    "section_salt": "A089A545FC2F1E048CCFEFF6FC7530BA"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "048C8515B3970ACA7E06DD671E758AB7",
+    "data_elements": [
+      {
+        "contents": "672D400589BB794E2A33DE53A62FF97458DAC28DF015F304CE9EBCE8CF",
+        "de_type": 502
+      },
+      {
+        "contents": "C2D9DC3F76FC72BE4BF7D3AFF43B1041B0BC93512BF73ADA95EDC4",
+        "de_type": 692
+      },
+      {
+        "contents": "B010CC19D7FB",
+        "de_type": 129
+      }
+    ],
+    "encoded_section": "7C91100095FFF79474626138B7A9200A474C449F900259C6F85AD235549231775D62E7E710EA91D16662378B15BD5C34B7D14543BB5F289B37E17599C0AF6572A0630356ECA030870CAE9697E92FA9BB0632BE009F643C018B1571592CB0750C158BE299806D0673779B000E047CF4E4D8BD732544EDE5C6CBB4F71E05",
+    "identity_type": "trusted",
+    "key_seed": "9F52A2F6A5F571B558151E84D8965C427733005A6CD580E66B5C398443BB7479",
+    "metadata_key": "4C95AE9955DE9A3684F52B00461035BF",
+    "nonce": "33CA4805B89AE4F80DB67BE3",
+    "section_mic_hmac_key": "4BC7E7FC685A2E3D9EC90B20014586C986E3054B456EC2851E6606AEDC3955EA",
+    "section_salt": "95FFF79474626138B7A9200A474C449F"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "4C9F52374665C592601F5B2BD404B94A",
+    "data_elements": [
+      {
+        "contents": "91EAFB7D",
+        "de_type": 663
+      },
+      {
+        "contents": "22027014F8D43A605E0C179A1E144A3058D7C024359E7A42B83DBA9B0F",
+        "de_type": 163
+      },
+      {
+        "contents": "0830ACBE1994FB",
+        "de_type": 291
+      }
+    ],
+    "encoded_section": "669110005723CCC591C04732B131D258FB5C9A219002E345F42E0D2D02EF57D890EE70F4A95BFE4C9651BF6E2067BD6707820636D5E484F9D519029D86290ECC42C846AF1D0C8D03BD155D791F47637F9F698A8B9D71E261712DE1F1219ED87F7F2045BC240A41",
+    "identity_type": "trusted",
+    "key_seed": "1D02A26B11FB561BD54036A1FA2B325E74D226CA72428C391650E5249B40E0E9",
+    "metadata_key": "702C35764676569F45279BE0BA2F941D",
+    "nonce": "08838921E1C57E275B554B1E",
+    "section_mic_hmac_key": "163F7952B1866F16C0E5CD3CA950D786E53F04C7CEEBA1946AD76C16185F52FD",
+    "section_salt": "5723CCC591C04732B131D258FB5C9A21"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "A3034AE0322F5E77ED6B21B5E5368108",
+    "data_elements": [
+      {
+        "contents": "537F96FD94E13BE589F0141145CFC0EEC4F86FBDB2",
+        "de_type": 571
+      },
+      {
+        "contents": "D301FFB24B5B",
+        "de_type": 541
+      },
+      {
+        "contents": "EA95F07C25B75C04E1B2B8731F6A55BA379FB141",
+        "de_type": 51
+      },
+      {
+        "contents": "2EFD3101E2311BBB108F0A7503907EAF0C2EAAA60CDA8D33A294C4CEACE0",
+        "de_type": 729
+      },
+      {
+        "contents": "B0",
+        "de_type": 411
+      }
+    ],
+    "encoded_section": "91911000DE2A89ED98474AF3E41E48487E8AEBDE90014C18BCB9F9AAC5C11A1BE00A10A5DCD2C49A74BEBAF0FE72FD5053B9DF8B9976C80BE0DCE8FEE83F1BFA9A89EB176CA48EE4ED5D15C6CDAD6B9E41187AA6316D7BFD8E454A53971AC00836F7AB0771FF0534050037D49C6AEB18CF9F8590E5CDEE2FBC330FCDC640C63F0735B7E3F02FE61A0496EF976A158AD3455D",
+    "identity_type": "private",
+    "key_seed": "959D2F3CAB8EE4A2DEB0255C03762CF5D39EB919300420E75A089050FB025E20",
+    "metadata_key": "EF5E9A0867560E52AE1F05FCA7E48D29",
+    "nonce": "23B64C2B1724E5AE9528FCD4",
+    "section_mic_hmac_key": "2F1B12002184860A496B2DF7FB743401BA8E8BC5F22F661BAD69335E99DB8A19",
+    "section_salt": "DE2A89ED98474AF3E41E48487E8AEBDE"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "15AB0E1BF3C908D5A92C9A52158DAC00",
+    "data_elements": [],
+    "encoded_section": "35911000172C7E49FB61097603390278AA4B48F8900477935610288681FDC9B7250022F01CFA66E59183F392C5C2485D8240ABC96D15",
+    "identity_type": "provisioned",
+    "key_seed": "C1FE7DD8760BDC37EEED65E07FF3F9DB9B2DA247260038675679921566A4466C",
+    "metadata_key": "D84140E3576B04F8D9290744C62D20A1",
+    "nonce": "A8FD0BF085BA1C3E8A23FC0C",
+    "section_mic_hmac_key": "3BBF201D9180707DDF5DA4321B477A2D0CFEFC00D72EE560F0E41B5178315366",
+    "section_salt": "172C7E49FB61097603390278AA4B48F8"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "2C8D685B3ED53CA46D6A6AC126596C84",
+    "data_elements": [
+      {
+        "contents": "E95043396FF5CE7FEA272F1E9D8A",
+        "de_type": 359
+      }
+    ],
+    "encoded_section": "46911000B9EB78D15B9493668E3506DD9E7A2DEC9001884E76187E89CB0107A5090D664508854DCF8722E98904E6BB57422710F3CBB3271A743BAE59467EED31F62B714060F040",
+    "identity_type": "private",
+    "key_seed": "0C43A03CC43B6536086910E73F4499C368BE47235FEA439124005FD91047C8DD",
+    "metadata_key": "6B8DFEAC098F9DD035F14843C3196CC8",
+    "nonce": "920205C1FC28E58575E08D47",
+    "section_mic_hmac_key": "5FE0D08732D5615AE4447E726DEAB0083D9458E66DAE596377DDC103C34A4442",
+    "section_salt": "B9EB78D15B9493668E3506DD9E7A2DEC"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "C56F4750DBCFE87ADD8E2159B3EB5646",
+    "data_elements": [
+      {
+        "contents": "148ADAFBA927A9A3D361CB34792A1FD1311A",
+        "de_type": 16
+      },
+      {
+        "contents": "37215F",
+        "de_type": 776
+      },
+      {
+        "contents": "5B75B7A4044E3100635709818ECB099706",
+        "de_type": 563
+      },
+      {
+        "contents": "4A70F7FE36FC",
+        "de_type": 49
+      }
+    ],
+    "encoded_section": "6B91100010510FF96F9DE71AFB125A00637D9A159002692F0CA5C9AD242760DFCCB7F9E445AB0545ABDD91DBB4E6A7DCAE21ABF58D01CC3C1B95AF9442EDF2FA1ED5C551FABF071981137AFB04F4B67F13D43CAA959F53819A4B90913C7CD4B945665E74898BDEEA50939FA6",
+    "identity_type": "trusted",
+    "key_seed": "18D77C2D69389B38F6430DECF46D34893C188EDF6F57E306BD159A441D602D68",
+    "metadata_key": "0DFE12776B497E72E415E41625C4A2A4",
+    "nonce": "A25A744723723AB492153CE9",
+    "section_mic_hmac_key": "B1BC6C3AC220AF74BAC5EA8A85692095575FA6C2172ED9E66669114164BF55E1",
+    "section_salt": "10510FF96F9DE71AFB125A00637D9A15"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "3BDA27AEC19E0135552AD5ABB02C45D2",
+    "data_elements": [
+      {
+        "contents": "92F73CEBBE55EFF2391445A2B96299155B78",
+        "de_type": 984
+      },
+      {
+        "contents": "8C4615561E9CF7589FA8E6F7B57893025DF55C",
+        "de_type": 919
+      },
+      {
+        "contents": "DDF6FEBA14ABB1B094A277D361A8C70B988E1010534FAFDF25",
+        "de_type": 676
+      },
+      {
+        "contents": "8650458E65DE07BFFCD2EC46E0D4D05609A66D9AB777FA341EFE3280A5AC",
+        "de_type": 784
+      }
+    ],
+    "encoded_section": "9D911000D86DFF361F5567606CCBAD126A86C01390028E06467447060E4E27C066C5B7F8B785D2476A0FFACC9C85C1E2211B7609D8A4A2C7036F982F923D1DFCF0161B60A3AA5DE2287B909FABE3E902EF1CCD45AB7D9CACE4FAB3C05CB9A00FCC5AD93E9E3B2B31A2ECC226D2209BF24FC7D13D0AE53C912D03DF47F1A4C132BF949C555E8D35436011B852DDB228F4964483F820DA360FFC9506087F99",
+    "identity_type": "trusted",
+    "key_seed": "A6915F7F275F268563F06B70294DE268F4C8FE2ED64831049F5071DD2D7AFF7F",
+    "metadata_key": "29B703C99077654D9EC2BD86066D3CC5",
+    "nonce": "ED125BA0057DCFEB89ED7190",
+    "section_mic_hmac_key": "1B8F822A197030498D51E0F2E4B9C7C306074D7C83C73CAE508D2FFA46EB743A",
+    "section_salt": "D86DFF361F5567606CCBAD126A86C013"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "9E629E04812454CB600A54C8837CC057",
+    "data_elements": [
+      {
+        "contents": "C1B396A29B6967ECF8673E009B2E7F94C4DECD7FA20C176EA0AD98B9",
+        "de_type": 253
+      },
+      {
+        "contents": "3FFEC56E8DB922CD8C5AB5E47452E571",
+        "de_type": 605
+      }
+    ],
+    "encoded_section": "67911000229151F0CBA214F520EFDBF30FB4DA43900287511210A4AF78894FA1DEE707C412015D271BEE2789F49BB5DC67D44E5B9E58B6421F4C834D13F29940800D31315840591BD869F1C2D2887914627DE54D90AA254C6CE1699AA9CA7198ADD71BDC46D91117",
+    "identity_type": "trusted",
+    "key_seed": "1C9A55E064B78E94CB6B070F433CA94D21CB3318E048A7A2CAA83FF958419794",
+    "metadata_key": "1A240C90D7E260458660C8B07F991AE6",
+    "nonce": "2BEB4BC7C05434ABBA19E538",
+    "section_mic_hmac_key": "050D12FF03D51C57EC4AE018EDC1896C38226E1A0481362E415CCB28F5A01B5D",
+    "section_salt": "229151F0CBA214F520EFDBF30FB4DA43"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "8C996EFAD07DDDED26DFDF98812CA923",
+    "data_elements": [
+      {
+        "contents": "B7C019E21BDE02221C04A4",
+        "de_type": 43
+      }
+    ],
+    "encoded_section": "42911000D1662A41EA8D74EEDE6BE6686D41414E90029CE0D1823D6C861F9B05C79235D6C1CB99634640B9BA98F7B3C72B67F242E2E40E36C937F671A88D63FF97C4C4",
+    "identity_type": "trusted",
+    "key_seed": "2027245C1810377C3846FFC4F33A46FD5F55BEFBB13C9EB07D7D5AD3CFAB48B4",
+    "metadata_key": "9F4AD9EDF0A6CAAD2E9E99871E4CE52C",
+    "nonce": "A71E97EBB5FEF5C10118B443",
+    "section_mic_hmac_key": "3BEFA04D9C10EC14E050D8106803C71F788E338E191EDFA21FC2029FE1A90922",
+    "section_salt": "D1662A41EA8D74EEDE6BE6686D41414E"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "AE8C6F011FE35C9C96FE8EBDE339A41F",
+    "data_elements": [
+      {
+        "contents": "607A867B3B29B89041F9",
+        "de_type": 979
+      },
+      {
+        "contents": "5E799499",
+        "de_type": 25
+      },
+      {
+        "contents": "92CB515B79EDD5E37C12C6B5864DF420AF7DDE1B5919331DA7",
+        "de_type": 577
+      }
+    ],
+    "encoded_section": "649110008A4AF96D2B686F8C79E0133C7A1300D39001533E4A9492889398E4BEA2572B455C201BE24382C5D0FCEF256113AA7541173BBC6A2B9AFC3CB2A133424BA12055069603174E36F3407444B5FBFA5BFAE8C8B6BD893AB31B9D869105014A931AEA10",
+    "identity_type": "private",
+    "key_seed": "F728E206C88A47D4C5063BBF54C218435A04B921E3D0E2774572D88024076D7E",
+    "metadata_key": "CD8451667D7BBD7EB4CD5E456ECF8167",
+    "nonce": "3F7D4273CDA786C66C557ADC",
+    "section_mic_hmac_key": "82B0C8B8007802CE1CCF367F07830FDAD2401C8EB5849613602E568E634DAFB4",
+    "section_salt": "8A4AF96D2B686F8C79E0133C7A1300D3"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "9078B570449046A4C6FD9246ABE3E17E",
+    "data_elements": [
+      {
+        "contents": "381690D8CB5DE6CB",
+        "de_type": 724
+      },
+      {
+        "contents": "905EB45FAD",
+        "de_type": 144
+      },
+      {
+        "contents": "969FEFE0",
+        "de_type": 302
+      },
+      {
+        "contents": "75202C93DD512023EFD3EBF3",
+        "de_type": 742
+      }
+    ],
+    "encoded_section": "5E911000F765D4EE37755137F6B7AF43D4ECF2CB9002361BF7AEC5BEA9E0F9790E737E559951EB09254D0B4304A81E21FF7C9B463A8AF4D29B35B6B909C255286B707B85F028D277148C6A82877695FF915BD0602946C37F4AAF6C1C315B98",
+    "identity_type": "trusted",
+    "key_seed": "DD3AB1ADE4D985E6D6E67F2FE19DD6A75A9F5B4560CD3C05FAFF8A88C283AB3F",
+    "metadata_key": "D53DBD8613161F1527385E5F27FEE124",
+    "nonce": "D30A2D8CEFAB8C91E0B1799D",
+    "section_mic_hmac_key": "EDFA40290EB30E6669C551947A061A587843CCE47F4620E51ABA239AB79AA739",
+    "section_salt": "F765D4EE37755137F6B7AF43D4ECF2CB"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "C2FF97FBAB946B17D2BD0CA0712FA7DB",
+    "data_elements": [
+      {
+        "contents": "B0F9DF275D2D5A37C95B9CC9AB",
+        "de_type": 114
+      }
+    ],
+    "encoded_section": "44911000EB645DE61C9BB4C40BC585AABA223BAA9004B40CE842866C9F317B5C429C501392E13495FA18E48C34BDABF4152C8E98E90ED1AFD11BCABD4EF60CBA9347FB0120",
+    "identity_type": "provisioned",
+    "key_seed": "CAB68F8D497B54A0B25EE602EDC659B8C12F9E9E49EC8FC2C2487E8FA955E606",
+    "metadata_key": "CDCE54153DA53A283DBF35F0D456FBDF",
+    "nonce": "D7FA723581DFA37F8CD7F284",
+    "section_mic_hmac_key": "EECDEE6DCC125C40BD1002DFBAA77C8D5F16D6A9D152E6524A13E213F5CDA36A",
+    "section_salt": "EB645DE61C9BB4C40BC585AABA223BAA"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "BD5FFED9F8FF99EFD9276BAE103C8520",
+    "data_elements": [
+      {
+        "contents": "A9F592F1DCA1C71CCF03CC0310DF337C9A",
+        "de_type": 683
+      },
+      {
+        "contents": "E18AD6552B4C",
+        "de_type": 277
+      }
+    ],
+    "encoded_section": "52911000A798801A6B6BB3B3CE199A04C6D39C749002F4A793DDD478205BE47B9D5A3D02821CFECD82A205E596D82F1CA5F52DFD12D2F160C20332DD75B56CFF48AFC079B80AB8151D3FC020D71FF03A220692",
+    "identity_type": "trusted",
+    "key_seed": "9DA9C8ADB2F20D379E5C103E92D60D4ACC946AD0DC57B08E71A6CAF174DE27FD",
+    "metadata_key": "32044EF9F7B354E253E7206AC19172BC",
+    "nonce": "FD61DCBF349648F6BCAD5FF7",
+    "section_mic_hmac_key": "CEF13D97D862C57A7CC2ED89FA453B5F331A39B46EF3DAED677C6354FCF41A99",
+    "section_salt": "A798801A6B6BB3B3CE199A04C6D39C74"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "AB8FC3047B5D459C0FE3A8D32DA1D396",
+    "data_elements": [
+      {
+        "contents": "70E9867134E018A407BFFA11681FE66225551030",
+        "de_type": 694
+      }
+    ],
+    "encoded_section": "4C911000F340B13BAF10C096314AD12554265BA69004D98C2427C11201067AAA42C262F78315F0FBD68F03CA256E74CD74CC39E3B0399E41E8DC766AB30241498364F94C204BA6F1D12C66C752",
+    "identity_type": "provisioned",
+    "key_seed": "9E50221DB4D19E3E2E6E0D61F2FE4FD765B0AB77D795B8BF9DEE945C9258D90F",
+    "metadata_key": "E59AB0FB0471EDE9516038F2B830FC8D",
+    "nonce": "D547910B27183848271E093E",
+    "section_mic_hmac_key": "0C67958E203428FCD8B023C2C97BEFD62A64E72DC0F3F9078AE494DA235E4E80",
+    "section_salt": "F340B13BAF10C096314AD12554265BA6"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "5E155066D56083328A063FBD5AFBF1CE",
+    "data_elements": [
+      {
+        "contents": "B2E8AD80552E7D",
+        "de_type": 638
+      },
+      {
+        "contents": "EBA00821E05107D40E6B3CAB8E86027D497F34670527D1D6",
+        "de_type": 337
+      },
+      {
+        "contents": "549E6C2D1425",
+        "de_type": 826
+      }
+    ],
+    "encoded_section": "63911000A847D51D7D049D481D63F14F4A8D01099002FC5925A9E42B41321E56021A3D01157DC10E00CFF86A66638C7313814DF85E2E050AC4235DE9634416B34AAEC4419D9F50D49952742723228FA5CC8A8981C6E5E71904FE5FDAD5111C3C81C88E65",
+    "identity_type": "trusted",
+    "key_seed": "BE5027936C60695FF4EA18AC1F81078221C50A8C22C98F36C9A5877D369E4000",
+    "metadata_key": "1B43759002C9095970DB092A0086FECF",
+    "nonce": "CCA806551E3DE4A2C7015C4F",
+    "section_mic_hmac_key": "B8C388D47A6B125B3E637DBE4281824A170687F5D596510B94A95DFBD0420A5F",
+    "section_salt": "A847D51D7D049D481D63F14F4A8D0109"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "BA3816EAD76DAC246880A27F137D4CC2",
+    "data_elements": [
+      {
+        "contents": "3909A77A6295",
+        "de_type": 706
+      },
+      {
+        "contents": "A360F1",
+        "de_type": 563
+      },
+      {
+        "contents": "9B77E78C7CB64198BC2E5E676080B8652C88A3F1A71B5B62CC5B87",
+        "de_type": 496
+      },
+      {
+        "contents": "DD4080284EEF0BFBA61283376C7A",
+        "de_type": 129
+      },
+      {
+        "contents": "D3",
+        "de_type": 362
+      }
+    ],
+    "encoded_section": "7791100034A1CA42CE8D750265DD13710E6AA8F390024301C25BBA38E693BCF7834E08B62F4B4569EC8704250959F6EEE5971C2E25BB63EF65C1CA1B20917A433DAA9379ADB3773F463BC8A81A938CB83EA4E1BBF4CB1A4409D38E9511B4660A5C5458337CCBD98AA3E3A41D88C98ED0A9D8AE27F28206D0",
+    "identity_type": "trusted",
+    "key_seed": "7052FBAFC59D8ED636F51F254C3E8D2429604C2A58A3A0A27C54C2D83B4D4353",
+    "metadata_key": "0230CE096D5CBE15B55F65F270D0D411",
+    "nonce": "51FD2C7EBA743483252DA523",
+    "section_mic_hmac_key": "C1941723E73EE200B78932065A479E2380FBEE95082846C9FEEDA9D35C13E84E",
+    "section_salt": "34A1CA42CE8D750265DD13710E6AA8F3"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "3F7BAA4E9ADF649F68504D2BADC49E59",
+    "data_elements": [
+      {
+        "contents": "C7CD03AABE413B68D38D5528B8",
+        "de_type": 784
+      },
+      {
+        "contents": "BA87E5F9338B888B0ADCE8C80BFFE11D2467303431",
+        "de_type": 902
+      }
+    ],
+    "encoded_section": "5D911000D22DBB4DD6D440F26183BD13D0C3DF6A9004AA523D21ABBF464C0DD1166437AF2EE5159310A4E2C500A84A7824DA48C2DB85C9BC79B60DA83EE61EDFBA617008A7340431E5B7ECB19E7F140D6F0D7E22589A51AAE13A00780820",
+    "identity_type": "provisioned",
+    "key_seed": "1E2D99F50E548FC49590D5E6C066B4DC955EF40DDEE79167EC359E551048E1D1",
+    "metadata_key": "83D500F6D6106BC3C2B17AE408023E91",
+    "nonce": "4A9AED02A25AF38FB2E2E2F7",
+    "section_mic_hmac_key": "B29B84CFF65C3EE4616A502AC61C029C706D6B1EDD39EDF4D76EA5A84453BF5E",
+    "section_salt": "D22DBB4DD6D440F26183BD13D0C3DF6A"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "5BA9C6F943DAF529109F4B100F49D597",
+    "data_elements": [],
+    "encoded_section": "35911000C739C6227A353DD9B0EB277131E35DCF900469ED27AFB7C387B5475E150CD81AEC4884892FD73C27B796E7685D75C10A7F71",
+    "identity_type": "provisioned",
+    "key_seed": "1344FE8EFB2E14874FEB0571343BBA222C0FD904204BBA55ED94F0CD28C26FB7",
+    "metadata_key": "DB1BAE09B154172E09141BFFE4CF561D",
+    "nonce": "108AA9D4432E50BCDECCBD6C",
+    "section_mic_hmac_key": "2E20757E70673D996C6D58E403A0F87CDE24F7EE3038C17FE07D435B44093CD5",
+    "section_salt": "C739C6227A353DD9B0EB277131E35DCF"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "39CD401AE8F611D1651E0FDD59BA8F45",
+    "data_elements": [
+      {
+        "contents": "F4658B8BCCCF49B7AB79",
+        "de_type": 564
+      },
+      {
+        "contents": "C9F2A6B90E08CC",
+        "de_type": 988
+      },
+      {
+        "contents": "820BE5C34A2CC3E9",
+        "de_type": 870
+      },
+      {
+        "contents": "0F02CD73",
+        "de_type": 573
+      }
+    ],
+    "encoded_section": "5E911000E6CBCB218624EE2DC2DBABAB38F837769002F43D65267B214BF792B14655201C57B346BF233AEA5FD07FC5163FE7D1659F6A8DB901B503D26320F94D3B25EC2647F294BAD0748EEE05FE24F42CFA240062F74715FAF8CB6873C017",
+    "identity_type": "trusted",
+    "key_seed": "D72CDA23016D822CFE1E5294916DC83CF98EC2ADAE9121F80803386DC5CF6E78",
+    "metadata_key": "47001AE1B7E542147BF57D1C62F22F9E",
+    "nonce": "B677F8EEF05E5C4FD69BC645",
+    "section_mic_hmac_key": "CD8F4F64EB964FF7E0EFE036347DD0007A1A763B3001F02361CCC3A680C368FF",
+    "section_salt": "E6CBCB218624EE2DC2DBABAB38F83776"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "194ED59DCF4144A697CD1AD63E33A3B4",
+    "data_elements": [
+      {
+        "contents": "D5156EF7CAD1096B1EBE82E0",
+        "de_type": 777
+      }
+    ],
+    "encoded_section": "44911000032224758D14BA41AF92F6D88A501E2C9002C7D754757898C9E34AA838CDFBAF155B30084E02BE29B58C33ACC954F941842FC053B0ADD4CA9F3D3618EDBA2CDA81",
+    "identity_type": "trusted",
+    "key_seed": "F77600BA15BA4C8B396C8A0C3B8ABECF2B064A045E583BECD39116C572E7AD12",
+    "metadata_key": "DB7F42852277D6552C91815416FCBF72",
+    "nonce": "5A2D8E75D0B7634F06D7325A",
+    "section_mic_hmac_key": "862D13102D1431D175E2E8B6ED0D30D99C6E43EFED3FCA6D14CFD8AEA3BBE15B",
+    "section_salt": "032224758D14BA41AF92F6D88A501E2C"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "3337A6A8FC085CDCD20C3F46E78E7AB5",
+    "data_elements": [
+      {
+        "contents": "70D83068132E37C88B72A4EE79D173537E8F",
+        "de_type": 277
+      }
+    ],
+    "encoded_section": "4A91100013D9056CD070347F927B0F615DDFEC549004C7894D8A1B5608C1EC182CC0AB86375EEBFE92E0A4EF6878AAFBCB637738E21F4EA1C9F76D65EB4AE29BC86CE43C9F49859C66F2FB",
+    "identity_type": "provisioned",
+    "key_seed": "1507CD75F60429CB9E63C4D4A09FEAC92E772223D9E95838E8784AE1969F3E7A",
+    "metadata_key": "481E466127EF90D5C53596E8552EC52E",
+    "nonce": "F7A694ED8C95C9D7A755D82B",
+    "section_mic_hmac_key": "F7355B49456F6C57FE860ACCE4A711214D71D5F08B574E5BA37E165B52000A36",
+    "section_salt": "13D9056CD070347F927B0F615DDFEC54"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "FBB1328618CCD896CC70AF937CAE8281",
+    "data_elements": [
+      {
+        "contents": "467333809F3B",
+        "de_type": 952
+      },
+      {
+        "contents": "50CE12F4FF7B16B5643EF1C66368DF27DEDF3CEC9B24A3",
+        "de_type": 300
+      },
+      {
+        "contents": "08443858DD0A",
+        "de_type": 124
+      },
+      {
+        "contents": "E873C2B86B0C5A28624DBBFDE0AE3D22D03EABBF5BA71EAD",
+        "de_type": 448
+      },
+      {
+        "contents": "F1447D2F9281DBEE34476C48B22351E8F27CB782A10A29FA69E5ADCB3EBE",
+        "de_type": 399
+      }
+    ],
+    "encoded_section": "9C911000E33DCEF3193A00CA24590E41CB1607C79004439EFC4200D70EB58A7579DEBD80F04B5E8002A076C37A1D6510BA493BBD60569363F1FC3FC5A379DFEF1BDE620330DA1C8D06AB062EB96C92762FE17DD96776B35D13CA41488C1C83F2FFE0D0EF5262B632D856D10CB666762BA5CA742A0E9E95C9931779E319C7854ABE32BE0480D1FA754E1EEBEB1521C148FBF4A70F3185091CB04D57884A",
+    "identity_type": "provisioned",
+    "key_seed": "D30C0A924112C23C73BAC89EC03E7F9EB81E26916553AB6556C1240C20EC37B5",
+    "metadata_key": "308A7C574957C93A9B3E6CEA175AB263",
+    "nonce": "5D0946C2808A4C895626EF0B",
+    "section_mic_hmac_key": "8421457116D650DB88EB790AFB90AD99C53EFE2F875528CA25ADAA615F35D9CE",
+    "section_salt": "E33DCEF3193A00CA24590E41CB1607C7"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "E03DF6ABB87D6F554B5BEC78A7E8B0FF",
+    "data_elements": [
+      {
+        "contents": "B94A3080F25FE185C6C36E9A21405519666684E0847BF36DD115A926",
+        "de_type": 503
+      },
+      {
+        "contents": "",
+        "de_type": 415
+      }
+    ],
+    "encoded_section": "5791100094339CFAA454A5D2E977F38C35E2844D9002E15B4F8862B4A3E4D5FCDDEC6FC36567A1E9A6EC6E2CAAC28CC1C72CC81CB4E190AD8C8C1997EDA2A8391662DC44D4D5B818959ACC574FA1CF7E99645C4DF138B587",
+    "identity_type": "trusted",
+    "key_seed": "6B1BDAC7E669C8EF0847707AC2365C0D3864B31D6F13C088D4630CAE016B520F",
+    "metadata_key": "A50CC2AEFD3369D7D1DA0F0D0E537F19",
+    "nonce": "0C4819136C0E397ABDD9E354",
+    "section_mic_hmac_key": "A1FC278429196727FCF080260972AC6BAE2670C7383C2E297D1721428168F8C8",
+    "section_salt": "94339CFAA454A5D2E977F38C35E2844D"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "D79C9AC03BE4012DC980193BFD6B9844",
+    "data_elements": [],
+    "encoded_section": "35911000711C9EC86B8A068AF07B7FE5C85CC9D39004D54FC742603A383E4F153DBB7462EA99ACDCA8E5B667784D8DDB99FE360DABB7",
+    "identity_type": "provisioned",
+    "key_seed": "6FC2E3B1B4E9D1A97ADE86D36D78F377C5AF881DE70D981C8553DB86D830F617",
+    "metadata_key": "FFC3763940BF40D4C90C1C9F1A108195",
+    "nonce": "5FB63D89B5C5D0A2908B0A62",
+    "section_mic_hmac_key": "3F353E77278CAC09E16D0F86B6723510700210D5C8A73E6EEF04921FDDE689F1",
+    "section_salt": "711C9EC86B8A068AF07B7FE5C85CC9D3"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "CDD28EF3B99341DA9DE1C30C254E4430",
+    "data_elements": [
+      {
+        "contents": "99CE21E4964A6A7C14E6BF387369",
+        "de_type": 361
+      }
+    ],
+    "encoded_section": "46911000E9FF177F159C1A081403717389F200EA9004505BB69C948A0A4849FEA66E702DB7500BC961E0151EAD701AA1BA69C29A1E2B363678656DB7E72D4A98AA28A8894CE84B",
+    "identity_type": "provisioned",
+    "key_seed": "A2A3EBFA3847569FDC2713784A56CD71A1DEAABE14190EC0B86AF832EEBBDD59",
+    "metadata_key": "4432862698BC0A055C41E6219F86C655",
+    "nonce": "64C1217301A32C5B82B94358",
+    "section_mic_hmac_key": "C78D782F47CBEC0D0F0470DEC491B8808A6C08E71F5C325E0B359551AE38ACA4",
+    "section_salt": "E9FF177F159C1A081403717389F200EA"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "F2912200A19661C7B3256F2ED8D635E1",
+    "data_elements": [
+      {
+        "contents": "7321",
+        "de_type": 467
+      },
+      {
+        "contents": "",
+        "de_type": 743
+      },
+      {
+        "contents": "B58EA8527B77EB7DBF5CF9D10748D743DF6E8F37D8",
+        "de_type": 592
+      }
+    ],
+    "encoded_section": "5591100029FDA91C6673EE9F5E81041BE492146890026FF0F473F33B7DE9BFA2EA578382EBCBE4227D5570F2365433A6A4751FD10BA87D17552C9315E4ECA5A45D4EA4F20AC118D0CF61A0E0E49E90C9658FF4D1CC6E",
+    "identity_type": "trusted",
+    "key_seed": "FD7967CD290B0ACCA1FB012C6B17FADB54CC062A92E4E3F095B6221265606BC3",
+    "metadata_key": "7485DC8BD4A36F721112C2947751F068",
+    "nonce": "CF3A08D31D6DB3F85ABFAEFC",
+    "section_mic_hmac_key": "DE0AB90DC2E5437C201A96A529552965E9113AE01E76E225E906DB2C854C4F74",
+    "section_salt": "29FDA91C6673EE9F5E81041BE4921468"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "425A003859115F90D385DED38FC3138A",
+    "data_elements": [
+      {
+        "contents": "FF1E4283ACD7",
+        "de_type": 592
+      },
+      {
+        "contents": "FBE130FC8F63BD7012",
+        "de_type": 224
+      },
+      {
+        "contents": "7DEDF0BFF3CAAB7C6EEB72A4F7B906AC50A92F6E27F0C0BE5DA402D6E1",
+        "de_type": 740
+      },
+      {
+        "contents": "B3929F152C596C0BEF4233703F00B6621C1FF3A358F3C86DCFB16B72",
+        "de_type": 312
+      },
+      {
+        "contents": "0F5043C11D1C467CCDCB83DCE0BE43AC1D94DD5611",
+        "de_type": 891
+      }
+    ],
+    "encoded_section": "A1911000D3F3AF795C519468EFC23F73081ADE8E9001D17E0B80D5304A3B3078ABD224B53EEFF7BC4D82C69097FE3731085ADE750593E3267702827CB9CD176EE205CCE43458E2AED220AABE1587FF7FEEFA571B629E2A205D207044EA651809B9F5C9102C35E0368A0C22CEA27DAF899A987DD40352EDA04C8DDC7ABB3B6F279C7779162B472543393F37A9EE4A9A6F1E6ED3EC8E46551715F1F254A13E0604C71E",
+    "identity_type": "private",
+    "key_seed": "CBD5BDDC7DF1CF4DE8C67B8C5D8B3936E4370BD2FB8674BDD032DAB651935098",
+    "metadata_key": "85F9B7DC74148374E28EE18DEB067DDC",
+    "nonce": "64822DF95082DD9FAC3ABF49",
+    "section_mic_hmac_key": "DCE1733FCC2792C2FC5E717B60BF387A153B202A6FF51896D67849A33D700BCD",
+    "section_salt": "D3F3AF795C519468EFC23F73081ADE8E"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "7B1388703BC7E6A02BC3FD5ADA646469",
+    "data_elements": [
+      {
+        "contents": "7D62FA053E4F6358FFE38CC63265B5C631",
+        "de_type": 618
+      }
+    ],
+    "encoded_section": "499110000FB390BC9AC7F8533F693FC4F1C9BD6A9004BF6D2926E7409C8B991DDF484AF4F056C15513C85442EF6D8CA694BDCCDA70B5ED790BFBF4F026113C0E71CFDE64EAB674438D7A",
+    "identity_type": "provisioned",
+    "key_seed": "2B56B30BAF8A4D98B8D2D6DBBA920C7E58CC2A308BCBEBC2444E695CDB84DB9D",
+    "metadata_key": "F9B398674610A9887928F01BFF47348C",
+    "nonce": "CA88F80E008C85191F0368E2",
+    "section_mic_hmac_key": "61032327C90BA52D7AE489911943770F4ADC0CBFF70B3C1FCC6C8CCF684D11DE",
+    "section_salt": "0FB390BC9AC7F8533F693FC4F1C9BD6A"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "C131B7DDCCBF6B9D6697A73183BB9C2D",
+    "data_elements": [],
+    "encoded_section": "35911000D6A73EDFDB9C58847962A374CD39EF8E9004564B9DA3B33DE90A04DB8E09C9F74E39B3974D254418BD31BEDAF2079776203B",
+    "identity_type": "provisioned",
+    "key_seed": "619CDE7F5C7F48C2A728740F73ED8BED80DBC75A8F80A210B7787A3CA7D99894",
+    "metadata_key": "894C9EB0A0CD63439D7D38D98271886C",
+    "nonce": "988D2E9390677C9D60D253C7",
+    "section_mic_hmac_key": "B9ECF2780619E5BB483F7E67D47D5F6C453260B05B1C6C8B9DE3A1AA200E859E",
+    "section_salt": "D6A73EDFDB9C58847962A374CD39EF8E"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "471C247B67E71991EEA742A60395E761",
+    "data_elements": [],
+    "encoded_section": "35911000AF15F574B747192E9BD4F216FA1B4B7790046EBE5844F9C2B310D203E1F7B096319C81C5F10A0173AA6130BBFFDE2C335BA2",
+    "identity_type": "provisioned",
+    "key_seed": "AC53B58E3C5655CFC99E96EDA60B6356B91878707EBBB72C58B40372067F2654",
+    "metadata_key": "B3C7283A417F10365A58239881EA3357",
+    "nonce": "36F08B54F7A71C96317A1379",
+    "section_mic_hmac_key": "C873EDA6670390B6576A70192A1CC51663DC71878502344B4E89570B4DEB8CCB",
+    "section_salt": "AF15F574B747192E9BD4F216FA1B4B77"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "FE9F6FB58671E09A1A982B395153F5AA",
+    "data_elements": [
+      {
+        "contents": "3EF87149ABACBBE77A658C12AF57C5CC23549860",
+        "de_type": 886
+      },
+      {
+        "contents": "2FA53563",
+        "de_type": 266
+      },
+      {
+        "contents": "07",
+        "de_type": 504
+      },
+      {
+        "contents": "D174D239EA526214B9F3DFA561C2E67AEB39CB5E8E45006EF7",
+        "de_type": 727
+      }
+    ],
+    "encoded_section": "73911000996E2F8D9CA965F32EB4884BFF25EB659002555A82FC0FCC2977E3F47AE4C3ED20652D644EF87BA79F9C7A4D0CEFFF756F6F3EA21275055C45685B915A6CF3500FEB68C62D6DB778D6037719D08E1CE1A47A60BFA574B92458EA9853CA12C6085EDC5B3357767D033BB8BD858C6C45F4",
+    "identity_type": "trusted",
+    "key_seed": "797A0E23E450BD746F50A900291EDF12A427207E9345F1ECA7F247754D4E3778",
+    "metadata_key": "EE52E516F455BF41B9FE45B525300D80",
+    "nonce": "8032538D846F75783A371130",
+    "section_mic_hmac_key": "7B1519118268CFD05BE2529648964A31267DE90B31858A541E3B6FA5B5A5BA48",
+    "section_salt": "996E2F8D9CA965F32EB4884BFF25EB65"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "259CA266C07D24489E2320751FFACA50",
+    "data_elements": [
+      {
+        "contents": "1293957F338220C0DFCF99BB988D4B10A2",
+        "de_type": 588
+      },
+      {
+        "contents": "A66E4E117DE27225",
+        "de_type": 527
+      },
+      {
+        "contents": "A371A89597B5908CF70EB5CD70",
+        "de_type": 348
+      },
+      {
+        "contents": "EF8C4B",
+        "de_type": 893
+      }
+    ],
+    "encoded_section": "6A911000CE373177E0843767D3CBDE3EE36AF17190041C77A0D1B5A6D84E23CEA79D55760F47327519B09C00EF56BA591D952D09BF7649316ABEAA1DB8CBBA6C60CB9800B14CAA592DC6BE015529375E516D04DB3364041E1CD3C4545F053AE220D2AC5D9A1D8F15A18A5C",
+    "identity_type": "provisioned",
+    "key_seed": "0C8BB4BAD43C47257EFE360BD5D5DBE4896E84694141ED2BFEC0489578B217EC",
+    "metadata_key": "0F57379CD24569CF8D875802667F8018",
+    "nonce": "2537E78DBA5A7038AD729338",
+    "section_mic_hmac_key": "FC12ECFFC1AA17039E7B4D5671BD50D23427170DE99771C2560D50630AAB4FDC",
+    "section_salt": "CE373177E0843767D3CBDE3EE36AF171"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "75678439AC49152DF67381CC8EE0C97D",
+    "data_elements": [
+      {
+        "contents": "AAF565A6056E72F5701175",
+        "de_type": 900
+      },
+      {
+        "contents": "",
+        "de_type": 882
+      },
+      {
+        "contents": "1BE514ACA5DB37",
+        "de_type": 958
+      },
+      {
+        "contents": "4E37988B6C6BEA4DB361B0ABA2BB437B4AD2A36629E927A798C952DD",
+        "de_type": 994
+      },
+      {
+        "contents": "7A7051FB81E50D6E053F5485690060BB125BF0B564C25E8141F18A96",
+        "de_type": 502
+      }
+    ],
+    "encoded_section": "8E9110008CF745CF3EF5643BF08137D12572917690017A062343BD2CA81B100320E63F160D60C0E4FA222E7E8D2DDEEF54E8DB3E6F1FB8ED544B20CCC68B7325C41E13169FF9243D361927D8B8D70CB9BAD2BF8D144A7E7181AD04B286370859944B00B285A07237C9B7C06ECA02F133C1ADB18676DB418CB0F625548CEE8D1EC557723967A2DBE6B6FDE4266E810D",
+    "identity_type": "private",
+    "key_seed": "B2289A540886CA52A77D25F5130E9772E28FCE89F62ECC13606D63DCEE99DA3F",
+    "metadata_key": "982AE1A57B20C2386179D149B6EF266F",
+    "nonce": "80CD1289986D617F60412E98",
+    "section_mic_hmac_key": "7568EA434871461F5D6FC2DD811AFD04A037DDA922D703E0C62B59BE3FD8463B",
+    "section_salt": "8CF745CF3EF5643BF08137D125729176"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "7BB7CE9DD41A841A3D5A7EFD4C320177",
+    "data_elements": [
+      {
+        "contents": "AFD0D457BF0EA8EB58FB",
+        "de_type": 663
+      },
+      {
+        "contents": "2E252A7580FA1B62063666B69F3C6332E4B8F9707C7A21E9E02950D9C5",
+        "de_type": 817
+      },
+      {
+        "contents": "B60A909ED57A8DE3A7860923B92A7D5F6A8D",
+        "de_type": 800
+      },
+      {
+        "contents": "B6C8C14C3304DA",
+        "de_type": 874
+      },
+      {
+        "contents": "44359C8173B6FB9A92391A0EAE5C6CED3795595BF808E685FEA3800C",
+        "de_type": 41
+      }
+    ],
+    "encoded_section": "9F9110007C40D5971CAF5E56EA8BF03ACE6BD22D90029D30A51708C5EF060F6B2302BBAFF4C86DD795B8E6C90593DF259C7456F78C3C538BB0F15EDF17939A6C167B07648A62BBEDC503DBAE8861E36C6D465288149E9E99BC0514AE21D81EE7A68420BED4EC65D36A625CAB083EF8AA67EBBEAE047778D2B1A6DBF17FF25BC013B70582694E68E21E45C2537CE508A82751F5079DA2D24255E6800D7B48241B",
+    "identity_type": "trusted",
+    "key_seed": "ED15F635173F72E83E0FECAE6051EE847DC187452B21CD45FAB6695D6B46FB6A",
+    "metadata_key": "FA3B46AB691AAA00B09C9CD962E3811C",
+    "nonce": "40AB25BE3D15124FDD3852C2",
+    "section_mic_hmac_key": "EA130B96787E966323391209C412448E67E2554BFC79E1D0A4C1D8F28D29840C",
+    "section_salt": "7C40D5971CAF5E56EA8BF03ACE6BD22D"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "09E7B0FA69B5C2148852706F8C5F82BD",
+    "data_elements": [
+      {
+        "contents": "8C43E3E02909D0E210F56F35F3A53ABDB0",
+        "de_type": 153
+      },
+      {
+        "contents": "45",
+        "de_type": 747
+      },
+      {
+        "contents": "EABB820A273B4051E4",
+        "de_type": 653
+      },
+      {
+        "contents": "",
+        "de_type": 828
+      },
+      {
+        "contents": "640DA947E4BA04CC0C40BE9FA8DA6819E90ADFAB03675A24BC2D66E541",
+        "de_type": 780
+      }
+    ],
+    "encoded_section": "7C91100049432641BB8252194672F33CAECB191190047289517226E7FBBDE5818FD68CEAE9209FF8BAA41136E4807358253C75094411B689D301DC04E3516A85D40B21DF0700D7B92EC91D1EEA36287C7705A61105847DD7D8A428E634D74A99BE9AD6EAA73D38FE8F69CE611C48AB50D989C8E64F6E8E01A44AD1A5B2",
+    "identity_type": "provisioned",
+    "key_seed": "B169199CF07A1D54ED407BF64823FF86996412B093B8484B37834D8924EF93D4",
+    "metadata_key": "9E2A47BDDF6F1B9BEA356760D0F3E69C",
+    "nonce": "1BFD42F51287EB2A9F5E1F4A",
+    "section_mic_hmac_key": "3BC6B7E8D9F2574AFDB2475C7446292E50BD425D7C29210ACBB02926A8BF3446",
+    "section_salt": "49432641BB8252194672F33CAECB1911"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "3895442EB8CDC0F81A3C413255B87845",
+    "data_elements": [
+      {
+        "contents": "8A78F02365C12DF7959D96CD0DC8D50C000230D7500F2773BF92",
+        "de_type": 791
+      },
+      {
+        "contents": "6494FA1960D6F8",
+        "de_type": 709
+      },
+      {
+        "contents": "DF5B46AF34309403DE697850F22EB80BEB",
+        "de_type": 10
+      },
+      {
+        "contents": "5BB5A41FF36679",
+        "de_type": 284
+      }
+    ],
+    "encoded_section": "79911000543133A572BF9818330781F72566EBA39001945FCDA195E5DD57E890340E1145DDB3E7F29F61570FFC84C816A65BECF670144691E6DEED393F745D1C2FCA8F81A02EB783E970DFF3182D3A0DA22DC6046EFA6AA8311E1B7A9B9B3397B1C7F2DA32F5AF4A59698565FEB006903A3A2BB2AA774E65DDA3",
+    "identity_type": "private",
+    "key_seed": "41A397419E6A7A9BAC80625800C7C5CFC5A9E38D334423670A10C95B46385944",
+    "metadata_key": "6DF6268ABB94ED2B7572647828350E37",
+    "nonce": "3FFCA5B7F335F4080095078A",
+    "section_mic_hmac_key": "8E01172131A0E1AF5B2E800FBB4F6B941561F6A25326CCE3FF8549C87F059B75",
+    "section_salt": "543133A572BF9818330781F72566EBA3"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "FE335C4919EB054F5D03A0F3659BB5ED",
+    "data_elements": [],
+    "encoded_section": "35911000CF8C1FF97CECF7F829F6C8A71E77CD779004792DD541DC78082D871E1191261E74A3B8E20A809244EC191525C631BB404865",
+    "identity_type": "provisioned",
+    "key_seed": "354C47FE5F08043C0739F02C7C491A5CDC2ADEEABE5C95CA26EF56D3301F32F0",
+    "metadata_key": "0CBB7E1212820A68D7DA2C386E9CA368",
+    "nonce": "D0CF770C2DF7104179F8FEA3",
+    "section_mic_hmac_key": "D94E767398418969D4D7F94690A8BCBE3E5D7F85990B958A83FF465E723CA19B",
+    "section_salt": "CF8C1FF97CECF7F829F6C8A71E77CD77"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "ACD71592FCB1FD6C6D8ED46C23769315",
+    "data_elements": [
+      {
+        "contents": "C8A12CCC17EE72A7AB87A19A",
+        "de_type": 38
+      },
+      {
+        "contents": "2A0E63613F23C6B46B0C7FA2F22112381E62F5B1E9",
+        "de_type": 129
+      },
+      {
+        "contents": "80F038E4063FBDCD0612FE767119359E",
+        "de_type": 564
+      },
+      {
+        "contents": "4DA8FAC9B8994DB6",
+        "de_type": 3
+      }
+    ],
+    "encoded_section": "789110000F3ABCDAB5986222DDFCBBB8FF38566C900428609F59EC9E471AA93544E7103F645AC96E4FAFC86CDD5CDA58B682D3FFFA015B6578E6C2E1C21AA406B7175401D3FCE1ABBE909A2A50C0804D4E1A8CAE5E27B1BED0823246EA34539ADC01915175F58B47E44680672B72EF54451DD632977507326C",
+    "identity_type": "provisioned",
+    "key_seed": "23DFBD6B52C3B59B254DB98D406E8479C25020C1DFA630A8BD2C89F88080C615",
+    "metadata_key": "379389FFDDE6252B5130D231D63472DD",
+    "nonce": "15F7BCC7074470D3F1CFB56D",
+    "section_mic_hmac_key": "BBD2B93E7B2477438E34C1205D0BCE0B365A7BC302EDB5CF0F82B6894603E24D",
+    "section_salt": "0F3ABCDAB5986222DDFCBBB8FF38566C"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "BF15896C0DB200DAE1115AC614084DA2",
+    "data_elements": [
+      {
+        "contents": "B874CE053E51E004F52641A7CFB2D3B0FD74B7DBE178776A671A0DAE2F",
+        "de_type": 302
+      },
+      {
+        "contents": "913E81800F04456267ABA9E4782859A4E1C7F9BA7E9F",
+        "de_type": 115
+      },
+      {
+        "contents": "803EF3051156701AB4EDAEF5FCB355594348E96537E5EC0571BE99",
+        "de_type": 353
+      },
+      {
+        "contents": "CE22",
+        "de_type": 749
+      },
+      {
+        "contents": "8BF83F936CA560AF25B8E0FD2C",
+        "de_type": 140
+      }
+    ],
+    "encoded_section": "A09110000909CE4451ADA9FEAE94AFC32F74DA8C9002500BEFA6439AF0E094408096D11836FF233FD696C45B67FC5FE377CA37A7156D30C7747C04731ED487D679E79747AEAB7B9264C1F02FF4B3B56A6282FF1BA99927C50B6CB9A5AD8300C58F0DA8D189F7B891E3165A3951B9587FCEAD411774E3C191ED51D02878659572425B45D0098395AC66421C05B5B7984A66B82115AB609678A5B2E8B109BB1DE8AE",
+    "identity_type": "trusted",
+    "key_seed": "D32BF06FA8E93B413768C8F0CD5422EC87FD4F07A83471240BA220E36153FA02",
+    "metadata_key": "1FE225A34E0798FF526E8B55F10AD9AC",
+    "nonce": "B54225F9D30F237B635A51E4",
+    "section_mic_hmac_key": "CE683F20EFFEBF4F062DA3EEDB52DDE50B32C8D63BF2B8A5551EDDD354940500",
+    "section_salt": "0909CE4451ADA9FEAE94AFC32F74DA8C"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "5C0FF3E5206B0B714A43B06D56DA4CD8",
+    "data_elements": [
+      {
+        "contents": "B83154F8BF3A58B9F7F622486850E19C9798FF7B0D2B57DF1ADB",
+        "de_type": 604
+      },
+      {
+        "contents": "2855D0AD4AA6C16ABB392AA9EFD8A0973235E86129F8CD652F1F",
+        "de_type": 362
+      },
+      {
+        "contents": "8744051612F79A9F05D48FEEF1F276B6039B4EA57B",
+        "de_type": 639
+      }
+    ],
+    "encoded_section": "87911000DB30A3E8AB8EB0FFE1A3C1C32107E97F900229702D3456ED474EB3634E1123F78A5EE68795E469986D32E140F7768372A49544565B77EDC858130D8F31885D21142238E6160BFBC4AA1E2C16617029B098225727DBE761B39D8C4F3A9B81DD79320B786B8A73AB12495BDCA873416489EFA679DBCF4D890CB24953E193DC729A7FB13CD7",
+    "identity_type": "trusted",
+    "key_seed": "CBD84DE224729EC23993EC958BA5EC191C55984C7565A37C202C66BC2F496DC5",
+    "metadata_key": "E2C1CC17E5DA3035D3A4A9D67B696A8F",
+    "nonce": "1769E6807F6DD41EED99365E",
+    "section_mic_hmac_key": "3B760F5F10A764D965E928C2EC75BF3C185BC1E60F1BC25E3A4F2A23B08275C9",
+    "section_salt": "DB30A3E8AB8EB0FFE1A3C1C32107E97F"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "EF4525C9E148E35CE5B6B1ED3EC7F397",
+    "data_elements": [],
+    "encoded_section": "35911000F37AF80B78106073DEE5B3E89CBE817690015242E1B8F8D5B0AD1A98BB81C0B7AA6E2F08129AA0AC99057C4EF93D009FACBD",
+    "identity_type": "private",
+    "key_seed": "45E271D048743BAF708F32EAC2E0C37B0AD50DC468268F45FA5A00F273710BC8",
+    "metadata_key": "D5BB4FEA17C7E817338B14C4D01F95AA",
+    "nonce": "9EB99045CCBB3943C3C85689",
+    "section_mic_hmac_key": "94142F9B2D08B819B2681AA5A8532AA239FA5D248DE1400308218E1171A19B2E",
+    "section_salt": "F37AF80B78106073DEE5B3E89CBE8176"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "D7B12DF79375EAD42C400EC4B32C845F",
+    "data_elements": [
+      {
+        "contents": "5EC3",
+        "de_type": 27
+      },
+      {
+        "contents": "9E9931D907110614B32CD6406AD1F2EB87A10F09B7E8E787112EED",
+        "de_type": 473
+      },
+      {
+        "contents": "D832A59D",
+        "de_type": 739
+      },
+      {
+        "contents": "F9A4AB6E8C79AA9949",
+        "de_type": 326
+      },
+      {
+        "contents": "DA3460FC544F1F95",
+        "de_type": 983
+      }
+    ],
+    "encoded_section": "759110009631F8139C4DBED9E68452694DDFC8839004ECDED2D0BE3DF39682EB8C2218A08B11479557857995B61401E0F13ACAAD078B464F1BC371BF9374A4AC12E24E92258EB2020E02A85BBB90568AB3BF976B36BECEC7BA4D0925816AD13747288FA4FF6F5533C22E342606A7B9929FA0A5672FAB",
+    "identity_type": "provisioned",
+    "key_seed": "869972ED54E5B68EF1C466213667435B7C08EBDDFB74F685ED7E16CADB6BD315",
+    "metadata_key": "4B943DF47FA8A1A5ED1983F6BA680BF1",
+    "nonce": "0A885C98D19D59923D1D4CE8",
+    "section_mic_hmac_key": "0FF1627C891D82AD29699A9382972D0D134EC708C71ABBB25F117C50E7564E7A",
+    "section_salt": "9631F8139C4DBED9E68452694DDFC883"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "D99D1918B0ECB9895C5079AC3708F8DB",
+    "data_elements": [
+      {
+        "contents": "9504B53F3858406A21CDB1A8E6E4726EE54D26EF868A1CD0FB3FB6",
+        "de_type": 354
+      },
+      {
+        "contents": "",
+        "de_type": 219
+      },
+      {
+        "contents": "E68CCEB0AEEAD509B8D936D690940E628CB3446E7A5AD4",
+        "de_type": 570
+      },
+      {
+        "contents": "27C89F3446D81FA865168C6942",
+        "de_type": 663
+      },
+      {
+        "contents": "A7B1EAF81C107EE58AC4433F9B2F9194A1C5B3B31F7DBD775E8C",
+        "de_type": 854
+      }
+    ],
+    "encoded_section": "9D9110007E27BC504F56BB2720C62A72226B8C369004EF6CDC81805C1A1B8C3689B047217487EF72A690D9EE8B7DB36DE15EBAF6746CD77D0E9C979344B10045AA56EFEC9ACE8DCB27C444163CEFE58CD7DB8F33F3BFB3F34483F7EDA5D0BDF0DFDCD63AD61AC00E548B445F480EE3F2B5F7CBC8646CB6C916CEBB660725C6735F7105F9FBFA765E51EE242D53E97F79F4FD2151590529DE523296437B2B",
+    "identity_type": "provisioned",
+    "key_seed": "C50E2225963721E5B6EFCE5B1A228B14BDD2BA34AA67E7225550B081BAD88726",
+    "metadata_key": "062D3B665FE311167539CBC5BEAB9BFE",
+    "nonce": "E35AE35D209210B3880DAAA4",
+    "section_mic_hmac_key": "80C63B2ACF7CF9FAC9852D0208BD4797B5DCDEF5A3F4BA561D07FD2ABEED9F03",
+    "section_salt": "7E27BC504F56BB2720C62A72226B8C36"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "905119285260089FF9BE8FF6CC825E02",
+    "data_elements": [
+      {
+        "contents": "C7773F175A4EE4",
+        "de_type": 167
+      }
+    ],
+    "encoded_section": "3F9110002F823378B9F59BBDE54978A162E849E09001CA8F84780BF04A3EA8FBE518141707B75121CDAFB8F0E4A24D354D5775AD46CD6E698AD77AC066B5250F",
+    "identity_type": "private",
+    "key_seed": "4D8C6CD25657A64D6A4FC29AA77B921362224AA73F33A03B48A547BAE062F80F",
+    "metadata_key": "0E77A2EF879199FCDB210192BA8F61BD",
+    "nonce": "71FCB2AE5A7E75EA035E4C2F",
+    "section_mic_hmac_key": "4C314CD5B4BA1DA13BA002B6F8B5B23B83E52A3151E8D3188B18A9116D393FB5",
+    "section_salt": "2F823378B9F59BBDE54978A162E849E0"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "58242E8A9A5B025E720AA40BA1CB864D",
+    "data_elements": [
+      {
+        "contents": "786DF190FA",
+        "de_type": 989
+      },
+      {
+        "contents": "C35CCE593DFC7F1B67D9FDB6DEB00A",
+        "de_type": 8
+      },
+      {
+        "contents": "CD5807FFDB0B16362997F91B45C3F1",
+        "de_type": 736
+      },
+      {
+        "contents": "AE7B1B9F94",
+        "de_type": 485
+      }
+    ],
+    "encoded_section": "6891100064EDA38990FF5640000A6F909B9B4C339004B2D2CAA61055C3A3B5B633A6864D112D20D55DD235B254BD1B4DDE1ED246B422D549F6ED9EBA4E61B144AE199F41786257AFABFF2D09F5ED1D551AA90897424C7DE78D9F4211352DFC23D15FA49BAF2AA3160C",
+    "identity_type": "provisioned",
+    "key_seed": "930ABBE8D4AA0392A66E624A958254C607E161BDB8F63C4DB39E049C200AA63B",
+    "metadata_key": "06190C656B704517A79EBE4A713C90D1",
+    "nonce": "08746932375AFD8D733B8CCF",
+    "section_mic_hmac_key": "E9018DBA2F5D458EBF7F765F5E0A291DC789BF054BDD7F21ABB08F3C9CE0C068",
+    "section_salt": "64EDA38990FF5640000A6F909B9B4C33"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "2E74FA5A2A52433667B756AB26FCD187",
+    "data_elements": [
+      {
+        "contents": "A60BC355C90F28BC4939E07D1CE8FDA9F3BFBC190219B42A0396EBA4F4C0",
+        "de_type": 59
+      },
+      {
+        "contents": "5D789F74C3EDE4BC72D2E79DE9AAF8",
+        "de_type": 990
+      }
+    ],
+    "encoded_section": "6791100074C764F6E930524EF16015CE7D9861A090016D3B7274B511B5F2C9F5A18052F777C5F86FA997CE3BC22C9C6C9A5CA085DBE6488B2A78C6A73EC270656AEACCB923F608AE77568EA51827AE96FF9E6CE819A78E0A4EB2C5CA3B4970BD181F397E3E98EE7B",
+    "identity_type": "private",
+    "key_seed": "2AF41D8404581C2831B893C7DB59D544B64CFB736BFABC81A01C1875066EC279",
+    "metadata_key": "CAAFC39835637CF21D4B75303E2CC3AA",
+    "nonce": "22231C84688BAF0FB9538C9F",
+    "section_mic_hmac_key": "795A1998284D2DFE1A0E29D8118E10D830AFE527DC341E2654B88F2C1EB1B06A",
+    "section_salt": "74C764F6E930524EF16015CE7D9861A0"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "7B2C7A448A3450294EDC49709E51BA60",
+    "data_elements": [
+      {
+        "contents": "E1CF16D6B5287453B1",
+        "de_type": 956
+      }
+    ],
+    "encoded_section": "4191100052105E2C85C91460D02A73EEF05F82709002CFD75D43FD7EEBFBB78A62325C09B1C96593C0ED6CA278F49AF34804167F948B99611B4C536AE40E3B74243E",
+    "identity_type": "trusted",
+    "key_seed": "E685FFAC5E3BAAF679C7991522FB5A6CEC3F100597766673D2746868D929D360",
+    "metadata_key": "6E6DBC6DD5DC80171A5B0DCD03F1BD90",
+    "nonce": "5677F857950960AC98F055B4",
+    "section_mic_hmac_key": "F47EFE70DD21595388F4747DC599502C15BDE2199335DF51DE8F50A3E6858EE0",
+    "section_salt": "52105E2C85C91460D02A73EEF05F8270"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "640ED142DA551CC82073E01140C9F6FF",
+    "data_elements": [
+      {
+        "contents": "CC848267E64EE36BD16459",
+        "de_type": 1
+      },
+      {
+        "contents": "13C03AE9514CEEA49B840E14C3D8FABB",
+        "de_type": 287
+      }
+    ],
+    "encoded_section": "55911000B89F5B7D2D1679457B14537AA5D43AB79001E4AE76D2D7376A024CFAE9AF27D5D51D4409BBE5B1F0ADCE4EA97CA14545F965091703432E7238CD345852880A893E18B154A85EC8F2B0C80B28C20376224BC8",
+    "identity_type": "private",
+    "key_seed": "757A5313F590A0A3CB7880514176C98223D8D89B6C366F0A9C3E614A95667FD3",
+    "metadata_key": "8E48AB97578B936E9DEF574317F5643A",
+    "nonce": "2F4D288A2F3C29654024DF64",
+    "section_mic_hmac_key": "87973F076C0DA1706FBFA208CF3680032F72EFD30A1F35DBDD720FEDB5A73FAA",
+    "section_salt": "B89F5B7D2D1679457B14537AA5D43AB7"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "25B113A142425E28DBF10262674CCB91",
+    "data_elements": [
+      {
+        "contents": "2DC3DFB78F9FEDA6140EFFF49EA5CDB1587B3B",
+        "de_type": 38
+      }
+    ],
+    "encoded_section": "4A911000BD6BA0CD360D3ECEAC02350FFA2287AE90048C31FDA2D808BABB89DEDDC545DEDF43A15DC84FBAF251F8553C3ADA164CD855C3392347333E6ED803F1B35A04CB2DE8491B0AD57C",
+    "identity_type": "provisioned",
+    "key_seed": "B94AF2DE34B622260AB6EB5A28897241EF07FD726FF6B46B09AB855B74BCCE21",
+    "metadata_key": "12188B3AAA6203B3D7B7FFF944B28C03",
+    "nonce": "27D5AA6EB9343720C99B48A4",
+    "section_mic_hmac_key": "F36CE020CBD605AB0D5A58EEFC5B13041B3E8EE37FCD23DA8768D05B7E969217",
+    "section_salt": "BD6BA0CD360D3ECEAC02350FFA2287AE"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "86BEC41ABB2C0615E293D625F5A5CC21",
+    "data_elements": [
+      {
+        "contents": "796D434C2A64E6542A6E8A182C29A6C0A0D10CFBE5",
+        "de_type": 697
+      },
+      {
+        "contents": "B166F37A451DE048DFFE08768C22CC9E16161DE1FC111BE153E74567A3AF",
+        "de_type": 786
+      },
+      {
+        "contents": "15F72C03BCD436FB515626CC4D45B007465E01F99F141A06C2452D08C031",
+        "de_type": 75
+      }
+    ],
+    "encoded_section": "8E911000D67B70722D003E7D47A47A965DDC27EA9002BC3C5974EFF692C78D91B4BC70B183AC34AB08D6774A186DB2EAE6518C429EF6EE80C853B3F36AFF69463401AB265A7841C55974F8307B351ACD0AFC676A7F8E3B6785354E8C8341AC1D159B3449674AB3FC1664DC6A98CBE7B365D5F29CCD0945B37F3DA5B15711A1554A8D20DE4E9C36F89AE8CDC0529F18",
+    "identity_type": "trusted",
+    "key_seed": "8D0769C53264F0E56940C303DC296FD0FAC215BB638670FDE74C2D254EC351B6",
+    "metadata_key": "6E402856AB9B61F6C85EE44427DC3B78",
+    "nonce": "76315884D2C7B9F90A9E40BF",
+    "section_mic_hmac_key": "E87538BF29EE50BAE15333A281438C3A5776A0544CC3AB1EF84612ED7D59D40D",
+    "section_salt": "D67B70722D003E7D47A47A965DDC27EA"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "F22B4181441945D8B70988072189C682",
+    "data_elements": [],
+    "encoded_section": "35911000324C90A945FF9A8AECA1AC7F71C9B7FB900106FABFF1B5D76193C4196B7CE59C3AAA8D2FD16CCFA6CF09E8C226BD7604AC56",
+    "identity_type": "private",
+    "key_seed": "BD5DE9F03A2FAA422C470AFC4F151615F326CBE3E60828C0ECF68CF1215BB760",
+    "metadata_key": "60FEAF935A8ADA1C80FECDDB8F4290A8",
+    "nonce": "74FF9C6FC9B74DBC58D80EEC",
+    "section_mic_hmac_key": "83F5E26CDD98C91D084CD544BAC0EB6C79F3B79B388575973C75F76C66671427",
+    "section_salt": "324C90A945FF9A8AECA1AC7F71C9B7FB"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "48543F7CDFE13F94F1FF50E76088C2AE",
+    "data_elements": [
+      {
+        "contents": "9AB990FC7EF63FC213AE08BC81C35EEF8AAE8DF403E17839D9F25C30C7CA",
+        "de_type": 731
+      },
+      {
+        "contents": "2D33ADC55687CC6D516326D3083A01DF79F7C20347BE2BA49726",
+        "de_type": 652
+      }
+    ],
+    "encoded_section": "7391100008FF6026C41A8392B3401F690B0FA3E3900456BD090474095981D8D630D9AC342F4DBB5653D8CC96BB884B960AAF63A142323A4C41B7B287DE61D6724BAE3BD0C9692357BAB8A84265443B452CC632A26228824ED3B278FEA3E89BAB1F849DC2D59B92F7923D886E39B641A0824C5754",
+    "identity_type": "provisioned",
+    "key_seed": "80D21E28838910DF3318A81884493AD8B3156E22B9EC94DF8E440963D1E6BB0E",
+    "metadata_key": "F588CA28D3A30ADB81E4CF0F154FC445",
+    "nonce": "E3C19711F434B76AB66ED99E",
+    "section_mic_hmac_key": "5C093723FBC9061053CBE302658A97A8641724524D38B88FA576563153E43944",
+    "section_salt": "08FF6026C41A8392B3401F690B0FA3E3"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "EC4C02761EBCE92561D9876B86277ABD",
+    "data_elements": [],
+    "encoded_section": "35911000812086DBDE127B30D0A49750706EFA7090023EAC44AC52CC19411C1EB8A3B054D3A4DA29BA7AB1F48B2B66D53A0E89BEEA81",
+    "identity_type": "trusted",
+    "key_seed": "F905BB1C2C53DE72F94DF4E6D2B06BFB56BE0B64FB9388FA64D0532ECBB2EA91",
+    "metadata_key": "3FA740734AB4B08F591E7A1678684145",
+    "nonce": "7DFB4025DEE53AAB242382E4",
+    "section_mic_hmac_key": "C606528062B1FC77C27EEF4A4C3C2DE18672B5334A4505036F0F7D8E3FED343A",
+    "section_salt": "812086DBDE127B30D0A49750706EFA70"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "08BF72906B4385228E63E345F18A05C0",
+    "data_elements": [
+      {
+        "contents": "9EC2961EB5315850F02F",
+        "de_type": 332
+      },
+      {
+        "contents": "75A55F90EBBF",
+        "de_type": 89
+      },
+      {
+        "contents": "5B1B5253D80289F8F01BE72974EEBDC3ED",
+        "de_type": 204
+      }
+    ],
+    "encoded_section": "5E9110007EAF5B0AF95F689E81F61A051D316FD49002DB318ECF2B751DB740797728EA96E14ADCE0B2BB27EBFC6D45312379906D6494808D7E9C8BA6242B4A02C4C23223112D77B94131BB9BE739661753C158001AF9CD0EDF73B899AA266F",
+    "identity_type": "trusted",
+    "key_seed": "EB8F85BE87A0A9347B3CBECE969B008A57FFEF6E4E8A95F734893EE710B27FE7",
+    "metadata_key": "825022A58B49C829B9B524E12AF0E160",
+    "nonce": "B5143876982CFC9AC88966E4",
+    "section_mic_hmac_key": "F649D8AF765E2E31FB870480932F4952FFCA19301F2FAFCBDB992928268BC8D5",
+    "section_salt": "7EAF5B0AF95F689E81F61A051D316FD4"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "6FA3188C366D18061138ECE126A97BFA",
+    "data_elements": [],
+    "encoded_section": "359110006B869584D8B9A2617A3911586E08679290028283D6FFC57D5D5FC3690502E95413F8BF29DF7EA841527BBBE6DE1C918E5B35",
+    "identity_type": "trusted",
+    "key_seed": "4ABD1D1549B74AEECA657499EDEFA7701D724FF427142DFA2ACA1A087455E339",
+    "metadata_key": "32152EC7E3BD86FB1D19DB1136E934EC",
+    "nonce": "5F7C76D24DCFE9E61B909C2D",
+    "section_mic_hmac_key": "89CC3C25CDCE4A6D36EDABF94C225087C455DA885AA113254AB3A71DAB0F27E4",
+    "section_salt": "6B869584D8B9A2617A3911586E086792"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "46C102A2CFEB44FD44236234AC618374",
+    "data_elements": [
+      {
+        "contents": "2DAED2D919",
+        "de_type": 752
+      },
+      {
+        "contents": "69642A6B9FA86810",
+        "de_type": 907
+      },
+      {
+        "contents": "C9133E66C06507782EFCA12CFD2255DD2AC3CCFE568E5B",
+        "de_type": 75
+      },
+      {
+        "contents": "11917BC9DB942E",
+        "de_type": 253
+      },
+      {
+        "contents": "B772136AF949D06B3C74EECB6A2877B73140CF7BD459",
+        "de_type": 741
+      }
+    ],
+    "encoded_section": "84911000D5B533CD04983822338C7E4679ABF0069004CB79ABFEA568754DF58A73D97993AE327F22F6EA434A49AA5D12110FB08F88A77C3EA795B49DFE542046BE6FF89B46146088D770CA8D4E221D73BEECB978974A7E3A2B29C0FE7002230356778F0AB6BBFC45279E08D93657B5D857EE9915A3343FDFAD5ED96C886E225EE77AABAB71",
+    "identity_type": "provisioned",
+    "key_seed": "B45EA904C8AD8040870C0C5996E7D6474109D43A1ED77CFD4EC5A0909ED8537D",
+    "metadata_key": "F27F824E7A676B87F008B914C697F731",
+    "nonce": "A9D31F3FC180A643BFD2393B",
+    "section_mic_hmac_key": "C57B68D19F0C0467792E61C6129CAEFC41C9BC017CFDBF3ECECFE053247C86B4",
+    "section_salt": "D5B533CD04983822338C7E4679ABF006"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "E76311EA2FA2BD5E23ADDD81EEB7035C",
+    "data_elements": [
+      {
+        "contents": "F0A613ACBCA74BE6A2B1EBFD40C52E0D66E5AB04",
+        "de_type": 294
+      }
+    ],
+    "encoded_section": "4C911000CC0BB7E46499CF0636B26F05408554E39004020E9465725DE7A884C5B175C90015562B2F9B106F9F1AEC608425109ECAC0513AD32D14354CE552859514849D19D6BB59CE2D0EF9A0F9",
+    "identity_type": "provisioned",
+    "key_seed": "CC9A75CC75BB1D230A75AE87B6AA6D14E08ECD864C90DFA2C144DA62AA2FDA4F",
+    "metadata_key": "D1FA24F308946E26486C02AB69CACDFF",
+    "nonce": "DDA1727B363F44B3A00AC548",
+    "section_mic_hmac_key": "1FFE447BB7A8331E0AB04BD9E920759CE433094711AAE085EED90F11AAB04DB9",
+    "section_salt": "CC0BB7E46499CF0636B26F05408554E3"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "E670DF92DE550C7D16A47FF544AEB0A6",
+    "data_elements": [
+      {
+        "contents": "5297CB087EF89FF30B412ED7FBFE9B",
+        "de_type": 536
+      },
+      {
+        "contents": "C6C348BA415CB959EE2B51B43DAF200076890AD49B044F5F847728",
+        "de_type": 555
+      }
+    ],
+    "encoded_section": "65911000FAF0B973AAED0ADA284F65A67CC775A6900191A4765553BDA369F32677FF10F57E0793B4FC72165819EB2E38975021A78E8367C4BC9A94E846F6A04ACCE516355A0A93938147C6908509D1599D7EA96A377B7ECB31F81BA98D8AA01CED9617C410D6",
+    "identity_type": "private",
+    "key_seed": "238046E9C80693E551BF4F3E7E563FDB8FC7EF319A4E3405D603DAA10BFA0AF2",
+    "metadata_key": "BB080335533CFA2002C3FB861236215D",
+    "nonce": "30A968C64C6D236C78A202D7",
+    "section_mic_hmac_key": "20309013BDC66CF400D5E221109AB10CF0E742555D8713BBB332648E3897E847",
+    "section_salt": "FAF0B973AAED0ADA284F65A67CC775A6"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "236A98706211AAF9BE9FF085882ACD8E",
+    "data_elements": [
+      {
+        "contents": "6D6AC5C8256B7859373EB86A68E7F9",
+        "de_type": 748
+      },
+      {
+        "contents": "ED06337DA3ACC11B7BD86A0D315DA7A4EF",
+        "de_type": 703
+      },
+      {
+        "contents": "1639315FF6AAAA4B",
+        "de_type": 855
+      },
+      {
+        "contents": "785FD18ABF9AEDED7D3D407144A7BCE2F34444",
+        "de_type": 738
+      }
+    ],
+    "encoded_section": "7C911000F1B2D3FF697FEA61F1D24313BA24DFB09004BA73F0D4A7915365382ABF284BBB970F4F4FD77A6B3F48CE433EDF5679495A60CC803BACE3039072420D0FE9C1CBB529280C72864F31A3523FE98BBD39AC48E3A47524E57BC2259AD362901721E8EB8FE1F563C6C3EFF3374A277553D9D41732D44A4CB97BFE1F",
+    "identity_type": "provisioned",
+    "key_seed": "2D8D09BB3E1DFAB0611039A1BAF74D5258343FA303332251F86EA7D1FCCBA814",
+    "metadata_key": "158E2E60C7F45BB9D6487B4BB3984DEE",
+    "nonce": "9592919D3E310674BFDC2E9E",
+    "section_mic_hmac_key": "69D008503467933362AFA9AAEB534D22839A8946A0A2AC717553CD50ECBD5D44",
+    "section_salt": "F1B2D3FF697FEA61F1D24313BA24DFB0"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "52A4E397E30CD9CC7494F1FB77E608AA",
+    "data_elements": [
+      {
+        "contents": "8C3E52853DF5586EBD",
+        "de_type": 413
+      }
+    ],
+    "encoded_section": "41911000BC844E7B944BEB5585FAAB4B71443FE990044489F0D699085E6ECDBC45D5A180550578468BF5FCAF01E7AAFC8612A47B5B8BB81A82E844D8EF05E4B223B5",
+    "identity_type": "provisioned",
+    "key_seed": "4975391685B7E23B969FD2EAF9ADAFFDA9E54345F6C978691019DFE171CF1AEE",
+    "metadata_key": "ABBCF6913AF3396D4698A3D3ED9C844C",
+    "nonce": "6DBC8A54F98C20F59D424BBD",
+    "section_mic_hmac_key": "7DA38D6F5976FA186530C3259FC16951302C45E1A182A5B856778AC15D261A63",
+    "section_salt": "BC844E7B944BEB5585FAAB4B71443FE9"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "81775F391E97501F10A06ACF2C1E1E8A",
+    "data_elements": [
+      {
+        "contents": "E0E9135120FB76345D7F8649D99DCF21082B",
+        "de_type": 209
+      },
+      {
+        "contents": "A8930F2B30AD1020C7719732557A115B73",
+        "de_type": 702
+      },
+      {
+        "contents": "8F573C102D81EAD9DC",
+        "de_type": 608
+      }
+    ],
+    "encoded_section": "6A9110005135798EFB48BFB42A2542E5EC84F8BE90024EDE7FBED7BE6DB4BF57CCAF6B79B42AD2AE82EF17209B1118B1B9BC30E3DC7EE47CC74BE402A40786226E6662CF3C582AECFEDB6BD9FDD87CD780D34B7CC7708714ABD30875A945E6592FC178421FE73B85293353",
+    "identity_type": "trusted",
+    "key_seed": "CEB5046E0E41EA2D087D6BB2584FC8F5AC4AE70C3F262AFA2FE83BEFC6A7F96C",
+    "metadata_key": "09F8FB1D817845D11CE0DD441FB6E6B5",
+    "nonce": "70D102E7E612845E49DC9A32",
+    "section_mic_hmac_key": "600AF01CC5117CB4AC58D49609CA3235EA0ADAC22B68D6FEA6973397744E7100",
+    "section_salt": "5135798EFB48BFB42A2542E5EC84F8BE"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "F3293976BEB4E1EA2904909A54A90D0B",
+    "data_elements": [
+      {
+        "contents": "AEA9748A963B21DDDC0B",
+        "de_type": 82
+      }
+    ],
+    "encoded_section": "41911000CCFD0A49D64FB8913DB3533CD842618F90020B1F2BE6DFF4647003A4CD20BEC2045A9BC3557018B6D8D1DDF5BAF68CBB0043BFE6F7F3A16914E72473574C",
+    "identity_type": "trusted",
+    "key_seed": "F7AB19164021C53FD3F406A4F4617A396FBB0B2083680D6A70F0FA93ACE0F337",
+    "metadata_key": "43CAC734B4E59E6410B789DCA22E05B6",
+    "nonce": "14B2E4D0A4BE88CD3AEEB9FF",
+    "section_mic_hmac_key": "6D816BF43B74326FE8A2A88B37CE383F8B46D0C126454936586F027EC60C489D",
+    "section_salt": "CCFD0A49D64FB8913DB3533CD842618F"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "375B33A2656E245BB1ECD330174673A4",
+    "data_elements": [
+      {
+        "contents": "54A8E89BD5EEA62D46C39CEE1D60ED4733976A",
+        "de_type": 596
+      },
+      {
+        "contents": "",
+        "de_type": 599
+      },
+      {
+        "contents": "05286DB66919D9F031C704E925CBF68E6B8E",
+        "de_type": 766
+      },
+      {
+        "contents": "95B7B05F119963240B933C337C6FA9B6",
+        "de_type": 336
+      }
+    ],
+    "encoded_section": "76911000AB7FA706A14892CDC9CED6E9C13C028D9002D26550BE730945C1CA0C220A658856FA14430A49D45BCEEDE10DD1CAFD274BE5FD828116B8E3E3D71A3F679486A30D832958AD1B2E1415BF7F111BF4F6CCF94634C904B46F5FB2482F8520F7EA10061C018B6C24891AFE186B8144EFB4981D1E79",
+    "identity_type": "trusted",
+    "key_seed": "D93D2A387F132BE81714405D487F9323099CD7089ED80FE06DBD5F19B9479AC4",
+    "metadata_key": "C249909E8C874421F56B5D5FD883F6D0",
+    "nonce": "3608D422560EBDF764ECC44F",
+    "section_mic_hmac_key": "ED742AAFE3D39273AC51EC4E94A7E5AD3EFE52D36E61F96ACD446F2A9C77618C",
+    "section_salt": "AB7FA706A14892CDC9CED6E9C13C028D"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "9911435E27099CC033ADA0B809A9BA61",
+    "data_elements": [],
+    "encoded_section": "35911000DB8B02B57082EB58CC198556EBED435E9004A72315469AD264409CF53387374629C4683B4C7D198CCFFA95ABA332D9EAD095",
+    "identity_type": "provisioned",
+    "key_seed": "DE3FF3C256080ACA31DCE848A0EF6DE573A584AC3FDF00011207692CBFC71AED",
+    "metadata_key": "A59DB751175865B4DB9CE9F5791D48E2",
+    "nonce": "22CEE3D3F35609F5B04F2681",
+    "section_mic_hmac_key": "88118CAA46862E8B57E83C23387C88F232BF22E5772D80E9EC15B75DA160F25F",
+    "section_salt": "DB8B02B57082EB58CC198556EBED435E"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "78237E429DEB7FF64A0CF0390C6B5AB5",
+    "data_elements": [],
+    "encoded_section": "3591100092F6C10DFBB105F88D53E46103584A369001CEBC52E442697CE7C0439351600F775089647E153AA0A20B8E0446CF188523A9",
+    "identity_type": "private",
+    "key_seed": "3343E7EAA3F48E39F01E5E8BDD5082E6DC4FA5A75E4FA570E717EDECAA9D26C2",
+    "metadata_key": "65D3B6A2568AE0425F06C2E1A5F75F61",
+    "nonce": "B44EB10C11D792A4474CD363",
+    "section_mic_hmac_key": "FA58129EF913C31E017D2583EF3C53A6921C4C05F1F46DFAA29644E1AC8D13F1",
+    "section_salt": "92F6C10DFBB105F88D53E46103584A36"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "718BB6207F09ABF1767C88964995A316",
+    "data_elements": [
+      {
+        "contents": "41B733343BE9A40195965F3BE53A9E8DA772F91D",
+        "de_type": 38
+      },
+      {
+        "contents": "CB88998C5B3ADC6834216F607769",
+        "de_type": 644
+      },
+      {
+        "contents": "E2974A19DE611A27FF0AF9D27042B8073563FD2119C828CE",
+        "de_type": 587
+      },
+      {
+        "contents": "4FE69B",
+        "de_type": 58
+      },
+      {
+        "contents": "16A152105C8A1CF879C2838EA6CF4CC9",
+        "de_type": 494
+      }
+    ],
+    "encoded_section": "8F91100054D79FCDA215B6D37188275A6D71B49C9002E7ED4C98D0689465F88315C5E1E4CB1C994AF90E6DB73F55D62E14F5F6102EAEC722DD4B819BA652CDA67523910FBF4AD135A678F170DF68642B9A3E651817C280D56CB333C492B7B7C6EEC2718D16DEE888255E9470E50548CFDD8EF3FA1BE96BE3FC9206AF1E806AB72D7CEB2556A84DED90BFB26C7473D6A3",
+    "identity_type": "trusted",
+    "key_seed": "87AF0A342940CCE0D8A7C250CEC581D677776EFE684FE7A461538D306F79595F",
+    "metadata_key": "ADC6D21008E6C6F9C6140DD2CA7A2D74",
+    "nonce": "DEA185B8030CB125ACCD1991",
+    "section_mic_hmac_key": "0B96048E575A8DDE941E0BFCC9AF72673B9E59D0EEE1D410EA3B5D7059D8CE43",
+    "section_salt": "54D79FCDA215B6D37188275A6D71B49C"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "AD321D407A23FC1F3DEA4AFBFCE666D8",
+    "data_elements": [
+      {
+        "contents": "DE6102C7908322A68E36094307406EFE",
+        "de_type": 130
+      },
+      {
+        "contents": "D811C6749B",
+        "de_type": 979
+      }
+    ],
+    "encoded_section": "50911000EEF15DD154F1CBB12B876AB7E4C28C519001BADA4DD563CC46E682BE16A078D5AE079DB587A78C9BD6BB37621F9F8EA5B7FB490D6857D3C3D3BCCABDF00E85438DB6227C002BFA7291D54E5FF9",
+    "identity_type": "private",
+    "key_seed": "9B702205F66C701BAE43D0EDDF8C3EAD92C80A3A8583C3397E7A3371758011EF",
+    "metadata_key": "FF0BEBFC2C42168A47B3474D3439772F",
+    "nonce": "D225BF85D21A4C34FE6B6AA8",
+    "section_mic_hmac_key": "9CE75F27AC9E99BEA41587BFFB701F9D59793C68127183BA3BA38D219DBFDD1F",
+    "section_salt": "EEF15DD154F1CBB12B876AB7E4C28C51"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "D62FF5F858D26914C62F3C93ABD608D0",
+    "data_elements": [
+      {
+        "contents": "72FFD6C3F4B1B90771A08D281085",
+        "de_type": 817
+      },
+      {
+        "contents": "A4F94F7BEFD75D29A53C2ACDC0A908C2F5AA0768",
+        "de_type": 618
+      },
+      {
+        "contents": "0FBBAC5329C023",
+        "de_type": 729
+      }
+    ],
+    "encoded_section": "6791100097FF92E30C6B6E08B416A150E2099C2C9004A34006E38EDAD68F7BBA8294E12E9F92DF7A91259AFC5B813BE7A4FD8601959912E5B2CFBACA99A2460EC2CC0F6DE999F47A7580B9F0CEA2E0F882836864E82CEC3DF6F890269AABF65852CB9CF026D85452",
+    "identity_type": "provisioned",
+    "key_seed": "393F3DAA73636DE22AF63B869FFC970C1DAE302372E51F35BAC421F3C354B666",
+    "metadata_key": "CA8F91CB3DA7A5A37E33F851D93EBEAF",
+    "nonce": "A521F5DAA92BF1C1654569ED",
+    "section_mic_hmac_key": "67AADDFA3C1E18B279906DB7987D29EDFEA643D678FA1AB4987A0A1D610005B0",
+    "section_salt": "97FF92E30C6B6E08B416A150E2099C2C"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "EF85681E26EF87C8D2A1A3EE56FEAD2A",
+    "data_elements": [
+      {
+        "contents": "C24BDBD7E3697F223F1621217A9C36DC9394EC33",
+        "de_type": 335
+      },
+      {
+        "contents": "C1",
+        "de_type": 14
+      },
+      {
+        "contents": "E4231F2308EB41",
+        "de_type": 902
+      }
+    ],
+    "encoded_section": "5891100037E9D4686030FBAC57D3FE42D92B096490014DBC20227A7388E74D0961E8674691D101607D944F8AAD12C950188603894DA02D5FA3698A54DC40598F44313F297CDCCBC1DC14CD32D267267747B0B125D91A89A557",
+    "identity_type": "private",
+    "key_seed": "4A289EAEC36BE20656071FE87F8A55155D8A893815038B9ABCBAD3E72DB0C8AC",
+    "metadata_key": "C0450DFCC6AB17837C56EEDBE57D62A8",
+    "nonce": "A9FA4AB4C0929CF2CDEDDF34",
+    "section_mic_hmac_key": "8D45B9467DF17FE0943F155851C70CCEA0555BD59453503FF6A861F9011EF853",
+    "section_salt": "37E9D4686030FBAC57D3FE42D92B0964"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "BAC1BE39B5BE69F29396EF5CC41402B9",
+    "data_elements": [
+      {
+        "contents": "AF9A279790C0EB79F07F700C1CED8CAF60B72F",
+        "de_type": 101
+      },
+      {
+        "contents": "14F153F824",
+        "de_type": 463
+      }
+    ],
+    "encoded_section": "529110008ED27B5A64F8584EE798DA971BB3890290023D54202AA267D540AD159401DD2CC11E1F387FC4F90C9BA19D810C095D415CDF08EEC637B9CB2DF1259229CB2F02F894D63404B428C9AA33BDA7507601",
+    "identity_type": "trusted",
+    "key_seed": "9AAF4E2D596A7B4CA21DF9312AFD43A63FA8FA727DD60273072C4C4C0D472E3C",
+    "metadata_key": "5F68164865C2DFB852C81375C3D3D5E6",
+    "nonce": "4F23D7E91CB8E22BD3712FC1",
+    "section_mic_hmac_key": "0BF5C29B16B353256F793BBB4F1C8C52597D3F1C2EFA9D61EA46CDFDE84797C7",
+    "section_salt": "8ED27B5A64F8584EE798DA971BB38902"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "68A9C01E867B79A4CF5C2B9B0A5AF91C",
+    "data_elements": [
+      {
+        "contents": "AE6F1048CD",
+        "de_type": 505
+      },
+      {
+        "contents": "092DCE72E9C606136151791CACA850F34040EB06480609",
+        "de_type": 524
+      }
+    ],
+    "encoded_section": "57911000E8C86E9B41DF4F3B937952F49BC6738B900232D03070C79D80DDE8C1E0999B4434DD06A23FCF22CCD7DCA29E5074665F99831137706D16C0200B8B4598365543AD4BD647A682DD8D226897C1EB8F43C443DBD6F8",
+    "identity_type": "trusted",
+    "key_seed": "580ACE8B6CDE7180BD4AD61F486AB6AF65F04174A9E10C982CA1BE480E27085B",
+    "metadata_key": "E850D26EF14BBB1E7B3D1A5F64A50353",
+    "nonce": "2DD94E374A847EE945DCDEDE",
+    "section_mic_hmac_key": "597E20CCB0FF2807C1B8217F21115FB753F67303B79DC679094D7105C5EE8A16",
+    "section_salt": "E8C86E9B41DF4F3B937952F49BC6738B"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "CC5210E1AA93721F6A77C03B0F1460F9",
+    "data_elements": [
+      {
+        "contents": "31B8D3BD3DAD8D7EA787EBBAAD32",
+        "de_type": 105
+      },
+      {
+        "contents": "52CD1D16C9C10292F325BD",
+        "de_type": 679
+      },
+      {
+        "contents": "9AA553097F55186B693EF9F811255D4F9E33012D",
+        "de_type": 70
+      }
+    ],
+    "encoded_section": "69911000B0B06E5BCBFB897F867D1A98860C88819001968D65E73BFDB4A9C8D0CBCFD94F0AFF86A172DBA041C9B4819B60AE15C84ABF10167323F72BCE73348C948BADCACA60B31C01DF54A03A41FFA1CB83B1724E34BA74D43D17956AEBD6F5E9411F6D801A30C545F5",
+    "identity_type": "private",
+    "key_seed": "BB1C67EC1220D0A1CD718868B6DFF75A45F535D79358AD7417E98F584A520850",
+    "metadata_key": "5E11BC73AFA36ABB0FA9D177F470772C",
+    "nonce": "10C1E9BEAA44D044A6A52DA8",
+    "section_mic_hmac_key": "8F47EFD6981006EC099088AA42864E13399300C42A22D67FE00540745BC434D7",
+    "section_salt": "B0B06E5BCBFB897F867D1A98860C8881"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "636CF984B555E396E1ABE06B45A0DC9A",
+    "data_elements": [
+      {
+        "contents": "26124A707B14872CE3CCA803962D1E8E",
+        "de_type": 356
+      },
+      {
+        "contents": "5BE121EE1535F68B384B2048",
+        "de_type": 191
+      }
+    ],
+    "encoded_section": "5791100091150893740502FC52626D5C1FE1D97B9004D692F649B521B08446966B43B3A0E2853FC66A18FD044B2D9FA619580671AF9A093BC9C29AC2285193C8377E231E4E378A0EB12B69F309BBED412881C06054211F79",
+    "identity_type": "provisioned",
+    "key_seed": "9F10722920D514FCD00582382A3D744B7513089C4ED4F0F762E62F079817EADA",
+    "metadata_key": "CED359A792C26F42583568633F362936",
+    "nonce": "AC3820DF4711726BD92A95E3",
+    "section_mic_hmac_key": "73CFEDBC2C7DCC199778704504D8406E69DEF3850E9E556E65264FA5C0F72049",
+    "section_salt": "91150893740502FC52626D5C1FE1D97B"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "BB72B0AF2C215797791F4813246EEAAA",
+    "data_elements": [
+      {
+        "contents": "B560FB4055782B29002780C1C79A92C3AB5C94BBFE1D30",
+        "de_type": 704
+      },
+      {
+        "contents": "D9D67201EFBBC989BC73CB82CE5A54BA30270BCBCD16C3D918C46C8FBA",
+        "de_type": 759
+      }
+    ],
+    "encoded_section": "6F911000C4FC89ADEB54417C2145D31AFE590E67900479850A6176A11C5005C1B816084BBBC8E1B96A5E84FA83927CFE3F85B13CA15C78C4E487AF94942D9527A4EE40FCE291F8A4076FF3285DBC70EB2AE12076384B309C9DB593EF97E5952F1A878E9357C5215EC4CA7382A07821CE",
+    "identity_type": "provisioned",
+    "key_seed": "4F5BCFCBCE781EBD9353546FEFDAB4123548E63980050C1FB2FEBE745EFDEFFC",
+    "metadata_key": "18CE930F2687B1C72063C2B147ACBD0C",
+    "nonce": "09C9C088DEE34D597B83255B",
+    "section_mic_hmac_key": "3BD3CBD58CE94F98266BE570B2897F0C0CDBC8900AFB76E0699315F0132C8D5E",
+    "section_salt": "C4FC89ADEB54417C2145D31AFE590E67"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "9BBC179545C4C8661833BFEFE25E4478",
+    "data_elements": [],
+    "encoded_section": "3591100018CA84AD571B443615D490F5A1AB791E900287C25FBD0A1AA47A74D7960394D449914CF5F364A1DBBFEC57B7447A38AD0152",
+    "identity_type": "trusted",
+    "key_seed": "0B5BD58A7DB4DAB27EAB2B71CE802751442437C426E163735196EBDD9EEC98A4",
+    "metadata_key": "21E42F417AA748179A50406477891087",
+    "nonce": "22A25ECB407B6DC73A8BCE1F",
+    "section_mic_hmac_key": "35857C6B5BFBA20A9012E81B452C95D5F62B7D429C9F250F6FC8C96EEFDAD338",
+    "section_salt": "18CA84AD571B443615D490F5A1AB791E"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "29912DF85FEE4E2802F3CC758240C118",
+    "data_elements": [
+      {
+        "contents": "20EC521C467D60C62519AFEFFAB2989DA34F609D7348CB0648",
+        "de_type": 881
+      },
+      {
+        "contents": "7CDFF605A49D2327C04C9523E972",
+        "de_type": 339
+      }
+    ],
+    "encoded_section": "6291100096874E513BB028EA8D3147662E898C929004510A31F7EEE22BBAA1A676F50D87B736D02CF8AD40A2FC01F73D61050AF86BDD26889F66B6C7811E98013B10549BA699C5B0FF6B97BC95CA461512A91C6CD748A847E8A06250284F89D8768282",
+    "identity_type": "provisioned",
+    "key_seed": "BDBB0B95B3F933B91F05CC9ECED4DD468E3174109DEB7A4F0783C40F39E20761",
+    "metadata_key": "A97FB828B07A9D327D5567152634D0D4",
+    "nonce": "F8BD43493933BD842C97F146",
+    "section_mic_hmac_key": "32031801363FBE1A50288A6A9B0756EAA7CC2D653CA0B2AAF345CC13884DD2CE",
+    "section_salt": "96874E513BB028EA8D3147662E898C92"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "5D161A5D965DE072EC72B7EAAC295469",
+    "data_elements": [
+      {
+        "contents": "2499FFB9C498F2",
+        "de_type": 884
+      },
+      {
+        "contents": "941AFF758DD7D3B66EF8321874A7834A7E7F51BB284122405EE0",
+        "de_type": 463
+      },
+      {
+        "contents": "74C7CF3DF00CA35B",
+        "de_type": 435
+      },
+      {
+        "contents": "E07BAF5D40CA3AE208E6BDAFF05B4F9E0112559EC495",
+        "de_type": 2
+      },
+      {
+        "contents": "58E1ADF13A6F2383CCDE989D6CEB02EE47F1F3",
+        "de_type": 396
+      }
+    ],
+    "encoded_section": "9591100066B9B5E27075D2EAFB9B4E2E4159CA659002025D80ECE442E6A3D7F5DF17BEE9E8AA64D2904E04D09898D04EEB323B64C9AC0DC4F9FA55ECD3B7D58DEB3D9FD72FE1D8A213CCD6DFE89D053B106AE0F7A41844294DDAFB6E22A35F6F5A1251CAE0829609A463D966DC5C2BAEBD166B166CEBF5E3471EE3EAE4DFB5A594C0C64ECDBB00D301299F9782000628F11738B95006",
+    "identity_type": "trusted",
+    "key_seed": "5AEE4779ADDC954FAABA8C967AF32BAF74DA2E3790FF77750F20A10C300C66E9",
+    "metadata_key": "5819227E20E94984AF636A055E65EDF1",
+    "nonce": "627AF9F6E80A568473F0D41B",
+    "section_mic_hmac_key": "97182D1562F3DAC1911CBE791388036D5826EFC5BD2C9B7729555BC39D6300B9",
+    "section_salt": "66B9B5E27075D2EAFB9B4E2E4159CA65"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "8EF15FC5E15B86747BD2390DFD8D8FF4",
+    "data_elements": [
+      {
+        "contents": "5F99290FC42275AC698492E2263094B80F692233DB0DF8644B",
+        "de_type": 845
+      }
+    ],
+    "encoded_section": "51911000474A64D6CC5E1B015636E3CAF848E92D90029797772EBCF190224F6B5193FC0573554FD8D1B7C2B8DFB0C2344080EC5DE79A14650738DB3E375AB1F2416A0E091F2DADD7710C6731F9D2F4BC1ACF",
+    "identity_type": "trusted",
+    "key_seed": "3807E53D0E4A6A3C131FE2D9A12F3A17C9A81E206DD2403424D079986548F36D",
+    "metadata_key": "649BF41A962338BDCAFB3D6EFB39F30C",
+    "nonce": "11EFABF3B773890FD705DC45",
+    "section_mic_hmac_key": "BC9DE8BEFBFBFCEED8132F0E74A7FAE68CCF1F3259B42670C074355E57771EC6",
+    "section_salt": "474A64D6CC5E1B015636E3CAF848E92D"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "D87966196010EEDAE937B516E77C110B",
+    "data_elements": [
+      {
+        "contents": "D72414FDE144",
+        "de_type": 693
+      },
+      {
+        "contents": "89B82594CDEB3253E8BE54402F4EB47427FA",
+        "de_type": 139
+      },
+      {
+        "contents": "59F5D560DCB71A1A9AB340270EFCCC791F60ED3E5C16C9",
+        "de_type": 361
+      },
+      {
+        "contents": "5E8317B7EF6B2304CE733AF9AA4303",
+        "de_type": 347
+      },
+      {
+        "contents": "6B46914ACC05AC520CD86D64D95EF8B0E3B52684AC19C7",
+        "de_type": 217
+      }
+    ],
+    "encoded_section": "99911000550E90767EA297708A890EB778F86F42900194407433CAFDBC096242CBB630D9EFF2428967372331DA563029EE56D7736DB1C6B0F4171C6AACC70B165A1D7079B7213A484AC56B751F106EA890EE1F44B1DD84B03340FF64DE0D86EDF6E3C266B6E29F973D7DA9EA80DA5504E23FA9DEFB13DF26D97D8AC03B102233E7A400716212664A1A66A04360810288591BBC53D82755D0B7F4",
+    "identity_type": "private",
+    "key_seed": "5E128361F047F517713A5E7A9FBDFCBB8A65431B0FD54CEA276C15AA38738D00",
+    "metadata_key": "6219FC039F504E84C27E0C30A7922D50",
+    "nonce": "219ED909CC34B1C57EB81FED",
+    "section_mic_hmac_key": "80144AD3F7356F4D118216C943ADE3CE6A4C1CA1AC36CCEFD81AF75222A0C277",
+    "section_salt": "550E90767EA297708A890EB778F86F42"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "ED1872743ABF1CE1C54B5924D8B523C9",
+    "data_elements": [
+      {
+        "contents": "1EFD8A5E7097C3EA66A30F3F6EC8",
+        "de_type": 8
+      },
+      {
+        "contents": "70AA1FBCAEAF957AF9C114",
+        "de_type": 741
+      },
+      {
+        "contents": "727C6DA4BC51406D03",
+        "de_type": 628
+      },
+      {
+        "contents": "C80BCC953AFBD14D003F9C18",
+        "de_type": 905
+      },
+      {
+        "contents": "B3EC6F94CA366939C934FA84052FD4",
+        "de_type": 357
+      }
+    ],
+    "encoded_section": "8091100002C4DA8D1B21BAE28B3F9A0EB5693E8F900493FCDCCF43EBF7EF19D4476026AE4F5241FE0162977FB70B8E376CEE57BC2A866306A3787F61E88D954EAF7060BCE7A3023C7683CD7EB4F9D15A14147EAF9FE39A0BF9863BCFFEF8F4F2E8AE52F06651E06E94F809CE32E06DC15434A3A3D7AF4E42BBF88EB53E9197D489",
+    "identity_type": "provisioned",
+    "key_seed": "3DBF4DD4A42D6FE76568BF430BC73BC5772762941753D48A76134021D17123C7",
+    "metadata_key": "B6B17BEBEA55CFA5B610047C599FDCB4",
+    "nonce": "9E2B3708BC702B007B2B49E8",
+    "section_mic_hmac_key": "F0E7F12DF72F3EF40DE46181DD19D3E673AEE02757529C53F3F6DF9F8AAEF663",
+    "section_salt": "02C4DA8D1B21BAE28B3F9A0EB5693E8F"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "74300AD75CB40E2D6CC26BF7C3EE29E6",
+    "data_elements": [
+      {
+        "contents": "506CEBFF222CD35C949137A3A47D6FAD9620",
+        "de_type": 439
+      }
+    ],
+    "encoded_section": "4A9110007816B4ED58791237D1053F88CD8B7B859001D1EBFF70B960E79E6DFA6A89359F991816C253BB5B09AA2E98748E101D8BB2D18D4043847E353F85C82A586B92D5E7F0DC03E6CD14",
+    "identity_type": "private",
+    "key_seed": "8CE98EB290087656B04E4996CBF4007E92E653CAE71AF06D479B96D45B83447B",
+    "metadata_key": "81A2696BD7D21903EE2D63D2C4C44E4C",
+    "nonce": "CDCBF3E9E0E3EA002A004AFE",
+    "section_mic_hmac_key": "48966839EED698298B8544D0FABBB3E8009D9D67CE88CEB6F29B1FBFAEFB7C47",
+    "section_salt": "7816B4ED58791237D1053F88CD8B7B85"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "256EC73F1FAF17723C9B5C6062749FF7",
+    "data_elements": [],
+    "encoded_section": "359110007897264056B8ED625680B2F5124C30A890045D4D46423E9067DF2DFD36F3718282724748E10C6E16DA2C039F9C30D9FF6054",
+    "identity_type": "provisioned",
+    "key_seed": "D458DDE6E939B3C03B8CA27BE7D624D70F3777FB31C8278152C3C0161269A228",
+    "metadata_key": "76BCF4EB8C12033E8BF0534B8A6AAF4A",
+    "nonce": "1451BFC0DA68DCB2E0FCB937",
+    "section_mic_hmac_key": "DDAF42B3C3AC34F3E8F2C882568213E333A91F0A049E79AF52E98669048CA81A",
+    "section_salt": "7897264056B8ED625680B2F5124C30A8"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "1599363CAC85444B80B2BD6F32B44889",
+    "data_elements": [],
+    "encoded_section": "35911000D8624D1EC90B225B457D22AF6D8B4F799004990761D38053D068BBE94F66F9968E14BB793A96B05BA0F4716C0A7814D331B0",
+    "identity_type": "provisioned",
+    "key_seed": "7CF0C36D0E587661503F8F70B8F3A06AEA7B6352E843387F353CA8355EB92ADB",
+    "metadata_key": "A54230D1BAD378D531DB91F517D11568",
+    "nonce": "D25B10F1899F9A9C56648C1E",
+    "section_mic_hmac_key": "C1A07E6C0ECA629D1ABB6CF5D6175F97E97637756561930B256BB6891012A830",
+    "section_salt": "D8624D1EC90B225B457D22AF6D8B4F79"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "3EB28DFBFF8CB955CC44F68B0085F70E",
+    "data_elements": [
+      {
+        "contents": "8511547C881A7F7036FA2009F904BF",
+        "de_type": 42
+      },
+      {
+        "contents": "7C4430D434907C017DACFD336A161E70C10815B6",
+        "de_type": 284
+      },
+      {
+        "contents": "15C1124EF76C2D9BB61C",
+        "de_type": 132
+      },
+      {
+        "contents": "3E3B0BFE93189B50",
+        "de_type": 694
+      }
+    ],
+    "encoded_section": "759110007F2CB662B15FBA6D7C18AB52889B266D9004CB724FEF84FE55FCB1A2B571C77EE17C930A5F6606F40EC38F4241A6B287A8B1EB443F7C013B34B3113D193F884B120F0AA415452FFAAA0B40B78DD80A09858F2068537D2AC8F8DF750509B9D52A4B9B39F10C2CFC42A9B90FC762945BC31CAD",
+    "identity_type": "provisioned",
+    "key_seed": "547C965E115345BADE7FA439398A1618870F0392671DEDE9944FCC693DBE32B4",
+    "metadata_key": "C55B065D5B03C633C7546FFE3043FB8B",
+    "nonce": "888A5C195BCC1327C7DA9E7A",
+    "section_mic_hmac_key": "F672CB3E86B8E87B727CB0814C7AE096C3E7C7EE2398D1581847C26951486BBA",
+    "section_salt": "7F2CB662B15FBA6D7C18AB52889B266D"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "A952EA928E55FAE45B612EFBB2E92897",
+    "data_elements": [
+      {
+        "contents": "A39AD60114B4E470CD6E5B1981F6D94FDF21E386A957B3",
+        "de_type": 11
+      },
+      {
+        "contents": "30309360211C7E94BC8B3692BCE38EE888ECF197C594C3D07D",
+        "de_type": 10
+      },
+      {
+        "contents": "66DF42C0A9CC3385053676451C23276C1CB169D74DDB1C46A6EDE2C89707",
+        "de_type": 610
+      },
+      {
+        "contents": "550E675F587E",
+        "de_type": 554
+      }
+    ],
+    "encoded_section": "939110008F8202EF37CD727B74948F6A5205650390045048FB340FCBE272C4D667BD6691E08084C56D24D168EE7C6B3AD228DF31ADD89B1627C7511ADF1E12882ACECB1C05B49539F332C01F0C2778F039A5727864A5FA46F9030820D06D961123CBDED94746017E6B2224D43BB304D590F12343258BDCF84F691600B58C18025956190BD91D359B1654D5862590962E89FC3541",
+    "identity_type": "provisioned",
+    "key_seed": "D75311C9FD54732B0D1D58E8C13D69582675936BC2D4B948E4DA8B8FD4E4EC19",
+    "metadata_key": "44A8ED043D7B7A04048C04871D04BF28",
+    "nonce": "39A11C1233C3887D0FE2FF95",
+    "section_mic_hmac_key": "0370E5CD2CA4944C5633BDB505F471ED4ABD6F9E0803BD57669BF1A096FBFAF4",
+    "section_salt": "8F8202EF37CD727B74948F6A52056503"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "375CC4495D0E6037B4A269A5A4EA302C",
+    "data_elements": [
+      {
+        "contents": "E51613F10B7423784CB6E3FF2E58",
+        "de_type": 683
+      },
+      {
+        "contents": "ECBD79DDFA8130DCDEF28AD2AF40C6A8DBB16B2972",
+        "de_type": 264
+      },
+      {
+        "contents": "9FD18CDBD2FC1FBAF9B317FF280956",
+        "de_type": 617
+      },
+      {
+        "contents": "8871908BB20E8F",
+        "de_type": 918
+      },
+      {
+        "contents": "DD8DA6F96A3751",
+        "de_type": 721
+      }
+    ],
+    "encoded_section": "84911000C7A3432633031353A946F0684CFCFEBD90012BD99B1A635B8CB01DDBBDB46AFE8742B053F93A65C75293797C523784EAE07488134AE32476E0F698D440C3A0A389DB48B6846E2D42A89584741285C09301225752A1A5C8152E010337BBA3ECB3C15D6893C2B2CEAB1FB452D50E5990EA1C9B007C08642769AF82551F3FFA44040B",
+    "identity_type": "private",
+    "key_seed": "D948351CA86C11F94DFA31FC2B86C7EBD32251E770E243B287D5C03630A7A4B4",
+    "metadata_key": "0F37FFFBB8B3BF85BE6B4A5D7AE60C37",
+    "nonce": "5A8953196DB0C6B086052AC9",
+    "section_mic_hmac_key": "6A6CE54F7E0FCB42716786C56294DB3FF4839464EB6D6DDE3037015BF42591CD",
+    "section_salt": "C7A3432633031353A946F0684CFCFEBD"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "2276BD761EED06699E8A4C1B005226C8",
+    "data_elements": [
+      {
+        "contents": "09D7C7411219259A530E4207",
+        "de_type": 202
+      },
+      {
+        "contents": "E6206D70CB69117E5B0CFC6484E5A9F6E6",
+        "de_type": 335
+      },
+      {
+        "contents": "124F723ABCB0F46AC2D9904E49F29C72F6A37A6F1C",
+        "de_type": 173
+      },
+      {
+        "contents": "F03BE2BA870E9DDDE0A20C37F7C3C513418FC8595CC2D9",
+        "de_type": 162
+      }
+    ],
+    "encoded_section": "8A9110006FD81C4F4977A61EA77802E4AE331B1B90044590EF69F794BECCA20B04E1A5794A8FE0BE6B353BAE140B8A37594A011AA936FCD209E03D522D1C147E321147E9B33735F2CA413B5C945091EC1AB92537B781F26714EAB879BF33E801BE58488C11306DD259B63B1F05FC146871978B17CACF8AEF88D021782A6DB7112D4C930FCA66626E69140B",
+    "identity_type": "provisioned",
+    "key_seed": "B3E1C7E5933E243B2457C3493F6C62D88640DF85591E1A370EBB5ED1A7E87DDE",
+    "metadata_key": "584C3B455D31A6EB73CA6286A6D1D677",
+    "nonce": "7C59A6FBC27521B60FDE3D85",
+    "section_mic_hmac_key": "4FC402F911776BD4BA7E1B934A76823AAEB91AEAE70F229149737AD2446C8721",
+    "section_salt": "6FD81C4F4977A61EA77802E4AE331B1B"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "ABD1E3B92ECCC94887008F9712C8B92E",
+    "data_elements": [
+      {
+        "contents": "53AA992BF504934429F0D55BCA57E7E4DD02BF1C51",
+        "de_type": 77
+      },
+      {
+        "contents": "37",
+        "de_type": 41
+      }
+    ],
+    "encoded_section": "4F911000117F8B155FCF545D9DDE2E2404BF08579001181FAA51DA6430295D27D32A8894FC80977F9FBB2260C5F335DF5E2985B1E9DF677F8DF40E3DD10180E31FD4A1E640AA81AD2D59ED29C73E0DD9",
+    "identity_type": "private",
+    "key_seed": "BAE413A1CB297D1B55956EF2E3D47463B15721D83113EB265CDE9742DE57D1E2",
+    "metadata_key": "E118EB2F2448E831DCB2F01211D4E299",
+    "nonce": "641B644EC4576653B4ECE6BE",
+    "section_mic_hmac_key": "7001ACCF2A6FE829E333351CF9500F0EC9F144AC2432E2D4E65BA205B5A2A083",
+    "section_salt": "117F8B155FCF545D9DDE2E2404BF0857"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "0B886C679F8368F71B69095633FD827A",
+    "data_elements": [
+      {
+        "contents": "C57A03111A582D033BA2F0BBF50F0698BC008461C715",
+        "de_type": 648
+      },
+      {
+        "contents": "0C95F385C694E2BC55C219B0086BA9F8B64C0633",
+        "de_type": 415
+      },
+      {
+        "contents": "C9826C977F5D51",
+        "de_type": 246
+      },
+      {
+        "contents": "B88067D984",
+        "de_type": 989
+      },
+      {
+        "contents": "98C5E507657F0B36CAF5D0EB02A5B30F1087",
+        "de_type": 663
+      }
+    ],
+    "encoded_section": "8C911000AD6BDCEEB60CC9801003D4F71FB8AF0F90049916A86D88CC6C404111A7D9075FFC0C699303B2BB1CDC7492495C139069B609E02C45F3F2F5D1F11C5CC45EAA610AE5F9A3085D638A8D774E060572A9E8E276FDC2B9EAFFAF23469097068D9F2AA77BCB5F548EF636B8BEF3C02495DB690858EA8A13C78501E64C54D05155EA488719C539D7B9060048",
+    "identity_type": "provisioned",
+    "key_seed": "B323DB96EBC1CBB190E305EBE290EF7E600D3D3E7D23688DC2C8C23B4EFC7A4B",
+    "metadata_key": "6436A7FA7D38F566B85179BFF2E4DA68",
+    "nonce": "43B0153AB9B6FFB0DA670B28",
+    "section_mic_hmac_key": "88BBCFCEB5CFAB8C69C5C978C8C21758ADE72E557C108CDF780367F6456C85B4",
+    "section_salt": "AD6BDCEEB60CC9801003D4F71FB8AF0F"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "E4E6282E18B2700912371FD299648904",
+    "data_elements": [
+      {
+        "contents": "6E",
+        "de_type": 875
+      },
+      {
+        "contents": "3E7F165B8725499C73A790",
+        "de_type": 547
+      }
+    ],
+    "encoded_section": "4791100001BF56D7253FE9F2388222BE2B414EB49004A2C3ACCC4EEFD9949E6470223F1085EEF12CA22DBF4E5A9DA978E44AF3E93F6142BE9270F59E188FEF58BBAC3BDCE8413351",
+    "identity_type": "provisioned",
+    "key_seed": "CFF5A7B58AD3CF1BF200E0874E1E404E0B8EC0BCE8812F1FFD4537E2330BF4F2",
+    "metadata_key": "C048921E6EE411AD4698E29A54BC6B4D",
+    "nonce": "8D23F89851021F5141478E33",
+    "section_mic_hmac_key": "1988C5772B660124148F05733A326F0F0C29DC301F2989294312F41C56292A59",
+    "section_salt": "01BF56D7253FE9F2388222BE2B414EB4"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "78DECA4E98143AB700746AACAE4CC14E",
+    "data_elements": [
+      {
+        "contents": "F42C1F5B9E2060A6D4CDA7A2963F44A524BFFD5F0F2D69F3322DCF4B93E3",
+        "de_type": 359
+      }
+    ],
+    "encoded_section": "56911000FE30CCFEF9FADE459409BCA8286268B79002DC0290C23BD3C7F0DCD8443EABD050919255A3755D0F5EBCBA7B540DA11DF0E844207B803710FBE088BE18847F5406B7711DBC583711B7930508B0B06F801CA9AA",
+    "identity_type": "trusted",
+    "key_seed": "F44873C8E1AC0DC8D63BC7CE805E543BA8A73CB83DF807B608246E14CFCCE5D7",
+    "metadata_key": "D0CB13BBC77450B18573A000E0E4B324",
+    "nonce": "D97378F4DF5B4D5249845D4E",
+    "section_mic_hmac_key": "11A63498ACF2C0D60AFEE3AD00117129582FFD6D50D3CA4A21CD3330BAF0B2C0",
+    "section_salt": "FE30CCFEF9FADE459409BCA8286268B7"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "99CA428E9B70F3A4F34CCE2EA3FFD1C6",
+    "data_elements": [
+      {
+        "contents": "95651D83B5B463A0B4D7C3BF97C1CDFD9A2853DD216D",
+        "de_type": 842
+      },
+      {
+        "contents": "B1E32F",
+        "de_type": 633
+      },
+      {
+        "contents": "B44550D17D11C579DDE453A78F8E68",
+        "de_type": 764
+      }
+    ],
+    "encoded_section": "6691100074678AA45A5827136A450437EE29F5E39004B94F1326A3CE7BDCA34AC253366FE37E6849758193586827933D9E096053DC06102448287A436069815904A0F3895C825ED3538CB827DF1B153E833F11DD926D4E5A45CD20EA0FE3FDB21A587C6C77638B",
+    "identity_type": "provisioned",
+    "key_seed": "71A3A2B3B223F84BE6E8595208384B34D0379E898137A3B5DC4F18C71502CACF",
+    "metadata_key": "8998FDB14463108B5A5F66FE289D13BF",
+    "nonce": "AFE96D0E4FF65C1734F9F99B",
+    "section_mic_hmac_key": "2222BA7F416FFEB9B14B07D5D2522EDDF0D2E82CB116D23699566520035BC6E7",
+    "section_salt": "74678AA45A5827136A450437EE29F5E3"
+  },
+  {
+    "adv_header_byte": "20",
+    "aes_key": "3C5965394479133B2B0CDA3474935C12",
+    "data_elements": [
+      {
+        "contents": "4C5DE6A43F855833418B23DE6E4C0AB9B8A6D1C581F15A683D",
+        "de_type": 831
+      },
+      {
+        "contents": "1AE2D41BF9064E056C22712044707CEA3EFAF26964D83E684D33CE",
+        "de_type": 355
+      }
+    ],
+    "encoded_section": "6F911000BE86E394E730BAE02E2A22E8B54CF1A4900408EB6891543847E08002B13233D680C89B22F57320B4890E87533A2B4DFC30021206330351F378D93A7CE5051655B1EC84F8F4F68DBB327EDD4E0DA4948323F1B931733AA4D28F06238FF3622178015BB5C709094AC23A3E448D",
+    "identity_type": "provisioned",
+    "key_seed": "CFBB3B4D111CDF95E4AA9642D5D6C1611B8522D6F76C7B1F23C09DCE58133FE2",
+    "metadata_key": "3BFA93FB827970E4CD401DD9903ABF19",
+    "nonce": "2CFBAEDFFF07C80511FE4B1B",
+    "section_mic_hmac_key": "16B7AD3BB2B10A5B5D64ACEB9733BEDC6D0FD351E5D12AB36FF5FB283DEDF3F4",
+    "section_salt": "BE86E394E730BAE02E2A22E8B54CF1A4"
+  }
+]
\ No newline at end of file
diff --git a/nearby/presence/np_adv/src/credential/mod.rs b/nearby/presence/np_adv/src/credential/mod.rs
new file mode 100644
index 0000000..a138f0b
--- /dev/null
+++ b/nearby/presence/np_adv/src/credential/mod.rs
@@ -0,0 +1,85 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Credential types used in deserialization.
+//!
+//! While simple implementations are provided to get started with, there is likely opportunity for
+//! efficiency gains with implementations tailored to suit (e.g. caching a few hot credentials
+//! rather than reading from disk every time, etc).
+
+use core::fmt::Debug;
+use crypto_provider::CryptoProvider;
+
+use self::{
+    simple::{SimpleV0Credential, SimpleV1Credential},
+    source::OwnedBothCredentialSource,
+    v0::MinimumFootprintV0CryptoMaterial,
+    v1::MinimumFootprintV1CryptoMaterial,
+};
+
+pub mod simple;
+pub mod source;
+pub mod v0;
+pub mod v1;
+
+/// A credential which has an associated [`MatchedCredential`]
+pub trait MatchableCredential {
+    /// The [MatchedCredential] provided by this [`MatchableCredential`].
+    type Matched<'m>: MatchedCredential<'m>
+    where
+        Self: 'm;
+
+    /// Returns the subset of credential data that should be associated with a successfully
+    /// decrypted advertisement or advertisement section.
+    fn matched(&self) -> Self::Matched<'_>;
+}
+
+/// Convenient type-level function for referring to the match data for a [`MatchableCredential`].
+pub type MatchedCredFromCred<'s, C> = <C as MatchableCredential>::Matched<'s>;
+
+/// The portion of a credential's data to be bundled with the advertisement content it was used to
+/// decrypt.
+///
+/// As it is `Debug` and `Eq`, implementors should not hold any cryptographic material to avoid
+/// accidental logging, timing side channels on comparison, etc, or should use custom impls of
+/// those traits rather than deriving them.
+pub trait MatchedCredential<'m>: Debug + PartialEq + Eq {}
+
+/// A V0 credential containing some [`v0::V0CryptoMaterial`]
+pub trait V0Credential: MatchableCredential {
+    /// The [v0::V0CryptoMaterial] provided by this V0Credential impl.
+    type CryptoMaterial: v0::V0CryptoMaterial;
+
+    /// Returns the crypto material associated with the credential.
+    ///
+    /// Used to decrypted encrypted advertisement content.
+    fn crypto_material(&self) -> &Self::CryptoMaterial;
+}
+
+/// A V1 credential containing some [`v1::V1CryptoMaterial`]
+pub trait V1Credential: MatchableCredential {
+    /// The [v1::V1CryptoMaterial] provided by this Credential impl.
+    type CryptoMaterial: v1::V1CryptoMaterial;
+
+    /// Returns the crypto material associated with the credential.
+    ///
+    /// Used to decrypt encrypted advertisement content.
+    fn crypto_material(&self) -> &Self::CryptoMaterial;
+}
+
+/// An owned credential store that contains minimum footprint crypto materials
+pub type MinimumFootprintCredentialSource<T> = OwnedBothCredentialSource<
+    SimpleV0Credential<MinimumFootprintV0CryptoMaterial, T>,
+    SimpleV1Credential<MinimumFootprintV1CryptoMaterial, T>,
+>;
diff --git a/nearby/presence/np_adv/src/credential/simple.rs b/nearby/presence/np_adv/src/credential/simple.rs
new file mode 100644
index 0000000..6ea2436
--- /dev/null
+++ b/nearby/presence/np_adv/src/credential/simple.rs
@@ -0,0 +1,148 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Simple implementations of credentials. These can be combined with the provided crypto material
+//! implementations to have a working credential type.
+//!
+//! ```rust
+//! use np_adv::credential::{
+//!     simple::SimpleV0Credential,
+//!     v0::MinimumFootprintV0CryptoMaterial,
+//! };
+//! type MyV0Credential = SimpleV0Credential<MinimumFootprintV0CryptoMaterial, ()>;
+//! ```
+
+use core::fmt::Debug;
+
+use super::*;
+use super::{v0::*, v1::*};
+
+/// A simple implementation of [`V0Credential`] that wraps a [`V0CryptoMaterial`] and some `T` data that
+/// will be exposed via the [`MatchedCredential`].
+pub struct SimpleV0Credential<C, T>
+where
+    C: V0CryptoMaterial,
+    T: Debug + Eq,
+{
+    material: C,
+    match_data: T,
+}
+
+impl<C, T> SimpleV0Credential<C, T>
+where
+    C: V0CryptoMaterial,
+    T: Debug + Eq,
+{
+    /// Construct a new credential.
+    ///
+    /// `material` will be returned by [V0Credential::crypto_material].
+    /// `match_data` will be returned by [SimpleV0Credential::matched], wrapped in [SimpleMatchedCredential].
+    pub fn new(material: C, match_data: T) -> Self {
+        Self { material, match_data }
+    }
+}
+
+impl<C, T> MatchableCredential for SimpleV0Credential<C, T>
+where
+    C: V0CryptoMaterial,
+    T: Debug + Eq,
+{
+    type Matched<'m> = SimpleMatchedCredential<'m, T> where Self: 'm;
+
+    fn matched(&'_ self) -> Self::Matched<'_> {
+        SimpleMatchedCredential { data: &self.match_data }
+    }
+}
+
+impl<C, T> V0Credential for SimpleV0Credential<C, T>
+where
+    C: V0CryptoMaterial,
+    T: Debug + Eq,
+{
+    type CryptoMaterial = C;
+
+    fn crypto_material(&self) -> &Self::CryptoMaterial {
+        &self.material
+    }
+}
+
+/// A simple implementation of [V1Credential] that wraps a [V1CryptoMaterial] and some `T` data that
+/// will be exposed via the [MatchedCredential].
+pub struct SimpleV1Credential<C, T>
+where
+    C: V1CryptoMaterial,
+    T: Debug + Eq,
+{
+    material: C,
+    match_data: T,
+}
+
+impl<C, T> SimpleV1Credential<C, T>
+where
+    C: V1CryptoMaterial,
+    T: Debug + Eq,
+{
+    /// Construct a new credential.
+    ///
+    /// `material` will be returned by [V1Credential::crypto_material].
+    /// `match_data` will be returned by [SimpleV1Credential::matched], wrapped in [SimpleMatchedCredential].
+    pub fn new(material: C, match_data: T) -> Self {
+        Self { material, match_data }
+    }
+}
+
+impl<C, T> MatchableCredential for SimpleV1Credential<C, T>
+where
+    C: V1CryptoMaterial,
+    T: Debug + Eq,
+{
+    type Matched<'m> = SimpleMatchedCredential<'m, T> where Self: 'm;
+
+    fn matched(&'_ self) -> Self::Matched<'_> {
+        SimpleMatchedCredential { data: &self.match_data }
+    }
+}
+
+impl<C, T> V1Credential for SimpleV1Credential<C, T>
+where
+    C: V1CryptoMaterial,
+    T: Debug + Eq,
+{
+    type CryptoMaterial = C;
+
+    fn crypto_material(&self) -> &Self::CryptoMaterial {
+        &self.material
+    }
+}
+
+/// The [MatchedCredential] used by [SimpleV0Credential]
+/// and by [SimpleV1Credential].
+#[derive(Debug, PartialEq, Eq)]
+pub struct SimpleMatchedCredential<'m, T: Debug + PartialEq + Eq> {
+    data: &'m T,
+}
+
+impl<'m, T: Debug + PartialEq + Eq> SimpleMatchedCredential<'m, T> {
+    /// Construct a new instance that wraps `data`.
+    pub fn new(data: &'m T) -> Self {
+        Self { data }
+    }
+
+    /// Returns the underlying matched credential data.
+    pub fn matched_data(&self) -> &'m T {
+        self.data
+    }
+}
+
+impl<'m, T: Debug + PartialEq + Eq> MatchedCredential<'m> for SimpleMatchedCredential<'m, T> {}
diff --git a/nearby/presence/np_adv/src/credential/source.rs b/nearby/presence/np_adv/src/credential/source.rs
new file mode 100644
index 0000000..e102b7e
--- /dev/null
+++ b/nearby/presence/np_adv/src/credential/source.rs
@@ -0,0 +1,150 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Traits defining sources for credentials. These are used in the deserialization path to provide
+//! the credentials to try. [`SliceCredentialSource`] and [`OwnedCredentialSource`] implementations
+//! are also defined in this module.
+
+use super::*;
+use alloc::vec::Vec;
+
+/// A source of credentials to try when decrypting advertisements,
+/// which really just wraps an iterator over a given credential type.
+pub trait CredentialSource<C: MatchableCredential> {
+    /// The iterator type produced that emits credentials
+    type Iterator<'a>: Iterator<Item = &'a C>
+    where
+        Self: 'a,
+        C: 'a;
+
+    /// Iterate over the available credentials
+    fn iter(&self) -> Self::Iterator<'_>;
+}
+
+/// Trait for combined credential sources able to yield credential sources for both V0 and V1.
+pub trait BothCredentialSource<C0, C1>
+where
+    C0: V0Credential,
+    C1: V1Credential,
+{
+    /// The type of the underlying credential-source for v0 credentials
+    type V0Source: CredentialSource<C0>;
+    /// The type of the underlying credential-source for v1 credentials
+    type V1Source: CredentialSource<C1>;
+
+    /// Gets a source for v0 credentials maintained by this `BothCredentialSource`.
+    fn v0(&self) -> &Self::V0Source;
+
+    /// Gets a source for v1 credentials maintained by this `BothCredentialSource`.
+    fn v1(&self) -> &Self::V1Source;
+
+    /// Convenient function alias to [`self.v0().iter()`] for iterating
+    /// over v0 credentials.
+    fn iter_v0(&self) -> <Self::V0Source as CredentialSource<C0>>::Iterator<'_> {
+        self.v0().iter()
+    }
+
+    /// Convenient function alias to the [`CredentialSource<C1>#iter()`] for iterating
+    /// over v0 credentials.
+    fn iter_v1(&self) -> <Self::V1Source as CredentialSource<C1>>::Iterator<'_> {
+        self.v1().iter()
+    }
+}
+
+/// A simple [CredentialSource] that just iterates over a provided slice of credentials
+pub struct SliceCredentialSource<'c, C: MatchableCredential> {
+    credentials: &'c [C],
+}
+
+impl<'c, C: MatchableCredential> SliceCredentialSource<'c, C> {
+    /// Construct the credential source from the provided credentials.
+    pub fn new(credentials: &'c [C]) -> Self {
+        Self { credentials }
+    }
+}
+
+impl<'c, C: MatchableCredential> CredentialSource<C> for SliceCredentialSource<'c, C> {
+    type Iterator<'i>  = core::slice::Iter<'i, C>
+    where Self: 'i;
+
+    fn iter(&'_ self) -> Self::Iterator<'_> {
+        self.credentials.iter()
+    }
+}
+
+/// A simple credential source which owns all of its credentials.
+pub struct OwnedCredentialSource<C: MatchableCredential> {
+    credentials: Vec<C>,
+}
+
+impl<C: MatchableCredential> OwnedCredentialSource<C> {
+    /// Constructs an owned credential source from the given credentials
+    pub fn new(credentials: Vec<C>) -> Self {
+        Self { credentials }
+    }
+}
+
+impl<C: MatchableCredential> CredentialSource<C> for OwnedCredentialSource<C> {
+    type Iterator<'i>  = core::slice::Iter<'i, C>
+    where Self: 'i;
+
+    fn iter(&'_ self) -> Self::Iterator<'_> {
+        self.credentials.iter()
+    }
+}
+
+/// An owned credential source for both v0 and v1 credentials,
+pub struct OwnedBothCredentialSource<C0, C1>
+where
+    C0: V0Credential,
+    C1: V1Credential,
+{
+    v0_source: OwnedCredentialSource<C0>,
+    v1_source: OwnedCredentialSource<C1>,
+}
+
+impl<C0, C1> OwnedBothCredentialSource<C0, C1>
+where
+    C0: V0Credential,
+    C1: V1Credential,
+{
+    /// Creates a new `OwnedBothCredentialSource` from credential-lists
+    /// for both V0 and V1
+    pub fn new(v0_credentials: Vec<C0>, v1_credentials: Vec<C1>) -> Self {
+        let v0_source = OwnedCredentialSource::new(v0_credentials);
+        let v1_source = OwnedCredentialSource::new(v1_credentials);
+        Self { v0_source, v1_source }
+    }
+
+    /// Creates a new credential source that is empty.
+    pub fn new_empty() -> Self {
+        Self::new(Vec::new(), Vec::new())
+    }
+}
+
+impl<C0, C1> BothCredentialSource<C0, C1> for OwnedBothCredentialSource<C0, C1>
+where
+    C0: V0Credential,
+    C1: V1Credential,
+{
+    type V0Source = OwnedCredentialSource<C0>;
+    type V1Source = OwnedCredentialSource<C1>;
+
+    fn v0(&self) -> &Self::V0Source {
+        &self.v0_source
+    }
+    fn v1(&self) -> &Self::V1Source {
+        &self.v1_source
+    }
+}
diff --git a/nearby/presence/np_adv/src/credential/v0.rs b/nearby/presence/np_adv/src/credential/v0.rs
new file mode 100644
index 0000000..e2d1b5d
--- /dev/null
+++ b/nearby/presence/np_adv/src/credential/v0.rs
@@ -0,0 +1,80 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Cryptographic materials for v0 advertisement-format credentials.
+
+use super::*;
+
+/// Cryptographic material for an individual NP credential used to decrypt v0 advertisements.
+// Space-time tradeoffs:
+// - LDT keys (64b) take about 1.4us.
+pub trait V0CryptoMaterial {
+    /// Returns an LDT NP advertisement cipher built with the provided `Aes`
+    fn ldt_adv_cipher<C: CryptoProvider>(&self) -> ldt_np_adv::LdtNpAdvDecrypterXtsAes128<C>;
+}
+
+/// A [`V0CryptoMaterial`] that minimizes memory footprint at the expense of CPU time when
+/// providing derived key material
+pub struct MinimumFootprintV0CryptoMaterial {
+    key_seed: [u8; 32],
+    legacy_metadata_key_hmac: [u8; 32],
+}
+
+impl MinimumFootprintV0CryptoMaterial {
+    /// Construct an [MinimumFootprintV0CryptoMaterial] from the provided identity data.
+    pub fn new(key_seed: [u8; 32], legacy_metadata_key_hmac: [u8; 32]) -> Self {
+        Self { key_seed, legacy_metadata_key_hmac }
+    }
+}
+
+impl V0CryptoMaterial for MinimumFootprintV0CryptoMaterial {
+    fn ldt_adv_cipher<C: CryptoProvider>(&self) -> ldt_np_adv::LdtNpAdvDecrypterXtsAes128<C> {
+        let hkdf = np_hkdf::NpKeySeedHkdf::new(&self.key_seed);
+        ldt_np_adv::build_np_adv_decrypter(
+            &hkdf.legacy_ldt_key(),
+            self.legacy_metadata_key_hmac,
+            hkdf.legacy_metadata_key_hmac_key(),
+        )
+    }
+}
+
+/// [`V0CryptoMaterial`] that minimizes CPU time when providing key material at
+/// the expense of occupied memory.
+pub struct PrecalculatedV0CryptoMaterial {
+    pub(crate) legacy_ldt_key: ldt::LdtKey<xts_aes::XtsAes128Key>,
+    pub(crate) legacy_metadata_key_hmac: [u8; 32],
+    pub(crate) legacy_metadata_key_hmac_key: [u8; 32],
+}
+
+impl PrecalculatedV0CryptoMaterial {
+    /// Construct a new instance from the provided credential material.
+    pub fn new<C: CryptoProvider>(key_seed: &[u8; 32], legacy_metadata_key_hmac: [u8; 32]) -> Self {
+        let hkdf = np_hkdf::NpKeySeedHkdf::<C>::new(key_seed);
+        Self {
+            legacy_ldt_key: hkdf.legacy_ldt_key(),
+            legacy_metadata_key_hmac,
+            legacy_metadata_key_hmac_key: *hkdf.legacy_metadata_key_hmac_key().as_bytes(),
+        }
+    }
+}
+
+impl V0CryptoMaterial for PrecalculatedV0CryptoMaterial {
+    fn ldt_adv_cipher<C: CryptoProvider>(&self) -> ldt_np_adv::LdtNpAdvDecrypterXtsAes128<C> {
+        ldt_np_adv::build_np_adv_decrypter(
+            &self.legacy_ldt_key,
+            self.legacy_metadata_key_hmac,
+            self.legacy_metadata_key_hmac_key.into(),
+        )
+    }
+}
diff --git a/nearby/presence/np_adv/src/credential/v1.rs b/nearby/presence/np_adv/src/credential/v1.rs
new file mode 100644
index 0000000..4b134e4
--- /dev/null
+++ b/nearby/presence/np_adv/src/credential/v1.rs
@@ -0,0 +1,288 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Cryptographic materials for v1 advertisement-format credentials.
+
+use core::borrow::Borrow;
+use crypto_provider::{aes::Aes128Key, ed25519, CryptoProvider};
+use np_hkdf::UnsignedSectionKeys;
+
+/// Cryptographic materials necessary for determining whether or not
+/// a given V1 advertisement section matches an identity.
+/// Per the construction of the V1 specification, this is also
+/// the information necessary to decrypt the raw byte contents
+/// of an encrypted V1 section.
+#[derive(Clone)]
+pub struct SectionIdentityResolutionMaterial {
+    /// The AES key for decrypting section ciphertext
+    pub(crate) aes_key: Aes128Key,
+    /// The metadata key HMAC key for deriving and verifying the identity metadata
+    /// key HMAC against the expected value.
+    pub(crate) metadata_key_hmac_key: [u8; 32],
+    /// The expected metadata key HMAC to check against for an identity match.
+    pub(crate) expected_metadata_key_hmac: [u8; 32],
+}
+
+/// Cryptographic materials necessary for determining whether or not
+/// a given V1 signed advertisement section matches an identity.
+#[derive(Clone)]
+pub struct SignedSectionIdentityResolutionMaterial(SectionIdentityResolutionMaterial);
+
+impl SignedSectionIdentityResolutionMaterial {
+    #[cfg(test)]
+    pub(crate) fn from_raw(raw: SectionIdentityResolutionMaterial) -> Self {
+        Self(raw)
+    }
+    pub(crate) fn as_raw_resolution_material(&self) -> &SectionIdentityResolutionMaterial {
+        &self.0
+    }
+    pub(crate) fn from_hkdf_and_expected_metadata_key_hmac<C: CryptoProvider>(
+        hkdf: &np_hkdf::NpKeySeedHkdf<C>,
+        expected_metadata_key_hmac: [u8; 32],
+    ) -> Self {
+        Self(SectionIdentityResolutionMaterial {
+            aes_key: hkdf.extended_signed_section_aes_key(),
+            metadata_key_hmac_key: *hkdf.extended_signed_metadata_key_hmac_key().as_bytes(),
+            expected_metadata_key_hmac,
+        })
+    }
+}
+
+/// Cryptographic materials necessary for determining whether or not
+/// a given V1 MIC advertisement section matches an identity.
+#[derive(Clone)]
+pub struct UnsignedSectionIdentityResolutionMaterial(SectionIdentityResolutionMaterial);
+
+impl UnsignedSectionIdentityResolutionMaterial {
+    #[cfg(test)]
+    pub(crate) fn from_raw(raw: SectionIdentityResolutionMaterial) -> Self {
+        Self(raw)
+    }
+    pub(crate) fn as_raw_resolution_material(&self) -> &SectionIdentityResolutionMaterial {
+        &self.0
+    }
+    pub(crate) fn from_hkdf_and_expected_metadata_key_hmac<C: CryptoProvider>(
+        hkdf: &np_hkdf::NpKeySeedHkdf<C>,
+        expected_metadata_key_hmac: [u8; 32],
+    ) -> Self {
+        Self(SectionIdentityResolutionMaterial {
+            aes_key: UnsignedSectionKeys::aes_key(hkdf),
+            metadata_key_hmac_key: *hkdf.extended_unsigned_metadata_key_hmac_key().as_bytes(),
+            expected_metadata_key_hmac,
+        })
+    }
+}
+
+/// Crypto materials for V1 signed sections which are not employed in identity resolution,
+/// but may be necessary to verify a signed section.
+#[derive(Clone)]
+pub struct SignedSectionVerificationMaterial {
+    /// The np_ed25519 public key to be
+    /// used for signature verification of signed sections.
+    pub(crate) pub_key: ed25519::RawPublicKey,
+}
+
+impl SignedSectionVerificationMaterial {
+    /// Gets the np_ed25519 public key for the given identity,
+    /// used for signature verification of signed sections.
+    pub(crate) fn signature_verification_public_key<C: CryptoProvider>(
+        &self,
+    ) -> np_ed25519::PublicKey<C> {
+        np_ed25519::PublicKey::from_bytes(&self.pub_key).expect("Should only contain valid keys")
+    }
+}
+
+/// Crypto materials for V1 unsigned sections which are not employed in identity resolution,
+/// but may be necessary to fully decrypt an unsigned section.
+#[derive(Clone)]
+pub struct UnsignedSectionVerificationMaterial {
+    /// The MIC HMAC key for verifying the integrity of unsigned sections.
+    pub(crate) mic_hmac_key: [u8; 32],
+}
+
+impl UnsignedSectionVerificationMaterial {
+    /// Returns the MIC HMAC key for unsigned sections
+    pub(crate) fn mic_hmac_key<C: CryptoProvider>(&self) -> np_hkdf::NpHmacSha256Key<C> {
+        self.mic_hmac_key.into()
+    }
+}
+
+// Space-time tradeoffs:
+// - Calculating an HKDF from the key seed costs about 2us on a gLinux laptop, and occupies 80b.
+// - Calculating an AES (16b) or HMAC (32b) key from the HKDF costs about 700ns.
+// The right tradeoff may also vary by use case. For frequently used identities we should
+// probably pre-calculate everything. For occasionally used ones, or ones that are loaded from
+// disk, used once, and discarded, we might want to precalculate on a separate thread or the
+// like.
+// The AES key and metadata key HMAC key are the most frequently used ones, as the MIC HMAC key
+// is only used on the matching identity, not all identities.
+
+/// Cryptographic material for an individual NP credential used to decrypt and verify v1 sections.
+pub trait V1CryptoMaterial {
+    /// The return type of `Self::signed_identity_resolution_material`, which is some
+    /// data-type which allows borrowing `SignedSectionIdentityResolutionMaterial`
+    type SignedIdentityResolverReference<'a>: Borrow<SignedSectionIdentityResolutionMaterial>
+    where
+        Self: 'a;
+    /// The return type of `Self::unsigned_identity_resolution_material`, which is some
+    /// data-type which allows borrowing `UnsignedSectionIdentityResolutionMaterial`
+    type UnsignedIdentityResolverReference<'a>: Borrow<UnsignedSectionIdentityResolutionMaterial>
+    where
+        Self: 'a;
+
+    /// Constructs or references the identity resolution material for signed sections
+    fn signed_identity_resolution_material<C: CryptoProvider>(
+        &self,
+    ) -> Self::SignedIdentityResolverReference<'_>;
+
+    /// Constructs or references the identity resolution material for unsigned sections
+    fn unsigned_identity_resolution_material<C: CryptoProvider>(
+        &self,
+    ) -> Self::UnsignedIdentityResolverReference<'_>;
+
+    /// Constructs or copies non-identity-resolution deserialization material for signed
+    /// sections.
+    ///
+    /// Note: We mandate "copies" here due to the relatively small size of verification-only crypto
+    /// materials (32 bytes).
+    fn signed_verification_material<C: CryptoProvider>(&self) -> SignedSectionVerificationMaterial;
+
+    /// Constructs or copies non-identity-resolution deserialization material for unsigned
+    /// sections.
+    ///
+    /// Note: We mandate "copies" here due to the relatively small size of verification-only crypto
+    /// materials (32 bytes).
+    fn unsigned_verification_material<C: CryptoProvider>(
+        &self,
+    ) -> UnsignedSectionVerificationMaterial;
+
+    /// Constructs pre-calculated crypto material out of this crypto-material.
+    fn to_precalculated<C: CryptoProvider>(self) -> PrecalculatedV1CryptoMaterial
+    where
+        Self: Sized,
+    {
+        let signed_identity_resolution_material =
+            self.signed_identity_resolution_material::<C>().borrow().clone();
+        let unsigned_identity_resolution_material =
+            self.unsigned_identity_resolution_material::<C>().borrow().clone();
+        let signed_verification_material = self.signed_verification_material::<C>();
+        let unsigned_verification_material = self.unsigned_verification_material::<C>();
+        PrecalculatedV1CryptoMaterial {
+            signed_identity_resolution_material,
+            unsigned_identity_resolution_material,
+            signed_verification_material,
+            unsigned_verification_material,
+        }
+    }
+}
+
+/// [`V1CryptoMaterial`] that minimizes CPU time when providing key material at
+/// the expense of occupied memory
+pub struct PrecalculatedV1CryptoMaterial {
+    pub(crate) signed_identity_resolution_material: SignedSectionIdentityResolutionMaterial,
+    pub(crate) unsigned_identity_resolution_material: UnsignedSectionIdentityResolutionMaterial,
+    pub(crate) signed_verification_material: SignedSectionVerificationMaterial,
+    pub(crate) unsigned_verification_material: UnsignedSectionVerificationMaterial,
+}
+
+impl V1CryptoMaterial for PrecalculatedV1CryptoMaterial {
+    type SignedIdentityResolverReference<'a> = &'a SignedSectionIdentityResolutionMaterial
+        where Self: 'a;
+    type UnsignedIdentityResolverReference<'a> = &'a UnsignedSectionIdentityResolutionMaterial
+        where Self: 'a;
+
+    fn signed_identity_resolution_material<C: CryptoProvider>(
+        &self,
+    ) -> Self::SignedIdentityResolverReference<'_> {
+        &self.signed_identity_resolution_material
+    }
+    fn unsigned_identity_resolution_material<C: CryptoProvider>(
+        &self,
+    ) -> Self::UnsignedIdentityResolverReference<'_> {
+        &self.unsigned_identity_resolution_material
+    }
+    fn signed_verification_material<C: CryptoProvider>(&self) -> SignedSectionVerificationMaterial {
+        self.signed_verification_material.clone()
+    }
+    fn unsigned_verification_material<C: CryptoProvider>(
+        &self,
+    ) -> UnsignedSectionVerificationMaterial {
+        self.unsigned_verification_material.clone()
+    }
+}
+
+/// [`V1CryptoMaterial`] that minimizes memory footprint at the expense of CPU
+/// time when providing derived key material.
+pub struct MinimumFootprintV1CryptoMaterial {
+    key_seed: [u8; 32],
+    expected_unsigned_metadata_key_hmac: [u8; 32],
+    expected_signed_metadata_key_hmac: [u8; 32],
+    pub_key: ed25519::RawPublicKey,
+}
+
+impl MinimumFootprintV1CryptoMaterial {
+    /// Construct an [MinimumFootprintV1CryptoMaterial] from the provided identity data.
+    pub fn new<C: CryptoProvider>(
+        key_seed: [u8; 32],
+        expected_unsigned_metadata_key_hmac: [u8; 32],
+        expected_signed_metadata_key_hmac: [u8; 32],
+        pub_key: np_ed25519::PublicKey<C>,
+    ) -> Self {
+        Self {
+            key_seed,
+            expected_unsigned_metadata_key_hmac,
+            expected_signed_metadata_key_hmac,
+            pub_key: pub_key.to_bytes(),
+        }
+    }
+}
+
+impl V1CryptoMaterial for MinimumFootprintV1CryptoMaterial {
+    type SignedIdentityResolverReference<'a> = SignedSectionIdentityResolutionMaterial
+        where Self: 'a;
+    type UnsignedIdentityResolverReference<'a> = UnsignedSectionIdentityResolutionMaterial
+        where Self: 'a;
+
+    fn signed_identity_resolution_material<C: CryptoProvider>(
+        &self,
+    ) -> Self::SignedIdentityResolverReference<'_> {
+        let hkdf = np_hkdf::NpKeySeedHkdf::<C>::new(&self.key_seed);
+        SignedSectionIdentityResolutionMaterial::from_hkdf_and_expected_metadata_key_hmac(
+            &hkdf,
+            self.expected_signed_metadata_key_hmac,
+        )
+    }
+
+    fn unsigned_identity_resolution_material<C: CryptoProvider>(
+        &self,
+    ) -> Self::UnsignedIdentityResolverReference<'_> {
+        let hkdf = np_hkdf::NpKeySeedHkdf::<C>::new(&self.key_seed);
+        UnsignedSectionIdentityResolutionMaterial::from_hkdf_and_expected_metadata_key_hmac(
+            &hkdf,
+            self.expected_unsigned_metadata_key_hmac,
+        )
+    }
+
+    fn signed_verification_material<C: CryptoProvider>(&self) -> SignedSectionVerificationMaterial {
+        SignedSectionVerificationMaterial { pub_key: self.pub_key }
+    }
+
+    fn unsigned_verification_material<C: CryptoProvider>(
+        &self,
+    ) -> UnsignedSectionVerificationMaterial {
+        let hkdf = np_hkdf::NpKeySeedHkdf::<C>::new(&self.key_seed);
+        let mic_hmac_key = *UnsignedSectionKeys::hmac_key(&hkdf).as_bytes();
+        UnsignedSectionVerificationMaterial { mic_hmac_key }
+    }
+}
diff --git a/nearby/presence/np_adv/src/de_type.rs b/nearby/presence/np_adv/src/de_type.rs
new file mode 100644
index 0000000..90c86e1
--- /dev/null
+++ b/nearby/presence/np_adv/src/de_type.rs
@@ -0,0 +1,88 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! DE types that are shared across v0 and v1.
+
+// The same ids are used for v0/legacy and v1/extended
+const IDENTITY_DE_TYPES_BY_CODE: [Option<IdentityDataElementType>; 5] = [
+    // no need for more elements since identity types are at indices 1-4
+    None,                                       // 0b0000
+    Some(IdentityDataElementType::Private),     // 0b0001
+    Some(IdentityDataElementType::Trusted),     // 0b0010
+    Some(IdentityDataElementType::Public),      // 0b0011
+    Some(IdentityDataElementType::Provisioned), // 0b0100
+];
+
+/// DE types for special DEs that contain other DEs and consume the entire payload of the
+/// advertisement.
+///
+/// Shared between V0 and V1.
+///
+/// Must not overlap with [PlainDataElementType].
+#[derive(strum_macros::EnumIter, Debug, Clone, Copy, PartialEq, Eq)]
+#[allow(clippy::enum_variant_names)]
+pub(crate) enum IdentityDataElementType {
+    Private,
+    Trusted,
+    Public,
+    Provisioned,
+}
+
+impl IdentityDataElementType {
+    pub(crate) fn as_encrypted_identity_de_type(&self) -> Option<EncryptedIdentityDataElementType> {
+        match self {
+            IdentityDataElementType::Private => Some(EncryptedIdentityDataElementType::Private),
+            IdentityDataElementType::Trusted => Some(EncryptedIdentityDataElementType::Trusted),
+            IdentityDataElementType::Public => None,
+            IdentityDataElementType::Provisioned => {
+                Some(EncryptedIdentityDataElementType::Provisioned)
+            }
+        }
+    }
+
+    /// Type codes for identity DEs are shared between versions 0 and 1.
+    pub(crate) fn shared_type_code(&self) -> u8 {
+        match self {
+            IdentityDataElementType::Private => 0b0001,
+            IdentityDataElementType::Trusted => 0b0010,
+            IdentityDataElementType::Public => 0b0011,
+            IdentityDataElementType::Provisioned => 0b0100,
+        }
+    }
+
+    pub(crate) fn from_shared_type_code(code: u8) -> Option<Self> {
+        IDENTITY_DE_TYPES_BY_CODE.get(code as usize).and_then(|o| *o)
+    }
+}
+
+/// The identity DE types that support encryption.
+#[derive(strum_macros::EnumIter, Debug, Clone, Copy, PartialEq, Eq)]
+pub enum EncryptedIdentityDataElementType {
+    /// An identity that's shared with other devices where a user has signed in to their identity provider
+    Private,
+    /// An identity shared via some trust designation (e.g. starred contacts)
+    Trusted,
+    /// An identity established via a p2p link between two specific devices
+    Provisioned,
+}
+
+impl EncryptedIdentityDataElementType {
+    pub(crate) fn as_identity_data_element_type(&self) -> IdentityDataElementType {
+        match self {
+            EncryptedIdentityDataElementType::Private => IdentityDataElementType::Private,
+            EncryptedIdentityDataElementType::Trusted => IdentityDataElementType::Trusted,
+            EncryptedIdentityDataElementType::Provisioned => IdentityDataElementType::Provisioned,
+        }
+    }
+}
diff --git a/nearby/presence/np_adv/src/deser_v0_tests.rs b/nearby/presence/np_adv/src/deser_v0_tests.rs
new file mode 100644
index 0000000..fa94b89
--- /dev/null
+++ b/nearby/presence/np_adv/src/deser_v0_tests.rs
@@ -0,0 +1,281 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use rand::{seq::SliceRandom as _, SeedableRng as _};
+
+extern crate std;
+
+use crate::{
+    credential::{
+        simple::{SimpleMatchedCredential, SimpleV0Credential},
+        source::SliceCredentialSource,
+        v0::MinimumFootprintV0CryptoMaterial,
+    },
+    de_type::EncryptedIdentityDataElementType,
+    deserialize_v0_advertisement,
+    legacy::{
+        actions::{ActionBits, ActionsDataElement, ToActionElement},
+        data_elements::DataElement,
+        deserialize::PlainDataElement,
+        serialize::{AdvBuilder, Identity, LdtIdentity},
+        BLE_ADV_SVC_CONTENT_LEN,
+    },
+    shared_data::ContextSyncSeqNum,
+    CredentialSource, NoIdentity, PlaintextIdentityMode, PublicIdentity, V0AdvContents,
+    V0Credential,
+};
+use array_view::ArrayView;
+use core::marker::PhantomData;
+use crypto_provider::CryptoProvider;
+use crypto_provider_default::CryptoProviderImpl;
+use ldt_np_adv::{LdtEncrypterXtsAes128, LegacySalt};
+use std::{prelude::rust_2021::*, vec};
+use strum::IntoEnumIterator as _;
+
+#[test]
+fn v0_all_identities_resolvable() {
+    let mut rng = rand::rngs::StdRng::from_entropy();
+    for _ in 0..100 {
+        let identities = (0..100).map(|_| TestIdentity::random(&mut rng)).collect::<Vec<_>>();
+
+        let (adv, adv_config) = adv_random_identity(&mut rng, &identities);
+
+        let creds = identities.iter().map(|i| i.credential()).collect::<Vec<_>>();
+        let cred_source = SliceCredentialSource::new(&creds);
+
+        let contents = deser_v0::<_, _, CryptoProviderImpl>(&cred_source, adv.as_slice());
+
+        assert_adv_equals(&adv_config, &contents);
+    }
+}
+
+#[test]
+fn v0_only_non_matching_identities_available() {
+    let mut rng = rand::rngs::StdRng::from_entropy();
+    for _ in 0..100 {
+        let identities = (0..100).map(|_| TestIdentity::random(&mut rng)).collect::<Vec<_>>();
+
+        let (adv, adv_config) = adv_random_identity(&mut rng, &identities);
+
+        let creds = identities
+            .iter()
+            .filter(|i| {
+                // remove identity used, if any
+                !adv_config.identity.map(|sci| sci.key_seed == i.key_seed).unwrap_or(false)
+            })
+            .map(|i| i.credential())
+            .collect::<Vec<_>>();
+        let cred_source = SliceCredentialSource::new(&creds);
+
+        let contents = deser_v0::<_, _, CryptoProviderImpl>(&cred_source, adv.as_slice());
+
+        match adv_config.identity {
+            // we ended up generating plaintext, so it's fine
+            None => assert_adv_equals(&adv_config, &contents),
+            Some(_) => {
+                // we generated an encrypted adv, but didn't include the credential
+                assert_eq!(V0AdvContents::NoMatchingCredentials, contents);
+            }
+        }
+    }
+}
+
+#[test]
+fn v0_no_creds_available_error_if_encrypted() {
+    let mut rng = rand::rngs::StdRng::from_entropy();
+    for _ in 0..100 {
+        let identities = (0..100).map(|_| TestIdentity::random(&mut rng)).collect::<Vec<_>>();
+
+        let (adv, adv_config) = adv_random_identity(&mut rng, &identities);
+
+        let creds = Vec::<SimpleV0Credential<MinimumFootprintV0CryptoMaterial, [u8; 32]>>::new();
+        let cred_source = SliceCredentialSource::new(&creds);
+
+        let contents = deser_v0::<_, _, CryptoProviderImpl>(&cred_source, adv.as_slice());
+
+        match adv_config.identity {
+            // we ended up generating plaintext, so it's fine
+            None => assert_adv_equals(&adv_config, &contents),
+            Some(_) => {
+                // we generated an encrypted adv, but didn't include the credential
+                assert_eq!(V0AdvContents::NoMatchingCredentials, contents);
+            }
+        }
+    }
+}
+
+fn assert_adv_equals<'m>(
+    adv_config: &AdvConfig,
+    adv: &V0AdvContents<'m, SimpleMatchedCredential<'m, [u8; 32]>>,
+) {
+    match adv_config.identity {
+        None => match adv {
+            V0AdvContents::Plaintext(p) => {
+                let mut action_bits = ActionBits::default();
+                action_bits.set_action(ContextSyncSeqNum::try_from(3).unwrap());
+                let de = ActionsDataElement::from(action_bits);
+
+                assert_eq!(adv_config.plaintext_mode.unwrap(), p.identity());
+                assert_eq!(
+                    vec![&PlainDataElement::Actions(de)],
+                    p.data_elements().collect::<Vec<_>>()
+                )
+            }
+            _ => panic!("should be a plaintext adv"),
+        },
+        Some(_) => match adv {
+            V0AdvContents::Decrypted(wmc) => {
+                assert!(adv_config.plaintext_mode.is_none());
+
+                // different generic type param, so can't re-use the DE from above
+                let mut action_bits = ActionBits::default();
+                action_bits.set_action(ContextSyncSeqNum::try_from(3).unwrap());
+                let de = ActionsDataElement::from(action_bits);
+
+                assert_eq!(
+                    vec![&PlainDataElement::Actions(de)],
+                    wmc.contents().data_elements().collect::<Vec<_>>()
+                );
+                assert_eq!(
+                    adv_config.identity.unwrap().identity_type,
+                    wmc.contents().identity_type()
+                );
+                assert_eq!(
+                    &adv_config.identity.unwrap().legacy_metadata_key,
+                    wmc.contents().metadata_key()
+                );
+            }
+            _ => panic!("should be an encrypted adv"),
+        },
+    }
+}
+
+fn deser_v0<'s, C, S, P>(
+    cred_source: &'s S,
+    adv: &[u8],
+) -> V0AdvContents<'s, SimpleMatchedCredential<'s, [u8; 32]>>
+where
+    C: V0Credential<Matched<'s> = SimpleMatchedCredential<'s, [u8; 32]>> + 's,
+    S: CredentialSource<C>,
+    P: CryptoProvider,
+{
+    deserialize_v0_advertisement::<C, S, P>(adv, cred_source).unwrap()
+}
+
+/// Populate an advertisement with a randomly chosen identity and a DE
+fn adv_random_identity<'a, R: rand::Rng>(
+    mut rng: &mut R,
+    identities: &'a Vec<TestIdentity<CryptoProviderImpl>>,
+) -> (ArrayView<u8, { BLE_ADV_SVC_CONTENT_LEN }>, AdvConfig<'a>) {
+    let identity = identities.choose(&mut rng).unwrap();
+    match rng.gen_range(0_u8..=2) {
+        0 => {
+            let mut adv_builder = AdvBuilder::new(NoIdentity::default());
+            add_de(&mut adv_builder);
+
+            (
+                adv_builder.into_advertisement().unwrap(),
+                AdvConfig::new(None, Some(PlaintextIdentityMode::None)),
+            )
+        }
+        1 => {
+            let mut adv_builder = AdvBuilder::new(PublicIdentity::default());
+            add_de(&mut adv_builder);
+
+            (
+                adv_builder.into_advertisement().unwrap(),
+                AdvConfig::new(None, Some(PlaintextIdentityMode::Public)),
+            )
+        }
+        2 => {
+            let mut adv_builder = AdvBuilder::new(LdtIdentity::<CryptoProviderImpl>::new(
+                identity.identity_type,
+                LegacySalt::from(rng.gen::<[u8; 2]>()),
+                identity.legacy_metadata_key,
+                LdtEncrypterXtsAes128::<CryptoProviderImpl>::new(&identity.hkdf().legacy_ldt_key()),
+            ));
+            add_de(&mut adv_builder);
+
+            (adv_builder.into_advertisement().unwrap(), AdvConfig::new(Some(identity), None))
+        }
+
+        _ => unreachable!(),
+    }
+}
+
+fn add_de<I>(adv_builder: &mut AdvBuilder<I>)
+where
+    I: Identity,
+    ActionsDataElement<I::Flavor>: DataElement,
+    ContextSyncSeqNum: ToActionElement<I::Flavor>,
+{
+    let mut action_bits = ActionBits::default();
+    action_bits.set_action(ContextSyncSeqNum::try_from(3).unwrap());
+    let de = ActionsDataElement::from(action_bits);
+    adv_builder.add_data_element(de).unwrap();
+}
+
+struct TestIdentity<C: CryptoProvider> {
+    identity_type: EncryptedIdentityDataElementType,
+    key_seed: [u8; 32],
+    legacy_metadata_key: [u8; 14],
+    _marker: PhantomData<C>,
+}
+
+impl<C: CryptoProvider> TestIdentity<C> {
+    /// Generate a new identity with random crypto material
+    fn random<R: rand::Rng + rand::CryptoRng>(rng: &mut R) -> Self {
+        Self {
+            identity_type: *EncryptedIdentityDataElementType::iter()
+                .collect::<Vec<_>>()
+                .choose(rng)
+                .unwrap(),
+            key_seed: rng.gen(),
+            legacy_metadata_key: rng.gen(),
+            _marker: PhantomData,
+        }
+    }
+
+    /// Returns a credential using crypto material from this identity
+    fn credential(&self) -> SimpleV0Credential<MinimumFootprintV0CryptoMaterial, [u8; 32]> {
+        let hkdf = self.hkdf();
+        SimpleV0Credential::new(
+            MinimumFootprintV0CryptoMaterial::new(
+                self.key_seed,
+                hkdf.legacy_metadata_key_hmac_key().calculate_hmac(&self.legacy_metadata_key),
+            ),
+            self.key_seed,
+        )
+    }
+
+    fn hkdf(&self) -> np_hkdf::NpKeySeedHkdf<C> {
+        np_hkdf::NpKeySeedHkdf::new(&self.key_seed)
+    }
+}
+
+struct AdvConfig<'a> {
+    /// `Some` iff an encrypted identity should be used
+    identity: Option<&'a TestIdentity<CryptoProviderImpl>>,
+    /// `Some` iff `identity` is `None`
+    plaintext_mode: Option<PlaintextIdentityMode>,
+}
+
+impl<'a> AdvConfig<'a> {
+    fn new(
+        identity: Option<&'a TestIdentity<CryptoProviderImpl>>,
+        plaintext_mode: Option<PlaintextIdentityMode>,
+    ) -> Self {
+        Self { identity, plaintext_mode }
+    }
+}
diff --git a/nearby/presence/np_adv/src/deser_v1_tests.rs b/nearby/presence/np_adv/src/deser_v1_tests.rs
new file mode 100644
index 0000000..b59b18b
--- /dev/null
+++ b/nearby/presence/np_adv/src/deser_v1_tests.rs
@@ -0,0 +1,486 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use core::marker::PhantomData;
+use rand::{rngs::StdRng, seq::SliceRandom as _, Rng as _, SeedableRng as _};
+
+extern crate std;
+
+use crate::{
+    credential::{
+        simple::{SimpleMatchedCredential, SimpleV1Credential},
+        source::SliceCredentialSource,
+        v1::MinimumFootprintV1CryptoMaterial,
+    },
+    de_type::EncryptedIdentityDataElementType,
+    deserialize_v1_advertisement,
+    extended::{
+        data_elements::GenericDataElement,
+        deserialize::VerificationMode,
+        serialize::{
+            AdvBuilder, EncodedAdvertisement, MicEncrypted, SectionBuilder, SectionIdentity,
+            SignedEncrypted,
+        },
+    },
+    AdvDeserializationError, AdvDeserializationErrorDetailsHazmat, CredentialSource,
+    PlaintextIdentityMode, PublicIdentity, Section, V1AdvContents, V1Credential,
+    V1DeserializedSection,
+};
+use crypto_provider::{CryptoProvider, CryptoRng};
+use std::{collections, prelude::rust_2021::*, vec};
+use strum::IntoEnumIterator as _;
+
+use crypto_provider_default::CryptoProviderImpl;
+
+#[test]
+fn v1_all_identities_resolvable_mix_plaintext_ciphertext() {
+    let mut rng = StdRng::from_entropy();
+    for _ in 0..100 {
+        let identities = (0..100)
+            .map(|_| TestIdentity::<CryptoProviderImpl>::random(&mut rng))
+            .collect::<Vec<_>>();
+
+        let mut adv_builder = AdvBuilder::new();
+        let section_configs = fill_adv(&mut rng, &identities, &mut adv_builder);
+        let adv = adv_builder.into_advertisement();
+        let creds = identities.iter().map(|i| i.credential()).collect::<Vec<_>>();
+        let cred_source = SliceCredentialSource::new(&creds);
+        // check if the section header would be 0 or if the section is empty
+        match section_configs.is_empty() {
+            true => {
+                let v1_error = deser_v1_error::<_, _, CryptoProviderImpl>(&cred_source, adv);
+                assert_eq!(
+                    v1_error,
+                    AdvDeserializationError::ParseError {
+                        details_hazmat:
+                            AdvDeserializationErrorDetailsHazmat::AdvertisementDeserializeError
+                    }
+                ); //assert a adv deserialization error
+            }
+            false => {
+                let v1_contents = deser_v1::<_, _, CryptoProviderImpl>(&cred_source, adv);
+                assert_eq!(0, v1_contents.invalid_sections_count());
+                assert_eq!(section_configs.len(), v1_contents.sections.len());
+                for (section_config, section) in
+                    section_configs.iter().zip(v1_contents.sections.iter())
+                {
+                    assert_section_equals(section_config, section);
+                }
+            }
+        }
+    }
+}
+
+#[test]
+fn v1_only_non_matching_identities_available_mix_plaintext_ciphertext() {
+    let mut rng = StdRng::from_entropy();
+    for _ in 0..100 {
+        let identities = (0..100)
+            .map(|_| TestIdentity::<CryptoProviderImpl>::random(&mut rng))
+            .collect::<Vec<_>>();
+
+        let mut adv_builder = AdvBuilder::new();
+        let section_configs = fill_adv(&mut rng, &identities, &mut adv_builder);
+        let adv = adv_builder.into_advertisement();
+        let creds = identities
+            .iter()
+            .filter(|i| {
+                // remove all identities used in sections
+                !section_configs
+                    .iter()
+                    .any(|sc| sc.identity.map(|sci| sci.key_seed == i.key_seed).unwrap_or(false))
+            })
+            .map(|i| i.credential())
+            .collect::<Vec<_>>();
+        let cred_source = SliceCredentialSource::new(&creds);
+        // check if the section header would be 0
+        match section_configs.is_empty() {
+            true => {
+                let v1_error = deser_v1_error::<_, _, CryptoProviderImpl>(&cred_source, adv);
+                assert_eq!(
+                    v1_error,
+                    AdvDeserializationError::ParseError {
+                        details_hazmat:
+                            AdvDeserializationErrorDetailsHazmat::AdvertisementDeserializeError
+                    }
+                ); //assert a adv deserialization error
+            }
+            false => {
+                let v1_contents = deser_v1::<_, _, CryptoProviderImpl>(&cred_source, adv);
+                // all encrypted identity sections are invalid
+                let encrypted_section_count =
+                    section_configs.iter().filter(|sc| sc.identity.is_some()).count();
+                assert_eq!(encrypted_section_count, v1_contents.invalid_sections_count());
+                assert_eq!(
+                    section_configs.len() - encrypted_section_count,
+                    v1_contents.sections.len()
+                );
+                for (section_config, section) in section_configs
+                    .iter()
+                    // skip encrypted sections
+                    .filter(|sc| sc.identity.is_none())
+                    .zip(v1_contents.sections.iter())
+                {
+                    assert_section_equals(section_config, section);
+                }
+            }
+        }
+    }
+}
+
+#[test]
+fn v1_no_creds_available_mix_plaintext_ciphertext() {
+    let mut rng = StdRng::from_entropy();
+    for _ in 0..100 {
+        let identities = (0..100).map(|_| TestIdentity::random(&mut rng)).collect::<Vec<_>>();
+
+        let mut adv_builder = AdvBuilder::new();
+        let section_configs =
+            fill_adv::<StdRng, CryptoProviderImpl>(&mut rng, &identities, &mut adv_builder);
+        let adv = adv_builder.into_advertisement();
+        let cred_source: SliceCredentialSource<
+            '_,
+            SimpleV1Credential<MinimumFootprintV1CryptoMaterial, [u8; 32]>,
+        > = SliceCredentialSource::new(&[]);
+        // check if the section header would be 0
+        match section_configs.is_empty() {
+            true => {
+                let v1_error = deser_v1_error::<_, _, CryptoProviderImpl>(&cred_source, adv);
+                assert_eq!(
+                    v1_error,
+                    AdvDeserializationError::ParseError {
+                        details_hazmat:
+                            AdvDeserializationErrorDetailsHazmat::AdvertisementDeserializeError
+                    }
+                ); //assert a adv deserialization error
+            }
+            false => {
+                let v1_contents = deser_v1::<_, _, CryptoProviderImpl>(&cred_source, adv);
+                // all encrypted identity sections are invalid
+                let encrypted_section_count =
+                    section_configs.iter().filter(|sc| sc.identity.is_some()).count();
+                assert_eq!(encrypted_section_count, v1_contents.invalid_sections_count());
+                assert_eq!(
+                    section_configs.len() - encrypted_section_count,
+                    v1_contents.sections.len()
+                );
+
+                for (section_config, section) in section_configs
+                    .iter()
+                    // skip encrypted sections
+                    .filter(|sc| sc.identity.is_none())
+                    .zip(v1_contents.sections.iter())
+                {
+                    assert_section_equals(section_config, section);
+                }
+            }
+        }
+    }
+}
+
+#[test]
+fn v1_only_some_matching_identities_available_mix_plaintext_ciphertext() {
+    let mut rng = StdRng::from_entropy();
+    for _ in 0..100 {
+        let identities = (0..100)
+            .map(|_| TestIdentity::<CryptoProviderImpl>::random(&mut rng))
+            .collect::<Vec<_>>();
+
+        let mut adv_builder = AdvBuilder::new();
+        let section_configs = fill_adv(&mut rng, &identities, &mut adv_builder);
+        let adv = adv_builder.into_advertisement();
+        // identities used in sections, which may be used in multiple sections too
+        let identities_to_remove: collections::HashSet<_> = identities
+            .iter()
+            .filter(|i| {
+                let identity_used = section_configs
+                    .iter()
+                    .any(|sc| sc.identity.map(|sci| sci.key_seed == i.key_seed).unwrap_or(false));
+
+                // only remove half the identities that were used
+                identity_used && rng.gen()
+            })
+            .map(|i| i.key_seed)
+            .collect();
+
+        let creds = identities
+            .iter()
+            .filter(|i| !identities_to_remove.contains(&i.key_seed))
+            .map(|i| i.credential())
+            .collect::<Vec<_>>();
+        let cred_source = SliceCredentialSource::new(&creds);
+        // check if the section header would be 0
+        match section_configs.is_empty() {
+            true => {
+                let v1_error = deser_v1_error::<_, _, CryptoProviderImpl>(&cred_source, adv);
+                assert_eq!(
+                    v1_error,
+                    AdvDeserializationError::ParseError {
+                        details_hazmat:
+                            AdvDeserializationErrorDetailsHazmat::AdvertisementDeserializeError
+                    }
+                ); //assert a adv deserialization error
+            }
+            false => {
+                let v1_contents = deser_v1::<_, _, CryptoProviderImpl>(&cred_source, adv);
+
+                let affected_sections: Vec<_> = section_configs
+                    .iter()
+                    .filter(|sc| {
+                        sc.identity
+                            .map(|sci| identities_to_remove.iter().any(|ks| &sci.key_seed == ks))
+                            .unwrap_or(false)
+                    })
+                    .collect();
+
+                assert_eq!(affected_sections.len(), v1_contents.invalid_sections_count());
+                assert_eq!(
+                    section_configs.len() - affected_sections.len(),
+                    v1_contents.sections.len()
+                );
+
+                for (section_config, section) in section_configs
+                    .iter()
+                    // skip sections w/ removed identities
+                    .filter(|sc| {
+                        sc.identity
+                            .map(|i| !identities_to_remove.contains(&i.key_seed))
+                            .unwrap_or(true)
+                    })
+                    .zip(v1_contents.sections.iter())
+                {
+                    assert_section_equals(section_config, section);
+                }
+            }
+        }
+    }
+}
+
+fn assert_section_equals<'m, C: CryptoProvider>(
+    section_config: &SectionConfig<C>,
+    section: &V1DeserializedSection<'m, SimpleMatchedCredential<'m, [u8; 32]>>,
+) {
+    match section_config.identity {
+        None => match section {
+            V1DeserializedSection::Plaintext(p) => {
+                assert!(section_config.verification_mode.is_none());
+
+                assert_eq!(section_config.plaintext_mode.unwrap(), p.identity());
+                assert_eq!(
+                    section_config.data_elements,
+                    p.data_elements().map(|de| de.into()).collect::<Vec<_>>()
+                )
+            }
+            V1DeserializedSection::Decrypted(_) => panic!("no id, but decrypted section"),
+        },
+        Some(_) => match section {
+            V1DeserializedSection::Plaintext(_) => panic!("id, but plaintext section"),
+            V1DeserializedSection::Decrypted(wmc) => {
+                assert!(section_config.plaintext_mode.is_none());
+
+                assert_eq!(
+                    section_config.data_elements,
+                    wmc.contents().data_elements().map(|de| de.into()).collect::<Vec<_>>()
+                );
+                assert_eq!(
+                    section_config.identity.unwrap().identity_type,
+                    wmc.contents().identity_type()
+                );
+                assert_eq!(
+                    &section_config.identity.unwrap().extended_metadata_key,
+                    wmc.contents().metadata_key()
+                );
+                assert_eq!(
+                    section_config.verification_mode.unwrap(),
+                    wmc.contents().verification_mode()
+                );
+            }
+        },
+    }
+}
+
+fn deser_v1_error<'s, C, S, P>(
+    cred_source: &'s S,
+    adv: EncodedAdvertisement,
+) -> AdvDeserializationError
+where
+    C: V1Credential<Matched<'s> = SimpleMatchedCredential<'s, [u8; 32]>> + 's,
+    S: CredentialSource<C>,
+    P: CryptoProvider,
+{
+    let v1_contents = match deserialize_v1_advertisement::<C, S, P>(adv.as_slice(), cred_source) {
+        Err(e) => e,
+        _ => panic!("Expecting an error!"),
+    };
+    v1_contents
+}
+
+fn deser_v1<'s, C, S, P>(
+    cred_source: &'s S,
+    adv: EncodedAdvertisement,
+) -> V1AdvContents<'s, SimpleMatchedCredential<'s, [u8; 32]>>
+where
+    C: V1Credential<Matched<'s> = SimpleMatchedCredential<'s, [u8; 32]>> + 's,
+    S: CredentialSource<C>,
+    P: CryptoProvider,
+{
+    deserialize_v1_advertisement::<C, S, P>(adv.as_slice(), cred_source).unwrap()
+}
+/// Populate a random number of sections with randomly chosen identities and random DEs
+fn fill_adv<'a, R: rand::Rng, C: CryptoProvider>(
+    mut rng: &mut R,
+    identities: &'a Vec<TestIdentity<C>>,
+    adv_builder: &mut AdvBuilder,
+) -> Vec<SectionConfig<'a, C>> {
+    let mut expected = Vec::new();
+    let mut salt_rng = C::CryptoRng::new();
+    // build sections
+    for _ in 0..rng.gen_range(0..=6) {
+        let chosen_index = rng.gen_range(0..identities.len());
+        let identity = &identities[chosen_index];
+        let res = match rng.gen_range(1_u8..=3) {
+            1 => adv_builder.section_builder(PublicIdentity::default()).map(|s| {
+                SectionConfig::new(
+                    None,
+                    Some(PlaintextIdentityMode::Public),
+                    None,
+                    add_des(s, &mut rng),
+                )
+            }),
+            2 => adv_builder
+                .section_builder(MicEncrypted::new_random_salt(
+                    &mut salt_rng,
+                    identity.identity_type,
+                    &identity.extended_metadata_key,
+                    &identity.hkdf(),
+                ))
+                .map(|s| {
+                    SectionConfig::new(
+                        Some(identity),
+                        None,
+                        Some(VerificationMode::Mic),
+                        add_des(s, &mut rng),
+                    )
+                }),
+            3 => adv_builder
+                .section_builder(SignedEncrypted::new_random_salt(
+                    &mut salt_rng,
+                    identity.identity_type,
+                    &identity.extended_metadata_key,
+                    &identity.key_pair,
+                    &identity.hkdf(),
+                ))
+                .map(|s| {
+                    SectionConfig::new(
+                        Some(identity),
+                        None,
+                        Some(VerificationMode::Signature),
+                        add_des(s, &mut rng),
+                    )
+                }),
+            _ => unreachable!(),
+        };
+        match res {
+            Ok(tuple) => expected.push(tuple),
+            Err(_) => {
+                // couldn't fit that section; maybe another smaller section will fit
+                continue;
+            }
+        }
+    }
+    expected
+}
+struct TestIdentity<C: CryptoProvider> {
+    identity_type: EncryptedIdentityDataElementType,
+    key_seed: [u8; 32],
+    extended_metadata_key: [u8; 16],
+    key_pair: np_ed25519::KeyPair<C>,
+    marker: PhantomData<C>,
+}
+impl<C: CryptoProvider> TestIdentity<C> {
+    /// Generate a new identity with random crypto material
+    fn random<R: rand::Rng + rand::CryptoRng>(rng: &mut R) -> Self {
+        Self {
+            identity_type: *EncryptedIdentityDataElementType::iter()
+                .collect::<Vec<_>>()
+                .choose(rng)
+                .unwrap(),
+            key_seed: rng.gen(),
+            extended_metadata_key: rng.gen(),
+            key_pair: np_ed25519::KeyPair::<C>::generate(),
+            marker: PhantomData,
+        }
+    }
+    /// Returns a credential using crypto material from this identity
+    fn credential(&self) -> SimpleV1Credential<MinimumFootprintV1CryptoMaterial, [u8; 32]> {
+        let hkdf = self.hkdf();
+        SimpleV1Credential::new(
+            MinimumFootprintV1CryptoMaterial::new(
+                self.key_seed,
+                hkdf.extended_unsigned_metadata_key_hmac_key()
+                    .calculate_hmac(&self.extended_metadata_key),
+                hkdf.extended_signed_metadata_key_hmac_key()
+                    .calculate_hmac(&self.extended_metadata_key),
+                self.key_pair.public(),
+            ),
+            self.key_seed,
+        )
+    }
+    fn hkdf(&self) -> np_hkdf::NpKeySeedHkdf<C> {
+        np_hkdf::NpKeySeedHkdf::<C>::new(&self.key_seed)
+    }
+}
+/// Add several DEs with random types and contents
+fn add_des<I: SectionIdentity, R: rand::Rng>(
+    mut sb: SectionBuilder<I>,
+    rng: &mut R,
+) -> Vec<GenericDataElement> {
+    let mut des = Vec::new();
+    for _ in 0..rng.gen_range(0..=2) {
+        // not worried about multi byte type encoding here, so just sticking with what can sometimes
+        // fit in the 1-byte header, and isn't an identity element
+        let de_type = rng.gen_range(10_u32..=20);
+        // covers lengths that fit or don't fit in 3 bits (1 byte header)
+        let de_len = rng.gen_range(0..=10);
+        let mut de_data = vec![0; de_len];
+        rng.fill(&mut de_data[..]);
+        let de = GenericDataElement::try_from(de_type.into(), &de_data).unwrap();
+        if sb.add_de(|_| de.clone()).is_err() {
+            // no more room in the section
+            break;
+        }
+        des.push(de);
+    }
+    sb.add_to_advertisement();
+    des
+}
+struct SectionConfig<'a, C: CryptoProvider> {
+    /// `Some` iff an encrypted identity should be used
+    identity: Option<&'a TestIdentity<C>>,
+    /// `Some` iff `identity` is `None`
+    plaintext_mode: Option<PlaintextIdentityMode>,
+    /// `Some` iff `identity` is `Some`
+    verification_mode: Option<VerificationMode>,
+    data_elements: Vec<GenericDataElement>,
+}
+impl<'a, C: CryptoProvider> SectionConfig<'a, C> {
+    pub fn new(
+        identity: Option<&'a TestIdentity<C>>,
+        plaintext_mode: Option<PlaintextIdentityMode>,
+        verification_mode: Option<VerificationMode>,
+        data_elements: Vec<GenericDataElement>,
+    ) -> Self {
+        Self { identity, plaintext_mode, verification_mode, data_elements }
+    }
+}
diff --git a/nearby/presence/np_adv/src/extended/data_elements/mod.rs b/nearby/presence/np_adv/src/extended/data_elements/mod.rs
new file mode 100644
index 0000000..2058be1
--- /dev/null
+++ b/nearby/presence/np_adv/src/extended/data_elements/mod.rs
@@ -0,0 +1,305 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! V1 data elements.
+//!
+//! Commonly used DEs have dedicated types (e.g. [TxPowerDataElement], etc), but if another DE is
+//! needed, [GenericDataElement] will allow constructing any type of DE.
+
+use crate::extended::{
+    de_type::DeType,
+    deserialize::DataElement,
+    serialize::{DeHeader, SingleTypeDataElement, WriteDataElement},
+    DeLength, ENCRYPTION_INFO_DE_TYPE, MAX_DE_LEN,
+};
+use crate::shared_data::*;
+use array_view::ArrayView;
+use sink::Sink;
+
+#[cfg(test)]
+mod tests;
+
+/// A general purpose data element for use cases that don't fit into an existing DE type.
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub struct GenericDataElement {
+    de_type: DeType,
+    data: ArrayView<u8, MAX_DE_LEN>,
+}
+
+impl GenericDataElement {
+    /// Construct a `GenericDataElement` from the provided input.
+    ///
+    /// `de_type`: the DE type
+    /// `data`: the DE contents, length <= 127
+    pub fn try_from(de_type: DeType, data: &[u8]) -> Result<Self, GenericDataElementError> {
+        ArrayView::try_from_slice(data)
+            .ok_or(GenericDataElementError::DataTooLong)
+            .map(|data| Self { de_type, data })
+    }
+}
+
+/// Errors that can occur constructing a [GenericDataElement]
+#[derive(Debug, PartialEq, Eq)]
+pub enum GenericDataElementError {
+    /// The DE data is too long
+    DataTooLong,
+}
+
+impl WriteDataElement for GenericDataElement {
+    fn de_header(&self) -> DeHeader {
+        DeHeader::new(self.de_type, self.data.len().try_into().expect("length <= max DE len"))
+    }
+
+    fn write_de_contents<S: Sink<u8>>(&self, sink: &mut S) -> Option<()> {
+        sink.try_extend_from_slice(self.data.as_slice())
+    }
+}
+
+/// Convert a deserialized DE into one you can serialize
+impl<'a> From<DataElement<'a>> for GenericDataElement {
+    fn from(de: DataElement<'a>) -> Self {
+        Self::try_from(de.de_type(), de.contents())
+            .expect("Deserialized DE must have a valid length")
+    }
+}
+
+/// Advertising power
+#[derive(Clone)]
+pub struct TxPowerDataElement {
+    tx_power: TxPower,
+}
+
+impl From<TxPower> for TxPowerDataElement {
+    fn from(tx_power: TxPower) -> Self {
+        Self { tx_power }
+    }
+}
+
+impl SingleTypeDataElement for TxPowerDataElement {
+    const DE_TYPE: DeType = DeType::const_from(0x05);
+}
+
+impl WriteDataElement for TxPowerDataElement {
+    fn de_header(&self) -> DeHeader {
+        DeHeader::new(Self::DE_TYPE, 1_u8.try_into().expect("1 is a valid length"))
+    }
+
+    fn write_de_contents<S: Sink<u8>>(&self, sink: &mut S) -> Option<()> {
+        sink.try_push(self.tx_power.as_i8() as u8)
+    }
+}
+
+/// List of actions
+pub struct ActionsDataElement {
+    actions: tinyvec::ArrayVec<[u8; MAX_DE_LEN]>,
+}
+
+impl ActionsDataElement {
+    /// Returns `Some` if the actions will fit in a DE, `None` otherwise
+    pub fn try_from_actions(actions: &[u8]) -> Result<Self, ActionsDataElementError> {
+        let mut de = Self { actions: tinyvec::ArrayVec::new() };
+
+        de.actions
+            .try_extend_from_slice(actions)
+            .map(|_| de)
+            .ok_or(ActionsDataElementError::ActionsTooLong)
+    }
+}
+
+impl SingleTypeDataElement for ActionsDataElement {
+    const DE_TYPE: DeType = DeType::const_from(0x06);
+}
+
+impl WriteDataElement for ActionsDataElement {
+    fn de_header(&self) -> DeHeader {
+        DeHeader::new(Self::DE_TYPE, self.actions.len().try_into().expect("always <= max length"))
+    }
+
+    fn write_de_contents<S: Sink<u8>>(&self, sink: &mut S) -> Option<()> {
+        sink.try_extend_from_slice(&self.actions)
+    }
+}
+
+/// Errors that can occur constructing an [ActionsDataElement].
+#[derive(Debug, PartialEq, Eq)]
+pub enum ActionsDataElementError {
+    /// Too many action bytes.
+    ActionsTooLong,
+}
+
+pub(crate) const SIGNATURE_ENCRYPTION_SCHEME: u8 = 0b00001000;
+pub(crate) const MIC_ENCRYPTION_SCHEME: u8 = 0b00000000;
+
+/// Determines whether a signature or mic encryption scheme is used
+pub(crate) struct EncryptionInfoDataElement {
+    /// First byte is bESSSSRRR where SSSS is the encryption scheme, rest are the salt
+    pub info: [u8; 17],
+}
+
+impl SingleTypeDataElement for EncryptionInfoDataElement {
+    const DE_TYPE: DeType = ENCRYPTION_INFO_DE_TYPE;
+}
+
+impl EncryptionInfoDataElement {
+    pub(crate) fn serialize(&self) -> [u8; 19] {
+        let mut buffer = [0_u8; 19];
+        buffer[0..2].copy_from_slice(self.de_header().serialize().as_slice());
+        buffer[2..19].copy_from_slice(&self.info);
+        buffer
+    }
+
+    fn de_header(&self) -> DeHeader {
+        DeHeader::new(
+            Self::DE_TYPE,
+            DeLength {
+                len: self.info.len().try_into().expect("encryption info is a valid length"),
+            },
+        )
+    }
+
+    /// Constructs the signature encryption scheme variant
+    pub fn signature(salt_bytes: &[u8; 16]) -> Self {
+        Self::new(SIGNATURE_ENCRYPTION_SCHEME, salt_bytes)
+    }
+
+    /// Constructs the mic encryption scheme variant
+    pub fn mic(salt_bytes: &[u8; 16]) -> Self {
+        Self::new(MIC_ENCRYPTION_SCHEME, salt_bytes)
+    }
+
+    fn new(scheme: u8, salt_bytes: &[u8; 16]) -> Self {
+        let mut sig_info = [0_u8; 17];
+        sig_info[0] = scheme;
+        sig_info[1..].copy_from_slice(salt_bytes);
+        Self { info: sig_info }
+    }
+}
+
+/// Context sync sequence number
+pub struct ContextSyncSeqNumDataElement {
+    num: ContextSyncSeqNum,
+}
+
+impl From<ContextSyncSeqNum> for ContextSyncSeqNumDataElement {
+    fn from(num: ContextSyncSeqNum) -> Self {
+        Self { num }
+    }
+}
+
+impl SingleTypeDataElement for ContextSyncSeqNumDataElement {
+    const DE_TYPE: DeType = DeType::const_from(0x13);
+}
+
+impl WriteDataElement for ContextSyncSeqNumDataElement {
+    fn de_header(&self) -> DeHeader {
+        DeHeader::new(Self::DE_TYPE, 1_u8.try_into().expect("1 is a valid length"))
+    }
+
+    fn write_de_contents<S: Sink<u8>>(&self, sink: &mut S) -> Option<()> {
+        sink.try_push(self.num.as_u8())
+    }
+}
+
+/// Connectivity info
+pub struct ConnectivityInfoDataElement {
+    // TODO len
+    info: ArrayView<u8, 24>,
+}
+
+impl ConnectivityInfoDataElement {
+    /// Construct connectivity info for bluetooth.
+    pub fn bluetooth(svc_id: [u8; 4], mac: [u8; 6]) -> Self {
+        let mut array = [0; 24];
+        array[0] = 0x1; // bluetooth
+        array[1..5].copy_from_slice(&svc_id);
+        array[5..11].copy_from_slice(&mac);
+
+        Self { info: ArrayView::try_from_array(array, 11).expect("length is fixed") }
+    }
+
+    /// Construct connectivity info for mDNS.
+    // TODO port type, bssid
+    pub fn mdns(ip: [u8; 4], port: u8) -> Self {
+        let mut array = [0; 24];
+        array[0] = 0x2; // mdns
+        array[1..5].copy_from_slice(&ip);
+        array[5] = port;
+
+        Self { info: ArrayView::try_from_array(array, 6).expect("length is fixed") }
+    }
+
+    /// Construct connectivity info for WiFi Direct.
+    pub fn wifi_direct(ssid: [u8; 10], password: [u8; 10], freq: [u8; 2], port: u8) -> Self {
+        let mut array = [0; 24];
+        array[0] = 0x3; // wifi direct
+        array[1..11].copy_from_slice(&ssid);
+        array[11..21].copy_from_slice(&password);
+        array[21..23].copy_from_slice(&freq);
+        array[23] = port;
+
+        Self { info: ArrayView::try_from_array(array, 24).expect("length is fixed") }
+    }
+}
+
+impl SingleTypeDataElement for ConnectivityInfoDataElement {
+    const DE_TYPE: DeType = DeType::const_from(0x11);
+}
+
+impl WriteDataElement for ConnectivityInfoDataElement {
+    fn de_header(&self) -> DeHeader {
+        DeHeader::new(
+            Self::DE_TYPE,
+            self.info.len().try_into().expect("conn info is a valid length"),
+        )
+    }
+
+    fn write_de_contents<S: Sink<u8>>(&self, sink: &mut S) -> Option<()> {
+        sink.try_extend_from_slice(self.info.as_slice())
+    }
+}
+
+/// Connectivity capabilities
+pub struct ConnectivityCapabilityDataElement {
+    // TODO len
+    capability: ArrayView<u8, 7>,
+}
+
+impl ConnectivityCapabilityDataElement {
+    /// Construct connectivity capabilities for WiFi Direct.
+    pub fn wifi_direct(supported_freqs: [u8; 3], connected_freqs: [u8; 3]) -> Self {
+        let mut array = [0; 7];
+        array[0] = 0x2; // wifi direct
+        array[1..4].copy_from_slice(&supported_freqs);
+        array[4..7].copy_from_slice(&connected_freqs);
+
+        Self { capability: ArrayView::try_from_array(array, 7).expect("length is fixed") }
+    }
+}
+
+impl SingleTypeDataElement for ConnectivityCapabilityDataElement {
+    const DE_TYPE: DeType = DeType::const_from(0x12);
+}
+
+impl WriteDataElement for ConnectivityCapabilityDataElement {
+    fn de_header(&self) -> DeHeader {
+        DeHeader::new(
+            Self::DE_TYPE,
+            self.capability.len().try_into().expect("capability is a valid length"),
+        )
+    }
+
+    fn write_de_contents<S: Sink<u8>>(&self, sink: &mut S) -> Option<()> {
+        sink.try_extend_from_slice(self.capability.as_slice())
+    }
+}
diff --git a/nearby/presence/np_adv/src/extended/data_elements/tests.rs b/nearby/presence/np_adv/src/extended/data_elements/tests.rs
new file mode 100644
index 0000000..a8938b0
--- /dev/null
+++ b/nearby/presence/np_adv/src/extended/data_elements/tests.rs
@@ -0,0 +1,183 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+extern crate std;
+
+use super::*;
+use crate::{
+    extended::serialize::{section_tests::SectionBuilderExt, AdvBuilder},
+    shared_data::TxPower,
+    PublicIdentity,
+};
+
+#[test]
+fn serialize_tx_power_de() {
+    let mut adv_builder = AdvBuilder::new();
+    let mut section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+
+    section_builder.add_de_res(|_| TxPower::try_from(3_i8).map(TxPowerDataElement::from)).unwrap();
+
+    assert_eq!(
+        &[
+            3,    // section header
+            0x03, // public identity
+            0x15, // len 1 type 0x05
+            3
+        ],
+        section_builder.into_section().as_slice()
+    );
+}
+
+#[test]
+fn serialize_actions_de_empty() {
+    let mut adv_builder = AdvBuilder::new();
+    let mut section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+
+    section_builder.add_de_res(|_| ActionsDataElement::try_from_actions(&[])).unwrap();
+
+    assert_eq!(
+        &[
+            2,    // section header
+            0x03, // public identity
+            0x06, // len 0 type 0x06
+        ],
+        section_builder.into_section().as_slice()
+    );
+}
+
+#[test]
+fn serialize_actions_de_non_empty() {
+    let mut adv_builder = AdvBuilder::new();
+    let mut section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+
+    section_builder
+        .add_de_res(|_| ActionsDataElement::try_from_actions(&[1, 1, 2, 3, 5, 8]))
+        .unwrap();
+
+    assert_eq!(
+        &[
+            8,    // section header
+            0x03, // public identity
+            0x66, // len 6 type 0x06
+            1, 1, 2, 3, 5, 8 // fibonacci, of course
+        ],
+        section_builder.into_section().as_slice()
+    );
+}
+
+#[test]
+fn serialize_context_sync_seq_num_de() {
+    let mut adv_builder = AdvBuilder::new();
+    let mut section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+
+    section_builder
+        .add_de_res(|_| ContextSyncSeqNum::try_from(3).map(ContextSyncSeqNumDataElement::from))
+        .unwrap();
+
+    assert_eq!(
+        &[
+            4,    // section header
+            0x03, // public identity
+            0x81, 0x13, // len 1 type 0x13
+            3,    // seq num
+        ],
+        section_builder.into_section().as_slice()
+    );
+}
+
+#[test]
+fn serialize_connectivity_info_de_bluetooth() {
+    let mut adv_builder = AdvBuilder::new();
+    let mut section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+
+    section_builder.add_de(|_| ConnectivityInfoDataElement::bluetooth([1; 4], [2; 6])).unwrap();
+
+    assert_eq!(
+        &[
+            14,   // section header
+            0x03, // public identity
+            0x8B, 0x11, // len 11 type 0x11
+            1,    // connectivity type
+            1, 1, 1, 1, // svc id
+            2, 2, 2, 2, 2, 2 // mac
+        ],
+        section_builder.into_section().as_slice()
+    );
+}
+
+#[test]
+fn serialize_connectivity_info_de_mdns() {
+    let mut adv_builder = AdvBuilder::new();
+    let mut section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+
+    section_builder.add_de(|_| ConnectivityInfoDataElement::mdns([1; 4], 2)).unwrap();
+
+    assert_eq!(
+        &[
+            9,    // section header
+            0x03, // public identity
+            0x86, 0x11, // len 11 type 0x11
+            2,    // connectivity type
+            1, 1, 1, 1, // svc id
+            2  // port
+        ],
+        section_builder.into_section().as_slice()
+    );
+}
+
+#[test]
+fn serialize_connectivity_info_de_wifi_direct() {
+    let mut adv_builder = AdvBuilder::new();
+    let mut section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+
+    section_builder
+        .add_de(|_| ConnectivityInfoDataElement::wifi_direct([1; 10], [2; 10], [3; 2], 4))
+        .unwrap();
+
+    assert_eq!(
+        &[
+            27,   // section header
+            0x03, // public identity
+            0x98, 0x11, // len 24 type 0x11
+            3,    // connectivity type
+            1, 1, 1, 1, 1, 1, 1, 1, 1, 1, // ssid
+            2, 2, 2, 2, 2, 2, 2, 2, 2, 2, // password
+            3, 3, // freq
+            4  // port
+        ],
+        section_builder.into_section().as_slice()
+    );
+}
+
+#[test]
+fn serialize_connectivity_capabilities_de_wifi_direct() {
+    let mut adv_builder = AdvBuilder::new();
+    let mut section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+
+    section_builder
+        .add_de(|_| ConnectivityCapabilityDataElement::wifi_direct([1; 3], [2; 3]))
+        .unwrap();
+
+    assert_eq!(
+        &[
+            10,   // section header
+            0x03, // public identity
+            0x87, 0x12, // len 7 type 0x12
+            2,    // connectivity type
+            1, 1, 1, // supported
+            2, 2, 2, // connected
+        ],
+        section_builder.into_section().as_slice()
+    );
+}
diff --git a/nearby/presence/np_adv/src/extended/de_type.rs b/nearby/presence/np_adv/src/extended/de_type.rs
new file mode 100644
index 0000000..105d15e
--- /dev/null
+++ b/nearby/presence/np_adv/src/extended/de_type.rs
@@ -0,0 +1,143 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! V1 DE type types
+use crate::de_type::{EncryptedIdentityDataElementType, IdentityDataElementType};
+
+/// Data element types for extended advertisements
+#[derive(Debug, PartialEq, Eq, Clone, Copy, Hash)]
+pub struct DeType {
+    // 4 billion type codes should be enough for anybody
+    code: u32,
+}
+
+impl DeType {
+    /// A `const` equivalent to `From<u32>` since trait methods can't yet be const.
+    pub(crate) const fn const_from(value: u32) -> Self {
+        Self { code: value }
+    }
+
+    /// Returns the type as a u32
+    pub fn as_u32(&self) -> u32 {
+        self.code
+    }
+}
+
+impl From<u8> for DeType {
+    fn from(value: u8) -> Self {
+        DeType { code: value as u32 }
+    }
+}
+
+impl From<u32> for DeType {
+    fn from(value: u32) -> Self {
+        DeType { code: value }
+    }
+}
+
+pub(crate) trait ExtendedDataElementType: Sized {
+    /// A type code for use in the DE header.
+    fn type_code(&self) -> DeType;
+    /// Returns the matching type for the code, else `None`
+    fn from_type_code(de_type: DeType) -> Option<Self>;
+}
+
+impl ExtendedDataElementType for IdentityDataElementType {
+    fn type_code(&self) -> DeType {
+        DeType::from(self.shared_type_code())
+    }
+
+    fn from_type_code(de_type: DeType) -> Option<Self> {
+        de_type.code.try_into().ok().and_then(Self::from_shared_type_code)
+    }
+}
+
+impl ExtendedDataElementType for EncryptedIdentityDataElementType {
+    fn type_code(&self) -> DeType {
+        DeType::from(self.as_identity_data_element_type().shared_type_code())
+    }
+
+    fn from_type_code(code: DeType) -> Option<Self> {
+        IdentityDataElementType::from_type_code(code)
+            .and_then(|idet| idet.as_encrypted_identity_de_type())
+    }
+}
+
+#[cfg(test)]
+mod tests {
+    extern crate std;
+
+    use super::*;
+    use std::{collections, fmt};
+
+    #[test]
+    fn identity_type_codes_are_consistent() {
+        de_type_codes_are_consistent::<IdentityDataElementType>()
+    }
+
+    #[test]
+    fn encrypted_identity_type_codes_are_consistent() {
+        de_type_codes_are_consistent::<EncryptedIdentityDataElementType>()
+    }
+
+    #[test]
+    fn identity_type_codes_are_distinct() {
+        de_distinct_type_codes::<IdentityDataElementType>()
+    }
+
+    #[test]
+    fn encrypted_identity_type_codes_are_distinct() {
+        de_distinct_type_codes::<EncryptedIdentityDataElementType>()
+    }
+
+    #[test]
+    fn identity_no_accidentally_mapped_type_codes() {
+        de_no_accidentally_mapped_type_codes::<IdentityDataElementType>()
+    }
+
+    #[test]
+    fn encrypted_identity_no_accidentally_mapped_type_codes() {
+        de_no_accidentally_mapped_type_codes::<EncryptedIdentityDataElementType>()
+    }
+
+    fn de_type_codes_are_consistent<
+        D: PartialEq + fmt::Debug + ExtendedDataElementType + strum::IntoEnumIterator,
+    >() {
+        for det in D::iter() {
+            let actual = D::from_type_code(det.type_code());
+            assert_eq!(Some(det), actual)
+        }
+    }
+
+    fn de_distinct_type_codes<
+        D: PartialEq + fmt::Debug + ExtendedDataElementType + strum::IntoEnumIterator,
+    >() {
+        let codes = D::iter().map(|det| det.type_code()).collect::<collections::HashSet<_>>();
+        assert_eq!(codes.len(), D::iter().count());
+    }
+
+    fn de_no_accidentally_mapped_type_codes<
+        D: PartialEq + fmt::Debug + ExtendedDataElementType + strum::IntoEnumIterator,
+    >() {
+        let codes = D::iter().map(|det| det.type_code()).collect::<collections::HashSet<_>>();
+        // not going to try all 4 billion possibilities, but we can make an effort
+        for possible_code in 0_u32..100_000 {
+            if codes.contains(&possible_code.into()) {
+                continue;
+            }
+
+            assert_eq!(None, D::from_type_code(possible_code.into()));
+        }
+    }
+}
diff --git a/nearby/presence/np_adv/src/extended/deserialize/encrypted_section/mic_decrypt_tests.rs b/nearby/presence/np_adv/src/extended/deserialize/encrypted_section/mic_decrypt_tests.rs
new file mode 100644
index 0000000..d112ead
--- /dev/null
+++ b/nearby/presence/np_adv/src/extended/deserialize/encrypted_section/mic_decrypt_tests.rs
@@ -0,0 +1,426 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+extern crate std;
+
+use super::*;
+use crate::extended::data_elements::TxPowerDataElement;
+use crate::extended::serialize::{SingleTypeDataElement, WriteDataElement};
+use crate::shared_data::TxPower;
+use crate::{
+    credential::{simple::SimpleV1Credential, v1::MinimumFootprintV1CryptoMaterial},
+    de_type::EncryptedIdentityDataElementType,
+    extended::{
+        deserialize::{
+            encrypted_section::MicEncryptedSectionDeserializationError,
+            parse_sections,
+            test_stubs::{HkdfCryptoMaterial, IntermediateSectionExt},
+            CiphertextSection, OffsetDataElement, RawV1Salt,
+        },
+        serialize::{AdvBuilder, CapacityLimitedVec, MicEncrypted},
+    },
+    parse_adv_header, AdvHeader, Section,
+};
+use crypto_provider_default::CryptoProviderImpl;
+use np_hkdf::v1_salt::DataElementOffset;
+use sink::Sink;
+use std::{prelude::rust_2021::*, vec};
+
+#[test]
+fn deserialize_mic_encrypted_correct_keys() {
+    let metadata_key = [1; 16];
+    let key_seed = [2; 32];
+    let raw_salt = RawV1Salt([3; 16]);
+    let section_salt = V1Salt::<CryptoProviderImpl>::from(raw_salt);
+    let identity_type = EncryptedIdentityDataElementType::Private;
+    let key_seed_hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+    let mut adv_builder = AdvBuilder::new();
+
+    let mut section_builder = adv_builder
+        .section_builder(MicEncrypted::new_for_testing(
+            identity_type,
+            V1Salt::from(*section_salt.as_array_ref()),
+            &metadata_key,
+            &key_seed_hkdf,
+        ))
+        .unwrap();
+
+    let txpower_de = TxPowerDataElement::from(TxPower::try_from(5).unwrap());
+    section_builder.add_de(|_| txpower_de.clone()).unwrap();
+    section_builder.add_to_advertisement();
+
+    let adv = adv_builder.into_advertisement();
+
+    let (remaining, header) = parse_adv_header(adv.as_slice()).unwrap();
+
+    let adv_header = if let AdvHeader::V1(h) = header {
+        h
+    } else {
+        panic!("incorrect header");
+    };
+
+    let sections = parse_sections(&adv_header, remaining).unwrap();
+    assert_eq!(1, sections.len());
+
+    let section = sections.into_iter().next().unwrap();
+    let enc_section = section.as_ciphertext().unwrap();
+    let keypair = np_ed25519::KeyPair::<CryptoProviderImpl>::generate();
+
+    // deserializing to Section works
+    let credential = SimpleV1Credential::new(
+        MinimumFootprintV1CryptoMaterial::new::<CryptoProviderImpl>(
+            key_seed,
+            key_seed_hkdf.extended_unsigned_metadata_key_hmac_key().calculate_hmac(&metadata_key),
+            key_seed_hkdf.extended_signed_metadata_key_hmac_key().calculate_hmac(&metadata_key),
+            keypair.public(),
+        ),
+        (),
+    );
+    let section = enc_section.try_deserialize::<_, CryptoProviderImpl>(&credential).unwrap();
+
+    assert_eq!(
+        DecryptedSection::new(
+            EncryptedIdentityDataElementType::Private,
+            VerificationMode::Mic,
+            metadata_key,
+            raw_salt,
+            SectionContents {
+                section_header: 19 // encryption info de
+                    + 2 // de header
+                    + 16 // metadata key
+                    + 2 // de contents
+                    + 16, // mic hmac tag
+                // battery DE
+                de_data: ArrayView::try_from_slice(&[5]).unwrap(),
+                data_elements: vec![OffsetDataElement {
+                    offset: 2.into(),
+                    de_type: 0x05_u8.into(),
+                    start_of_contents: 0,
+                    contents_len: 1
+                }]
+            }
+        ),
+        section
+    );
+
+    assert_eq!(
+        vec![(DataElementOffset::from(2_usize), TxPowerDataElement::DE_TYPE, vec![5_u8])],
+        section
+            .data_elements()
+            .map(|de| (de.offset(), de.de_type(), de.contents().to_vec()))
+            .collect::<Vec<_>>()
+    );
+
+    let contents = if let CiphertextSection::MicEncryptedIdentity(contents) = &enc_section {
+        contents
+    } else {
+        panic!("incorrect flavor");
+    };
+
+    let mut encryption_info_bytes = [0_u8; 19];
+    encryption_info_bytes[0..2].copy_from_slice(&[0x91, 0x10]);
+    encryption_info_bytes[2] = 0x00;
+    encryption_info_bytes[3..].copy_from_slice(section_salt.as_slice());
+
+    let ciphertext_end = adv.as_slice().len() - 16;
+    assert_eq!(
+        &MicEncryptedSection {
+            section_header: 19 // encryption info de
+                    + 2 // de header
+                    + 16 // metadata key
+                    + 2 // de contents
+                    + 16, // mic hmac tag
+            adv_header: &adv_header,
+            encryption_info: EncryptionInfo { bytes: encryption_info_bytes },
+            identity: EncryptedIdentityMetadata {
+                header_bytes: [0x90, 0x1],
+                offset: 1.into(),
+                identity_type: EncryptedIdentityDataElementType::Private,
+            },
+            all_ciphertext: &adv.as_slice()[1 + 1 + 19 + 2..ciphertext_end],
+            mic: SectionMic { mic: adv.as_slice()[ciphertext_end..].try_into().unwrap() }
+        },
+        contents
+    );
+
+    // plaintext is correct
+    {
+        let crypto_material = MinimumFootprintV1CryptoMaterial::new::<CryptoProviderImpl>(
+            key_seed,
+            key_seed_hkdf.extended_unsigned_metadata_key_hmac_key().calculate_hmac(&metadata_key),
+            key_seed_hkdf.extended_signed_metadata_key_hmac_key().calculate_hmac(&metadata_key),
+            keypair.public(),
+        );
+        let identity_resolution_material =
+            crypto_material.unsigned_identity_resolution_material::<CryptoProviderImpl>();
+        let verification_material =
+            crypto_material.unsigned_verification_material::<CryptoProviderImpl>();
+
+        let decrypted = contents
+            .try_decrypt::<CryptoProviderImpl>(
+                &identity_resolution_material,
+                &verification_material,
+            )
+            .unwrap();
+
+        let mut expected = metadata_key.as_slice().to_vec();
+        // battery de
+        expected.extend_from_slice(txpower_de.clone().de_header().serialize().as_slice());
+        txpower_de.write_de_contents(&mut expected);
+
+        assert_eq!(&expected, decrypted.as_slice());
+    }
+}
+
+#[test]
+fn deserialize_mic_encrypted_incorrect_aes_key_error() {
+    // bad aes key -> bad metadata key plaintext
+    do_bad_deserialize_params::<CryptoProviderImpl>(
+        MicEncryptedSectionDeserializationError::MetadataKeyMacMismatch,
+        Some([0xFF; 16].into()),
+        None,
+        None,
+        None,
+    );
+}
+
+#[test]
+fn deserialize_mic_encrypted_incorrect_metadata_key_hmac_key_error() {
+    // bad metadata key hmac key -> bad calculated metadata key mac
+    do_bad_deserialize_params::<CryptoProviderImpl>(
+        MicEncryptedSectionDeserializationError::MetadataKeyMacMismatch,
+        None,
+        Some([0xFF; 32].into()),
+        None,
+        None,
+    );
+}
+
+#[test]
+fn deserialize_mic_encrypted_incorrect_mic_hmac_key_error() {
+    // bad mic hmac key -> bad calculated mic
+    do_bad_deserialize_params::<CryptoProviderImpl>(
+        MicEncryptedSectionDeserializationError::MicMismatch,
+        None,
+        None,
+        Some([0xFF; 32].into()),
+        None,
+    );
+}
+
+#[test]
+fn deserialize_mic_encrypted_incorrect_expected_metadata_key_hmac_error() {
+    // bad expected metadata key mac
+    do_bad_deserialize_params::<CryptoProviderImpl>(
+        MicEncryptedSectionDeserializationError::MetadataKeyMacMismatch,
+        None,
+        None,
+        None,
+        Some([0xFF; 32]),
+    );
+}
+
+#[test]
+fn deserialize_mic_encrypted_incorrect_salt_error() {
+    // bad salt -> bad iv -> bad metadata key plaintext
+    do_bad_deserialize_tampered(
+        MicEncryptedSectionDeserializationError::MetadataKeyMacMismatch,
+        |_| {},
+        |adv| adv[23..39].copy_from_slice(&[0xFF; 16]),
+    );
+}
+
+#[test]
+fn deserialize_mic_encrypted_de_that_wont_parse() {
+    // add an extra byte to the section, leading it to try to parse a DE that doesn't exist
+    do_bad_deserialize_tampered(
+        MicEncryptedSectionDeserializationError::DeParseError,
+        |sec| sec.try_push(0xFF).unwrap(),
+        |_| {},
+    );
+}
+
+#[test]
+fn deserialize_mic_encrypted_tampered_mic_error() {
+    // flip the a bit in the first MIC byte
+    do_bad_deserialize_tampered(
+        MicEncryptedSectionDeserializationError::MicMismatch,
+        |_| {},
+        |adv| {
+            let mic_start = adv.len() - 16;
+            adv[mic_start] ^= 0x01
+        },
+    );
+}
+
+#[test]
+fn deserialize_mic_encrypted_tampered_payload_error() {
+    // flip the last payload bit
+    do_bad_deserialize_tampered(
+        MicEncryptedSectionDeserializationError::MicMismatch,
+        |_| {},
+        |adv| *adv.last_mut().unwrap() ^= 0x01,
+    );
+}
+
+/// Attempt a decryption that will fail when using the provided parameters for decryption only.
+/// `None` means use the correct value for that parameter.
+fn do_bad_deserialize_params<C: CryptoProvider>(
+    error: MicEncryptedSectionDeserializationError,
+    aes_key: Option<crypto_provider::aes::Aes128Key>,
+    metadata_key_hmac_key: Option<np_hkdf::NpHmacSha256Key<C>>,
+    mic_hmac_key: Option<np_hkdf::NpHmacSha256Key<C>>,
+    expected_metadata_key_hmac: Option<[u8; 32]>,
+) {
+    let metadata_key = [1; 16];
+    let key_seed = [2; 32];
+    let section_salt: V1Salt<C> = [3; 16].into();
+    let identity_type = EncryptedIdentityDataElementType::Private;
+    let key_seed_hkdf = np_hkdf::NpKeySeedHkdf::new(&key_seed);
+
+    let mut adv_builder = AdvBuilder::new();
+
+    let mut section_builder = adv_builder
+        .section_builder(MicEncrypted::new_for_testing(
+            identity_type,
+            section_salt,
+            &metadata_key,
+            &key_seed_hkdf,
+        ))
+        .unwrap();
+
+    section_builder.add_de(|_| TxPowerDataElement::from(TxPower::try_from(7).unwrap())).unwrap();
+
+    section_builder.add_to_advertisement();
+
+    let adv = adv_builder.into_advertisement();
+
+    let (remaining, header) = parse_adv_header(adv.as_slice()).unwrap();
+
+    let v1_header = if let AdvHeader::V1(h) = header {
+        h
+    } else {
+        panic!("incorrect header");
+    };
+
+    let sections = parse_sections(&v1_header, remaining).unwrap();
+    assert_eq!(1, sections.len());
+
+    let section = sections.into_iter().next().unwrap();
+    let enc_section = section.as_ciphertext().unwrap();
+    let contents = if let CiphertextSection::MicEncryptedIdentity(contents) = &enc_section {
+        contents
+    } else {
+        panic!("incorrect flavor");
+    };
+
+    let unsigned_identity_resolution_material = SectionIdentityResolutionMaterial {
+        aes_key: aes_key.unwrap_or_else(|| np_hkdf::UnsignedSectionKeys::aes_key(&key_seed_hkdf)),
+        metadata_key_hmac_key: *metadata_key_hmac_key
+            .unwrap_or_else(|| key_seed_hkdf.extended_unsigned_metadata_key_hmac_key())
+            .as_bytes(),
+        expected_metadata_key_hmac: expected_metadata_key_hmac.unwrap_or_else(|| {
+            key_seed_hkdf.extended_unsigned_metadata_key_hmac_key().calculate_hmac(&metadata_key)
+        }),
+    };
+    let identity_resolution_material =
+        UnsignedSectionIdentityResolutionMaterial::from_raw(unsigned_identity_resolution_material);
+
+    let verification_material = UnsignedSectionVerificationMaterial {
+        mic_hmac_key: *mic_hmac_key
+            .unwrap_or_else(|| np_hkdf::UnsignedSectionKeys::hmac_key(&key_seed_hkdf))
+            .as_bytes(),
+    };
+
+    assert_eq!(
+        error,
+        contents
+            .try_deserialize::<C>(&identity_resolution_material, &verification_material)
+            .unwrap_err()
+    );
+}
+
+fn do_bad_deserialize_tampered<
+    S: Fn(&mut CapacityLimitedVec<u8, NP_ADV_MAX_SECTION_LEN>),
+    A: Fn(&mut Vec<u8>),
+>(
+    expected_error: MicEncryptedSectionDeserializationError,
+    mangle_section: S,
+    mangle_adv: A,
+) {
+    let metadata_key = [1; 16];
+    let key_seed = [2; 32];
+    let section_salt: V1Salt<CryptoProviderImpl> = [3; 16].into();
+    let identity_type = EncryptedIdentityDataElementType::Private;
+    let key_seed_hkdf = np_hkdf::NpKeySeedHkdf::new(&key_seed);
+
+    let mut adv_builder = AdvBuilder::new();
+
+    let mut section_builder = adv_builder
+        .section_builder(MicEncrypted::new_for_testing(
+            identity_type,
+            section_salt,
+            &metadata_key,
+            &key_seed_hkdf,
+        ))
+        .unwrap();
+
+    section_builder.add_de(|_| TxPowerDataElement::from(TxPower::try_from(7).unwrap())).unwrap();
+
+    mangle_section(&mut section_builder.section);
+
+    section_builder.add_to_advertisement();
+
+    let adv = adv_builder.into_advertisement();
+    let mut adv_mut = adv.as_slice().to_vec();
+    mangle_adv(&mut adv_mut);
+
+    let (remaining, header) = parse_adv_header(&adv_mut).unwrap();
+
+    let v1_header = if let AdvHeader::V1(h) = header {
+        h
+    } else {
+        panic!("incorrect header");
+    };
+
+    let sections = parse_sections(&v1_header, remaining).unwrap();
+    assert_eq!(1, sections.len());
+
+    let section = sections.into_iter().next().unwrap();
+    let enc_section = section.as_ciphertext().unwrap();
+    let contents = if let CiphertextSection::MicEncryptedIdentity(contents) = &enc_section {
+        contents
+    } else {
+        panic!("incorrect flavor");
+    };
+
+    // generate a random key pair since we need _some_ public key
+    let key_pair = np_ed25519::KeyPair::<CryptoProviderImpl>::generate();
+
+    let crypto_material = HkdfCryptoMaterial::new(&key_seed, &metadata_key, key_pair.public());
+    let identity_resolution_material =
+        crypto_material.unsigned_identity_resolution_material::<CryptoProviderImpl>();
+    let verification_material =
+        crypto_material.unsigned_verification_material::<CryptoProviderImpl>();
+
+    assert_eq!(
+        expected_error,
+        contents
+            .try_deserialize::<CryptoProviderImpl>(
+                &identity_resolution_material,
+                &verification_material,
+            )
+            .unwrap_err()
+    );
+}
diff --git a/nearby/presence/np_adv/src/extended/deserialize/encrypted_section/mod.rs b/nearby/presence/np_adv/src/extended/deserialize/encrypted_section/mod.rs
new file mode 100644
index 0000000..ad305f5
--- /dev/null
+++ b/nearby/presence/np_adv/src/extended/deserialize/encrypted_section/mod.rs
@@ -0,0 +1,293 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use crate::{
+    credential::v1::*,
+    extended::{
+        deserialize::{
+            parse_non_identity_des, DecryptedSection, EncryptedIdentityMetadata, EncryptionInfo,
+            SectionContents, SectionMic, VerificationMode,
+        },
+        section_signature_payload::*,
+        to_array_view, METADATA_KEY_LEN, NP_ADV_MAX_SECTION_LEN,
+    },
+    V1Header, NP_SVC_UUID,
+};
+use array_view::ArrayView;
+use crypto_provider::{
+    aes::ctr::{AesCtr, AesCtrNonce, NonceAndCounter, AES_CTR_NONCE_LEN},
+    hmac::Hmac,
+    CryptoProvider,
+};
+use np_hkdf::v1_salt::V1Salt;
+
+#[cfg(test)]
+mod mic_decrypt_tests;
+#[cfg(test)]
+mod signature_decrypt_tests;
+
+#[derive(PartialEq, Eq, Debug)]
+pub(crate) struct SignatureEncryptedSection<'a> {
+    pub(crate) section_header: u8,
+    pub(crate) adv_header: &'a V1Header,
+    pub(crate) encryption_info: EncryptionInfo,
+    pub(crate) identity: EncryptedIdentityMetadata,
+    /// All ciphertext (Contents of identity DE + all DEs)
+    /// Length must be in `[METADATA_KEY_LEN, NP_ADV_MAX_SECTION_LEN]`.
+    pub(crate) all_ciphertext: &'a [u8],
+}
+
+impl<'a> SignatureEncryptedSection<'a> {
+    /// Decrypt the ciphertext and check that the first [METADATA_KEY_LEN] bytes match the expected HMAC.
+    /// The remaining data is not verified.
+    ///
+    /// Returns `Ok` if the section was an identity match.
+    /// Otherwise, returns `Err`.
+    pub(crate) fn try_decrypt<P: CryptoProvider>(
+        &self,
+        identity_resolution_material: &SignedSectionIdentityResolutionMaterial,
+    ) -> Result<ArrayView<u8, NP_ADV_MAX_SECTION_LEN>, SignatureEncryptedSectionDeserializationError>
+    {
+        let salt: V1Salt<P> = self.encryption_info.salt().into();
+        let (mut buf, mut cipher) = try_decrypt_metadata_key_prefix::<P>(
+            self.all_ciphertext,
+            salt.derive(Some(self.identity.offset)).expect("AES-CTR nonce is a valid HKDF size"),
+            identity_resolution_material.as_raw_resolution_material(),
+        )
+        .ok_or(SignatureEncryptedSectionDeserializationError::MetadataKeyMacMismatch)?;
+
+        // decrypt everything else
+        cipher.decrypt(&mut buf[METADATA_KEY_LEN..]);
+
+        Ok(to_array_view(buf))
+    }
+
+    /// Try deserializing into a [Section].
+    ///
+    /// Returns an error if the credential is incorrect or if the section data is malformed.
+    pub(crate) fn try_deserialize<P>(
+        &self,
+        identity_resolution_material: &SignedSectionIdentityResolutionMaterial,
+        verification_material: &SignedSectionVerificationMaterial,
+    ) -> Result<DecryptedSection, SignatureEncryptedSectionDeserializationError>
+    where
+        P: CryptoProvider,
+    {
+        let raw_salt = self.encryption_info.salt();
+        let salt: V1Salt<P> = raw_salt.into();
+        let plaintext = self.try_decrypt::<P>(identity_resolution_material)?;
+
+        // won't panic: plaintext length is at least METADATA_KEY_LEN
+        let (metadata_key, remaining) = plaintext.as_slice().split_at(METADATA_KEY_LEN);
+        let metadata_key =
+            metadata_key.try_into().expect("slice is the same length as the desired array");
+
+        if remaining.len() < crypto_provider::ed25519::SIGNATURE_LENGTH {
+            return Err(SignatureEncryptedSectionDeserializationError::SignatureMissing);
+        }
+
+        // should not panic due to above check
+        let (non_identity_des, sig) =
+            remaining.split_at(remaining.len() - crypto_provider::ed25519::SIGNATURE_LENGTH);
+
+        // de offset 2 because of leading encryption info and identity DEs
+        let (_, ref_des) = parse_non_identity_des(2)(non_identity_des)
+            .map_err(|_| SignatureEncryptedSectionDeserializationError::DeParseError)?;
+
+        // All implementations only check for 64 bytes, and this will always result in a 64 byte signature.
+        let expected_signature =
+            np_ed25519::Signature::<P>::try_from(sig).expect("Signature is always 64 bytes.");
+
+        let nonce = salt
+            .derive::<{ AES_CTR_NONCE_LEN }>(Some(self.identity.offset))
+            .expect("AES-CTR nonce is a valid HKDF length");
+
+        // all other plaintext, except for the signature.
+        // Won't panic because we know we just parsed the sig de from this,
+        // and we're using the as-parsed lengths
+        let remainder = &plaintext.as_slice()[..plaintext.len() - sig.len()];
+
+        let section_signature_payload = SectionSignaturePayload::from_deserialized_parts(
+            self.adv_header.header_byte,
+            self.section_header,
+            &self.encryption_info.bytes,
+            &nonce,
+            self.identity.header_bytes,
+            remainder,
+        );
+
+        let public_key = verification_material.signature_verification_public_key();
+
+        section_signature_payload.verify(&expected_signature, &public_key).map_err(|e| {
+            // Length of the payload should fit in the signature verification buffer.
+            debug_assert!(e != np_ed25519::SignatureVerificationError::PayloadTooBig);
+
+            SignatureEncryptedSectionDeserializationError::SignatureMismatch
+        })?;
+
+        Ok(DecryptedSection::new(
+            self.identity.identity_type,
+            VerificationMode::Signature,
+            metadata_key,
+            raw_salt,
+            SectionContents::new(self.section_header, &ref_des),
+        ))
+    }
+}
+
+/// Should not be exposed publicly as it's too detailed.
+#[derive(Debug, PartialEq, Eq)]
+pub(crate) enum SignatureEncryptedSectionDeserializationError {
+    /// The decrypted metadata key did not have the right MAC
+    MetadataKeyMacMismatch,
+    /// The provided signature did not match the calculated signature
+    SignatureMismatch,
+    /// The provided signature is missing
+    SignatureMissing,
+    /// Decrypted DEs could not be parsed, possibly because the ciphertext was tampered with, as
+    /// DE parsing has to be done before the signature is verified
+    DeParseError,
+}
+
+#[derive(PartialEq, Eq, Debug)]
+pub(crate) struct MicEncryptedSection<'a> {
+    pub(crate) section_header: u8,
+    pub(crate) adv_header: &'a V1Header,
+    pub(crate) encryption_info: EncryptionInfo,
+    pub(crate) mic: SectionMic,
+    pub(crate) identity: EncryptedIdentityMetadata,
+    /// All ciphertext (Contents of identity DE + all DEs).
+    /// Length must be in `[METADATA_KEY_LEN, NP_ADV_MAX_SECTION_LEN]`.
+    pub(crate) all_ciphertext: &'a [u8],
+}
+
+impl<'a> MicEncryptedSection<'a> {
+    /// Attempt to decrypt and verify the encrypted portion of the section with the provided
+    /// precalculated cryptographic material for an MIC-encrypted section.
+    ///
+    /// If successful, returns a buffer containing the decrypted plaintext.
+    pub(crate) fn try_decrypt<P: CryptoProvider>(
+        &self,
+        identity_resolution_material: &UnsignedSectionIdentityResolutionMaterial,
+        verification_material: &UnsignedSectionVerificationMaterial,
+    ) -> Result<ArrayView<u8, NP_ADV_MAX_SECTION_LEN>, MicEncryptedSectionDeserializationError>
+    {
+        let salt: V1Salt<P> = self.encryption_info.salt().into();
+        let nonce =
+            salt.derive(Some(self.identity.offset)).expect("AES-CTR nonce is a valid HKDF size");
+
+        let (mut buf, mut cipher) = try_decrypt_metadata_key_prefix::<P>(
+            self.all_ciphertext,
+            nonce,
+            identity_resolution_material.as_raw_resolution_material(),
+        )
+        .ok_or(MicEncryptedSectionDeserializationError::MetadataKeyMacMismatch)?;
+
+        // if mic is ok, the section was generated by someone holding at least the shared credential
+        let mut mic_hmac = verification_material.mic_hmac_key::<P>().build_hmac();
+        mic_hmac.update(&NP_SVC_UUID);
+        mic_hmac.update(&[self.adv_header.header_byte]);
+        mic_hmac.update(&[self.section_header]);
+        mic_hmac.update(&self.encryption_info.bytes);
+        mic_hmac.update(&nonce);
+        mic_hmac.update(&self.identity.header_bytes);
+        mic_hmac.update(self.all_ciphertext);
+        mic_hmac
+            // adv only contains first 16 bytes of HMAC
+            .verify_truncated_left(&self.mic.mic)
+            .map_err(|_e| MicEncryptedSectionDeserializationError::MicMismatch)?;
+
+        // decrypt everything else
+        cipher.decrypt(&mut buf[METADATA_KEY_LEN..]);
+
+        Ok(to_array_view(buf))
+    }
+
+    /// Try deserializing into a [Section].
+    ///
+    /// Returns an error if the credential is incorrect or if the section data is malformed.
+    pub(crate) fn try_deserialize<P>(
+        &self,
+        identity_resolution_material: &UnsignedSectionIdentityResolutionMaterial,
+        verification_material: &UnsignedSectionVerificationMaterial,
+    ) -> Result<DecryptedSection, MicEncryptedSectionDeserializationError>
+    where
+        P: CryptoProvider,
+    {
+        let plaintext =
+            self.try_decrypt::<P>(identity_resolution_material, verification_material)?;
+        // won't panic: plaintext is at least METADATA_KEY_LEN long
+        let (metadata_key, remaining_des) = plaintext.as_slice().split_at(METADATA_KEY_LEN);
+        let metadata_key =
+            metadata_key.try_into().expect("slice is the same length as the desired array");
+        // offset 2 for encryption info and identity DEs
+        let (_, ref_des) = parse_non_identity_des(2)(remaining_des)
+            .map_err(|_| MicEncryptedSectionDeserializationError::DeParseError)?;
+
+        Ok(DecryptedSection::new(
+            self.identity.identity_type,
+            VerificationMode::Mic,
+            metadata_key,
+            self.encryption_info.salt(),
+            SectionContents::new(self.section_header, &ref_des),
+        ))
+    }
+}
+
+/// Should not be exposed publicly as it's too detailed.
+#[derive(Debug, PartialEq, Eq)]
+pub(crate) enum MicEncryptedSectionDeserializationError {
+    /// Plaintext metadata key did not have the expected MAC
+    MetadataKeyMacMismatch,
+    /// Calculated MIC did not match MIC from section
+    MicMismatch,
+    /// Parsing of decrypted DEs failed
+    DeParseError,
+}
+
+/// Decrypt a ciphertext buffer whose first [METADATA_KEY_LEN] bytes of plaintext are, maybe, the
+/// metadata key for an NP identity.
+///
+/// Returns `Some` if decrypting the first [METADATA_KEY_LEN] bytes produces plaintext whose HMAC
+/// matches the expected MAC. Only the first [METADATA_KEY_LEN] bytes are decrypted. The cipher is
+/// returned along with the buffer as it is in the appropriate state to continue decrypting the
+/// remaining ciphertext.
+///
+/// Returns `None` if the plaintext does not match the expected HMAC.
+///
+/// # Panics
+///
+/// Panics if `ciphertext`'s length is not in `[METADATA_KEY_LEN, NP_ADV_MAX_SECTION_LEN]`.
+#[allow(clippy::type_complexity)]
+fn try_decrypt_metadata_key_prefix<C: CryptoProvider>(
+    ciphertext: &[u8],
+    nonce: AesCtrNonce,
+    identity_resolution_material: &SectionIdentityResolutionMaterial,
+) -> Option<(tinyvec::ArrayVec<[u8; NP_ADV_MAX_SECTION_LEN]>, C::AesCtr128)> {
+    assert!(ciphertext.len() <= NP_ADV_MAX_SECTION_LEN);
+    let mut decrypt_buf = tinyvec::ArrayVec::<[u8; NP_ADV_MAX_SECTION_LEN]>::new();
+    let aes_key = &identity_resolution_material.aes_key;
+    let mut cipher = C::AesCtr128::new(aes_key, NonceAndCounter::from_nonce(nonce));
+
+    decrypt_buf.extend_from_slice(ciphertext);
+    cipher.decrypt(&mut decrypt_buf[..METADATA_KEY_LEN]);
+
+    let metadata_key_hmac_key: np_hkdf::NpHmacSha256Key<C> =
+        identity_resolution_material.metadata_key_hmac_key.into();
+    let expected_metadata_key_hmac = identity_resolution_material.expected_metadata_key_hmac;
+    metadata_key_hmac_key
+        .verify_hmac(&decrypt_buf[..METADATA_KEY_LEN], expected_metadata_key_hmac)
+        .ok()
+        .map(|_| (decrypt_buf, cipher))
+}
diff --git a/nearby/presence/np_adv/src/extended/deserialize/encrypted_section/signature_decrypt_tests.rs b/nearby/presence/np_adv/src/extended/deserialize/encrypted_section/signature_decrypt_tests.rs
new file mode 100644
index 0000000..b78cad9
--- /dev/null
+++ b/nearby/presence/np_adv/src/extended/deserialize/encrypted_section/signature_decrypt_tests.rs
@@ -0,0 +1,512 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+extern crate std;
+
+use crate::extended::data_elements::TxPowerDataElement;
+use crate::extended::deserialize::{DecryptedSection, EncryptionInfo, RawV1Salt};
+use crate::shared_data::TxPower;
+use crate::{
+    credential::v1::*,
+    de_type::EncryptedIdentityDataElementType,
+    extended::{
+        deserialize::{
+            encrypted_section::{
+                SignatureEncryptedSection, SignatureEncryptedSectionDeserializationError,
+            },
+            parse_sections,
+            test_stubs::IntermediateSectionExt,
+            CiphertextSection, EncryptedIdentityMetadata, OffsetDataElement, SectionContents,
+            VerificationMode,
+        },
+        section_signature_payload::*,
+        serialize::{
+            AdvBuilder, CapacityLimitedVec, SignedEncrypted, SingleTypeDataElement,
+            WriteDataElement,
+        },
+        NP_ADV_MAX_SECTION_LEN,
+    },
+    parse_adv_header, AdvHeader, Section,
+};
+use array_view::ArrayView;
+use crypto_provider::{aes::ctr::AesCtrNonce, CryptoProvider};
+use crypto_provider_default::CryptoProviderImpl;
+use np_hkdf::v1_salt;
+use np_hkdf::v1_salt::V1Salt;
+use sink::Sink;
+use std::{prelude::rust_2021::*, vec};
+
+type KeyPair = np_ed25519::KeyPair<CryptoProviderImpl>;
+
+#[test]
+fn deserialize_signature_encrypted_correct_keys() {
+    let metadata_key = [1; 16];
+    let key_seed = [2; 32];
+    let raw_salt = RawV1Salt([3; 16]);
+    let section_salt = V1Salt::<CryptoProviderImpl>::from(raw_salt);
+    let identity_type = EncryptedIdentityDataElementType::Private;
+    let key_seed_hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+    let key_pair = KeyPair::generate();
+
+    let mut adv_builder = AdvBuilder::new();
+
+    let mut section_builder = adv_builder
+        .section_builder(SignedEncrypted::new(
+            identity_type,
+            V1Salt::from(*section_salt.as_array_ref()),
+            &metadata_key,
+            &key_pair,
+            &key_seed_hkdf,
+        ))
+        .unwrap();
+
+    let txpower_de = TxPowerDataElement::from(TxPower::try_from(7).unwrap());
+    section_builder.add_de(|_| txpower_de.clone()).unwrap();
+
+    section_builder.add_to_advertisement();
+
+    let adv = adv_builder.into_advertisement();
+
+    let (remaining, header) = parse_adv_header(adv.as_slice()).unwrap();
+
+    let adv_header = if let AdvHeader::V1(h) = header {
+        h
+    } else {
+        panic!("incorrect header");
+    };
+
+    let sections = parse_sections(&adv_header, remaining).unwrap();
+    assert_eq!(1, sections.len());
+
+    let section = sections.into_iter().next().unwrap();
+    let enc_section = section.as_ciphertext().unwrap();
+    let contents = if let CiphertextSection::SignatureEncryptedIdentity(contents) = &enc_section {
+        contents
+    } else {
+        panic!("incorrect flavor");
+    };
+
+    let mut encryption_info_bytes = [0_u8; 19];
+    encryption_info_bytes[0..2].copy_from_slice(&[0x91, 0x10]);
+    encryption_info_bytes[2] = 0x08;
+    encryption_info_bytes[3..].copy_from_slice(section_salt.as_slice());
+
+    let section_len = 19 + 2 + 16 + 2 + 64;
+    assert_eq!(
+        &SignatureEncryptedSection {
+            section_header: section_len,
+            adv_header: &adv_header,
+            encryption_info: EncryptionInfo { bytes: encryption_info_bytes },
+            identity: EncryptedIdentityMetadata {
+                header_bytes: [0x90, 0x1],
+                offset: 1.into(),
+                identity_type: EncryptedIdentityDataElementType::Private,
+            },
+            // adv header + salt + section header + encryption info + identity header
+            all_ciphertext: &adv.as_slice()[1 + 1 + 19 + 2..],
+        },
+        contents
+    );
+
+    // plaintext is correct
+    {
+        let crypto_material = MinimumFootprintV1CryptoMaterial::new::<CryptoProviderImpl>(
+            key_seed,
+            key_seed_hkdf.extended_unsigned_metadata_key_hmac_key().calculate_hmac(&metadata_key),
+            key_seed_hkdf.extended_signed_metadata_key_hmac_key().calculate_hmac(&metadata_key),
+            key_pair.public(),
+        );
+        let signed_identity_resolution_material =
+            crypto_material.signed_identity_resolution_material::<CryptoProviderImpl>();
+        let decrypted = contents
+            .try_decrypt::<CryptoProviderImpl>(&signed_identity_resolution_material)
+            .unwrap();
+
+        let mut expected = metadata_key.as_slice().to_vec();
+        // battery de
+        expected.extend_from_slice(txpower_de.de_header().serialize().as_slice());
+        txpower_de.write_de_contents(&mut expected);
+
+        let nonce: AesCtrNonce = section_salt.derive(Some(1.into())).unwrap();
+
+        let mut encryption_info = vec![0x91, 0x10, 0x08];
+        encryption_info.extend_from_slice(section_salt.as_slice());
+        let encryption_info: [u8; EncryptionInfo::TOTAL_DE_LEN] =
+            encryption_info.try_into().unwrap();
+
+        let sig_payload = SectionSignaturePayload::from_deserialized_parts(
+            0x20,
+            section_len,
+            &encryption_info,
+            &nonce,
+            [0x90, 0x1],
+            &expected,
+        );
+
+        expected.extend_from_slice(&sig_payload.sign(&key_pair).to_bytes());
+
+        assert_eq!(&expected, decrypted.as_slice());
+    }
+
+    // deserialization to Section works
+    {
+        let crypto_material = MinimumFootprintV1CryptoMaterial::new::<CryptoProviderImpl>(
+            key_seed,
+            key_seed_hkdf.extended_unsigned_metadata_key_hmac_key().calculate_hmac(&metadata_key),
+            key_seed_hkdf.extended_signed_metadata_key_hmac_key().calculate_hmac(&metadata_key),
+            key_pair.public(),
+        );
+        let signed_identity_resolution_material =
+            crypto_material.signed_identity_resolution_material::<CryptoProviderImpl>();
+        let signed_verification_material =
+            crypto_material.signed_verification_material::<CryptoProviderImpl>();
+
+        let section = contents
+            .try_deserialize::<CryptoProviderImpl>(
+                &signed_identity_resolution_material,
+                &signed_verification_material,
+            )
+            .unwrap();
+
+        assert_eq!(
+            DecryptedSection::new(
+                EncryptedIdentityDataElementType::Private,
+                VerificationMode::Signature,
+                metadata_key,
+                raw_salt,
+                SectionContents {
+                    section_header: 19 + 2 + 16 + 1 + 1 + 64,
+                    // battery DE
+                    de_data: ArrayView::try_from_slice(&[7]).unwrap(),
+                    data_elements: vec![OffsetDataElement {
+                        offset: 2.into(),
+                        de_type: 0x05_u8.into(),
+                        start_of_contents: 0,
+                        contents_len: 1,
+                    }],
+                },
+            ),
+            section
+        );
+
+        assert_eq!(
+            vec![(
+                v1_salt::DataElementOffset::from(2_usize),
+                TxPowerDataElement::DE_TYPE,
+                vec![7u8]
+            )],
+            section
+                .data_elements()
+                .map(|de| (de.offset(), de.de_type(), de.contents().to_vec()))
+                .collect::<Vec<_>>()
+        );
+    }
+}
+
+#[test]
+fn deserialize_signature_encrypted_incorrect_aes_key_error() {
+    // bad aes key -> bad metadata key plaintext
+    do_bad_deserialize_params::<CryptoProviderImpl>(
+        SignatureEncryptedSectionDeserializationError::MetadataKeyMacMismatch,
+        Some([0xFF; 16].into()),
+        None,
+        None,
+        None,
+    );
+}
+
+#[test]
+fn deserialize_signature_encrypted_incorrect_metadata_key_hmac_key_error() {
+    // bad metadata key hmac key -> bad calculated metadata key mac
+    do_bad_deserialize_params::<CryptoProviderImpl>(
+        SignatureEncryptedSectionDeserializationError::MetadataKeyMacMismatch,
+        None,
+        Some([0xFF; 32].into()),
+        None,
+        None,
+    );
+}
+
+#[test]
+fn deserialize_signature_encrypted_incorrect_expected_metadata_key_hmac_error() {
+    // bad expected metadata key mac
+    do_bad_deserialize_params::<CryptoProviderImpl>(
+        SignatureEncryptedSectionDeserializationError::MetadataKeyMacMismatch,
+        None,
+        None,
+        Some([0xFF; 32]),
+        None,
+    );
+}
+
+#[test]
+fn deserialize_signature_encrypted_incorrect_pub_key_error() {
+    // a random pub key will lead to signature mismatch
+    do_bad_deserialize_params::<CryptoProviderImpl>(
+        SignatureEncryptedSectionDeserializationError::SignatureMismatch,
+        None,
+        None,
+        None,
+        Some(KeyPair::generate().public()),
+    );
+}
+
+#[test]
+fn deserialize_signature_encrypted_incorrect_salt_error() {
+    // bad salt -> bad iv -> bad metadata key plaintext
+    do_bad_deserialize_tampered(
+        SignatureEncryptedSectionDeserializationError::MetadataKeyMacMismatch,
+        None,
+        |_| {},
+        |adv_mut| adv_mut[5..21].copy_from_slice(&[0xFF; 16]),
+    )
+}
+
+#[test]
+fn deserialize_signature_encrypted_tampered_signature_error() {
+    do_bad_deserialize_tampered(
+        SignatureEncryptedSectionDeserializationError::SignatureMismatch,
+        None,
+        |_| {},
+        // flip a bit in the middle of the signature
+        |adv_mut| {
+            let len = adv_mut.len();
+            adv_mut[len - 30] ^= 0x1
+        },
+    )
+}
+
+#[test]
+fn deserialize_signature_encrypted_tampered_ciphertext_error() {
+    do_bad_deserialize_tampered(
+        SignatureEncryptedSectionDeserializationError::SignatureMismatch,
+        None,
+        |_| {},
+        // flip a bit outside of the signature
+        |adv_mut| {
+            let len = adv_mut.len();
+            adv_mut[len - 1 - 64] ^= 0x1
+        },
+    )
+}
+
+#[test]
+fn deserialize_signature_encrypted_missing_signature_de_error() {
+    let section_len = 19 + 2 + 16 + 1 + 1;
+    do_bad_deserialize_tampered(
+        SignatureEncryptedSectionDeserializationError::SignatureMissing,
+        Some(section_len),
+        |_| {},
+        |adv_mut| {
+            // chop off signature DE
+            adv_mut.truncate(adv_mut.len() - 64);
+            // fix section length
+            adv_mut[1] = section_len;
+        },
+    )
+}
+
+#[test]
+fn deserialize_signature_encrypted_des_wont_parse() {
+    do_bad_deserialize_tampered(
+        SignatureEncryptedSectionDeserializationError::DeParseError,
+        Some(19 + 2 + 16 + 1 + 1 + 64 + 1),
+        // add an impossible DE
+        |section| section.try_push(0xFF).unwrap(),
+        |_| {},
+    )
+}
+
+/// Attempt a deserialization that will fail when using the provided parameters for decryption only.
+/// `None` means use the correct value for that parameter.
+fn do_bad_deserialize_params<C: CryptoProvider>(
+    error: SignatureEncryptedSectionDeserializationError,
+    aes_key: Option<crypto_provider::aes::Aes128Key>,
+    metadata_key_hmac_key: Option<np_hkdf::NpHmacSha256Key<C>>,
+    expected_metadata_key_hmac: Option<[u8; 32]>,
+    pub_key: Option<np_ed25519::PublicKey<C>>,
+) {
+    let metadata_key = [1; 16];
+    let key_seed = [2; 32];
+    let section_salt: v1_salt::V1Salt<C> = [3; 16].into();
+    let identity_type = EncryptedIdentityDataElementType::Private;
+    let key_seed_hkdf = np_hkdf::NpKeySeedHkdf::new(&key_seed);
+    let key_pair = np_ed25519::KeyPair::<C>::generate();
+
+    let mut adv_builder = AdvBuilder::new();
+
+    let mut section_builder = adv_builder
+        .section_builder(SignedEncrypted::new(
+            identity_type,
+            section_salt,
+            &metadata_key,
+            &key_pair,
+            &key_seed_hkdf,
+        ))
+        .unwrap();
+
+    section_builder.add_de_res(|_| TxPower::try_from(2).map(TxPowerDataElement::from)).unwrap();
+
+    section_builder.add_to_advertisement();
+
+    let adv = adv_builder.into_advertisement();
+
+    let (remaining, header) = parse_adv_header(adv.as_slice()).unwrap();
+
+    let v1_header = if let AdvHeader::V1(h) = header {
+        h
+    } else {
+        panic!("incorrect header");
+    };
+
+    let sections = parse_sections(&v1_header, remaining).unwrap();
+    assert_eq!(1, sections.len());
+
+    let section = sections.into_iter().next().unwrap();
+    let enc_section = section.as_ciphertext().unwrap();
+    let contents = if let CiphertextSection::SignatureEncryptedIdentity(contents) = &enc_section {
+        contents
+    } else {
+        panic!("incorrect flavor");
+    };
+
+    let signed_identity_resolution_material =
+        SignedSectionIdentityResolutionMaterial::from_raw(SectionIdentityResolutionMaterial {
+            aes_key: aes_key.unwrap_or_else(|| key_seed_hkdf.extended_signed_section_aes_key()),
+
+            metadata_key_hmac_key: *metadata_key_hmac_key
+                .unwrap_or_else(|| key_seed_hkdf.extended_signed_metadata_key_hmac_key())
+                .as_bytes(),
+            expected_metadata_key_hmac: expected_metadata_key_hmac.unwrap_or_else(|| {
+                key_seed_hkdf.extended_signed_metadata_key_hmac_key().calculate_hmac(&metadata_key)
+            }),
+        });
+
+    let signed_verification_material = SignedSectionVerificationMaterial {
+        pub_key: pub_key.unwrap_or_else(|| key_pair.public()).to_bytes(),
+    };
+
+    assert_eq!(
+        error,
+        contents
+            .try_deserialize::<C>(
+                &signed_identity_resolution_material,
+                &signed_verification_material,
+            )
+            .unwrap_err()
+    );
+}
+
+/// Run a test that mangles the advertisement contents before attempting to deserialize.
+///
+/// Since the advertisement is ciphertext, only changes outside
+fn do_bad_deserialize_tampered<
+    A: Fn(&mut Vec<u8>),
+    S: Fn(&mut CapacityLimitedVec<u8, NP_ADV_MAX_SECTION_LEN>),
+>(
+    expected_error: SignatureEncryptedSectionDeserializationError,
+    expected_section_len: Option<u8>,
+    mangle_section: S,
+    mangle_adv_contents: A,
+) {
+    let metadata_key = [1; 16];
+    let key_seed = [2; 32];
+    let section_salt: v1_salt::V1Salt<CryptoProviderImpl> = [3; 16].into();
+    let identity_type = EncryptedIdentityDataElementType::Private;
+    let key_seed_hkdf = np_hkdf::NpKeySeedHkdf::new(&key_seed);
+    let key_pair = KeyPair::generate();
+
+    let mut adv_builder = AdvBuilder::new();
+
+    let mut section_builder = adv_builder
+        .section_builder(SignedEncrypted::new(
+            identity_type,
+            section_salt,
+            &metadata_key,
+            &key_pair,
+            &key_seed_hkdf,
+        ))
+        .unwrap();
+
+    section_builder.add_de_res(|_| TxPower::try_from(2).map(TxPowerDataElement::from)).unwrap();
+
+    mangle_section(&mut section_builder.section);
+
+    section_builder.add_to_advertisement();
+
+    let adv = adv_builder.into_advertisement();
+    let mut adv_mut = adv.as_slice().to_vec();
+    mangle_adv_contents(&mut adv_mut);
+
+    let (remaining, header) = parse_adv_header(&adv_mut).unwrap();
+
+    let adv_header = if let AdvHeader::V1(h) = header {
+        h
+    } else {
+        panic!("incorrect header");
+    };
+
+    let sections = parse_sections(&adv_header, remaining).unwrap();
+    assert_eq!(1, sections.len());
+
+    let section = sections.into_iter().next().unwrap();
+    let enc_section = section.as_ciphertext().unwrap();
+    let contents = if let CiphertextSection::SignatureEncryptedIdentity(contents) = &enc_section {
+        contents
+    } else {
+        panic!("incorrect flavor");
+    };
+
+    let mut encryption_info_bytes = [0_u8; 19];
+    encryption_info_bytes[0..2].copy_from_slice(&[0x91, 0x10]);
+    encryption_info_bytes[2] = 0x08;
+    encryption_info_bytes[3..].copy_from_slice(&adv_mut[5..21]);
+
+    let section_len = 19 + 2 + 16 + 2 + 64;
+    assert_eq!(
+        &SignatureEncryptedSection {
+            section_header: expected_section_len.unwrap_or(section_len),
+            adv_header: &adv_header,
+            encryption_info: EncryptionInfo { bytes: encryption_info_bytes },
+            identity: EncryptedIdentityMetadata {
+                header_bytes: [0x90, 0x1],
+                offset: 1.into(),
+                identity_type: EncryptedIdentityDataElementType::Private,
+            },
+            all_ciphertext: &adv_mut[1 + 1 + 19 + 2..],
+        },
+        contents
+    );
+
+    let crypto_material = MinimumFootprintV1CryptoMaterial::new::<CryptoProviderImpl>(
+        key_seed,
+        key_seed_hkdf.extended_unsigned_metadata_key_hmac_key().calculate_hmac(&metadata_key),
+        key_seed_hkdf.extended_signed_metadata_key_hmac_key().calculate_hmac(&metadata_key),
+        key_pair.public(),
+    );
+    let identity_resolution_material =
+        crypto_material.signed_identity_resolution_material::<CryptoProviderImpl>();
+    let verification_material =
+        crypto_material.signed_verification_material::<CryptoProviderImpl>();
+
+    assert_eq!(
+        expected_error,
+        contents
+            .try_deserialize::<CryptoProviderImpl>(
+                &identity_resolution_material,
+                &verification_material,
+            )
+            .unwrap_err()
+    );
+}
diff --git a/nearby/presence/np_adv/src/extended/deserialize/mod.rs b/nearby/presence/np_adv/src/extended/deserialize/mod.rs
new file mode 100644
index 0000000..1829ad6
--- /dev/null
+++ b/nearby/presence/np_adv/src/extended/deserialize/mod.rs
@@ -0,0 +1,835 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Deserialization for V1 advertisement contents
+
+extern crate alloc;
+
+use alloc::vec::Vec;
+use core::array::TryFromSliceError;
+use core::borrow::Borrow;
+use core::slice;
+
+use nom::{branch, bytes, combinator, error, multi, number, sequence};
+use strum::IntoEnumIterator as _;
+
+use array_view::ArrayView;
+use crypto_provider::CryptoProvider;
+use np_hkdf::v1_salt::{self, V1Salt};
+
+use crate::extended::NP_V1_ADV_MAX_SECTION_COUNT;
+use crate::{
+    credential::{v1::*, V1Credential},
+    de_type::{EncryptedIdentityDataElementType, IdentityDataElementType},
+    extended::{
+        data_elements::{MIC_ENCRYPTION_SCHEME, SIGNATURE_ENCRYPTION_SCHEME},
+        de_type::{DeType, ExtendedDataElementType as _},
+        deserialize::encrypted_section::{
+            MicEncryptedSection, MicEncryptedSectionDeserializationError,
+            SignatureEncryptedSection, SignatureEncryptedSectionDeserializationError,
+        },
+        to_array_view, DeLength, ENCRYPTION_INFO_DE_TYPE, METADATA_KEY_LEN, NP_ADV_MAX_SECTION_LEN,
+    },
+    PlaintextIdentityMode, V1Header,
+};
+
+mod encrypted_section;
+
+#[cfg(test)]
+mod parse_tests;
+
+#[cfg(test)]
+mod section_tests;
+
+#[cfg(test)]
+mod test_stubs;
+
+/// Parse into [IntermediateSection]s, exposing the underlying parsing errors.
+/// Consumes all of `adv_body`.
+pub(crate) fn parse_sections<'a, 'h: 'a>(
+    adv_header: &'h V1Header,
+    adv_body: &'a [u8],
+) -> Result<Vec<IntermediateSection<'a>>, nom::Err<error::Error<&'a [u8]>>> {
+    combinator::all_consuming(multi::many_m_n(
+        1,
+        NP_V1_ADV_MAX_SECTION_COUNT,
+        IntermediateSection::parser_with_header(adv_header),
+    ))(adv_body)
+    .map(|(_rem, sections)| sections)
+}
+
+/// A partially processed section that hasn't been decrypted (if applicable) yet.
+#[derive(PartialEq, Eq, Debug)]
+// sections are large because they have a stack allocated buffer for the whole section
+#[allow(clippy::large_enum_variant)]
+pub(crate) enum IntermediateSection<'a> {
+    /// A section that was not encrypted, e.g. a public identity or no-identity section.
+    Plaintext(PlaintextSection),
+    /// A section whose contents were encrypted, e.g. a private identity section.
+    Ciphertext(CiphertextSection<'a>),
+}
+
+impl<'a> IntermediateSection<'a> {
+    fn parser_with_header(
+        adv_header: &'a V1Header,
+    ) -> impl Fn(&'a [u8]) -> nom::IResult<&[u8], IntermediateSection> {
+        move |adv_body| {
+            let (remaining, section_contents_len) =
+                combinator::verify(number::complete::u8, |sec_len| {
+                    *sec_len as usize <= NP_ADV_MAX_SECTION_LEN && *sec_len as usize > 0
+                })(adv_body)?;
+
+            // Section structure possibilities:
+            // - Public Identity DE, all other DEs
+            // - No identity DE, all other DEs (including Salt, excluding identity DEs)
+            // - Encryption information, non-public Identity header, ciphertext
+            // - MIC, encryption information, non-public Identity header, ciphertext
+
+            let parse_public_identity = combinator::map(
+                // 1 starting offset because of public identity before it
+                sequence::tuple((PublicIdentity::parse, parse_non_identity_des(1))),
+                // move closure to copy section_len into scope
+                move |(_identity, des)| {
+                    IntermediateSection::Plaintext(PlaintextSection::new(
+                        PlaintextIdentityMode::Public,
+                        SectionContents::new(/* section_header */ section_contents_len, &des),
+                    ))
+                },
+            );
+
+            // 0 starting offset because there's no identity DE
+            let parse_no_identity_de = combinator::map(parse_non_identity_des(0), move |des| {
+                IntermediateSection::Plaintext(PlaintextSection::new(
+                    PlaintextIdentityMode::None,
+                    SectionContents::new(/* section_header */ section_contents_len, &des),
+                ))
+            });
+
+            let parse_encrypted_identity = combinator::map(
+                sequence::tuple((
+                    EncryptionInfo::parse_signature,
+                    combinator::verify(
+                        combinator::consumed(sequence::tuple((
+                            EncryptedIdentityMetadata::parser_at_offset(
+                                v1_salt::DataElementOffset::from(1),
+                            ),
+                            combinator::rest,
+                        ))),
+                        // should be trivially true since section length was checked above,
+                        // but this is an invariant for EncryptedSection, so we double check
+                        |(identity_and_ciphertext, _tuple)| {
+                            (METADATA_KEY_LEN..=NP_ADV_MAX_SECTION_LEN)
+                                .contains(&identity_and_ciphertext.len())
+                        },
+                    ),
+                )),
+                move |(encryption_info, (identity_and_ciphertext, (identity, _des_ciphertext)))| {
+                    // skip identity de header -- rest of that de is ciphertext
+                    let to_skip = identity.header_bytes.len();
+                    IntermediateSection::Ciphertext(CiphertextSection::SignatureEncryptedIdentity(
+                        SignatureEncryptedSection {
+                            section_header: section_contents_len,
+                            adv_header,
+                            encryption_info,
+                            identity,
+                            all_ciphertext: &identity_and_ciphertext[to_skip..],
+                        },
+                    ))
+                },
+            );
+
+            let parse_mic_encrypted_identity = combinator::map(
+                sequence::tuple((
+                    EncryptionInfo::parse_mic,
+                    combinator::verify(
+                        combinator::consumed(sequence::tuple((
+                            EncryptedIdentityMetadata::parser_at_offset(
+                                v1_salt::DataElementOffset::from(1),
+                            ),
+                            combinator::rest,
+                        ))),
+                        // Should be trivially true since section length was checked above,
+                        // but this is an invariant for MicEncryptedSection, so we double check.
+                        // Also verify that there is enough space at the end to contain a valid-length MIC.
+                        |(identity_ciphertext_and_mic, _tuple)| {
+                            (METADATA_KEY_LEN + SectionMic::CONTENTS_LEN..=NP_ADV_MAX_SECTION_LEN)
+                                .contains(&identity_ciphertext_and_mic.len())
+                        },
+                    ),
+                )),
+                move |(
+                    encryption_info,
+                    (identity_ciphertext_and_mic, (identity, _ciphertext_and_mic)),
+                )| {
+                    // should not panic since we have already ensured a valid length
+                    let (identity_and_ciphertext, mic) = identity_ciphertext_and_mic
+                        .split_at(identity_ciphertext_and_mic.len() - SectionMic::CONTENTS_LEN);
+                    // skip identity de header -- rest of that de is ciphertext
+                    let to_skip = identity.header_bytes.len();
+                    IntermediateSection::Ciphertext(CiphertextSection::MicEncryptedIdentity(
+                        MicEncryptedSection {
+                            section_header: section_contents_len,
+                            adv_header,
+                            mic: mic.try_into().unwrap_or_else(|_| {
+                                panic!("{} is a valid length", SectionMic::CONTENTS_LEN)
+                            }),
+                            encryption_info,
+                            identity,
+                            all_ciphertext: &identity_and_ciphertext[to_skip..],
+                        },
+                    ))
+                },
+            );
+
+            combinator::map_parser(
+                bytes::complete::take(section_contents_len),
+                // guarantee we consume all of the section (not all of the adv body)
+                combinator::all_consuming(branch::alt((
+                    parse_mic_encrypted_identity,
+                    parse_encrypted_identity,
+                    parse_public_identity,
+                    parse_no_identity_de,
+                ))),
+            )(remaining)
+        }
+    }
+}
+
+#[derive(PartialEq, Eq, Debug)]
+struct SectionContents {
+    section_header: u8,
+    de_data: ArrayView<u8, NP_ADV_MAX_SECTION_LEN>,
+    data_elements: Vec<OffsetDataElement>,
+}
+
+impl SectionContents {
+    fn new(section_header: u8, data_elements: &[RefDataElement]) -> Self {
+        let (data_elements, de_data) = convert_data_elements(data_elements);
+
+        Self { section_header, de_data, data_elements }
+    }
+
+    fn data_elements(&'_ self) -> DataElements<'_> {
+        DataElements { de_iter: self.data_elements.iter(), de_data: &self.de_data }
+    }
+}
+
+/// An iterator over data elements in a V1 section
+// A concrete type to make it easy to refer to in return types where opaque types aren't available.
+pub struct DataElements<'a> {
+    de_iter: slice::Iter<'a, OffsetDataElement>,
+    de_data: &'a ArrayView<u8, NP_ADV_MAX_SECTION_LEN>,
+}
+
+impl<'a> Iterator for DataElements<'a> {
+    type Item = DataElement<'a>;
+
+    fn next(&mut self) -> Option<Self::Item> {
+        self.de_iter.next().map(|de| DataElement { de_data: self.de_data, de })
+    }
+}
+
+/// A section deserialized from a V1 advertisement.
+pub trait Section {
+    /// The iterator type used to iterate over data elements
+    type Iterator<'a>: Iterator<Item = DataElement<'a>>
+    where
+        Self: 'a;
+
+    /// Iterator over the data elements in a section, except for any DEs related to resolving the
+    /// identity or otherwise validating the payload (e.g. MIC, Signature, any identity DEs like
+    /// Private Identity).
+    fn data_elements(&'_ self) -> Self::Iterator<'_>;
+}
+
+/// A plaintext section deserialized from a V1 advertisement.
+#[derive(PartialEq, Eq, Debug)]
+pub struct PlaintextSection {
+    identity: PlaintextIdentityMode,
+    contents: SectionContents,
+}
+
+impl PlaintextSection {
+    fn new(identity: PlaintextIdentityMode, contents: SectionContents) -> Self {
+        Self { identity, contents }
+    }
+
+    /// The identity mode for the section.
+    ///
+    /// Since plaintext sections do not use encryption, they cannot be matched to a single identity,
+    /// and only have a mode (no identity or public).
+    pub fn identity(&self) -> PlaintextIdentityMode {
+        self.identity
+    }
+}
+
+impl Section for PlaintextSection {
+    type Iterator<'a>  = DataElements<'a> where Self: 'a;
+
+    fn data_elements(&'_ self) -> Self::Iterator<'_> {
+        self.contents.data_elements()
+    }
+}
+
+/// A byte buffer the size of a V1 salt.
+#[derive(Copy, Clone, Debug, PartialEq, Eq)]
+pub struct RawV1Salt([u8; 16]);
+
+impl RawV1Salt {
+    /// Returns the raw salt bytes as a vec.
+    #[cfg(feature = "devtools")]
+    pub fn to_vec(&self) -> Vec<u8> {
+        self.0.to_vec()
+    }
+}
+
+impl<C: CryptoProvider> From<RawV1Salt> for V1Salt<C> {
+    fn from(raw_salt: RawV1Salt) -> Self {
+        raw_salt.0.into()
+    }
+}
+
+/// The decrypted contents of a ciphertext section.
+#[derive(Debug, PartialEq, Eq)]
+pub struct DecryptedSection {
+    identity_type: EncryptedIdentityDataElementType,
+    verification_mode: VerificationMode,
+    metadata_key: [u8; METADATA_KEY_LEN],
+    salt: RawV1Salt,
+    contents: SectionContents,
+}
+
+impl DecryptedSection {
+    fn new(
+        identity_type: EncryptedIdentityDataElementType,
+        verification_mode: VerificationMode,
+        metadata_key: [u8; 16],
+        salt: RawV1Salt,
+        contents: SectionContents,
+    ) -> Self {
+        Self { identity_type, verification_mode, metadata_key, salt, contents }
+    }
+
+    /// The type of identity DE used in the section.
+    pub fn identity_type(&self) -> EncryptedIdentityDataElementType {
+        self.identity_type
+    }
+
+    /// The verification mode used in the section.
+    pub fn verification_mode(&self) -> VerificationMode {
+        self.verification_mode
+    }
+
+    /// The decrypted metadata key from the identity DE.
+    pub fn metadata_key(&self) -> &[u8; 16] {
+        &self.metadata_key
+    }
+
+    /// The salt used for decryption of this advertisement.
+    pub fn salt(&self) -> RawV1Salt {
+        self.salt
+    }
+}
+
+impl Section for DecryptedSection {
+    type Iterator<'a>  = DataElements<'a> where Self: 'a;
+
+    fn data_elements(&'_ self) -> Self::Iterator<'_> {
+        self.contents.data_elements()
+    }
+}
+
+#[derive(PartialEq, Eq, Debug)]
+pub(crate) enum CiphertextSection<'a> {
+    SignatureEncryptedIdentity(SignatureEncryptedSection<'a>),
+    MicEncryptedIdentity(MicEncryptedSection<'a>),
+}
+
+impl<'a> CiphertextSection<'a> {
+    pub(crate) fn try_deserialize<'c, C, P>(
+        &'a self,
+        credential: &'c C,
+    ) -> Result<DecryptedSection, SectionDeserializeError>
+    where
+        C: V1Credential,
+        P: CryptoProvider,
+    {
+        let crypto_material = credential.crypto_material();
+        match self {
+            Self::SignatureEncryptedIdentity(contents) => {
+                let identity_resolution_material =
+                    crypto_material.signed_identity_resolution_material::<P>();
+                let verification_material = crypto_material.signed_verification_material::<P>();
+
+                contents
+                    .try_deserialize::<P>(
+                        identity_resolution_material.borrow(),
+                        &verification_material,
+                    )
+                    .map_err(|e| match e {
+                        SignatureEncryptedSectionDeserializationError::MetadataKeyMacMismatch
+                        | SignatureEncryptedSectionDeserializationError::SignatureMismatch => {
+                            SectionDeserializeError::IncorrectCredential
+                        }
+                        SignatureEncryptedSectionDeserializationError::SignatureMissing
+                        | SignatureEncryptedSectionDeserializationError::DeParseError => {
+                            SectionDeserializeError::ParseError
+                        }
+                    })
+            }
+            Self::MicEncryptedIdentity(contents) => {
+                let identity_resolution_material =
+                    crypto_material.unsigned_identity_resolution_material::<P>();
+                let verification_material = crypto_material.unsigned_verification_material::<P>();
+
+                contents
+                    .try_deserialize::<P>(
+                        identity_resolution_material.borrow(),
+                        &verification_material,
+                    )
+                    .map_err(|e| match e {
+                        MicEncryptedSectionDeserializationError::MetadataKeyMacMismatch
+                        | MicEncryptedSectionDeserializationError::MicMismatch => {
+                            SectionDeserializeError::IncorrectCredential
+                        }
+                        MicEncryptedSectionDeserializationError::DeParseError => {
+                            SectionDeserializeError::ParseError
+                        }
+                    })
+            }
+        }
+    }
+}
+
+/// Errors that can occur when deserializing an advertisement
+#[derive(Debug, PartialEq, Eq)]
+pub enum SectionDeserializeError {
+    /// The credential supplied did not match the section's identity data
+    IncorrectCredential,
+    /// Section data is malformed
+    ParseError,
+}
+
+/// Returns a parser function that parses data elements whose type is not one of the known identity
+/// DE types, and whose offsets start from the provided `starting_offset`.
+///
+/// Consumes all input.
+fn parse_non_identity_des(
+    starting_offset: usize,
+) -> impl Fn(&[u8]) -> nom::IResult<&[u8], Vec<RefDataElement>> {
+    move |input: &[u8]| {
+        combinator::map_opt(
+            combinator::all_consuming(multi::many0(combinator::verify(
+                ProtoDataElement::parse,
+                |de| IdentityDataElementType::iter().all(|t| t.type_code() != de.header.de_type),
+            ))),
+            |proto_des| {
+                proto_des
+                    .into_iter()
+                    .enumerate()
+                    .map(|(offset, pde)| starting_offset.checked_add(offset).map(|sum| (sum, pde)))
+                    .map(|res| {
+                        res.map(|(offset, pde)| {
+                            pde.into_data_element(v1_salt::DataElementOffset::from(offset))
+                        })
+                    })
+                    .collect::<Option<Vec<_>>>()
+            },
+        )(input)
+    }
+}
+
+/// Deserialize-specific version of a DE header that incorporates the header length.
+/// This is needed for encrypted identities that need to construct a slice of everything in the
+/// section following the identity DE header.
+#[derive(Debug, PartialEq, Eq, Clone)]
+pub(crate) struct DeHeader {
+    /// The original bytes of the header, at most 6 bytes long (1 byte len, 5 bytes type)
+    pub(crate) header_bytes: ArrayView<u8, 6>,
+    pub(crate) de_type: DeType,
+    pub(crate) contents_len: DeLength,
+}
+
+impl DeHeader {
+    pub(crate) fn parse(input: &[u8]) -> nom::IResult<&[u8], DeHeader> {
+        // 1-byte header: 0b0LLLTTTT
+        let parse_single_byte_de_header =
+            combinator::map_opt::<&[u8], _, DeHeader, error::Error<&[u8]>, _, _>(
+                combinator::consumed(combinator::map_res(
+                    combinator::verify(number::complete::u8, |&b| !hi_bit_set(b)),
+                    |b| {
+                        // L bits
+                        let len = (b >> 4) & 0x07;
+                        // T bits
+                        let de_type = ((b & 0x0F) as u32).into();
+
+                        len.try_into().map(|l| (l, de_type))
+                    },
+                )),
+                |(header_bytes, (len, de_type))| {
+                    ArrayView::try_from_slice(header_bytes).map(|header_bytes| DeHeader {
+                        header_bytes,
+                        contents_len: len,
+                        de_type,
+                    })
+                },
+            );
+
+        // multi-byte headers: 0b1LLLLLLL (0b1TTTTTTT)* 0b0TTTTTTT
+        // leading 1 in first byte = multibyte format
+        // leading 1 in subsequent bytes = there is at least 1 more type bytes
+        // leading 0 = this is the last header byte
+        // 127-bit length, effectively infinite type bit length
+
+        // It's conceivable to have non-canonical extended type sequences where 1 or more leading
+        // bytes don't have any bits set (other than the marker hi bit), thereby contributing nothing
+        // to the final value.
+        // To prevent that, we require that either there be only 1 type byte, or that the first of the
+        // multiple type bytes must have a value bit set. It's OK to have no value bits in subsequent
+        // type bytes.
+
+        let parse_ext_de_header = combinator::map_opt(
+            combinator::consumed(sequence::pair(
+                // length byte w/ leading 1
+                combinator::map_res(
+                    combinator::verify(number::complete::u8::<&[u8], _>, |&b| hi_bit_set(b)),
+                    // snag the lower 7 bits
+                    |b| (b & 0x7F).try_into(),
+                ),
+                branch::alt((
+                    // 1 type byte case
+                    combinator::recognize(
+                        // 0-hi-bit type code byte
+                        combinator::verify(number::complete::u8, |&b| !hi_bit_set(b)),
+                    ),
+                    // multiple type byte case: leading type byte must have at least 1 value bit
+                    combinator::recognize(sequence::tuple((
+                        // hi bit and at least 1 value bit, otherwise it would be non-canonical
+                        combinator::verify(number::complete::u8, |&b| {
+                            hi_bit_set(b) && (b & 0x7F != 0)
+                        }),
+                        // 0-3 1-hi-bit type code bytes with any bit pattern. Max is 3 since two 7
+                        // bit type chunks are processed before and after this, for a total of 5,
+                        // and that's as many 7-bit chunks as are needed to support a 32-bit type.
+                        bytes::complete::take_while_m_n(0, 3, hi_bit_set),
+                        // final 0-hi-bit type code byte
+                        combinator::verify(number::complete::u8, |&b| !hi_bit_set(b)),
+                    ))),
+                )),
+            )),
+            |(header_bytes, (len, type_bytes))| {
+                // snag the low 7 bits of each type byte and accumulate
+
+                type_bytes
+                    .iter()
+                    .fold(Some(0_u32), |accum, b| {
+                        accum.and_then(|n| n.checked_shl(7)).map(|n| n + ((b & 0x7F) as u32))
+                    })
+                    .and_then(|type_code| {
+                        ArrayView::try_from_slice(header_bytes).map(|header_bytes| DeHeader {
+                            header_bytes,
+                            contents_len: len,
+                            de_type: type_code.into(),
+                        })
+                    })
+            },
+        );
+
+        branch::alt((parse_single_byte_de_header, parse_ext_de_header))(input)
+    }
+}
+
+/// An intermediate stage in parsing a [DataElement] that lacks `offset`.
+#[derive(Debug, PartialEq, Eq)]
+struct ProtoDataElement<'d> {
+    header: DeHeader,
+    /// `len()` must equal `header.contents_len`
+    contents: &'d [u8],
+}
+
+impl<'d> ProtoDataElement<'d> {
+    fn parse(input: &[u8]) -> nom::IResult<&[u8], ProtoDataElement> {
+        let (remaining, header) = DeHeader::parse(input)?;
+        let len = header.contents_len;
+        combinator::map(bytes::complete::take(len.as_usize()), move |slice| {
+            let header_clone = header.clone();
+            ProtoDataElement { header: header_clone, contents: slice }
+        })(remaining)
+    }
+
+    fn into_data_element(self, offset: v1_salt::DataElementOffset) -> RefDataElement<'d> {
+        RefDataElement {
+            offset,
+            header_len: self.header.header_bytes.len().try_into().expect("header is <= 6 bytes"),
+            de_type: self.header.de_type,
+            contents: self.contents,
+        }
+    }
+}
+
+/// A data element that holds a slice reference for its contents
+#[derive(Debug, PartialEq, Eq)]
+pub(crate) struct RefDataElement<'d> {
+    pub(crate) offset: v1_salt::DataElementOffset,
+    pub(crate) header_len: u8,
+    pub(crate) de_type: DeType,
+    pub(crate) contents: &'d [u8],
+}
+
+/// A deserialized data element in a section.
+///
+/// The DE has been processed to the point of exposing a DE type and its contents as a `&[u8]`, but
+/// no DE-type-specific processing has been performed.
+#[derive(Debug)]
+pub struct DataElement<'a> {
+    de_data: &'a ArrayView<u8, NP_ADV_MAX_SECTION_LEN>,
+    de: &'a OffsetDataElement,
+}
+
+impl<'a> DataElement<'a> {
+    /// The offset of the DE in its containing Section.
+    ///
+    /// Used with the section salt to derive per-DE salt.
+    pub fn offset(&self) -> v1_salt::DataElementOffset {
+        self.de.offset
+    }
+    /// The type of the DE
+    pub fn de_type(&self) -> DeType {
+        self.de.de_type
+    }
+    /// The contents of the DE
+    pub fn contents(&self) -> &[u8] {
+        &self.de_data.as_slice()
+            [self.de.start_of_contents..self.de.start_of_contents + self.de.contents_len]
+    }
+}
+
+/// The level of integrity protection in an encrypted section
+#[derive(Clone, Copy, PartialEq, Eq, Debug)]
+pub enum VerificationMode {
+    /// A symmetric MIC (message integrity code aka message authentication code) was verified.
+    ///
+    /// Since this is a symmetric operation, holders of the key material needed to verify a MIC
+    /// can also forge MICs.
+    Mic,
+    /// An asymmetric signature was verified.
+    ///
+    /// Since this is an asymmetric operation, only the holder of the private key can generate
+    /// signatures, so it offers a stronger level of authenticity protection than [Self::Mic].
+    Signature,
+}
+
+/// The identity used to successfully decrypt and validate an encrypted section
+#[derive(Clone, PartialEq, Eq, Debug)]
+pub struct EncryptedSectionIdentity {
+    identity_type: EncryptedIdentityDataElementType,
+    validation_mode: VerificationMode,
+    metadata_key: [u8; METADATA_KEY_LEN],
+}
+
+impl EncryptedSectionIdentity {
+    /// The type of identity DE used in the section
+    pub fn identity_type(&self) -> EncryptedIdentityDataElementType {
+        self.identity_type
+    }
+    /// The validation mode used when decrypting and verifying the section
+    pub fn verification_mode(&self) -> VerificationMode {
+        self.validation_mode
+    }
+    /// The decrypted metadata key from the section's identity DE
+    pub fn metadata_key(&self) -> &[u8; METADATA_KEY_LEN] {
+        &self.metadata_key
+    }
+}
+
+/// A DE that designates its contents via offset and length to avoid self-referential slices.
+#[derive(Debug, PartialEq, Eq)]
+struct OffsetDataElement {
+    offset: v1_salt::DataElementOffset,
+    de_type: DeType,
+    start_of_contents: usize,
+    contents_len: usize,
+}
+
+/// Convert data elements from holding slices to holding offsets and lengths to avoid
+/// lifetime woes.
+/// This entails some data copying, so if it causes noticeable perf issues we can revisit
+/// it, but it is likely to be much cheaper than decryption.
+///
+/// # Panics
+///
+/// Will panic if handed more data elements than fit in one section. This is only possible if
+/// generating data elements from a source other than parsing a section.
+fn convert_data_elements(
+    elements: &[RefDataElement],
+) -> (Vec<OffsetDataElement>, ArrayView<u8, NP_ADV_MAX_SECTION_LEN>) {
+    let mut buf = tinyvec::ArrayVec::new();
+
+    (
+        elements
+            .iter()
+            .map(|de| {
+                let current_len = buf.len();
+                // won't overflow because these DEs originally came from a section, and now
+                // we're packing only their contents without DE headers
+                buf.extend_from_slice(de.contents);
+                OffsetDataElement {
+                    offset: de.offset,
+                    de_type: de.de_type,
+                    start_of_contents: current_len,
+                    contents_len: de.contents.len(),
+                }
+            })
+            .collect(),
+        to_array_view(buf),
+    )
+}
+
+#[derive(PartialEq, Eq, Debug, Clone)]
+pub(crate) struct EncryptionInfo {
+    pub bytes: [u8; 19],
+}
+
+impl EncryptionInfo {
+    // 2-byte header, 1-byte encryption scheme, 16-byte salt
+    pub(crate) const TOTAL_DE_LEN: usize = 19;
+    const CONTENTS_LEN: usize = 17;
+    const ENCRYPTION_INFO_SCHEME_MASK: u8 = 0b01111000;
+
+    fn parse_signature(input: &[u8]) -> nom::IResult<&[u8], EncryptionInfo> {
+        Self::parser_for_scheme(SIGNATURE_ENCRYPTION_SCHEME)(input)
+    }
+
+    fn parse_mic(input: &[u8]) -> nom::IResult<&[u8], EncryptionInfo> {
+        Self::parser_for_scheme(MIC_ENCRYPTION_SCHEME)(input)
+    }
+
+    fn parser_for_scheme(
+        expected_scheme: u8,
+    ) -> impl Fn(&[u8]) -> nom::IResult<&[u8], EncryptionInfo> {
+        move |input| {
+            combinator::map_res(
+                combinator::consumed(combinator::map_parser(
+                    combinator::map(
+                        combinator::verify(ProtoDataElement::parse, |de| {
+                            de.header.de_type == ENCRYPTION_INFO_DE_TYPE
+                                && de.contents.len() == Self::CONTENTS_LEN
+                        }),
+                        |de| de.contents,
+                    ),
+                    sequence::tuple((
+                        combinator::verify(number::complete::be_u8, |scheme: &u8| {
+                            expected_scheme == (Self::ENCRYPTION_INFO_SCHEME_MASK & scheme)
+                        }),
+                        bytes::complete::take(16_usize),
+                    )),
+                )),
+                |(bytes, _contents)| bytes.try_into(),
+            )(input)
+        }
+    }
+
+    fn salt(&self) -> RawV1Salt {
+        // should never panic
+        RawV1Salt(self.bytes[Self::TOTAL_DE_LEN - 16..].try_into().ok().unwrap())
+    }
+}
+
+impl TryFrom<&[u8]> for EncryptionInfo {
+    type Error = TryFromSliceError;
+
+    fn try_from(value: &[u8]) -> Result<Self, Self::Error> {
+        value.try_into().map(|fixed_bytes: [u8; 19]| Ok(Self { bytes: fixed_bytes }))?
+    }
+}
+
+#[derive(PartialEq, Eq, Debug)]
+pub(crate) struct SectionMic {
+    mic: [u8; 16],
+}
+
+impl SectionMic {
+    // 16-byte metadata key
+    pub(crate) const CONTENTS_LEN: usize = 16;
+}
+
+impl From<[u8; 16]> for SectionMic {
+    fn from(value: [u8; 16]) -> Self {
+        SectionMic { mic: value }
+    }
+}
+
+impl TryFrom<&[u8]> for SectionMic {
+    type Error = TryFromSliceError;
+
+    fn try_from(value: &[u8]) -> Result<Self, Self::Error> {
+        let fixed_bytes: [u8; SectionMic::CONTENTS_LEN] = value.try_into()?;
+        Ok(Self { mic: fixed_bytes })
+    }
+}
+
+#[derive(PartialEq, Eq, Debug)]
+struct PublicIdentity;
+
+impl PublicIdentity {
+    fn parse(input: &[u8]) -> nom::IResult<&[u8], PublicIdentity> {
+        combinator::map(
+            combinator::verify(DeHeader::parse, |deh| {
+                deh.de_type == IdentityDataElementType::Public.type_code()
+                    && deh.contents_len.as_usize() == 0
+            }),
+            |_| PublicIdentity,
+        )(input)
+    }
+}
+
+/// Parsed form of an encrypted identity DE before its contents are decrypted.
+/// Metadata key is stored in the enclosing section.
+#[derive(PartialEq, Eq, Debug)]
+pub(crate) struct EncryptedIdentityMetadata {
+    pub(crate) offset: v1_salt::DataElementOffset,
+    /// The original DE header from the advertisement.
+    /// Encrypted identity should always be a len=2 header.
+    pub(crate) header_bytes: [u8; 2],
+    pub(crate) identity_type: EncryptedIdentityDataElementType,
+}
+
+impl EncryptedIdentityMetadata {
+    // 2-byte header, 16-byte metadata key
+    pub(crate) const TOTAL_DE_LEN: usize = 18;
+
+    /// Returns a parser function that parses an [EncryptedIdentity] using the provided DE `offset`.
+    fn parser_at_offset(
+        offset: v1_salt::DataElementOffset,
+    ) -> impl Fn(&[u8]) -> nom::IResult<&[u8], EncryptedIdentityMetadata> {
+        move |input| {
+            combinator::map_opt(ProtoDataElement::parse, |de| {
+                EncryptedIdentityDataElementType::from_type_code(de.header.de_type).and_then(
+                    |identity_type| {
+                        de.header.header_bytes.as_slice().try_into().ok().and_then(|header_bytes| {
+                            de.contents.try_into().ok().map(|_metadata_key_ciphertext: [u8; 16]| {
+                                // ensure the ciphertext is the right size, then discard
+                                EncryptedIdentityMetadata { header_bytes, offset, identity_type }
+                            })
+                        })
+                    },
+                )
+            })(input)
+        }
+    }
+}
+
+fn hi_bit_set(b: u8) -> bool {
+    b & 0x80 > 0
+}
diff --git a/nearby/presence/np_adv/src/extended/deserialize/parse_tests.rs b/nearby/presence/np_adv/src/extended/deserialize/parse_tests.rs
new file mode 100644
index 0000000..f3b8258
--- /dev/null
+++ b/nearby/presence/np_adv/src/extended/deserialize/parse_tests.rs
@@ -0,0 +1,724 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+extern crate std;
+
+use super::*;
+use crate::extended::deserialize::encrypted_section::{
+    MicEncryptedSection, SignatureEncryptedSection,
+};
+use std::vec;
+
+#[test]
+fn parse_adv_ext_no_identity() {
+    // 2 sections, 2 DEs each
+    let mut adv_body = vec![];
+    // section
+    adv_body.push(9);
+    // de 1 byte header, type 5, len 5
+    adv_body.extend_from_slice(&[0x55, 0x01, 0x02, 0x03, 0x04, 0x05]);
+    // de 2 byte header, type 6, len 1
+    adv_body.extend_from_slice(&[0x81, 0x06, 0x01]);
+
+    // section
+    adv_body.push(11);
+    // de 3 byte header, len 4
+    adv_body.extend_from_slice(&[0x84, 0xC3, 0x03, 0x01, 0x02, 0x03, 0x04]);
+    // de 1 byte header, type 8, len 3
+    adv_body.extend_from_slice(&[0x38, 0x01, 0x02, 0x03]);
+
+    assert_eq!(
+        Ok(vec![
+            PlaintextSection::new(
+                PlaintextIdentityMode::None,
+                SectionContents::new(
+                    9,
+                    &[
+                        // 1 byte header, len 5
+                        RefDataElement {
+                            offset: 0_usize.into(),
+                            header_len: 1,
+                            de_type: 5_u8.into(),
+                            contents: &[0x01, 0x02, 0x03, 0x04, 0x05]
+                        },
+                        // 2 byte header, len 1
+                        RefDataElement {
+                            offset: 1_usize.into(),
+                            header_len: 2,
+                            de_type: 6_u8.into(),
+                            contents: &[0x01]
+                        }
+                    ]
+                )
+            )
+            .into(),
+            PlaintextSection::new(
+                PlaintextIdentityMode::None,
+                SectionContents::new(
+                    11,
+                    &[
+                        // 3 byte header, len 4
+                        RefDataElement {
+                            offset: 0_usize.into(),
+                            header_len: 3,
+                            de_type: 0b0000_0000_0000_0000_0010_0001_1000_0011_u32.into(),
+                            contents: &[0x01, 0x02, 0x03, 0x04]
+                        },
+                        // 1 byte header, len 3
+                        RefDataElement {
+                            offset: 1_usize.into(),
+                            header_len: 1,
+                            de_type: 8_u8.into(),
+                            contents: &[0x01, 0x02, 0x03]
+                        }
+                    ]
+                )
+            )
+            .into()
+        ]),
+        parse_sections(&V1Header { header_byte: 0x20 }, &adv_body)
+    );
+}
+
+#[test]
+fn parse_adv_ext_public_identity() {
+    // 2 sections, 3 DEs each
+    let mut adv_body = vec![];
+    // section
+    adv_body.push(10);
+    // public identity
+    adv_body.push(0x03);
+    // de 1 byte header, type 5, len 5
+    adv_body.extend_from_slice(&[0x55, 0x01, 0x02, 0x03, 0x04, 0x05]);
+    // de 2 byte header, type 6, len 1
+    adv_body.extend_from_slice(&[0x81, 0x06, 0x01]);
+
+    // section
+    adv_body.push(12);
+    // public identity
+    adv_body.push(0x03);
+    // de 3 byte header, len 4
+    adv_body.extend_from_slice(&[0x84, 0xC3, 0x03, 0x01, 0x02, 0x03, 0x04]);
+    // de 1 byte header, type 8, len 3
+    adv_body.extend_from_slice(&[0x38, 0x01, 0x02, 0x03]);
+
+    assert_eq!(
+        Ok(vec![
+            PlaintextSection::new(
+                PlaintextIdentityMode::Public,
+                SectionContents::new(
+                    10,
+                    &[
+                        // 1 byte header, len 5
+                        RefDataElement {
+                            offset: 1_usize.into(),
+                            header_len: 1,
+                            de_type: 5_u8.into(),
+                            contents: &[0x01, 0x02, 0x03, 0x04, 0x05],
+                        },
+                        // 2 byte header, len 1
+                        RefDataElement {
+                            offset: 2_usize.into(),
+                            header_len: 2,
+                            de_type: 6_u8.into(),
+                            contents: &[0x01],
+                        },
+                    ],
+                )
+            )
+            .into(),
+            PlaintextSection::new(
+                PlaintextIdentityMode::Public,
+                SectionContents::new(
+                    12,
+                    &[
+                        // 3 byte header, len 4
+                        RefDataElement {
+                            offset: 1_usize.into(),
+                            header_len: 3,
+                            de_type: 0b0000_0000_0000_0000_0010_0001_1000_0011_u32.into(),
+                            contents: &[0x01, 0x02, 0x03, 0x04],
+                        },
+                        // 1 byte header, len 3
+                        RefDataElement {
+                            offset: 2_usize.into(),
+                            header_len: 1,
+                            de_type: 8_u8.into(),
+                            contents: &[0x01, 0x02, 0x03],
+                        },
+                    ],
+                )
+            )
+            .into(),
+        ]),
+        parse_sections(&V1Header { header_byte: 0x20 }, &adv_body)
+    );
+}
+
+#[test]
+fn parse_adv_ext_identity() {
+    // 3 sections
+    let mut adv_body = vec![];
+    // section - 48 bytes total
+    adv_body.push(19 + 18 + 10);
+    // encryption info -- 2 + 1 + 16x 0x11
+    adv_body.extend_from_slice(&[
+        0x91, 0x10, // header
+        0x08, // scheme (signature)
+        0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+        0x11, // salt
+    ]);
+    // private identity -- 2 + 16x 0x33
+    adv_body.extend_from_slice(&[
+        0x90, 0x01, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
+        0x33, 0x33, 0x33,
+    ]);
+    // 10 bytes of 0xFF ciphertext
+    adv_body.extend_from_slice(&[0xFF; 10]);
+
+    // section - 49 bytes total
+    adv_body.push(19 + 18 + 11);
+    // encryption info -- 2 + 1 + 16x 0x11
+    adv_body.extend_from_slice(&[
+        0x91, 0x10, // header
+        0x08, // scheme (signature)
+        0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+        0x11, // salt
+    ]);
+    // trusted identity -- 2 + 16x 0x55
+    adv_body.extend_from_slice(&[
+        0x90, 0x02, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+        0x55, 0x55, 0x55,
+    ]);
+    // 11 bytes of 0xFF ciphertext
+    adv_body.extend_from_slice(&[0xFF; 11]);
+
+    // section - 50 bytes total
+    adv_body.push(19 + 18 + 12);
+    // encryption info -- 2 + 1 + 16x 0x11
+    adv_body.extend_from_slice(&[
+        0x91, 0x10, // header
+        0x08, // scheme (signature)
+        0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+        0x11, // salt
+    ]);
+    // provisioned identity -- 2 + 16x 0x77
+    adv_body.extend_from_slice(&[
+        0x90, 0x04, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+        0x77, 0x77, 0x77,
+    ]);
+    // 12 bytes of 0xFF ciphertext
+    adv_body.extend_from_slice(&[0xFF; 12]);
+
+    let adv_header = V1Header { header_byte: 0x20 };
+    let encryption_info = EncryptionInfo {
+        bytes: [
+            0x91, 0x10, // header bytes
+            0x08, // scheme (signature)
+            0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+            0x11, 0x11,
+        ],
+    };
+    assert_eq!(
+        Ok(vec![
+            SignatureEncryptedSection {
+                section_header: 47,
+                adv_header: &adv_header,
+                encryption_info: encryption_info.clone(),
+                identity: EncryptedIdentityMetadata {
+                    header_bytes: [0x90, 0x01],
+                    offset: 1_usize.into(),
+                    identity_type: EncryptedIdentityDataElementType::Private,
+                },
+                // skip section header + encryption info + identity header -> end of section
+                all_ciphertext: &adv_body[1 + 19 + 2..48],
+            }
+            .into(),
+            SignatureEncryptedSection {
+                section_header: 48,
+                adv_header: &adv_header,
+                encryption_info: encryption_info.clone(),
+                identity: EncryptedIdentityMetadata {
+                    header_bytes: [0x90, 0x02],
+                    offset: 1_usize.into(),
+                    identity_type: EncryptedIdentityDataElementType::Trusted,
+                },
+                all_ciphertext: &adv_body[48 + 1 + 19 + 2..97],
+            }
+            .into(),
+            SignatureEncryptedSection {
+                section_header: 49,
+                adv_header: &adv_header,
+                encryption_info,
+                identity: EncryptedIdentityMetadata {
+                    header_bytes: [0x90, 0x04],
+                    offset: 1_usize.into(),
+                    identity_type: EncryptedIdentityDataElementType::Provisioned,
+                },
+                all_ciphertext: &adv_body[97 + 1 + 19 + 2..],
+            }
+            .into()
+        ]),
+        parse_sections(&adv_header, &adv_body)
+    );
+}
+
+#[test]
+fn parse_adv_ext_mic_identity() {
+    // 3 sections
+    let mut adv_body = vec![];
+    // section - 64 bytes total
+    adv_body.push(19 + 18 + 10 + 16);
+    // encryption info -- 2 + 1 + 16x 0x11
+    adv_body.extend_from_slice(&[
+        0x91, 0x10, // header
+        0x00, // scheme (mic)
+        0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+        0x11, // salt
+    ]);
+    // private identity -- 2 + 16x 0x55
+    adv_body.extend_from_slice(&[
+        0x90, 0x01, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+        0x55, 0x55, 0x55,
+    ]);
+    // 10 bytes of 0xFF ciphertext
+    adv_body.extend_from_slice(&[0xFF; 10]);
+    // mic - 16x 0x33
+    adv_body.extend_from_slice(&[
+        0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
+        0x33,
+    ]);
+
+    // section - 65 bytes total
+    adv_body.push(19 + 18 + 11 + 16);
+    // encryption info -- 2 + 1 + 16x 0x11
+    adv_body.extend_from_slice(&[
+        0x91, 0x10, // header
+        0x00, // scheme (mic)
+        0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+        0x11, // salt
+    ]);
+    // trusted identity -- 2 + 16x 0x77
+    adv_body.extend_from_slice(&[
+        0x90, 0x02, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77, 0x77,
+        0x77, 0x77, 0x77,
+    ]);
+    // 11 bytes of 0xFF ciphertext
+    adv_body.extend_from_slice(&[0xFF; 11]);
+    // mic - 16x 0x66
+    adv_body.extend_from_slice(&[
+        0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66, 0x66,
+        0x66,
+    ]);
+
+    // section - 66 bytes total
+    adv_body.push(19 + 18 + 12 + 16);
+    // encryption info -- 2 + 1 + 16x 0x11
+    adv_body.extend_from_slice(&[
+        0x91, 0x10, // header
+        0x00, // scheme (mic)
+        0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+        0x11, // salt
+    ]);
+    // provisioned identity -- 2 + 16x 0xAA
+    adv_body.extend_from_slice(&[
+        0x90, 0x04, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
+        0xAA, 0xAA, 0xAA,
+    ]);
+    // 12 bytes of 0xFF ciphertext
+    adv_body.extend_from_slice(&[0xFF; 12]);
+    // mic - 16x 0x99
+    adv_body.extend_from_slice(&[
+        0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99, 0x99,
+        0x99,
+    ]);
+
+    let adv_header = V1Header { header_byte: 0x20 };
+    let encryption_info = EncryptionInfo {
+        bytes: [
+            0x91, 0x10, // header bytes
+            0x00, // scheme (mic)
+            0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11,
+            0x11, 0x11,
+        ],
+    };
+    assert_eq!(
+        Ok(vec![
+            MicEncryptedSection {
+                section_header: 63,
+                adv_header: &adv_header,
+                mic: SectionMic::from([0x33; 16]),
+                encryption_info: encryption_info.clone(),
+                identity: EncryptedIdentityMetadata {
+                    header_bytes: [0x90, 0x01],
+                    offset: 1_usize.into(),
+                    identity_type: EncryptedIdentityDataElementType::Private,
+                },
+                // skip section header +  encryption info + identity header -> end of ciphertext
+                all_ciphertext: &adv_body[1 + 19 + 2..64 - 16],
+            }
+            .into(),
+            MicEncryptedSection {
+                section_header: 64,
+                adv_header: &adv_header,
+                mic: SectionMic::from([0x66; 16]),
+                encryption_info: encryption_info.clone(),
+                identity: EncryptedIdentityMetadata {
+                    header_bytes: [0x90, 0x02],
+                    offset: 1_usize.into(),
+                    identity_type: EncryptedIdentityDataElementType::Trusted,
+                },
+                all_ciphertext: &adv_body[64 + 1 + 19 + 2..129 - 16],
+            }
+            .into(),
+            MicEncryptedSection {
+                section_header: 65,
+                adv_header: &adv_header,
+                mic: SectionMic::from([0x99; 16]),
+                encryption_info,
+                identity: EncryptedIdentityMetadata {
+                    header_bytes: [0x90, 0x04],
+                    offset: 1_usize.into(),
+                    identity_type: EncryptedIdentityDataElementType::Provisioned,
+                },
+                all_ciphertext: &adv_body[129 + 1 + 19 + 2..195 - 16],
+            }
+            .into(),
+        ]),
+        parse_sections(&adv_header, &adv_body)
+    );
+}
+
+#[test]
+fn public_identity_not_first_de_error() {
+    let mut adv_body = vec![];
+
+    // section
+    adv_body.push(3 + 1);
+    // misc other DE
+    adv_body.extend_from_slice(&[0x81, 0x70, 0xFF]);
+    // public identity after another DE
+    adv_body.push(0x03);
+
+    assert_eq!(
+        Err(nom::Err::Error(error::Error {
+            input: &adv_body[4..],
+            // Eof because all_consuming is used to ensure complete section is parsed
+            code: error::ErrorKind::Eof
+        })),
+        parse_sections(&V1Header { header_byte: 0x20 }, &adv_body)
+    );
+}
+
+#[test]
+fn public_identity_after_public_identity_error() {
+    let mut adv_body = vec![];
+
+    // section
+    adv_body.push(1 + 3 + 1);
+    // public identity after another DE
+    adv_body.push(0x03);
+    // misc other DE
+    adv_body.extend_from_slice(&[0x81, 0x70, 0xFF]);
+    // public identity after another DE
+    adv_body.push(0x03);
+
+    assert_eq!(
+        Err(nom::Err::Error(error::Error {
+            // since we use many1, the parser consumes the first byte and returns the remaining in the error
+            input: &adv_body[1..],
+            // Eof because all_consuming is used to ensure complete section is parsed
+            code: error::ErrorKind::Eof
+        })),
+        parse_sections(&V1Header { header_byte: 0x20 }, &adv_body)
+    );
+}
+
+#[test]
+fn salt_public_identity_error() {
+    let mut adv_body = vec![];
+    // section
+    adv_body.push(3 + 1 + 3);
+    // salt - 1 + 2x 0x22 (invalid: must be first DE)
+    adv_body.extend_from_slice(&[0x20, 0x22, 0x22]);
+    // public identity
+    adv_body.push(0x03);
+    // misc other DE
+    adv_body.extend_from_slice(&[0x81, 0x70, 0xFF]);
+
+    assert_eq!(
+        Err(nom::Err::Error(error::Error {
+            input: &adv_body[4..],
+            // Eof because all_consuming is used to ensure complete section is parsed
+            code: error::ErrorKind::Eof
+        })),
+        parse_sections(&V1Header { header_byte: 0x20 }, &adv_body)
+    );
+}
+
+#[test]
+fn salt_mic_public_identity_error() {
+    let mut adv_body = vec![];
+    // section
+    adv_body.push(3 + 18 + 1 + 3);
+    // salt - 1 + 2x 0x22 (invalid: must be first DE)
+    adv_body.extend_from_slice(&[0x20, 0x22, 0x22]);
+    // mic - 2 + 16x 0x33
+    adv_body.extend_from_slice(&[
+        0x90, 0x13, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33, 0x33,
+        0x33, 0x33, 0x33,
+    ]);
+    // public identity
+    adv_body.push(0x03);
+    // misc other DE
+    adv_body.extend_from_slice(&[0x81, 0x70, 0xFF]);
+
+    assert_eq!(
+        Err(nom::Err::Error(error::Error {
+            input: &adv_body[22..],
+            // Eof because all_consuming is used to ensure complete section is parsed
+            code: error::ErrorKind::Eof
+        })),
+        parse_sections(&V1Header { header_byte: 0x20 }, &adv_body)
+    );
+}
+
+#[test]
+fn parse_de_with_1_byte_header() {
+    let data = [0x51, 0x01, 0x02, 0x03, 0x04, 0x05, 0xFF, 0xFF];
+    assert_eq!(
+        Ok((
+            &data[6..],
+            ProtoDataElement {
+                header: DeHeader {
+                    de_type: 1_u8.into(),
+                    header_bytes: ArrayView::try_from_slice(&[0x51]).unwrap(),
+                    contents_len: 5_u8.try_into().unwrap()
+                },
+                contents: &data[1..6]
+            }
+        )),
+        ProtoDataElement::parse(&data)
+    );
+}
+
+#[test]
+fn parse_de_with_2_byte_header() {
+    let data = [0x85, 0x01, 0x01, 0x02, 0x03, 0x04, 0x05, 0xFF, 0xFF];
+    assert_eq!(
+        Ok((
+            &data[7..],
+            ProtoDataElement {
+                header: DeHeader {
+                    de_type: 1_u8.into(),
+                    header_bytes: ArrayView::try_from_slice(&[0x85, 0x01]).unwrap(),
+                    contents_len: 5_u8.try_into().unwrap()
+                },
+                contents: &data[2..7]
+            }
+        )),
+        ProtoDataElement::parse(&data)
+    );
+}
+
+#[test]
+fn parse_de_with_3_byte_header() {
+    let data = [0x85, 0xC1, 0x41, 0x01, 0x02, 0x03, 0x04, 0x05, 0xFF, 0xFF];
+    assert_eq!(
+        Ok((
+            &data[8..],
+            ProtoDataElement {
+                header: DeHeader {
+                    header_bytes: ArrayView::try_from_slice(&[0x85, 0xC1, 0x41]).unwrap(),
+                    contents_len: 5_u8.try_into().unwrap(),
+                    de_type: 0b0000_0000_0000_0000_0010_0000_1100_0001_u32.into(),
+                },
+                contents: &data[3..8]
+            }
+        )),
+        ProtoDataElement::parse(&data)
+    );
+}
+
+#[test]
+fn parse_de_header_1_byte() {
+    let data = [0x51, 0xFF, 0xFF];
+    assert_eq!(
+        Ok((
+            &data[1..],
+            DeHeader {
+                de_type: 1_u8.into(),
+                contents_len: 5_u8.try_into().unwrap(),
+                header_bytes: ArrayView::try_from_slice(&[0x51]).unwrap(),
+            }
+        )),
+        DeHeader::parse(&data)
+    );
+}
+
+#[test]
+fn parse_de_header_2_bytes() {
+    let data = [0x83, 0x01, 0xFF, 0xFF];
+    assert_eq!(
+        Ok((
+            &data[2..],
+            DeHeader {
+                de_type: 1_u8.into(),
+                contents_len: 3_u8.try_into().unwrap(),
+                header_bytes: ArrayView::try_from_slice(&[0x83, 0x01]).unwrap(),
+            }
+        )),
+        DeHeader::parse(&data)
+    );
+}
+
+#[test]
+fn parse_de_header_3_bytes() {
+    let data = [0x83, 0xC1, 0x41, 0xFF, 0xFF];
+    assert_eq!(
+        Ok((
+            &data[3..],
+            DeHeader {
+                de_type: 0b0000_0000_0000_0000_0010_0000_1100_0001_u32.into(),
+                contents_len: 3_u8.try_into().unwrap(),
+                header_bytes: ArrayView::try_from_slice(&[0x83, 0xC1, 0x41]).unwrap(),
+            }
+        )),
+        DeHeader::parse(&data)
+    );
+}
+
+#[test]
+fn parse_de_header_4_bytes() {
+    let data = [0x83, 0xC1, 0xC1, 0x41, 0xFF, 0xFF];
+    assert_eq!(
+        Ok((
+            &data[4..],
+            DeHeader {
+                de_type: 0b0000_0000_0001_0000_0110_0000_1100_0001_u32.into(),
+                contents_len: 3_u8.try_into().unwrap(),
+                header_bytes: ArrayView::try_from_slice(&[0x83, 0xC1, 0xC1, 0x41]).unwrap(),
+            }
+        )),
+        DeHeader::parse(&data)
+    );
+}
+
+#[test]
+fn parse_section_length_overrun() {
+    // section of length 0xF0 - legal but way longer than 3
+    let input = [0xF0, 0x01, 0x02, 0x03];
+    assert_eq!(
+        nom::Err::Error(error::Error {
+            // attempted to read section contents
+            input: &input.as_slice()[1..],
+            code: error::ErrorKind::Eof
+        }),
+        IntermediateSection::parser_with_header(&V1Header { header_byte: 0x20 })(&input)
+            .unwrap_err()
+    );
+}
+
+#[test]
+fn parse_de_single_byte_header_length_overrun() {
+    // length 7, type 0x03
+    let input = [0b0111_0011, 0x01, 0x02];
+    assert_eq!(
+        nom::Err::Error(error::Error {
+            // attempted to read DE contents
+            input: &input.as_slice()[1..],
+            code: error::ErrorKind::Eof
+        }),
+        ProtoDataElement::parse(&input).unwrap_err()
+    );
+}
+
+#[test]
+fn parse_de_multi_byte_header_length_overrun() {
+    // length 7, type 0x0F
+    let input = [0b1000_0111, 0x0F, 0x01, 0x02];
+    assert_eq!(
+        nom::Err::Error(error::Error {
+            // attempted to read DE contents
+            input: &input.as_slice()[2..],
+            code: error::ErrorKind::Eof
+        }),
+        ProtoDataElement::parse(&input).unwrap_err()
+    );
+}
+
+#[test]
+fn parse_de_header_non_canonical_multi_byte() {
+    // length 1, type 1
+    // first byte of type doesn't have any bits in it so it contributes nothing
+    let input = [0b1000_0001, 0b1000_0000, 0b0000_0001];
+    assert_eq!(
+        nom::Err::Error(error::Error {
+            // attempted to read first type byte
+            input: &input.as_slice()[1..],
+            code: error::ErrorKind::Verify
+        }),
+        DeHeader::parse(&input).unwrap_err()
+    );
+}
+
+#[test]
+fn parse_section_length_zero() {
+    // Section length of 0 - should return a verification error
+    let input = [0x00];
+    assert_eq!(
+        nom::Err::Error(error::Error {
+            // attempted to read section contents
+            input: input.as_slice(),
+            code: error::ErrorKind::Verify
+        }),
+        IntermediateSection::parser_with_header(&V1Header { header_byte: 0x20 })(&input)
+            .unwrap_err()
+    );
+}
+
+#[test]
+fn parse_empty_section() {
+    // empty section - should return an EOF error
+    let input = [];
+    assert_eq!(
+        nom::Err::Error(error::Error {
+            // attempted to read section contents
+            input: input.as_slice(),
+            code: error::ErrorKind::Eof
+        }),
+        IntermediateSection::parser_with_header(&V1Header { header_byte: 0x20 })(&input)
+            .unwrap_err()
+    );
+}
+
+// for convenient .into() in expected test data
+
+impl<'a> From<SignatureEncryptedSection<'a>> for IntermediateSection<'a> {
+    fn from(s: SignatureEncryptedSection<'a>) -> Self {
+        IntermediateSection::Ciphertext(CiphertextSection::SignatureEncryptedIdentity(s))
+    }
+}
+
+impl<'a> From<MicEncryptedSection<'a>> for IntermediateSection<'a> {
+    fn from(s: MicEncryptedSection<'a>) -> Self {
+        IntermediateSection::Ciphertext(CiphertextSection::MicEncryptedIdentity(s))
+    }
+}
+
+impl<'a> From<PlaintextSection> for IntermediateSection<'a> {
+    fn from(s: PlaintextSection) -> Self {
+        IntermediateSection::Plaintext(s)
+    }
+}
diff --git a/nearby/presence/np_adv/src/extended/deserialize/section_tests.rs b/nearby/presence/np_adv/src/extended/deserialize/section_tests.rs
new file mode 100644
index 0000000..7199031
--- /dev/null
+++ b/nearby/presence/np_adv/src/extended/deserialize/section_tests.rs
@@ -0,0 +1,672 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+extern crate std;
+
+use super::*;
+use crate::{
+    credential::{
+        simple::SimpleV1Credential,
+        source::{CredentialSource, SliceCredentialSource},
+        MatchableCredential, V1Credential,
+    },
+    extended::{
+        data_elements::GenericDataElement,
+        deserialize::{
+            convert_data_elements,
+            test_stubs::{HkdfCryptoMaterial, IntermediateSectionExt},
+            OffsetDataElement,
+        },
+        serialize::{
+            self, AdvBuilder, MicEncrypted, SectionBuilder, SignedEncrypted, WriteDataElement,
+        },
+        MAX_DE_LEN,
+    },
+    parse_adv_header, AdvHeader, PublicIdentity,
+};
+use crypto_provider::{CryptoProvider, CryptoRng};
+use crypto_provider_default::CryptoProviderImpl;
+use rand::{seq::SliceRandom as _, Rng as _, SeedableRng as _};
+use std::prelude::rust_2021::*;
+use std::vec;
+
+type KeyPair = np_ed25519::KeyPair<CryptoProviderImpl>;
+
+#[test]
+fn deserialize_public_identity_section() {
+    do_deserialize_section_unencrypted::<PublicIdentity>(
+        PublicIdentity::default(),
+        PlaintextIdentityMode::Public,
+        1,
+        1,
+    );
+}
+
+// due to lifetime issues, this is somewhat challenging to share with the 90% identical signature
+// test, but if someone feels like putting in the tinkering to make it happen, please do
+#[test]
+fn deserialize_mic_encrypted_rand_identities_finds_correct_one() {
+    let mut rng = rand::rngs::StdRng::from_entropy();
+    let mut crypto_rng = <CryptoProviderImpl as CryptoProvider>::CryptoRng::new();
+    for _ in 0..100 {
+        let identities = (0..100).map(|_| (rng.gen(), KeyPair::generate())).collect::<Vec<_>>();
+
+        let chosen_index = rng.gen_range(0..identities.len());
+        let (chosen_key_seed, _chosen_key_pair) = &identities[chosen_index];
+
+        // share a metadata key to emphasize that we're _only_ using the identity to
+        // differentiate
+        let metadata_key: [u8; 16] = rng.gen();
+
+        let creds = identities
+            .iter()
+            .enumerate()
+            .map(|(index, (key_seed, key_pair))| {
+                SimpleV1Credential::new(
+                    HkdfCryptoMaterial::new(key_seed, &metadata_key, key_pair.public()),
+                    index,
+                )
+            })
+            .collect::<Vec<_>>();
+        let cred_source = SliceCredentialSource::new(&creds);
+
+        let identity_type =
+            *EncryptedIdentityDataElementType::iter().collect::<Vec<_>>().choose(&mut rng).unwrap();
+
+        let mut adv_builder = AdvBuilder::new();
+
+        let hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(chosen_key_seed);
+        let mut section_builder = adv_builder
+            .section_builder(MicEncrypted::new_random_salt(
+                &mut crypto_rng,
+                identity_type,
+                &metadata_key,
+                &hkdf,
+            ))
+            .unwrap();
+
+        let (expected_de_data, expected_des, orig_des) =
+            fill_section_random_des(&mut rng, &mut section_builder, 2);
+
+        section_builder.add_to_advertisement();
+
+        let adv = adv_builder.into_advertisement();
+
+        let (remaining, header) = parse_adv_header(adv.as_slice()).unwrap();
+
+        let v1_header = if let AdvHeader::V1(h) = header {
+            h
+        } else {
+            panic!("incorrect header");
+        };
+
+        let sections = parse_sections(&v1_header, remaining).unwrap();
+        assert_eq!(1, sections.len());
+        let (section, cred) = try_deserialize_all_creds::<_, _, CryptoProviderImpl>(
+            sections[0].as_ciphertext().unwrap(),
+            &cred_source,
+        )
+        .unwrap()
+        .unwrap();
+
+        assert_eq!(&chosen_index, cred.matched_data());
+
+        assert_eq!(section.identity_type(), identity_type);
+        assert_eq!(section.verification_mode(), VerificationMode::Mic);
+        assert_eq!(section.metadata_key(), &metadata_key);
+        assert_eq!(
+            section.contents,
+            SectionContents {
+                section_header: (19 + 2 + 16 + total_de_len(&orig_des) + 16) as u8,
+                de_data: ArrayView::try_from_slice(expected_de_data.as_slice()).unwrap(),
+                data_elements: expected_des,
+            }
+        );
+        assert_eq!(
+            section
+                .data_elements()
+                .map(|de| GenericDataElement::try_from(de.de_type(), de.contents()).unwrap())
+                .collect::<Vec<_>>(),
+            orig_des
+        );
+    }
+}
+
+#[test]
+fn deserialize_signature_encrypted_rand_identities_finds_correct_one() {
+    let mut rng = rand::rngs::StdRng::from_entropy();
+    let mut crypto_rng = <CryptoProviderImpl as CryptoProvider>::CryptoRng::new();
+    for _ in 0..100 {
+        let identities = (0..100).map(|_| (rng.gen(), KeyPair::generate())).collect::<Vec<_>>();
+
+        let chosen_index = rng.gen_range(0..identities.len());
+        let (chosen_key_seed, chosen_key_pair) = &identities[chosen_index];
+
+        // share a metadata key to emphasize that we're _only_ using the identity to
+        // differentiate
+        let metadata_key: [u8; 16] = rng.gen();
+
+        let creds = identities
+            .iter()
+            .enumerate()
+            .map(|(index, (key_seed, key_pair))| {
+                let hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(key_seed);
+                let unsigned =
+                    hkdf.extended_unsigned_metadata_key_hmac_key().calculate_hmac(&metadata_key);
+                let signed =
+                    hkdf.extended_signed_metadata_key_hmac_key().calculate_hmac(&metadata_key);
+                SimpleV1Credential::new(
+                    HkdfCryptoMaterial {
+                        hkdf: *key_seed,
+                        expected_unsigned_metadata_key_hmac: unsigned,
+                        expected_signed_metadata_key_hmac: signed,
+                        pub_key: key_pair.public().to_bytes(),
+                    },
+                    index,
+                )
+            })
+            .collect::<Vec<_>>();
+        let cred_source = SliceCredentialSource::new(&creds);
+
+        let identity_type =
+            *EncryptedIdentityDataElementType::iter().collect::<Vec<_>>().choose(&mut rng).unwrap();
+
+        let mut adv_builder = AdvBuilder::new();
+
+        let hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(chosen_key_seed);
+        let mut section_builder = adv_builder
+            .section_builder(SignedEncrypted::new_random_salt(
+                &mut crypto_rng,
+                identity_type,
+                &metadata_key,
+                chosen_key_pair,
+                &hkdf,
+            ))
+            .unwrap();
+
+        let (expected_de_data, expected_des, orig_des) =
+            fill_section_random_des(&mut rng, &mut section_builder, 2);
+
+        section_builder.add_to_advertisement();
+
+        let adv = adv_builder.into_advertisement();
+
+        let (remaining, header) = parse_adv_header(adv.as_slice()).unwrap();
+
+        let v1_header = if let AdvHeader::V1(h) = header {
+            h
+        } else {
+            panic!("incorrect header");
+        };
+
+        let sections = parse_sections(&v1_header, remaining).unwrap();
+        assert_eq!(1, sections.len());
+        let (section, cred) = try_deserialize_all_creds::<_, _, CryptoProviderImpl>(
+            sections[0].as_ciphertext().unwrap(),
+            &cred_source,
+        )
+        .unwrap()
+        .unwrap();
+
+        assert_eq!(&chosen_index, cred.matched_data());
+
+        assert_eq!(section.identity_type(), identity_type);
+        assert_eq!(section.verification_mode(), VerificationMode::Signature);
+        assert_eq!(section.metadata_key(), &metadata_key);
+        assert_eq!(
+            section.contents,
+            SectionContents {
+                section_header: (19 + 2 + 16 + 64 + total_de_len(&orig_des)) as u8,
+                de_data: ArrayView::try_from_slice(expected_de_data.as_slice()).unwrap(),
+                data_elements: expected_des,
+            }
+        );
+        assert_eq!(
+            section
+                .data_elements()
+                .map(|de| GenericDataElement::try_from(de.de_type(), de.contents()).unwrap())
+                .collect::<Vec<_>>(),
+            orig_des
+        );
+    }
+}
+
+#[test]
+fn deserialize_encrypted_no_matching_identities_finds_nothing() {
+    let mut rng = rand::rngs::StdRng::from_entropy();
+    let mut crypto_rng = <CryptoProviderImpl as CryptoProvider>::CryptoRng::new();
+    for _ in 0..100 {
+        let signed = rng.gen();
+        let mut identities = (0..100).map(|_| (rng.gen(), KeyPair::generate())).collect::<Vec<_>>();
+
+        let chosen_index = rng.gen_range(0..identities.len());
+        // remove so they won't be found later
+        let (chosen_key_seed, chosen_key_pair) = identities.remove(chosen_index);
+
+        // share a metadata key to emphasize that we're _only_ using the identity to
+        // differentiate
+        let metadata_key: [u8; 16] = rng.gen();
+
+        let credentials = identities
+            .iter()
+            .enumerate()
+            .map(|(index, (key_seed, key_pair))| {
+                SimpleV1Credential::new(
+                    HkdfCryptoMaterial::new(key_seed, &metadata_key, key_pair.public()),
+                    index,
+                )
+            })
+            .collect::<Vec<_>>();
+        let cred_source = SliceCredentialSource::new(&credentials);
+
+        let identity_type =
+            *EncryptedIdentityDataElementType::iter().collect::<Vec<_>>().choose(&mut rng).unwrap();
+
+        let mut adv_builder = AdvBuilder::new();
+
+        let hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&chosen_key_seed);
+
+        // awkward split because SectionIdentity isn't object-safe, so we can't just have a
+        // Box<dyn SectionIdentity> and use that in one code path
+        if signed {
+            let identity = SignedEncrypted::new_random_salt(
+                &mut crypto_rng,
+                identity_type,
+                &metadata_key,
+                &chosen_key_pair,
+                &hkdf,
+            );
+            let mut section_builder = adv_builder.section_builder(identity).unwrap();
+            let _ = fill_section_random_des(&mut rng, &mut section_builder, 2);
+            section_builder.add_to_advertisement();
+        } else {
+            let identity =
+                MicEncrypted::new_random_salt(&mut crypto_rng, identity_type, &metadata_key, &hkdf);
+            let mut section_builder = adv_builder.section_builder(identity).unwrap();
+            let _ = fill_section_random_des(&mut rng, &mut section_builder, 2);
+            section_builder.add_to_advertisement();
+        };
+
+        let adv = adv_builder.into_advertisement();
+        let (remaining, header) = parse_adv_header(adv.as_slice()).unwrap();
+        let v1_header = if let AdvHeader::V1(h) = header {
+            h
+        } else {
+            panic!("incorrect header");
+        };
+
+        let sections = parse_sections(&v1_header, remaining).unwrap();
+        assert_eq!(1, sections.len());
+
+        assert!(try_deserialize_all_creds::<_, _, CryptoProviderImpl>(
+            sections[0].as_ciphertext().unwrap(),
+            &cred_source
+        )
+        .unwrap()
+        .is_none());
+    }
+}
+
+#[test]
+fn convert_data_elements_empty() {
+    let orig_des = vec![];
+
+    let (des, data) = convert_data_elements(&orig_des);
+
+    assert_eq!(Vec::<OffsetDataElement>::new(), des);
+    assert_eq!(&Vec::<u8>::new(), data.as_slice());
+}
+
+#[test]
+fn convert_data_elements_just_fits() {
+    // this is actually longer than any real section's worth of DEs could be since we aren't putting
+    // DE headers in the array
+    let orig_data = vec![0x33; 1000];
+
+    let orig_des = vec![
+        RefDataElement {
+            offset: 2.into(),
+            header_len: 2,
+            de_type: 100_u32.into(),
+            contents: &orig_data[0..10],
+        },
+        RefDataElement {
+            offset: 3.into(),
+            header_len: 2,
+            de_type: 101_u32.into(),
+            contents: &orig_data[10..100],
+        },
+        RefDataElement {
+            offset: 4.into(),
+            header_len: 2,
+            de_type: 102_u32.into(),
+            contents: &orig_data[100..NP_ADV_MAX_SECTION_LEN],
+        },
+    ];
+
+    let (des, data) = convert_data_elements(&orig_des);
+
+    assert_eq!(
+        &[
+            OffsetDataElement {
+                offset: 2.into(),
+                de_type: 100_u32.into(),
+                start_of_contents: 0,
+                contents_len: 10
+            },
+            OffsetDataElement {
+                offset: 3.into(),
+                de_type: 101_u32.into(),
+                start_of_contents: 10,
+                contents_len: 90
+            },
+            OffsetDataElement {
+                offset: 4.into(),
+                de_type: 102_u32.into(),
+                start_of_contents: 100,
+                contents_len: NP_ADV_MAX_SECTION_LEN - 100,
+            },
+        ],
+        &des[..]
+    );
+    assert_eq!(&[0x33; NP_ADV_MAX_SECTION_LEN], data.as_slice());
+}
+
+#[test]
+#[should_panic]
+fn convert_data_elements_doesnt_fit_panic() {
+    let orig_data = vec![0x33; 1000];
+    let orig_des = vec![
+        RefDataElement {
+            offset: 2.into(),
+            header_len: 2,
+            de_type: 100_u32.into(),
+            contents: &orig_data[0..10],
+        },
+        // impossibly large DE
+        RefDataElement {
+            offset: 3.into(),
+            header_len: 2,
+            de_type: 101_u32.into(),
+            contents: &orig_data[10..500],
+        },
+    ];
+
+    let _ = convert_data_elements(&orig_des);
+}
+
+#[test]
+fn section_des_expose_correct_data() {
+    let mut orig_data = Vec::new();
+    orig_data.resize(130, 0);
+    for (index, byte) in orig_data.iter_mut().enumerate() {
+        *byte = index as u8;
+    }
+
+    let orig_des = vec![
+        OffsetDataElement {
+            offset: 2.into(),
+            de_type: 100_u32.into(),
+            start_of_contents: 0,
+            contents_len: 10,
+        },
+        OffsetDataElement {
+            offset: 3.into(),
+            de_type: 101_u32.into(),
+            start_of_contents: 10,
+            contents_len: 90,
+        },
+        OffsetDataElement {
+            offset: 4.into(),
+            de_type: 102_u32.into(),
+            start_of_contents: 100,
+            contents_len: 30,
+        },
+    ];
+
+    let section = SectionContents {
+        section_header: 99,
+        de_data: ArrayView::try_from_slice(&orig_data).unwrap(),
+        data_elements: orig_des,
+    };
+
+    // extract out the parts of the DE we care about
+    let des = section
+        .data_elements()
+        .map(|de| (de.offset(), de.de_type(), de.contents().to_vec()))
+        .collect::<Vec<_>>();
+    assert_eq!(
+        vec![
+            (2.into(), 100_u32.into(), orig_data[0..10].to_vec()),
+            (3.into(), 101_u32.into(), orig_data[10..100].to_vec()),
+            (4.into(), 102_u32.into(), orig_data[100..].to_vec())
+        ],
+        des
+    );
+}
+
+#[test]
+fn do_deserialize_zero_section_header() {
+    let mut adv: tinyvec::ArrayVec<[u8; 254]> = tinyvec::ArrayVec::new();
+    adv.push(0x20); // V1 Advertisement
+    adv.push(0x00); // Section header of 0
+    let (remaining, header) = parse_adv_header(adv.as_slice()).unwrap();
+    let v1_header = if let AdvHeader::V1(h) = header {
+        h
+    } else {
+        panic!("incorrect header");
+    };
+    parse_sections(&v1_header, remaining).expect_err("Expected an error");
+}
+
+#[test]
+fn do_deserialize_empty_section() {
+    let adv_builder = AdvBuilder::new();
+    let adv = adv_builder.into_advertisement();
+    let (remaining, header) = parse_adv_header(adv.as_slice()).unwrap();
+    let v1_header = if let AdvHeader::V1(h) = header {
+        h
+    } else {
+        panic!("incorrect header");
+    };
+    parse_sections(&v1_header, remaining).expect_err("Expected an error");
+}
+
+#[test]
+fn do_deserialize_max_number_of_sections() {
+    let adv_builder = build_dummy_advertisement_sections(NP_V1_ADV_MAX_SECTION_COUNT);
+    let adv = adv_builder.into_advertisement();
+    let (remaining, header) = parse_adv_header(adv.as_slice()).unwrap();
+
+    let v1_header = if let AdvHeader::V1(h) = header {
+        h
+    } else {
+        panic!("incorrect header");
+    };
+
+    let sections = parse_sections(&v1_header, remaining).unwrap();
+    assert_eq!(NP_V1_ADV_MAX_SECTION_COUNT, sections.len());
+}
+
+#[test]
+fn try_deserialize_over_max_number_of_sections() {
+    let adv_builder = build_dummy_advertisement_sections(NP_V1_ADV_MAX_SECTION_COUNT);
+    let mut adv = adv_builder.into_advertisement().as_slice().to_vec();
+
+    // Push an extra section
+    adv.extend_from_slice(
+        [
+            0x01, // Section header
+            0x03, // Public identity
+        ]
+        .as_slice(),
+    );
+
+    let (remaining, header) = parse_adv_header(&adv).unwrap();
+
+    let v1_header = if let AdvHeader::V1(h) = header {
+        h
+    } else {
+        panic!("incorrect header");
+    };
+    parse_sections(&v1_header, remaining)
+        .expect_err("Expected an error because number of sections is over 16");
+}
+
+pub(crate) fn random_de<R: rand::Rng>(rng: &mut R) -> GenericDataElement {
+    let mut array = [0_u8; MAX_DE_LEN];
+    rng.fill(&mut array[..]);
+    let data: ArrayView<u8, MAX_DE_LEN> =
+        ArrayView::try_from_array(array, rng.gen_range(0..=MAX_DE_LEN)).unwrap();
+    // skip the first few DEs that Google uses
+    GenericDataElement::try_from(rng.gen_range(20_u32..1000).into(), data.as_slice()).unwrap()
+}
+
+fn do_deserialize_section_unencrypted<I: serialize::SectionIdentity>(
+    identity: I,
+    expected_identity: PlaintextIdentityMode,
+    prefix_len: usize,
+    de_offset: usize,
+) {
+    let mut rng = rand::rngs::StdRng::from_entropy();
+
+    let mut adv_builder = AdvBuilder::new();
+    let mut section_builder = adv_builder.section_builder(identity).unwrap();
+
+    let (expected_de_data, expected_des, orig_des) =
+        fill_section_random_des(&mut rng, &mut section_builder, de_offset);
+
+    section_builder.add_to_advertisement();
+
+    let adv = adv_builder.into_advertisement();
+
+    let (remaining, header) = parse_adv_header(adv.as_slice()).unwrap();
+
+    let v1_header = if let AdvHeader::V1(h) = header {
+        h
+    } else {
+        panic!("incorrect header");
+    };
+
+    let sections = parse_sections(&v1_header, remaining).unwrap();
+    assert_eq!(1, sections.len());
+    let section = sections[0].as_plaintext().unwrap();
+
+    assert_eq!(
+        &PlaintextSection {
+            identity: expected_identity,
+            contents: SectionContents {
+                section_header: (prefix_len + total_de_len(&orig_des)) as u8,
+                de_data: ArrayView::try_from_slice(expected_de_data.as_slice()).unwrap(),
+                data_elements: expected_des,
+            }
+        },
+        section
+    );
+    assert_eq!(
+        section
+            .contents
+            .data_elements()
+            .map(|de| GenericDataElement::try_from(de.de_type(), de.contents()).unwrap())
+            .collect::<Vec<_>>(),
+        orig_des
+    );
+}
+
+fn fill_section_random_des<R: rand::Rng, I: serialize::SectionIdentity>(
+    mut rng: &mut R,
+    section_builder: &mut SectionBuilder<I>,
+    de_offset: usize,
+) -> (Vec<u8>, Vec<OffsetDataElement>, Vec<GenericDataElement>) {
+    let mut expected_de_data = vec![];
+    let mut expected_des = vec![];
+    let mut orig_des = vec![];
+
+    for index in 0..rng.gen_range(1..10) {
+        let de = random_de(&mut rng);
+
+        let de_clone = de.clone();
+        if section_builder.add_de(|_| de_clone).is_err() {
+            break;
+        }
+
+        let orig_len = expected_de_data.len();
+        de.write_de_contents(&mut expected_de_data).unwrap();
+        let contents_len = expected_de_data.len() - orig_len;
+
+        expected_des.push(OffsetDataElement {
+            offset: (index as usize + de_offset).into(),
+            de_type: de.de_header().de_type,
+            contents_len,
+            start_of_contents: orig_len,
+        });
+        orig_des.push(de);
+    }
+    (expected_de_data, expected_des, orig_des)
+}
+
+fn total_de_len(des: &[GenericDataElement]) -> usize {
+    des.iter()
+        .map(|de| {
+            let mut buf = vec![];
+            de.write_de_contents(&mut buf);
+            de.de_header().serialize().len() + buf.len()
+        })
+        .sum()
+}
+
+type TryDeserOutput<'c, C> = Option<(DecryptedSection, <C as MatchableCredential>::Matched<'c>)>;
+
+/// Returns:
+/// - `Ok(Some)` if a matching credential was found
+/// - `Ok(None)` if no matching credential was found, or if `cred_source` provides no credentials
+/// - `Err` if an error occurred.
+fn try_deserialize_all_creds<'c, C, S, P>(
+    section: &CiphertextSection,
+    cred_source: &'c S,
+) -> Result<TryDeserOutput<'c, C>, BatchSectionDeserializeError>
+where
+    C: V1Credential,
+    S: CredentialSource<C>,
+    P: CryptoProvider,
+{
+    for c in cred_source.iter() {
+        match section.try_deserialize::<C, P>(c) {
+            Ok(s) => return Ok(Some((s, c.matched()))),
+            Err(e) => match e {
+                SectionDeserializeError::IncorrectCredential => continue,
+                SectionDeserializeError::ParseError => {
+                    return Err(BatchSectionDeserializeError::ParseError)
+                }
+            },
+        }
+    }
+
+    Ok(None)
+}
+
+fn build_dummy_advertisement_sections(number_of_sections: usize) -> AdvBuilder {
+    let mut adv_builder = AdvBuilder::new();
+    for _ in 0..number_of_sections {
+        let section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+        section_builder.add_to_advertisement();
+    }
+    adv_builder
+}
+
+#[derive(Debug, PartialEq, Eq)]
+enum BatchSectionDeserializeError {
+    /// Advertisement data is malformed
+    ParseError,
+}
diff --git a/nearby/presence/np_adv/src/extended/deserialize/test_stubs.rs b/nearby/presence/np_adv/src/extended/deserialize/test_stubs.rs
new file mode 100644
index 0000000..437b997
--- /dev/null
+++ b/nearby/presence/np_adv/src/extended/deserialize/test_stubs.rs
@@ -0,0 +1,115 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+extern crate std;
+
+use crypto_provider::{ed25519, CryptoProvider};
+use np_hkdf::{NpKeySeedHkdf, UnsignedSectionKeys};
+use std::prelude::rust_2021::*;
+
+use crate::{
+    credential::v1::*,
+    extended::deserialize::{CiphertextSection, PlaintextSection},
+    IntermediateSection,
+};
+
+pub(crate) struct HkdfCryptoMaterial {
+    pub(crate) hkdf: [u8; 32],
+    pub(crate) expected_unsigned_metadata_key_hmac: [u8; 32],
+    pub(crate) expected_signed_metadata_key_hmac: [u8; 32],
+    pub(crate) pub_key: ed25519::RawPublicKey,
+}
+
+impl HkdfCryptoMaterial {
+    pub(crate) fn new<C: CryptoProvider>(
+        hkdf_key_seed: &[u8; 32],
+        metadata_key: &[u8; 16],
+        pub_key: np_ed25519::PublicKey<C>,
+    ) -> Self {
+        let hkdf = NpKeySeedHkdf::<C>::new(hkdf_key_seed);
+        let unsigned =
+            hkdf.extended_unsigned_metadata_key_hmac_key().calculate_hmac(metadata_key.as_slice());
+        let signed =
+            hkdf.extended_signed_metadata_key_hmac_key().calculate_hmac(metadata_key.as_slice());
+        Self {
+            hkdf: *hkdf_key_seed,
+            expected_unsigned_metadata_key_hmac: unsigned,
+            expected_signed_metadata_key_hmac: signed,
+            pub_key: pub_key.to_bytes(),
+        }
+    }
+}
+
+impl HkdfCryptoMaterial {
+    fn hkdf<C: CryptoProvider>(&self) -> NpKeySeedHkdf<C> {
+        NpKeySeedHkdf::<C>::new(&self.hkdf)
+    }
+}
+
+impl V1CryptoMaterial for HkdfCryptoMaterial {
+    type SignedIdentityResolverReference<'a> = SignedSectionIdentityResolutionMaterial
+        where Self: 'a;
+    type UnsignedIdentityResolverReference<'a> = UnsignedSectionIdentityResolutionMaterial
+        where Self: 'a;
+
+    fn signed_identity_resolution_material<C: CryptoProvider>(
+        &self,
+    ) -> Self::SignedIdentityResolverReference<'_> {
+        SignedSectionIdentityResolutionMaterial::from_hkdf_and_expected_metadata_key_hmac::<C>(
+            &self.hkdf::<C>(),
+            self.expected_signed_metadata_key_hmac,
+        )
+    }
+    fn unsigned_identity_resolution_material<C: CryptoProvider>(
+        &self,
+    ) -> Self::UnsignedIdentityResolverReference<'_> {
+        UnsignedSectionIdentityResolutionMaterial::from_hkdf_and_expected_metadata_key_hmac::<C>(
+            &self.hkdf::<C>(),
+            self.expected_unsigned_metadata_key_hmac,
+        )
+    }
+    fn signed_verification_material<C: CryptoProvider>(&self) -> SignedSectionVerificationMaterial {
+        SignedSectionVerificationMaterial { pub_key: self.pub_key }
+    }
+
+    fn unsigned_verification_material<C: CryptoProvider>(
+        &self,
+    ) -> UnsignedSectionVerificationMaterial {
+        let mic_hmac_key = *UnsignedSectionKeys::hmac_key(&self.hkdf::<C>()).as_bytes();
+        UnsignedSectionVerificationMaterial { mic_hmac_key }
+    }
+}
+
+pub(crate) trait IntermediateSectionExt {
+    /// Returns `Some` if `self` is `Plaintext`
+    fn as_plaintext(&self) -> Option<&PlaintextSection>;
+    /// Returns `Some` if `self` is `Ciphertext`
+    fn as_ciphertext(&self) -> Option<&CiphertextSection>;
+}
+
+impl<'a> IntermediateSectionExt for IntermediateSection<'a> {
+    fn as_plaintext(&self) -> Option<&PlaintextSection> {
+        match self {
+            IntermediateSection::Plaintext(s) => Some(s),
+            IntermediateSection::Ciphertext(_) => None,
+        }
+    }
+
+    fn as_ciphertext(&self) -> Option<&CiphertextSection> {
+        match self {
+            IntermediateSection::Plaintext(_) => None,
+            IntermediateSection::Ciphertext(s) => Some(s),
+        }
+    }
+}
diff --git a/nearby/presence/np_adv/src/extended/mod.rs b/nearby/presence/np_adv/src/extended/mod.rs
new file mode 100644
index 0000000..c2f485e
--- /dev/null
+++ b/nearby/presence/np_adv/src/extended/mod.rs
@@ -0,0 +1,90 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! V1 advertisement support.
+use crate::extended::de_type::DeType;
+use crate::DeLengthOutOfRange;
+use array_view::ArrayView;
+
+pub mod data_elements;
+pub mod de_type;
+pub mod deserialize;
+pub mod section_signature_payload;
+pub mod serialize;
+
+/// Maximum size of an NP advertisement, including the adv header
+pub const BLE_ADV_SVC_CONTENT_LEN: usize = 254
+    // length and type bytes for svc data TLV
+    - 1 - 1
+    // NP UUID
+    - 2;
+
+/// Maximum number of sections in an advertisement
+pub const NP_V1_ADV_MAX_SECTION_COUNT: usize = 8;
+
+/// Maximum size of a NP section, including its header byte
+pub const NP_ADV_MAX_SECTION_LEN: usize = BLE_ADV_SVC_CONTENT_LEN
+    // adv header byte
+    - 1;
+
+/// Max V1 DE length (7 bit length field).
+pub(crate) const MAX_DE_LEN: usize = 127;
+
+const METADATA_KEY_LEN: usize = 16;
+
+/// Length of a DE's content -- must be in `[0, 127]`
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub struct DeLength {
+    len: u8,
+}
+
+impl DeLength {
+    /// A convenient constant for zero length.
+    pub const ZERO: DeLength = DeLength { len: 0 };
+
+    fn as_usize(&self) -> usize {
+        self.len as usize
+    }
+}
+
+impl TryFrom<u8> for DeLength {
+    type Error = DeLengthOutOfRange;
+
+    fn try_from(value: u8) -> Result<Self, Self::Error> {
+        if value as usize <= MAX_DE_LEN {
+            Ok(Self { len: value })
+        } else {
+            Err(DeLengthOutOfRange {})
+        }
+    }
+}
+
+impl TryFrom<usize> for DeLength {
+    type Error = DeLengthOutOfRange;
+
+    fn try_from(value: usize) -> Result<Self, Self::Error> {
+        value.try_into().map_err(|_e| DeLengthOutOfRange).and_then(|num: u8| num.try_into())
+    }
+}
+
+/// Convert a tinyvec into an equivalent ArrayView
+fn to_array_view<T, const N: usize>(vec: tinyvec::ArrayVec<[T; N]>) -> ArrayView<T, N>
+where
+    [T; N]: tinyvec::Array,
+{
+    let len = vec.len();
+    ArrayView::try_from_array(vec.into_inner(), len).expect("len is from original vec")
+}
+
+pub(crate) const ENCRYPTION_INFO_DE_TYPE: DeType = DeType::const_from(0x10);
diff --git a/nearby/presence/np_adv/src/extended/section_signature_payload.rs b/nearby/presence/np_adv/src/extended/section_signature_payload.rs
new file mode 100644
index 0000000..2b0ebe5
--- /dev/null
+++ b/nearby/presence/np_adv/src/extended/section_signature_payload.rs
@@ -0,0 +1,142 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! V1 advertisement section np_ed25519 signature payload
+//! after the included context bytes, and utilities for
+//! performing signatures and signature verification.
+
+use crate::extended::deserialize::EncryptionInfo;
+use crate::NP_SVC_UUID;
+use crypto_provider::{aes::ctr::AesCtrNonce, CryptoProvider};
+use sink::{Sink, SinkWriter};
+
+/// A struct representing the necessary contents
+/// of an v1 advertisement section np_ed25519 signature payload which
+/// come after the context prefix (shared among all advs).
+pub(crate) struct SectionSignaturePayload<'a> {
+    /// Advertisement header byte
+    adv_header_byte: u8,
+    /// Header byte for the v1 section being signed
+    section_header: u8,
+    /// Reference to the complete contents of the [`EncryptionInfo`] DE.
+    encryption_info: &'a [u8; EncryptionInfo::TOTAL_DE_LEN],
+    /// Reference to the derived salt (IV) for the section
+    nonce_ref: &'a AesCtrNonce,
+    /// Reference to all remaining information after the derived salt, but
+    /// not including the signature itself [which gets tacked onto the end].
+    after_iv_info: AfterIVInfo<'a>,
+}
+
+/// Representation of the plaintext information in an advertisement
+/// signature payload which comes after the derived salt
+enum AfterIVInfo<'a> {
+    /// Reference to a raw byte array containing all information
+    /// to be included in the signature payload after the derived salt,
+    /// and before the signature itself.
+    Raw(&'a [u8]),
+    /// References to the plaintext identity DE header and the rest
+    /// of the section plaintext after that (includes the plaintext
+    /// identity DE payload).
+    IdentityHeaderThenRaw([u8; 2], &'a [u8]),
+}
+
+const ADV_SIGNATURE_CONTEXT: np_ed25519::SignatureContext = {
+    match np_ed25519::SignatureContext::from_string_bytes("Advertisement Signed Section") {
+        Ok(x) => x,
+        Err(_) => panic!(),
+    }
+};
+
+impl<'a> SectionSignaturePayload<'a> {
+    /// Construct a section signature payload using parts typically found during
+    /// serialization of advertisements.
+    pub(crate) fn from_serialized_parts(
+        adv_header_byte: u8,
+        section_header: u8,
+        encryption_info: &'a [u8; EncryptionInfo::TOTAL_DE_LEN],
+        nonce_ref: &'a AesCtrNonce,
+        raw_after_iv_info: &'a [u8],
+    ) -> Self {
+        Self {
+            adv_header_byte,
+            section_header,
+            encryption_info,
+            nonce_ref,
+            after_iv_info: AfterIVInfo::Raw(raw_after_iv_info),
+        }
+    }
+
+    /// Construct a section signature payload using parts typically found during
+    /// deserialization of advertisements.
+    pub(crate) fn from_deserialized_parts(
+        adv_header_byte: u8,
+        section_header: u8,
+        encryption_info: &'a [u8; EncryptionInfo::TOTAL_DE_LEN],
+        nonce_ref: &'a AesCtrNonce,
+        identity_header: [u8; 2],
+        raw_after_identity_header_info: &'a [u8],
+    ) -> Self {
+        Self {
+            adv_header_byte,
+            section_header,
+            encryption_info,
+            nonce_ref,
+            after_iv_info: AfterIVInfo::IdentityHeaderThenRaw(
+                identity_header,
+                raw_after_identity_header_info,
+            ),
+        }
+    }
+
+    /// Generates a signature for this section signing payload using
+    /// the given Ed25519 key-pair.
+    pub(crate) fn sign<C: CryptoProvider>(
+        self,
+        key_pair: &np_ed25519::KeyPair<C>,
+    ) -> np_ed25519::Signature<C> {
+        key_pair
+            .sign_with_context(&ADV_SIGNATURE_CONTEXT, self)
+            .expect("section signature payloads should fit in signature buffer")
+    }
+    /// Verifies a signature for this section signing payload using
+    /// the given Ed25519 public key.
+    pub(crate) fn verify<C: CryptoProvider>(
+        self,
+        signature: &np_ed25519::Signature<C>,
+        public_key: &np_ed25519::PublicKey<C>,
+    ) -> Result<(), np_ed25519::SignatureVerificationError> {
+        public_key.verify_signature_with_context(&ADV_SIGNATURE_CONTEXT, self, signature)
+    }
+}
+
+impl<'a> SinkWriter for SectionSignaturePayload<'a> {
+    type DataType = u8;
+
+    fn write_payload<S: Sink<u8> + ?Sized>(self, sink: &mut S) -> Option<()> {
+        sink.try_extend_from_slice(&NP_SVC_UUID)?;
+        sink.try_push(self.adv_header_byte)?;
+        sink.try_push(self.section_header)?;
+        sink.try_extend_from_slice(self.encryption_info)?;
+        sink.try_extend_from_slice(self.nonce_ref)?;
+
+        // identity DE and the rest of the DEs except for the suffix
+        match self.after_iv_info {
+            AfterIVInfo::Raw(s) => sink.try_extend_from_slice(s),
+            AfterIVInfo::IdentityHeaderThenRaw(identity_header, s) => {
+                sink.try_extend_from_slice(&identity_header)?;
+                sink.try_extend_from_slice(s)
+            }
+        }
+    }
+}
diff --git a/nearby/presence/np_adv/src/extended/serialize/adv_tests.rs b/nearby/presence/np_adv/src/extended/serialize/adv_tests.rs
new file mode 100644
index 0000000..47804ea
--- /dev/null
+++ b/nearby/presence/np_adv/src/extended/serialize/adv_tests.rs
@@ -0,0 +1,183 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+extern crate std;
+use super::*;
+use crate::extended::serialize::section_tests::{fill_section_builder, DummyDataElement};
+use np_hkdf::v1_salt::DataElementOffset;
+use std::{prelude::rust_2021::*, vec};
+
+#[test]
+fn adv_encode_no_salt() {
+    let mut adv_builder = AdvBuilder::new();
+
+    let mut no_identity_section_builder =
+        adv_builder.section_builder(PublicIdentity::default()).unwrap();
+    no_identity_section_builder
+        .add_de(|_| DummyDataElement { de_type: 20_u32.into(), data: vec![] })
+        .unwrap();
+
+    no_identity_section_builder.add_to_advertisement();
+
+    let mut public_identity_section_builder =
+        adv_builder.section_builder(PublicIdentity::default()).unwrap();
+    public_identity_section_builder
+        .add_de(|_| DummyDataElement { de_type: 30_u32.into(), data: vec![] })
+        .unwrap();
+
+    public_identity_section_builder.add_to_advertisement();
+
+    assert_eq!(
+        &[
+            0x20, // adv header
+            0x3,  // section header
+            0x3,  // public identity
+            0x80, 20,  // de header
+            0x3, // section header
+            0x3, // public identity
+            0x80, 30, // de header
+        ],
+        adv_builder.into_advertisement().as_slice()
+    )
+}
+
+#[test]
+fn adv_encode_with_salt() {
+    let mut adv_builder = AdvBuilder::new();
+
+    let mut no_identity_section_builder =
+        adv_builder.section_builder(PublicIdentity::default()).unwrap();
+    no_identity_section_builder
+        .add_de(|_| DummyDataElement { de_type: 20_u32.into(), data: vec![] })
+        .unwrap();
+
+    no_identity_section_builder.add_to_advertisement();
+
+    let mut public_identity_section_builder =
+        adv_builder.section_builder(PublicIdentity::default()).unwrap();
+    public_identity_section_builder
+        .add_de(|_| DummyDataElement { de_type: 30_u32.into(), data: vec![] })
+        .unwrap();
+
+    public_identity_section_builder.add_to_advertisement();
+
+    let mut expected = vec![
+        0x20, // adv header
+    ];
+    expected.extend_from_slice(&[
+        0x3, // section header
+        0x3, // public identity
+        0x80, 20,  // de header
+        0x3, // section header
+        0x3, // public identity
+        0x80, 30, // de header
+    ]);
+    assert_eq!(expected, adv_builder.into_advertisement().as_slice())
+}
+
+#[test]
+fn adding_any_allowed_section_length_always_works_for_single_section() {
+    // up to section len - 1 to leave room for section header
+    for section_contents_len in 0..NP_ADV_MAX_SECTION_LEN - 1 {
+        let mut adv_builder = AdvBuilder::new();
+        let mut section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+        fill_section_builder(section_contents_len, &mut section_builder);
+
+        section_builder.add_to_advertisement();
+
+        let adv = adv_builder.into_advertisement();
+        assert_eq!(
+            section_contents_len + 1 + 1 + 1, // adv and section headers and identity
+            adv.as_slice().len(),
+            "adv: {:?}\nsection contents len: {}",
+            adv.as_slice(),
+            section_contents_len
+        );
+    }
+}
+
+#[test]
+fn adding_any_allowed_section_length_always_works_for_two_sections() {
+    // leave room for both section header bytes and the public identities
+    for section_1_contents_len in 0..=NP_ADV_MAX_SECTION_LEN - 4 {
+        // leave room for both section headers + public identities + section 1 contents
+        for section_2_contents_len in 0..=NP_ADV_MAX_SECTION_LEN - section_1_contents_len - 4 {
+            let mut adv_builder = AdvBuilder::new();
+
+            let mut section_1_builder =
+                adv_builder.section_builder(PublicIdentity::default()).unwrap();
+            fill_section_builder(section_1_contents_len, &mut section_1_builder);
+            section_1_builder.add_to_advertisement();
+
+            let mut section_2_builder =
+                adv_builder.section_builder(PublicIdentity::default()).unwrap();
+            fill_section_builder(section_2_contents_len, &mut section_2_builder);
+            section_2_builder.add_to_advertisement();
+
+            let adv = adv_builder.into_advertisement();
+            assert_eq!(
+                section_1_contents_len + section_2_contents_len + 1 + 4, // adv and section headers
+                adv.as_slice().len(),
+                "adv: {:?}\nsection 1 contents len: {}, section 2 contents len: {}",
+                adv.as_slice(),
+                section_1_contents_len,
+                section_2_contents_len,
+            );
+        }
+    }
+}
+
+#[test]
+fn building_capacity_0_section_works() {
+    let mut adv_builder = AdvBuilder::new();
+
+    let mut section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+
+    // leave room for two section headers and the public identities
+    fill_section_builder(NP_ADV_MAX_SECTION_LEN - 4, &mut section_builder);
+    section_builder.add_to_advertisement();
+
+    let section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+    // The section header and the public identity
+    assert_eq!(2, section_builder.section.capacity);
+    assert_eq!(2, section_builder.section.len());
+    section_builder.add_to_advertisement();
+
+    assert_eq!(BLE_ADV_SVC_CONTENT_LEN, adv_builder.into_advertisement().as_slice().len());
+}
+
+/// A placeholder identity with a huge prefix
+#[derive(Default, PartialEq, Eq, Debug)]
+struct EnormousIdentity {}
+
+impl SectionIdentity for EnormousIdentity {
+    const PREFIX_LEN: usize = 200;
+    const SUFFIX_LEN: usize = 0;
+    const INITIAL_DE_OFFSET: DataElementOffset = DataElementOffset::ZERO;
+
+    fn postprocess(
+        &mut self,
+        _adv_header_byte: u8,
+        _section_header: u8,
+        _section_contents: &mut [u8],
+    ) {
+        panic!("should never be called, just used for its huge prefix")
+    }
+
+    type DerivedSalt = ();
+
+    fn de_salt(&self, _de_offset: DataElementOffset) -> Self::DerivedSalt {
+        panic!("should never be called, just used for its huge prefix")
+    }
+}
diff --git a/nearby/presence/np_adv/src/extended/serialize/de_header_tests.rs b/nearby/presence/np_adv/src/extended/serialize/de_header_tests.rs
new file mode 100644
index 0000000..eda8b69
--- /dev/null
+++ b/nearby/presence/np_adv/src/extended/serialize/de_header_tests.rs
@@ -0,0 +1,122 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use super::*;
+use crate::extended::deserialize;
+use core::cmp;
+use rand_ext::rand;
+use rand_ext::rand::{distributions, Rng as _};
+
+#[test]
+fn de_header_1_byte_0s() {
+    let hdr = DeHeader { de_type: 0_u32.into(), len: 0_u8.try_into().unwrap() };
+
+    assert_eq!(&[0x00], hdr.serialize().as_slice());
+}
+
+#[test]
+fn de_header_1_byte_max() {
+    let hdr = DeHeader { de_type: 15_u32.into(), len: 7_u8.try_into().unwrap() };
+
+    assert_eq!(&[0x7F], hdr.serialize().as_slice());
+}
+
+#[test]
+fn de_header_2_byte_len_too_big() {
+    let hdr = DeHeader { de_type: 15_u32.into(), len: 8_u8.try_into().unwrap() };
+
+    assert_eq!(&[0x88, 0x0F], hdr.serialize().as_slice());
+}
+
+#[test]
+fn de_header_2_byte_type_too_big() {
+    let hdr = DeHeader { de_type: 16_u32.into(), len: 7_u8.try_into().unwrap() };
+
+    assert_eq!(&[0x87, 0x10], hdr.serialize().as_slice());
+}
+
+#[test]
+fn de_header_max() {
+    let hdr = DeHeader { de_type: u32::MAX.into(), len: 127_u8.try_into().unwrap() };
+    assert_eq!(
+        // first type byte has 3x 0 bits because there are 35 total bits in 5 chunks of 7 bits, but
+        // only 32 bits to start with
+        &[0xFF, 0x8F, 0xFF, 0xFF, 0xFF, 0x7F],
+        hdr.serialize().as_slice()
+    );
+}
+
+#[test]
+fn de_header_special_values() {
+    for de_type in [0_u32, 1, 15, 16, u32::MAX - 1, u32::MAX].iter().map(|t| DeType::from(*t)) {
+        for len in [0_u8, 1, 7, 8, 126, 127].iter().map(|l| DeLength::try_from(*l).unwrap()) {
+            let hdr = DeHeader { de_type, len };
+            let buf = hdr.serialize();
+            let header_len = expected_header_len(hdr);
+
+            assert_eq!(header_len as usize, buf.len());
+
+            let (_, deser) = deserialize::DeHeader::parse(buf.as_slice()).unwrap();
+
+            assert_eq!(
+                deserialize::DeHeader { de_type, contents_len: len, header_bytes: buf },
+                deser
+            )
+        }
+    }
+}
+
+#[test]
+fn de_header_random_roundtrip() {
+    let mut rng = rand_ext::seeded_rng();
+
+    for _ in 0..100_000 {
+        let hdr = DeHeader { de_type: rng.gen(), len: rng.gen() };
+        let buf = hdr.serialize();
+        let header_len = expected_header_len(hdr);
+
+        assert_eq!(header_len as usize, buf.len());
+        let (_, deser) = deserialize::DeHeader::parse(buf.as_slice()).unwrap();
+
+        assert_eq!(
+            deserialize::DeHeader {
+                de_type: hdr.de_type,
+                contents_len: hdr.len,
+                header_bytes: buf
+            },
+            deser
+        )
+    }
+}
+
+fn expected_header_len(hdr: DeHeader) -> u8 {
+    if hdr.de_type.as_u32() <= 15 && hdr.len.len <= 7 {
+        1
+    } else {
+        // at least one type byte to handle the type = 0 case
+        1_u8 + cmp::max(1, (32 - hdr.de_type.as_u32().leading_zeros() as u8 + 6) / 7)
+    }
+}
+
+impl distributions::Distribution<DeLength> for distributions::Standard {
+    fn sample<R: rand::Rng + ?Sized>(&self, rng: &mut R) -> DeLength {
+        DeLength::try_from(rng.gen_range(0_u8..128)).unwrap()
+    }
+}
+
+impl distributions::Distribution<DeType> for distributions::Standard {
+    fn sample<R: rand::Rng + ?Sized>(&self, rng: &mut R) -> DeType {
+        rng.gen::<u32>().into()
+    }
+}
diff --git a/nearby/presence/np_adv/src/extended/serialize/mod.rs b/nearby/presence/np_adv/src/extended/serialize/mod.rs
new file mode 100644
index 0000000..6cedd1e
--- /dev/null
+++ b/nearby/presence/np_adv/src/extended/serialize/mod.rs
@@ -0,0 +1,865 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Serialization support for V1 advertisements.
+//!
+//! # Examples
+//!
+//! Serialize some DEs without an adv salt:
+//!
+//! ```
+//! use np_adv::{
+//!     extended::{data_elements::*, serialize::*, de_type::DeType },
+//!     PublicIdentity
+//! };
+//! use np_adv::shared_data::TxPower;
+//!
+//! // no section identities or DEs need salt in this example
+//! let mut adv_builder = AdvBuilder::new();
+//! let mut section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+//!
+//! section_builder.add_de(|_salt| TxPowerDataElement::from(TxPower::try_from(3).unwrap())).unwrap();
+//!
+//! // add some other DE with type = 1000
+//! section_builder.add_de_res(|_salt|
+//!     GenericDataElement::try_from( DeType::from(1000_u32), &[10, 11, 12, 13])
+//! ).unwrap();
+//!
+//! section_builder.add_to_advertisement();
+//!
+//! assert_eq!(
+//!     &[
+//!         0x20, // adv header
+//!         10, // section header
+//!         0x03, // public identity
+//!         0x15, 3, // tx power
+//!         0x84, 0x87, 0x68, 10, 11, 12, 13, // other DE
+//!     ],
+//!     adv_builder.into_advertisement().as_slice()
+//! );
+//! ```
+//!
+//! Serialize some DEs in an adv with an encrypted section:
+//!
+//! ```
+//! use np_adv::{
+//!     de_type::EncryptedIdentityDataElementType,
+//!     extended::{data_elements::*, serialize::*, de_type::DeType },
+//! };
+//! use rand::{Rng as _, SeedableRng as _};
+//! use crypto_provider::{CryptoProvider, CryptoRng};
+//! use crypto_provider_default::CryptoProviderImpl;
+//! use np_adv::shared_data::TxPower;
+//!
+//! let mut adv_builder = AdvBuilder::new();
+//!
+//! // these would come from the credential//!
+//! let mut rng = <CryptoProviderImpl as CryptoProvider>::CryptoRng::new();
+//! let metadata_key: [u8; 16] = rng.gen();
+//! let key_seed: [u8; 32] = rng.gen();
+//! // use your preferred crypto impl
+//! let key_seed_hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+//!
+//! let mut section_builder = adv_builder.section_builder(MicEncrypted::new_random_salt(
+//!     &mut rng,
+//!     EncryptedIdentityDataElementType::Private,
+//!     &metadata_key,
+//!     &key_seed_hkdf,
+//! )).unwrap();
+//!
+//! section_builder.add_de(|_salt| TxPowerDataElement::from(TxPower::try_from(3).unwrap())).unwrap();
+//!
+//! // add some other DE with type = 1000
+//! section_builder.add_de_res(|salt|
+//!     GenericDataElement::try_from(
+//!         DeType::from(1000_u32),
+//!         &do_fancy_crypto(salt.derive::<16>().expect("16 is a valid HKDF length")))
+//! ).unwrap();
+//!
+//! section_builder.add_to_advertisement();
+//!
+//! // can't assert much about this since most of it is random
+//! assert_eq!(
+//!     0x20, // adv header
+//!     adv_builder.into_advertisement().as_slice()[0]
+//! );
+//!
+//! // A hypothetical function that uses the per-DE derived salt to do something like encrypt or
+//! // otherwise scramble data
+//! fn do_fancy_crypto(derived_salt: [u8; 16]) -> [u8; 16] {
+//!     // flipping bits is just a nonsense example, do something real here
+//!     derived_salt.iter().map(|b| !b)
+//!         .collect::<Vec<_>>()
+//!         .try_into().expect("array sizes match")
+//! }
+//! ```
+use crate::extended::NP_V1_ADV_MAX_SECTION_COUNT;
+use crate::{
+    de_type::{EncryptedIdentityDataElementType, IdentityDataElementType},
+    extended::{
+        data_elements::EncryptionInfoDataElement,
+        de_type::{DeType, ExtendedDataElementType},
+        deserialize::{EncryptedIdentityMetadata, EncryptionInfo, SectionMic},
+        section_signature_payload::*,
+        to_array_view, DeLength, BLE_ADV_SVC_CONTENT_LEN, NP_ADV_MAX_SECTION_LEN,
+    },
+    DeLengthOutOfRange, PublicIdentity, NP_SVC_UUID,
+};
+use array_view::ArrayView;
+use core::fmt;
+use core::marker::PhantomData;
+use crypto_provider::{
+    aes::{
+        ctr::{AesCtr, AesCtrNonce, NonceAndCounter},
+        Aes128Key,
+    },
+    hmac::Hmac,
+    CryptoProvider, CryptoRng,
+};
+use np_hkdf::v1_salt;
+use np_hkdf::v1_salt::{DataElementOffset, V1Salt};
+use sink::Sink;
+
+#[cfg(test)]
+pub(crate) mod adv_tests;
+#[cfg(test)]
+mod de_header_tests;
+#[cfg(test)]
+pub(crate) mod section_tests;
+#[cfg(test)]
+mod test_vectors;
+
+/// Builder for V1 advertisements.
+#[derive(Debug)]
+pub struct AdvBuilder {
+    /// Contains the adv header byte
+    adv: tinyvec::ArrayVec<[u8; BLE_ADV_SVC_CONTENT_LEN]>,
+    section_count: usize,
+}
+
+impl AdvBuilder {
+    /// Build an [AdvBuilder].
+    pub fn new() -> AdvBuilder {
+        let mut adv = tinyvec::ArrayVec::new();
+        // version 1, 0bVVVRRRRR
+        adv.push(0b00100000);
+
+        AdvBuilder { adv, section_count: 0 }
+    }
+
+    /// Create a section builder.
+    ///
+    /// Returns `Err` if there isn't room in the advertisement for the section at its minimum length
+    /// with its chosen identity.
+    ///
+    /// The builder will not accept more DEs than can fit given the space already used in the
+    /// advertisement by previous sections, if any.
+    ///
+    /// Once the builder is populated, add it to the originating advertisement with
+    /// [SectionBuilder.add_to_advertisement].
+    pub fn section_builder<I: SectionIdentity>(
+        &mut self,
+        identity: I,
+    ) -> Result<SectionBuilder<I>, AddSectionError> {
+        // section header and identity prefix
+        let prefix_len = 1 + I::PREFIX_LEN;
+        let minimum_section_len = prefix_len + I::SUFFIX_LEN;
+        // the max overall len available to the section
+        let available_len = self.adv.capacity() - self.adv.len();
+
+        if available_len < minimum_section_len {
+            return Err(AddSectionError::InsufficientAdvSpace);
+        }
+
+        if self.section_count >= NP_V1_ADV_MAX_SECTION_COUNT {
+            return Err(AddSectionError::MaxSectionCountExceeded);
+        }
+
+        let mut section = tinyvec::ArrayVec::new();
+        // placeholder for section header and identity prefix
+        section.resize(prefix_len, 0);
+
+        Ok(SectionBuilder {
+            section: CapacityLimitedVec {
+                vec: section,
+                // won't underflow: checked above
+                capacity: available_len - I::SUFFIX_LEN,
+            },
+            identity,
+            adv_builder: self,
+            next_de_offset: I::INITIAL_DE_OFFSET,
+        })
+    }
+
+    /// Convert the builder into an encoded advertisement.
+    pub fn into_advertisement(self) -> EncodedAdvertisement {
+        EncodedAdvertisement { adv: to_array_view(self.adv) }
+    }
+
+    /// Add the section, which must have come from a SectionBuilder generated from this, into this
+    /// advertisement.
+    fn add_section(&mut self, section: EncodedSection) {
+        self.adv
+            .try_extend_from_slice(section.as_slice())
+            .expect("section capacity enforced in the section builder");
+        self.section_count += 1;
+    }
+
+    fn header_byte(&self) -> u8 {
+        self.adv[0]
+    }
+}
+
+impl Default for AdvBuilder {
+    fn default() -> Self {
+        Self::new()
+    }
+}
+
+/// Errors that can occur when adding a section to an advertisement
+#[derive(Debug, PartialEq, Eq)]
+pub enum AddSectionError {
+    /// The advertisement doesn't have enough space to hold the minimum size of the section
+    InsufficientAdvSpace,
+    /// The advertisement can only hold a maximum of NP_V1_ADV_MAX_SECTION_COUNT number of sections
+    MaxSectionCountExceeded,
+}
+
+/// Derived salt for an individual data element.
+pub struct DeSalt<C: CryptoProvider> {
+    salt: V1Salt<C>,
+    de_offset: DataElementOffset,
+}
+
+impl<C: CryptoProvider> DeSalt<C> {
+    /// Derive salt of the requested length.
+    ///
+    /// The length must be a valid HKDF-SHA256 length.
+    pub fn derive<const N: usize>(&self) -> Option<[u8; N]> {
+        self.salt.derive(Some(self.de_offset))
+    }
+}
+
+/// An encoded NP V1 advertisement, starting with the NP advertisement header byte.
+#[derive(Debug, PartialEq, Eq)]
+pub struct EncodedAdvertisement {
+    adv: ArrayView<u8, BLE_ADV_SVC_CONTENT_LEN>,
+}
+
+impl EncodedAdvertisement {
+    /// Returns the advertisement as a slice.
+    pub fn as_slice(&self) -> &[u8] {
+        self.adv.as_slice()
+    }
+}
+
+/// The encoded form of an advertisement section
+type EncodedSection = ArrayView<u8, NP_ADV_MAX_SECTION_LEN>;
+
+/// Accumulates data elements and encodes them into a section.
+#[derive(Debug)]
+pub struct SectionBuilder<'a, I: SectionIdentity> {
+    /// Contains the section header, the identity-specified overhead, and any DEs added
+    pub(crate) section: CapacityLimitedVec<u8, NP_ADV_MAX_SECTION_LEN>,
+    identity: I,
+    /// mut ref to enforce only one active section builder at a time
+    adv_builder: &'a mut AdvBuilder,
+    next_de_offset: DataElementOffset,
+}
+
+impl<'a, I: SectionIdentity> SectionBuilder<'a, I> {
+    /// Add this builder to the advertisement that created it.
+    pub fn add_to_advertisement(self) {
+        let adv_builder = self.adv_builder;
+        adv_builder.add_section(Self::build_section(
+            self.section.into_inner(),
+            self.identity,
+            adv_builder,
+        ))
+    }
+
+    /// Add a data element to the section with a closure that returns a `Result`.
+    ///
+    /// The provided `build_de` closure will be invoked with the derived salt for this DE.
+    pub fn add_de_res<W: WriteDataElement, E, F: FnOnce(I::DerivedSalt) -> Result<W, E>>(
+        &mut self,
+        build_de: F,
+    ) -> Result<(), AddDataElementError<E>> {
+        let writer = build_de(self.identity.de_salt(self.next_de_offset))
+            .map_err(AddDataElementError::BuildDeError)?;
+
+        let orig_len = self.section.len();
+        // since we own the writer, and it's immutable, no race risk writing header w/ len then
+        // the contents as long as it's not simply an incorrect impl
+        let de_header = writer.de_header();
+        let content_len = self
+            .section
+            .try_extend_from_slice(de_header.serialize().as_slice())
+            .ok_or(AddDataElementError::InsufficientSectionSpace)
+            .and_then(|_| {
+                let after_header_len = self.section.len();
+                writer
+                    .write_de_contents(&mut self.section)
+                    .ok_or(AddDataElementError::InsufficientSectionSpace)
+                    .map(|_| self.section.len() - after_header_len)
+            })
+            .map_err(|e| {
+                // if anything went wrong, truncate any partial writes (e.g. just the header)
+                self.section.truncate(orig_len);
+                e
+            })?;
+
+        if content_len != de_header.len.as_usize() {
+            panic!(
+                "Buggy WriteDataElement impl: header len {}, actual written len {}",
+                de_header.len.as_usize(),
+                content_len
+            );
+        }
+
+        self.next_de_offset = self.next_de_offset.incremented();
+
+        Ok(())
+    }
+
+    /// Add a data element to the section with a closure that returns the data element directly.
+    ///
+    /// The provided `build_de` closure will be invoked with the derived salt for this DE.
+    pub fn add_de<W: WriteDataElement, F: FnOnce(I::DerivedSalt) -> W>(
+        &mut self,
+        build_de: F,
+    ) -> Result<(), AddDataElementError<()>> {
+        self.add_de_res(|derived_salt| Ok::<_, ()>(build_de(derived_salt)))
+    }
+
+    /// Convert a section builder's contents into an encoded section.
+    ///
+    /// Implemented without self to avoid partial-move issues.
+    fn build_section(
+        mut section_contents: tinyvec::ArrayVec<[u8; NP_ADV_MAX_SECTION_LEN]>,
+        mut identity: I,
+        adv_builder: &AdvBuilder,
+    ) -> EncodedSection {
+        // there is space because the capacity for DEs was restricted to allow it
+        section_contents.resize(section_contents.len() + I::SUFFIX_LEN, 0);
+
+        section_contents[0] = section_contents
+            .len()
+            .try_into()
+            .ok()
+            .and_then(|len: u8| len.checked_sub(1))
+            .expect("section length is always <=255 and non-negative");
+
+        identity.postprocess(
+            adv_builder.header_byte(),
+            section_contents[0],
+            &mut section_contents[1..],
+        );
+
+        to_array_view(section_contents)
+    }
+}
+
+/// Errors for adding a DE to a section
+#[derive(Debug, PartialEq, Eq)]
+pub enum AddDataElementError<E> {
+    /// An error occurred when invoking the DE builder closure.
+    BuildDeError(E),
+    /// Too much data to fit into the section
+    InsufficientSectionSpace,
+}
+
+/// The identity used for an individual section.
+pub trait SectionIdentity {
+    /// How much space needs to be reserved for this identity's prefix bytes after the section
+    /// header and before other DEs
+    const PREFIX_LEN: usize;
+
+    /// How much space needs to be reserved after the DEs
+    const SUFFIX_LEN: usize;
+
+    /// The DE offset to use for any DEs added to the section
+    const INITIAL_DE_OFFSET: DataElementOffset;
+
+    /// Postprocess the contents of the section (the data after the section header byte), which will
+    /// start with [Self::PREFIX_LEN] bytes set aside for the identity's use, and similarly end with
+    /// [Self::SUFFIX_LEN] bytes, with DEs (if any) in the middle.
+    fn postprocess(&mut self, adv_header_byte: u8, section_header: u8, section_contents: &mut [u8]);
+
+    /// The type of derived salt produced for a DE sharing a section with this identity.
+    type DerivedSalt;
+
+    /// Produce a `Self::Output` salt for a DE.
+    fn de_salt(&self, de_offset: DataElementOffset) -> Self::DerivedSalt;
+}
+
+impl SectionIdentity for PublicIdentity {
+    /// 1 byte of public identity DE header
+    const PREFIX_LEN: usize = 1;
+    const SUFFIX_LEN: usize = 0;
+    /// Room for the public DE
+    const INITIAL_DE_OFFSET: DataElementOffset = DataElementOffset::ZERO.incremented();
+
+    fn postprocess(
+        &mut self,
+        _adv_header_byte: u8,
+        _section_header: u8,
+        section_contents: &mut [u8],
+    ) {
+        section_contents[0..1].copy_from_slice(
+            DeHeader { len: DeLength::ZERO, de_type: IdentityDataElementType::Public.type_code() }
+                .serialize()
+                .as_slice(),
+        )
+    }
+
+    type DerivedSalt = ();
+
+    fn de_salt(&self, _de_offset: DataElementOffset) -> Self::DerivedSalt {}
+}
+
+/// Encrypts the data elements and protects integrity with a MIC using key material derived from
+/// an NP identity.
+pub struct MicEncrypted<'a, C: CryptoProvider> {
+    identity_type: EncryptedIdentityDataElementType,
+    salt: V1Salt<C>,
+    identity_payload: &'a [u8; 16],
+    aes_key: Aes128Key,
+    mic_hmac_key: np_hkdf::NpHmacSha256Key<C>,
+}
+
+impl<'a, C: CryptoProvider> MicEncrypted<'a, C> {
+    /// Build a [MicEncrypted] from the provided identity info with a random salt.
+    pub fn new_random_salt(
+        rng: &mut C::CryptoRng,
+        identity_type: EncryptedIdentityDataElementType,
+        identity_payload: &'a [u8; 16],
+        keys: &impl np_hkdf::UnsignedSectionKeys<C>,
+    ) -> Self {
+        let salt: V1Salt<C> = rng.gen::<[u8; 16]>().into();
+        Self::new(identity_type, salt, identity_payload, keys)
+    }
+
+    /// Build a [MicEncrypted] from the provided identity info.
+    fn new(
+        identity_type: EncryptedIdentityDataElementType,
+        salt: V1Salt<C>,
+        identity_payload: &'a [u8; 16],
+        keys: &impl np_hkdf::UnsignedSectionKeys<C>,
+    ) -> Self {
+        MicEncrypted {
+            identity_type,
+            salt,
+            identity_payload,
+            aes_key: keys.aes_key(),
+            mic_hmac_key: keys.hmac_key(),
+        }
+    }
+
+    /// Build a [MicEncrypted] from the provided identity info. Exposed outside of this crate for
+    /// testing purposes only.
+    #[cfg(any(test, feature = "testing"))]
+    pub fn new_for_testing(
+        identity_type: EncryptedIdentityDataElementType,
+        salt: V1Salt<C>,
+        identity_payload: &'a [u8; 16],
+        keys: &impl np_hkdf::UnsignedSectionKeys<C>,
+    ) -> Self {
+        Self::new(identity_type, salt, identity_payload, keys)
+    }
+}
+
+impl<'a, C: CryptoProvider> SectionIdentity for MicEncrypted<'a, C> {
+    const PREFIX_LEN: usize =
+        EncryptionInfo::TOTAL_DE_LEN + EncryptedIdentityMetadata::TOTAL_DE_LEN;
+    /// Length of mic
+    const SUFFIX_LEN: usize = SectionMic::CONTENTS_LEN;
+    /// Room for the mic, encryption info, and identity DEs
+    const INITIAL_DE_OFFSET: DataElementOffset =
+        DataElementOffset::ZERO.incremented().incremented();
+
+    fn postprocess(
+        &mut self,
+        adv_header_byte: u8,
+        section_header: u8,
+        section_contents: &mut [u8],
+    ) {
+        // prefix byte layout:
+        // 0-18: Encryption Info DE (header + scheme + salt)
+        // 19-20: Identity DE header
+        // 21-36: Identity DE contents (metadata key)
+
+        // Encryption Info DE
+        let encryption_info_bytes = EncryptionInfoDataElement::mic(
+            self.salt.as_slice().try_into().expect("Salt should be 16 bytes"),
+        )
+        .serialize();
+        section_contents[0..19].copy_from_slice(&encryption_info_bytes);
+
+        // Identity DE
+        let identity_header = identity_de_header(self.identity_type, self.identity_payload);
+        section_contents[19..21].copy_from_slice(identity_header.serialize().as_slice());
+        section_contents[21..37].copy_from_slice(self.identity_payload);
+
+        // DE offset for identity is 1: Encryption Info DE, Identity DE, then other DEs
+        let nonce: AesCtrNonce = self
+            .de_salt(v1_salt::DataElementOffset::from(1))
+            .derive()
+            .expect("AES-CTR nonce is a valid HKDF length");
+
+        let mut cipher = C::AesCtr128::new(&self.aes_key, NonceAndCounter::from_nonce(nonce));
+
+        let ciphertext_end = section_contents.len() - SectionMic::CONTENTS_LEN;
+
+        // encrypt just the part that should be ciphertext: identity DE contents and subsequent DEs
+        cipher.encrypt(&mut section_contents[21..ciphertext_end]);
+
+        // calculate MAC per the spec
+        let mut section_hmac = self.mic_hmac_key.build_hmac();
+        // svc uuid
+        section_hmac.update(NP_SVC_UUID.as_slice());
+        // adv header
+        section_hmac.update(&[adv_header_byte]);
+        // section header
+        section_hmac.update(&[section_header]);
+        // encryption info
+        section_hmac.update(&encryption_info_bytes);
+        // derived salt
+        section_hmac.update(&nonce);
+        // identity header + ciphertext
+        section_hmac.update(&section_contents[19..ciphertext_end]);
+
+        let mic: [u8; 32] = section_hmac.finalize();
+
+        // write truncated MIC
+        section_contents[ciphertext_end..].copy_from_slice(&mic[..SectionMic::CONTENTS_LEN]);
+    }
+
+    type DerivedSalt = DeSalt<C>;
+
+    fn de_salt(&self, de_offset: DataElementOffset) -> Self::DerivedSalt {
+        DeSalt { salt: V1Salt::from(*self.salt.as_array_ref()), de_offset }
+    }
+}
+
+/// Encrypts the data elements and protects integrity with an np_ed25519 signature
+/// using key material derived from an NP identity.
+pub struct SignedEncrypted<'a, C: CryptoProvider> {
+    identity_type: EncryptedIdentityDataElementType,
+    salt: V1Salt<C>,
+    metadata_key: &'a [u8; 16],
+    key_pair: &'a np_ed25519::KeyPair<C>,
+    aes_key: Aes128Key,
+    _marker: PhantomData<C>,
+}
+
+impl<'a, C: CryptoProvider> SignedEncrypted<'a, C> {
+    /// Build a [SignedEncrypted] from the provided identity material with a random salt.
+    pub fn new_random_salt(
+        rng: &mut C::CryptoRng,
+        identity_type: EncryptedIdentityDataElementType,
+        metadata_key: &'a [u8; 16],
+        key_pair: &'a np_ed25519::KeyPair<C>,
+        key_seed_hkdf: &np_hkdf::NpKeySeedHkdf<C>,
+    ) -> Self {
+        let salt: V1Salt<C> = rng.gen::<[u8; 16]>().into();
+        Self::new(identity_type, salt, metadata_key, key_pair, key_seed_hkdf)
+    }
+
+    /// Build a [SignedEncrypted] from the provided identity material.
+    pub(crate) fn new(
+        identity_type: EncryptedIdentityDataElementType,
+        salt: V1Salt<C>,
+        metadata_key: &'a [u8; 16],
+        key_pair: &'a np_ed25519::KeyPair<C>,
+        key_seed_hkdf: &np_hkdf::NpKeySeedHkdf<C>,
+    ) -> Self {
+        Self {
+            identity_type,
+            salt,
+            metadata_key,
+            key_pair,
+            aes_key: key_seed_hkdf.extended_signed_section_aes_key(),
+            _marker: Default::default(),
+        }
+    }
+}
+
+impl<'a, C: CryptoProvider> SectionIdentity for SignedEncrypted<'a, C> {
+    const PREFIX_LEN: usize =
+        EncryptionInfo::TOTAL_DE_LEN + EncryptedIdentityMetadata::TOTAL_DE_LEN;
+    /// Ed25519 signature
+    const SUFFIX_LEN: usize = crypto_provider::ed25519::SIGNATURE_LENGTH;
+    /// Room for the encryption info and identity DEs
+    const INITIAL_DE_OFFSET: DataElementOffset =
+        DataElementOffset::ZERO.incremented().incremented();
+
+    fn postprocess(
+        &mut self,
+        adv_header_byte: u8,
+        section_header: u8,
+        section_contents: &mut [u8],
+    ) {
+        let encryption_info_bytes = EncryptionInfoDataElement::signature(
+            self.salt.as_slice().try_into().expect("Salt should be 16 bytes"),
+        )
+        .serialize();
+        section_contents[0..19].copy_from_slice(&encryption_info_bytes);
+
+        let identity_header = identity_de_header(self.identity_type, self.metadata_key);
+        section_contents[19..21].copy_from_slice(identity_header.serialize().as_slice());
+        section_contents[21..37].copy_from_slice(self.metadata_key);
+
+        let nonce: AesCtrNonce = self
+            .de_salt(v1_salt::DataElementOffset::from(1))
+            .derive()
+            .expect("AES-CTR nonce is a valid HKDF length");
+
+        let (before_sig, sig) =
+            section_contents.split_at_mut(section_contents.len() - Self::SUFFIX_LEN);
+        let (encryption_info, after_encryption_info) =
+            before_sig.split_at(EncryptionInfo::TOTAL_DE_LEN);
+
+        let encryption_info: &[u8; EncryptionInfo::TOTAL_DE_LEN] =
+            encryption_info.try_into().unwrap();
+
+        // we need to sign the 16-byte IV, which doesn't have to actually fit in the adv, but we
+        // don't need a bigger buffer here since we won't be including the 66 bytes for the sig +
+        // header.
+        // If the stack usage ever becomes a problem, we can investigate pre hashing for the
+        // signature.
+        let nonce_ref = &nonce;
+        let section_signature_payload = SectionSignaturePayload::from_serialized_parts(
+            adv_header_byte,
+            section_header,
+            encryption_info,
+            nonce_ref,
+            after_encryption_info,
+        );
+
+        let signature = section_signature_payload.sign(self.key_pair);
+
+        sig[0..64].copy_from_slice(&signature.to_bytes());
+
+        let mut cipher = C::AesCtr128::new(&self.aes_key, NonceAndCounter::from_nonce(nonce));
+
+        // encrypt just the part that should be ciphertext: identity DE contents and subsequent DEs
+        cipher.encrypt(&mut section_contents[21..]);
+    }
+
+    type DerivedSalt = DeSalt<C>;
+
+    fn de_salt(&self, de_offset: DataElementOffset) -> Self::DerivedSalt {
+        DeSalt { salt: V1Salt::from(*self.salt.as_array_ref()), de_offset }
+    }
+}
+
+/// For DE structs that only implement one DE type, rather than multi-type impls.
+pub trait SingleTypeDataElement {
+    /// The DE type for the DE.
+    const DE_TYPE: DeType;
+}
+
+/// Writes data for a V1 DE into a provided buffer.
+///
+/// V1 data elements can be hundreds of bytes, so we ideally wouldn't even stack allocate a buffer
+/// big enough for that, hence an abstraction that writes into an existing buffer.
+pub trait WriteDataElement {
+    /// Returns the DE header that will be serialized into the section.
+    fn de_header(&self) -> DeHeader;
+    /// Write just the contents of the DE, returning `Some` if all contents could be written and
+    /// `None` otherwise.
+    fn write_de_contents<S: Sink<u8>>(&self, sink: &mut S) -> Option<()>;
+}
+
+// convenience impl for &W
+impl<W: WriteDataElement> WriteDataElement for &W {
+    fn de_header(&self) -> DeHeader {
+        (*self).de_header()
+    }
+
+    fn write_de_contents<S: Sink<u8>>(&self, sink: &mut S) -> Option<()> {
+        (*self).write_de_contents(sink)
+    }
+}
+
+/// Serialization-specific representation of a DE header
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub struct DeHeader {
+    /// The length of the content of the DE
+    len: DeLength,
+    pub(crate) de_type: DeType,
+}
+
+impl DeHeader {
+    /// Build a DeHeader from the provided type and length
+    pub fn new(de_type: DeType, len: DeLength) -> Self {
+        DeHeader { de_type, len }
+    }
+
+    /// Serialize the DE header as per the V1 DE header format:
+    /// - 1 byte form for length <= 3 bits, type <= 4 bits: `0LLLTTTT`
+    /// - multi byte form: `0b1LLLLLLL [0b1TTTTTTT ...] 0b0TTTTTTT`
+    ///   - the shortest possible encoding must be used (no empty prefix type bytes)
+    ///
+    /// We assume that a 32-bit de type is sufficient, which would take at most 5 7-bit chunks to
+    /// encode, resulting in a total length of 6 bytes with the initial length byte.
+    pub(crate) fn serialize(&self) -> ArrayView<u8, 6> {
+        let mut buffer = [0; 6];
+        let de_type = self.de_type.as_u32();
+        let hi_bit = 0x80_u8;
+        let len = self.len.len;
+        if len < 8 && de_type < 16 {
+            buffer[0] = len << 4 | de_type as u8;
+            ArrayView::try_from_array(buffer, 1).expect("1 is a valid length")
+        } else {
+            // length w/ extended bit
+            buffer[0] = hi_bit | len;
+
+            // expand to a u64 so we can represent all 5 7-bit chunks of a u32, shifted so that
+            // it fills the top 5 * 7 = 35 bits after the high bit, which is left unset so that
+            // the MSB can be interpreted as a 7-bit chunk with an unset high bit.
+            let mut type64 = (de_type as u64) << (64 - 35 - 1);
+            let mut remaining_chunks = 5;
+            let mut chunks_written = 0;
+            // write 7 bit chunks, skipping leading 0 chunks
+            while remaining_chunks > 0 {
+                let chunk = type64.to_be_bytes()[0];
+                remaining_chunks -= 1;
+
+                // shift 7 more bits up, leaving the high bit unset
+                type64 = (type64 << 7) & (u64::MAX >> 1);
+
+                if chunks_written == 0 && chunk == 0 {
+                    // skip leading all-zero chunks
+                    continue;
+                }
+
+                buffer[1 + chunks_written] = chunk;
+                chunks_written += 1;
+            }
+            if chunks_written > 0 {
+                // fill in high bits for all but the last
+                for byte in buffer[1..chunks_written].iter_mut() {
+                    *byte |= hi_bit;
+                }
+
+                ArrayView::try_from_array(buffer, 1 + chunks_written).expect("length is at most 6")
+            } else {
+                // type byte is a leading 0 bit w/ 0 type, so use the existing 0 byte
+                ArrayView::try_from_array(buffer, 2).expect("2 is a valid length")
+            }
+        }
+    }
+}
+
+fn identity_de_header(
+    id_type: EncryptedIdentityDataElementType,
+    metadata_key: &[u8; 16],
+) -> DeHeader {
+    DeHeader {
+        de_type: id_type.type_code(),
+        len: metadata_key
+            .len()
+            .try_into()
+            .map_err(|_e| DeLengthOutOfRange)
+            .and_then(|len: u8| len.try_into())
+            .expect("metadata key is a valid DE length"),
+    }
+}
+
+/// A wrapper around a fixed-size tinyvec that can have its capacity further constrained to handle
+/// dynamic size limits.
+#[derive(Debug)]
+pub(crate) struct CapacityLimitedVec<T, const N: usize>
+where
+    T: fmt::Debug + Clone,
+    [T; N]: tinyvec::Array + fmt::Debug,
+    <[T; N] as tinyvec::Array>::Item: fmt::Debug + Clone,
+{
+    /// constraint on the occupied space in `vec`.
+    /// Invariant: `vec.len() <= constraint` and `vec.capacity() >= capacity`.
+    capacity: usize,
+    vec: tinyvec::ArrayVec<[T; N]>,
+}
+
+impl<T, const N: usize> CapacityLimitedVec<T, N>
+where
+    T: fmt::Debug + Clone,
+    [T; N]: tinyvec::Array + fmt::Debug,
+    <[T; N] as tinyvec::Array>::Item: fmt::Debug + Clone,
+{
+    pub(crate) fn len(&self) -> usize {
+        self.vec.len()
+    }
+
+    fn capacity(&self) -> usize {
+        self.capacity
+    }
+
+    fn truncate(&mut self, len: usize) {
+        self.vec.truncate(len);
+    }
+
+    fn into_inner(self) -> tinyvec::ArrayVec<[T; N]> {
+        self.vec
+    }
+}
+
+impl<T, const N: usize> Sink<<[T; N] as tinyvec::Array>::Item> for CapacityLimitedVec<T, N>
+where
+    T: fmt::Debug + Clone,
+    [T; N]: tinyvec::Array + fmt::Debug,
+    <[T; N] as tinyvec::Array>::Item: fmt::Debug + Clone,
+{
+    fn try_extend_from_slice(&mut self, items: &[<[T; N] as tinyvec::Array>::Item]) -> Option<()> {
+        if items.len() > (self.capacity() - self.len()) {
+            return None;
+        }
+        // won't panic: just checked the length
+        self.vec.extend_from_slice(items);
+        Some(())
+    }
+
+    fn try_push(&mut self, item: <[T; N] as tinyvec::Array>::Item) -> Option<()> {
+        if self.len() == self.capacity() {
+            // already full
+            None
+        } else {
+            self.vec.push(item);
+            Some(())
+        }
+    }
+}
+
+impl<T, const N: usize> AsRef<[<[T; N] as tinyvec::Array>::Item]> for CapacityLimitedVec<T, N>
+where
+    T: fmt::Debug + Clone,
+    [T; N]: tinyvec::Array + fmt::Debug,
+    <[T; N] as tinyvec::Array>::Item: fmt::Debug + Clone,
+{
+    fn as_ref(&self) -> &[<[T; N] as tinyvec::Array>::Item] {
+        self.vec.as_slice()
+    }
+}
+impl<T, const N: usize> AsMut<[<[T; N] as tinyvec::Array>::Item]> for CapacityLimitedVec<T, N>
+where
+    T: fmt::Debug + Clone,
+    [T; N]: tinyvec::Array + fmt::Debug,
+    <[T; N] as tinyvec::Array>::Item: fmt::Debug + Clone,
+{
+    fn as_mut(&mut self) -> &mut [<[T; N] as tinyvec::Array>::Item] {
+        self.vec.as_mut_slice()
+    }
+}
diff --git a/nearby/presence/np_adv/src/extended/serialize/section_tests.rs b/nearby/presence/np_adv/src/extended/serialize/section_tests.rs
new file mode 100644
index 0000000..af11076
--- /dev/null
+++ b/nearby/presence/np_adv/src/extended/serialize/section_tests.rs
@@ -0,0 +1,860 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+extern crate std;
+
+use super::*;
+use crate::extended::serialize::AddSectionError::MaxSectionCountExceeded;
+use crate::{
+    extended::data_elements::{ContextSyncSeqNumDataElement, GenericDataElement},
+    shared_data::ContextSyncSeqNum,
+};
+use crypto_provider::aes::ctr::AES_CTR_NONCE_LEN;
+use crypto_provider_default::CryptoProviderImpl;
+use np_hkdf::v1_salt::V1Salt;
+use rand::rngs::StdRng;
+use rand::{prelude::SliceRandom as _, Rng as _, SeedableRng as _};
+use std::{prelude::rust_2021::*, vec};
+use strum::IntoEnumIterator as _;
+
+type KeyPair = np_ed25519::KeyPair<CryptoProviderImpl>;
+
+#[test]
+fn public_identity_section_empty() {
+    let mut adv_builder = AdvBuilder::new();
+    let section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+
+    assert_eq!(&[1_u8, 0x03], section_builder.into_section().as_slice());
+}
+
+#[test]
+fn mic_encrypted_identity_section_empty() {
+    do_mic_encrypted_identity_fixed_key_material_test::<DummyDataElement>(&[]);
+}
+
+#[test]
+fn mic_encrypted_identity_section_random_des() {
+    let mut rng = StdRng::from_entropy();
+    let mut crypto_rng = <CryptoProviderImpl as CryptoProvider>::CryptoRng::new();
+
+    for _ in 0..1_000 {
+        let num_des = rng.gen_range(1..=5);
+
+        let extra_des = (0..num_des)
+            .map(|_| {
+                let de_len = rng.gen_range(0..=30);
+                DummyDataElement {
+                    de_type: rng.gen_range(0_u32..=u32::MAX).into(),
+                    data: rand_ext::random_vec_rc(&mut rng, de_len),
+                }
+            })
+            .collect::<Vec<_>>();
+
+        let metadata_key = rng.gen();
+        let key_seed = rng.gen();
+        let identity_type =
+            *EncryptedIdentityDataElementType::iter().collect::<Vec<_>>().choose(&mut rng).unwrap();
+        let key_seed_hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+
+        let mut adv_builder = AdvBuilder::new();
+
+        let mut section_builder = adv_builder
+            .section_builder(MicEncrypted::new_random_salt(
+                &mut crypto_rng,
+                identity_type,
+                &metadata_key,
+                &key_seed_hkdf,
+            ))
+            .unwrap();
+        let section_salt =
+            V1Salt::<CryptoProviderImpl>::from(*section_builder.identity.salt.as_array_ref());
+
+        for de in extra_des.iter() {
+            section_builder.add_de(|_| de).unwrap();
+        }
+
+        // length 53: 19 for encryption info, 18 for identity, 16 for MIC
+        let section_length = 53
+            + extra_des
+                .iter()
+                .map(|de| {
+                    de.de_header().serialize().len() as u8 + de.de_header().len.as_usize() as u8
+                })
+                .sum::<u8>();
+
+        let encryption_info = [
+            &[
+                0x91, 0x10, // header
+                0x00, // scheme (mic)
+            ],
+            section_salt.as_slice(),
+        ]
+        .concat();
+
+        let identity_de_header =
+            DeHeader { len: 16_u8.try_into().unwrap(), de_type: identity_type.type_code() };
+
+        let mut hmac = np_hkdf::UnsignedSectionKeys::hmac_key(&key_seed_hkdf).build_hmac();
+        // just to be sure, we'll construct our test hmac all in one update() call
+        let mut hmac_input = vec![];
+        hmac_input.extend_from_slice(NP_SVC_UUID.as_slice());
+        hmac_input.push(0b00100000); // v1
+
+        // section header
+        hmac_input.push(section_length);
+        hmac_input.extend_from_slice(&encryption_info);
+        let nonce = section_salt.derive::<{ AES_CTR_NONCE_LEN }>(Some(1.into())).unwrap();
+        hmac_input.extend_from_slice(nonce.as_slice());
+
+        hmac_input.extend_from_slice(identity_de_header.serialize().as_slice());
+
+        let mut cipher = <CryptoProviderImpl as CryptoProvider>::AesCtr128::new(
+            &np_hkdf::UnsignedSectionKeys::aes_key(&key_seed_hkdf),
+            NonceAndCounter::from_nonce(nonce),
+        );
+        let mut plaintext = metadata_key.as_slice().to_vec();
+
+        for de in extra_des {
+            plaintext.extend_from_slice(de.de_header().serialize().as_slice());
+            de.write_de_contents(&mut plaintext);
+        }
+
+        cipher.encrypt(&mut plaintext);
+        let ciphertext = plaintext;
+
+        hmac_input.extend_from_slice(&ciphertext);
+
+        hmac.update(&hmac_input);
+        let mic = hmac.finalize();
+
+        let mut expected = vec![];
+        expected.push(section_length);
+        expected.extend_from_slice(&encryption_info);
+        expected.extend_from_slice(identity_de_header.serialize().as_slice());
+        expected.extend_from_slice(&ciphertext);
+        expected.extend_from_slice(&mic[..16]);
+
+        assert_eq!(&expected, section_builder.into_section().as_slice());
+    }
+}
+
+#[test]
+fn signature_encrypted_identity_section_empty() {
+    do_signature_encrypted_identity_fixed_key_material_test::<DummyDataElement>(&[]);
+}
+
+#[test]
+fn signature_encrypted_identity_section_random_des() {
+    let mut rng = StdRng::from_entropy();
+    let mut crypto_rng = <CryptoProviderImpl as CryptoProvider>::CryptoRng::new();
+
+    for _ in 0..1_000 {
+        let num_des = rng.gen_range(1..=5);
+
+        let metadata_key = rng.gen();
+        let key_seed = rng.gen();
+        let identity_type =
+            *EncryptedIdentityDataElementType::iter().collect::<Vec<_>>().choose(&mut rng).unwrap();
+        let key_seed_hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+
+        let mut adv_builder = AdvBuilder::new();
+        let key_pair = KeyPair::generate();
+
+        let mut section_builder = adv_builder
+            .section_builder(SignedEncrypted::new_random_salt(
+                &mut crypto_rng,
+                identity_type,
+                &metadata_key,
+                &key_pair,
+                &key_seed_hkdf,
+            ))
+            .unwrap();
+        let section_salt =
+            V1Salt::<CryptoProviderImpl>::from(*section_builder.identity.salt.as_array_ref());
+
+        let extra_des = (0..num_des)
+            .map(|_| {
+                let de_len = rng.gen_range(0..=30);
+                DummyDataElement {
+                    de_type: rng.gen_range(0_u32..=u32::MAX).into(),
+                    data: rand_ext::random_vec_rc(&mut rng, de_len),
+                }
+            })
+            // the DEs might not all fit; keep those that do
+            .filter_map(|de| section_builder.add_de(|_| de.clone()).ok().map(|_| de))
+            .collect::<Vec<_>>();
+
+        // 19 for encryption info, 18 for identity, 64 for signature
+        let section_length = 19
+            + 18
+            + 64
+            + extra_des
+                .iter()
+                .map(|de| {
+                    de.de_header().serialize().len() as u8 + de.de_header().len.as_usize() as u8
+                })
+                .sum::<u8>();
+
+        let encryption_info = [
+            &[
+                0x91, 0x10, // header
+                0x08, // scheme (signature)
+            ],
+            section_salt.as_slice(),
+        ]
+        .concat();
+        let encryption_info: [u8; EncryptionInfo::TOTAL_DE_LEN] =
+            encryption_info.try_into().unwrap();
+
+        let identity_de_header =
+            DeHeader { len: 16_u8.try_into().unwrap(), de_type: identity_type.type_code() };
+        let identity_de_header: [u8; 2] =
+            identity_de_header.serialize().as_slice().try_into().unwrap();
+
+        let nonce = section_salt.derive::<{ AES_CTR_NONCE_LEN }>(Some(1.into())).unwrap();
+
+        let mut plaintext = metadata_key.as_slice().to_vec();
+
+        for de in extra_des {
+            plaintext.extend_from_slice(de.de_header().serialize().as_slice());
+            de.write_de_contents(&mut plaintext);
+        }
+
+        let sig_payload = SectionSignaturePayload::from_deserialized_parts(
+            0x20,
+            section_length,
+            &encryption_info,
+            &nonce,
+            identity_de_header,
+            &plaintext,
+        );
+
+        plaintext.extend_from_slice(&sig_payload.sign(&key_pair).to_bytes());
+
+        <CryptoProviderImpl as CryptoProvider>::AesCtr128::new(
+            &key_seed_hkdf.extended_signed_section_aes_key(),
+            NonceAndCounter::from_nonce(nonce),
+        )
+        .encrypt(&mut plaintext);
+        let ciphertext = plaintext;
+
+        let mut expected = vec![section_length];
+        expected.extend_from_slice(&encryption_info);
+        expected.extend_from_slice(&identity_de_header);
+        expected.extend_from_slice(&ciphertext);
+
+        assert_eq!(&expected, section_builder.into_section().as_slice());
+    }
+}
+
+#[test]
+fn section_builder_too_full_doesnt_advance_de_index() {
+    let mut crypto_rng = <CryptoProviderImpl as CryptoProvider>::CryptoRng::new();
+
+    let mut adv_builder = AdvBuilder::new();
+
+    let key_seed = [22; 32];
+    let key_seed_hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+    let metadata_key = [33; 16];
+    let mut section_builder = adv_builder
+        .section_builder(MicEncrypted::new_random_salt(
+            &mut crypto_rng,
+            EncryptedIdentityDataElementType::Trusted,
+            &metadata_key,
+            &key_seed_hkdf,
+        ))
+        .unwrap();
+    let salt = V1Salt::<CryptoProviderImpl>::from(*section_builder.identity.salt.as_array_ref());
+
+    section_builder
+        .add_de(|de_salt| DummyDataElement {
+            de_type: 100_u32.into(),
+            data: de_salt.derive::<100>().unwrap().to_vec(),
+        })
+        .unwrap();
+
+    // this write won't advance the de offset or the internal section buffer length
+    assert_eq!(
+        AddDataElementError::InsufficientSectionSpace,
+        section_builder
+            .add_de(|de_salt| DummyDataElement {
+                de_type: 101_u32.into(),
+                data: de_salt.derive::<100>().unwrap().to_vec(),
+            })
+            .unwrap_err()
+    );
+
+    section_builder
+        .add_de(|de_salt| DummyDataElement {
+            de_type: 102_u32.into(),
+            data: de_salt.derive::<10>().unwrap().to_vec(),
+        })
+        .unwrap();
+
+    section_builder.add_to_advertisement();
+
+    let mut expected = vec![];
+    // metadata key
+    expected.extend_from_slice(&metadata_key);
+    // de header
+    expected.extend_from_slice(&[0x80 + 100, 100]);
+    // section 0 de 2
+    expected.extend_from_slice(&salt.derive::<100>(Some(2.into())).unwrap());
+    // de header
+    expected.extend_from_slice(&[0x80 + 10, 102]);
+    // section 0 de 3
+    expected.extend_from_slice(&salt.derive::<10>(Some(3.into())).unwrap());
+
+    let mut cipher = <CryptoProviderImpl as CryptoProvider>::AesCtr128::new(
+        &np_hkdf::UnsignedSectionKeys::aes_key(&key_seed_hkdf),
+        NonceAndCounter::from_nonce(salt.derive(Some(1.into())).unwrap()),
+    );
+
+    cipher.encrypt(&mut expected);
+
+    let adv_bytes = adv_builder.into_advertisement();
+    // ignoring the MIC, etc, since that's tested elsewhere
+    let ciphertext_end = adv_bytes.as_slice().len() - 16;
+    assert_eq!(&expected, &adv_bytes.as_slice()[1 + 1 + 19 + 2..ciphertext_end])
+}
+
+#[test]
+fn section_de_fits_exactly() {
+    // leave room for initial filler section's header and the identities
+    for section_contents_capacity in 1..NP_ADV_MAX_SECTION_LEN - 3 {
+        let mut adv_builder = AdvBuilder::new();
+
+        // fill up space to produce desired capacity
+        let mut section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+        // leave space for adv header, 2 section headers, the section identities, and desired second section capacity
+        fill_section_builder(
+            BLE_ADV_SVC_CONTENT_LEN - 1 - 2 - 2 - section_contents_capacity,
+            &mut section_builder,
+        );
+        section_builder.add_to_advertisement();
+
+        let mut section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+
+        // fill it almost full
+        fill_section_builder(section_contents_capacity - 1, &mut section_builder);
+
+        assert_eq!(
+            1,
+            section_builder.section.capacity() - section_builder.section.len(),
+            "capacity: {section_contents_capacity}"
+        );
+
+        // can't add a 2 byte DE
+        assert_eq!(
+            Err(AddDataElementError::InsufficientSectionSpace),
+            section_builder.add_de_res(|_| GenericDataElement::try_from(1_u32.into(), &[0xFF])),
+            "capacity: {section_contents_capacity}"
+        );
+
+        // can add a 1 byte DE
+        section_builder.add_de_res(|_| GenericDataElement::try_from(1_u32.into(), &[])).unwrap();
+    }
+}
+
+#[test]
+fn section_builder_build_de_error_doesnt_advance_de_index() {
+    let mut crypto_rng = <CryptoProviderImpl as CryptoProvider>::CryptoRng::new();
+
+    let mut adv_builder = AdvBuilder::new();
+
+    let key_seed = [22; 32];
+    let key_seed_hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+    let metadata_key = [33; 16];
+    let mut section_builder = adv_builder
+        .section_builder(MicEncrypted::new_random_salt(
+            &mut crypto_rng,
+            EncryptedIdentityDataElementType::Trusted,
+            &metadata_key,
+            &key_seed_hkdf,
+        ))
+        .unwrap();
+    let salt = V1Salt::<CryptoProviderImpl>::from(*section_builder.identity.salt.as_array_ref());
+
+    section_builder
+        .add_de(|de_salt| DummyDataElement {
+            de_type: 100_u32.into(),
+            data: de_salt.derive::<100>().unwrap().to_vec(),
+        })
+        .unwrap();
+
+    assert_eq!(
+        AddDataElementError::BuildDeError(()),
+        section_builder.add_de_res(|_| Err::<DummyDataElement, _>(())).unwrap_err()
+    );
+
+    section_builder
+        .add_de(|de_salt| DummyDataElement {
+            de_type: 103_u32.into(),
+            data: de_salt.derive::<10>().unwrap().to_vec(),
+        })
+        .unwrap();
+
+    section_builder.add_to_advertisement();
+
+    let mut expected = vec![];
+    // metadata key
+    expected.extend_from_slice(&metadata_key);
+    // de header
+    expected.extend_from_slice(&[0x80 + 100, 100]);
+    // section 0 de 2
+    expected.extend_from_slice(&salt.derive::<100>(Some(2.into())).unwrap());
+    // de header
+    expected.extend_from_slice(&[0x80 + 10, 103]);
+    // section 0 de 3
+    expected.extend_from_slice(&salt.derive::<10>(Some(3.into())).unwrap());
+
+    let mut cipher = <CryptoProviderImpl as CryptoProvider>::AesCtr128::new(
+        &np_hkdf::UnsignedSectionKeys::aes_key(&key_seed_hkdf),
+        NonceAndCounter::from_nonce(salt.derive(Some(1.into())).unwrap()),
+    );
+
+    cipher.encrypt(&mut expected);
+
+    let adv_bytes = adv_builder.into_advertisement();
+    // ignoring the MIC, etc, since that's tested elsewhere
+    let ciphertext_end = adv_bytes.as_slice().len() - 16;
+    assert_eq!(&expected, &adv_bytes.as_slice()[1 + 1 + 19 + 2..ciphertext_end])
+}
+
+#[test]
+fn add_multiple_de_correct_de_offsets_mic_encrypted_identity() {
+    let mut crypto_rng = <CryptoProviderImpl as CryptoProvider>::CryptoRng::new();
+
+    let mut adv_builder = AdvBuilder::new();
+
+    let key_seed = [22; 32];
+    let key_seed_hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+    let metadata_key = [33; 16];
+    let mut section_builder = adv_builder
+        .section_builder(MicEncrypted::new_random_salt(
+            &mut crypto_rng,
+            EncryptedIdentityDataElementType::Trusted,
+            &metadata_key,
+            &key_seed_hkdf,
+        ))
+        .unwrap();
+    let salt = V1Salt::<CryptoProviderImpl>::from(*section_builder.identity.salt.as_array_ref());
+
+    section_builder
+        .add_de(|de_salt| DummyDataElement {
+            de_type: 64_u32.into(),
+            data: de_salt.derive::<16>().unwrap().to_vec(),
+        })
+        .unwrap();
+    section_builder
+        .add_de(|de_salt| DummyDataElement {
+            de_type: 65_u32.into(),
+            data: de_salt.derive::<16>().unwrap().to_vec(),
+        })
+        .unwrap();
+
+    section_builder.add_to_advertisement();
+
+    let mut expected = vec![];
+    // metadata key
+    expected.extend_from_slice(&metadata_key);
+    // de header
+    expected.extend_from_slice(&[0x90, 0x40]);
+    // section 0 de 2
+    expected.extend_from_slice(&salt.derive::<16>(Some(2.into())).unwrap());
+    // de header
+    expected.extend_from_slice(&[0x90, 0x41]);
+    // section 0 de 3
+    expected.extend_from_slice(&salt.derive::<16>(Some(3.into())).unwrap());
+
+    let mut cipher = <CryptoProviderImpl as CryptoProvider>::AesCtr128::new(
+        &np_hkdf::UnsignedSectionKeys::aes_key(&key_seed_hkdf),
+        NonceAndCounter::from_nonce(salt.derive(Some(1.into())).unwrap()),
+    );
+
+    cipher.encrypt(&mut expected);
+
+    let adv_bytes = adv_builder.into_advertisement();
+    // ignoring the MIC, etc, since that's tested elsewhere
+    let ciphertext_end = adv_bytes.as_slice().len() - 16;
+    assert_eq!(&expected, &adv_bytes.as_slice()[1 + 1 + 19 + 2..ciphertext_end])
+}
+
+#[test]
+fn add_multiple_de_correct_de_offsets_signature_encrypted_identity() {
+    let mut crypto_rng = <CryptoProviderImpl as CryptoProvider>::CryptoRng::new();
+
+    let mut adv_builder = AdvBuilder::new();
+
+    let key_seed = [22; 32];
+    let key_seed_hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+    let metadata_key = [33; 16];
+    let key_pair = KeyPair::generate();
+    let mut section_builder = adv_builder
+        .section_builder(SignedEncrypted::new_random_salt(
+            &mut crypto_rng,
+            EncryptedIdentityDataElementType::Trusted,
+            &metadata_key,
+            &key_pair,
+            &key_seed_hkdf,
+        ))
+        .unwrap();
+    let salt = V1Salt::<CryptoProviderImpl>::from(*section_builder.identity.salt.as_array_ref());
+
+    section_builder
+        .add_de(|de_salt| DummyDataElement {
+            de_type: 64_u32.into(),
+            data: de_salt.derive::<16>().unwrap().to_vec(),
+        })
+        .unwrap();
+    section_builder
+        .add_de(|de_salt| DummyDataElement {
+            de_type: 65_u32.into(),
+            data: de_salt.derive::<16>().unwrap().to_vec(),
+        })
+        .unwrap();
+
+    section_builder.add_to_advertisement();
+
+    let mut expected = vec![];
+    // metadata key
+    expected.extend_from_slice(&metadata_key);
+    // de header
+    expected.extend_from_slice(&[0x90, 0x40]);
+    // section 0 de 2
+    expected.extend_from_slice(&salt.derive::<16>(Some(2.into())).unwrap());
+    // de header
+    expected.extend_from_slice(&[0x90, 0x41]);
+    // section 0 de 3
+    expected.extend_from_slice(&salt.derive::<16>(Some(3.into())).unwrap());
+
+    <CryptoProviderImpl as CryptoProvider>::AesCtr128::new(
+        &key_seed_hkdf.extended_signed_section_aes_key(),
+        NonceAndCounter::from_nonce(salt.derive(Some(1.into())).unwrap()),
+    )
+    .encrypt(&mut expected);
+
+    let adv_bytes = adv_builder.into_advertisement();
+    // ignoring the signature since that's tested elsewhere
+    assert_eq!(
+        &expected,
+        // adv header + salt + section header + encryption info + identity header
+        &adv_bytes.as_slice()[1 + 1 + 19 + 2..adv_bytes.as_slice().len() - 64]
+    )
+}
+
+#[test]
+fn signature_encrypted_section_de_lengths_allow_room_for_suffix() {
+    let mut crypto_rng = <CryptoProviderImpl as CryptoProvider>::CryptoRng::new();
+
+    let mut adv_builder = AdvBuilder::new();
+
+    let key_seed = [22; 32];
+    let key_seed_hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+    let metadata_key = [33; 16];
+    let key_pair = KeyPair::generate();
+    let mut section_builder = adv_builder
+        .section_builder(SignedEncrypted::new_random_salt(
+            &mut crypto_rng,
+            EncryptedIdentityDataElementType::Trusted,
+            &metadata_key,
+            &key_pair,
+            &key_seed_hkdf,
+        ))
+        .unwrap();
+
+    // section header + identity + signature
+    let max_total_de_len = NP_ADV_MAX_SECTION_LEN - 1 - 2 - 16 - 2 - 64;
+
+    // take up 100 bytes to put us within 1 DE of the limit
+    section_builder
+        .add_de(|_| DummyDataElement { de_type: 100_u32.into(), data: vec![0; 98] })
+        .unwrap();
+
+    // one byte too many won't fit
+    assert_eq!(
+        AddDataElementError::InsufficientSectionSpace,
+        section_builder
+            .add_de(|_| DummyDataElement {
+                de_type: 100_u32.into(),
+                data: vec![0; max_total_de_len - 100 - 1]
+            })
+            .unwrap_err()
+    );
+
+    // but this will, as it allows 2 bytes for this DE's header
+    assert_eq!(
+        AddDataElementError::InsufficientSectionSpace,
+        section_builder
+            .add_de(|_| DummyDataElement {
+                de_type: 100_u32.into(),
+                data: vec![0; max_total_de_len - 100 - 2]
+            })
+            .unwrap_err()
+    );
+}
+
+#[test]
+fn serialize_max_number_of_sections() {
+    let mut adv_builder = AdvBuilder::new();
+    for _ in 0..NP_V1_ADV_MAX_SECTION_COUNT {
+        let mut section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+        section_builder.add_de(|_| context_sync_de(1)).unwrap();
+        section_builder.add_to_advertisement();
+    }
+    assert_eq!(
+        adv_builder.section_builder(PublicIdentity::default()).unwrap_err(),
+        MaxSectionCountExceeded
+    );
+}
+
+fn do_mic_encrypted_identity_fixed_key_material_test<W: WriteDataElement>(extra_des: &[W]) {
+    let metadata_key = [1; 16];
+    let key_seed = [2; 32];
+    let adv_header_byte = 0b00100000;
+    let section_salt: V1Salt<CryptoProviderImpl> = [3; 16].into();
+    let identity_type = EncryptedIdentityDataElementType::Private;
+    let key_seed_hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+
+    let mut adv_builder = AdvBuilder::new();
+
+    let mut section_builder = adv_builder
+        .section_builder(MicEncrypted::new(
+            identity_type,
+            V1Salt::from(*section_salt.as_array_ref()),
+            &metadata_key,
+            &key_seed_hkdf,
+        ))
+        .unwrap();
+
+    for de in extra_des {
+        section_builder.add_de(|_| de).unwrap();
+    }
+
+    // length 53: 19 for encryption info, 18 for identity, 16 for MIC
+    let section_length = 53
+        + extra_des
+            .iter()
+            .map(|de| de.de_header().serialize().len() as u8 + de.de_header().len.as_usize() as u8)
+            .sum::<u8>();
+
+    let encryption_info = [
+        &[
+            0x91, 0x10, // header
+            0x00, // scheme (mic)
+        ],
+        section_salt.as_slice(),
+    ]
+    .concat();
+
+    let identity_de_header =
+        DeHeader { len: 16_u8.try_into().unwrap(), de_type: identity_type.type_code() };
+
+    let mut hmac = np_hkdf::UnsignedSectionKeys::hmac_key(&key_seed_hkdf).build_hmac();
+    // just to be sure, we'll construct our test hmac all in one update() call
+    let mut hmac_input = vec![];
+    hmac_input.extend_from_slice(NP_SVC_UUID.as_slice());
+    hmac_input.push(adv_header_byte);
+    // section header
+    hmac_input.push(section_length);
+    hmac_input.extend_from_slice(&encryption_info);
+    let nonce = section_salt.derive::<{ AES_CTR_NONCE_LEN }>(Some(1.into())).unwrap();
+    hmac_input.extend_from_slice(nonce.as_slice());
+
+    hmac_input.extend_from_slice(identity_de_header.serialize().as_slice());
+
+    let mut cipher = <CryptoProviderImpl as CryptoProvider>::AesCtr128::new(
+        &np_hkdf::UnsignedSectionKeys::aes_key(&key_seed_hkdf),
+        NonceAndCounter::from_nonce(nonce),
+    );
+    let mut plaintext = metadata_key.as_slice().to_vec();
+
+    for de in extra_des {
+        plaintext.extend_from_slice(de.de_header().serialize().as_slice());
+        de.write_de_contents(&mut plaintext);
+    }
+
+    cipher.encrypt(&mut plaintext);
+    let ciphertext = plaintext;
+
+    hmac_input.extend_from_slice(&ciphertext);
+
+    hmac.update(&hmac_input);
+    let mic = hmac.finalize();
+
+    let mut expected = vec![];
+    expected.push(section_length);
+    expected.extend_from_slice(&encryption_info);
+    expected.extend_from_slice(identity_de_header.serialize().as_slice());
+    expected.extend_from_slice(&ciphertext);
+    expected.extend_from_slice(&mic[..16]);
+
+    assert_eq!(&expected, section_builder.into_section().as_slice());
+}
+
+fn do_signature_encrypted_identity_fixed_key_material_test<W: WriteDataElement>(extra_des: &[W]) {
+    let metadata_key = [1; 16];
+    let key_seed = [2; 32];
+    let adv_header_byte = 0b00100000;
+    let section_salt: V1Salt<CryptoProviderImpl> = [3; 16].into();
+    let identity_type = EncryptedIdentityDataElementType::Private;
+    let key_seed_hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+    let key_pair = KeyPair::generate();
+
+    let mut adv_builder = AdvBuilder::new();
+
+    let mut section_builder = adv_builder
+        .section_builder(SignedEncrypted::new(
+            identity_type,
+            V1Salt::from(*section_salt.as_array_ref()),
+            &metadata_key,
+            &key_pair,
+            &key_seed_hkdf,
+        ))
+        .unwrap();
+
+    for de in extra_des {
+        section_builder.add_de(|_| de).unwrap();
+    }
+
+    // 19 for encryption info, 18 for identity, 64 for sig
+    let section_length = 19
+        + 18
+        + 64
+        + extra_des
+            .iter()
+            .map(|de| de.de_header().serialize().len() as u8 + de.de_header().len.as_usize() as u8)
+            .sum::<u8>();
+
+    let encryption_info = [
+        &[
+            0x91, 0x10, // header
+            0x08, // scheme (signature)
+        ],
+        section_salt.as_slice(),
+    ]
+    .concat();
+    let encryption_info: [u8; EncryptionInfo::TOTAL_DE_LEN] = encryption_info.try_into().unwrap();
+
+    let identity_de_header =
+        DeHeader { len: 16_u8.try_into().unwrap(), de_type: identity_type.type_code() };
+    let identity_de_header: [u8; 2] = identity_de_header.serialize().as_slice().try_into().unwrap();
+
+    let mut plaintext = metadata_key.as_slice().to_vec();
+
+    for de in extra_des {
+        plaintext.extend_from_slice(de.de_header().serialize().as_slice());
+        de.write_de_contents(&mut plaintext);
+    }
+
+    let nonce = section_salt.derive(Some(1.into())).unwrap();
+
+    let sig_payload = SectionSignaturePayload::from_deserialized_parts(
+        adv_header_byte,
+        section_length,
+        &encryption_info,
+        &nonce,
+        identity_de_header,
+        &plaintext,
+    );
+
+    plaintext.extend_from_slice(&sig_payload.sign(&key_pair).to_bytes());
+
+    <CryptoProviderImpl as CryptoProvider>::AesCtr128::new(
+        &key_seed_hkdf.extended_signed_section_aes_key(),
+        NonceAndCounter::from_nonce(nonce),
+    )
+    .encrypt(&mut plaintext);
+    let ciphertext = plaintext;
+
+    let mut expected = vec![section_length];
+
+    expected.extend_from_slice(&encryption_info);
+    expected.extend_from_slice(&identity_de_header);
+    expected.extend_from_slice(&ciphertext);
+
+    assert_eq!(&expected, section_builder.into_section().as_slice());
+}
+
+/// Write `section_contents_len` bytes of DE and header into `section_builder`
+pub(crate) fn fill_section_builder<I: SectionIdentity>(
+    section_contents_len: usize,
+    section_builder: &mut SectionBuilder<I>,
+) {
+    // DEs can only go up to 127, so we'll need multiple for long sections
+    for _ in 0..(section_contents_len / 100) {
+        let de_contents = vec![0x33; 98];
+        section_builder
+            .add_de_res(|_| GenericDataElement::try_from(100_u32.into(), &de_contents))
+            .unwrap();
+    }
+
+    let remainder_len = section_contents_len % 100;
+    match remainder_len {
+        0 => {
+            // leave remainder empty
+        }
+        1 => {
+            // 1 byte header
+            section_builder
+                .add_de_res(|_| GenericDataElement::try_from(3_u32.into(), &[]))
+                .unwrap();
+        }
+        2 => {
+            // 2 byte header
+            section_builder
+                .add_de_res(|_| GenericDataElement::try_from(100_u32.into(), &[]))
+                .unwrap();
+        }
+        _ => {
+            // 2 byte header + contents as needed
+            // leave room for section and DE headers
+            let de_contents = vec![0x44; remainder_len - 2];
+            section_builder
+                .add_de_res(|_| GenericDataElement::try_from(100_u32.into(), &de_contents))
+                .unwrap();
+        }
+    }
+}
+
+#[derive(Clone)]
+pub(crate) struct DummyDataElement {
+    pub(crate) de_type: DeType,
+    pub(crate) data: Vec<u8>,
+}
+
+impl WriteDataElement for DummyDataElement {
+    fn de_header(&self) -> DeHeader {
+        DeHeader { de_type: self.de_type, len: self.data.len().try_into().unwrap() }
+    }
+
+    fn write_de_contents<S: Sink<u8>>(&self, sink: &mut S) -> Option<()> {
+        sink.try_extend_from_slice(&self.data)
+    }
+}
+
+fn context_sync_de(num: u8) -> ContextSyncSeqNumDataElement {
+    ContextSyncSeqNumDataElement::from(ContextSyncSeqNum::try_from(num).unwrap())
+}
+
+pub(crate) trait SectionBuilderExt {
+    fn into_section(self) -> EncodedSection;
+}
+
+impl<'a, I: SectionIdentity> SectionBuilderExt for SectionBuilder<'a, I> {
+    /// Convenience method for tests
+    fn into_section(self) -> EncodedSection {
+        Self::build_section(self.section.into_inner(), self.identity, self.adv_builder)
+    }
+}
diff --git a/nearby/presence/np_adv/src/extended/serialize/test_vectors.rs b/nearby/presence/np_adv/src/extended/serialize/test_vectors.rs
new file mode 100644
index 0000000..9f7aa5c
--- /dev/null
+++ b/nearby/presence/np_adv/src/extended/serialize/test_vectors.rs
@@ -0,0 +1,192 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+extern crate std;
+
+use crate::{
+    de_type::EncryptedIdentityDataElementType,
+    extended::serialize::{
+        section_tests::{DummyDataElement, SectionBuilderExt},
+        AdvBuilder, MicEncrypted,
+    },
+};
+use anyhow::anyhow;
+use crypto_provider::{aes::ctr::AES_CTR_NONCE_LEN, aes::AesKey};
+use crypto_provider_default::CryptoProviderImpl;
+use np_hkdf::v1_salt;
+use np_hkdf::v1_salt::V1Salt;
+use rand_ext::rand::{prelude::SliceRandom as _, Rng as _, SeedableRng as _};
+use serde_json::json;
+use std::{fs, io::Read as _, prelude::rust_2021::*, println};
+use strum::IntoEnumIterator as _;
+use test_helper::extract_key_array;
+
+#[test]
+fn mic_encrypted_test_vectors() -> Result<(), anyhow::Error> {
+    let full_path = test_helper::get_data_file(
+        "presence/np_adv/resources/test/mic-encrypted-test-vectors.json",
+    );
+    let mut file = fs::File::open(full_path)?;
+    let mut data = String::new();
+    file.read_to_string(&mut data)?;
+
+    let test_cases = match serde_json::de::from_str(&data)? {
+        serde_json::Value::Array(a) => a,
+        _ => return Err(anyhow!("bad json")),
+    };
+
+    for tc in test_cases {
+        {
+            let key_seed = extract_key_array::<32>(&tc, "key_seed");
+            let metadata_key = extract_key_array::<16>(&tc, "metadata_key");
+            let adv_header_byte = extract_key_array::<1>(&tc, "adv_header_byte")[0];
+            let section_salt = v1_salt::V1Salt::<CryptoProviderImpl>::from(
+                extract_key_array::<16>(&tc, "section_salt"),
+            );
+            let identity_type = tc["identity_type"].as_str().map(identity_type_from_label).unwrap();
+            let data_elements = tc["data_elements"]
+                .as_array()
+                .unwrap()
+                .iter()
+                .map(|json_de| DummyDataElement {
+                    data: hex::decode(json_de["contents"].as_str().unwrap()).unwrap(),
+                    de_type: (json_de["de_type"].as_u64().unwrap() as u32).into(),
+                })
+                .collect::<Vec<_>>();
+
+            let hkdf = np_hkdf::NpKeySeedHkdf::new(&key_seed);
+
+            assert_eq!(
+                extract_key_array::<16>(&tc, "aes_key").as_slice(),
+                np_hkdf::UnsignedSectionKeys::aes_key(&hkdf).as_slice()
+            );
+            assert_eq!(
+                extract_key_array::<32>(&tc, "section_mic_hmac_key").as_slice(),
+                np_hkdf::UnsignedSectionKeys::hmac_key(&hkdf).as_bytes()
+            );
+            assert_eq!(
+                extract_key_array::<{ AES_CTR_NONCE_LEN }>(&tc, "nonce").as_slice(),
+                section_salt.derive::<{ AES_CTR_NONCE_LEN }>(Some(1.into())).unwrap()
+            );
+
+            // make an adv builder in the configuration we need
+            let mut adv_builder = AdvBuilder::new();
+            assert_eq!(adv_header_byte, adv_builder.header_byte());
+
+            let mut section_builder = adv_builder
+                .section_builder(MicEncrypted::new(
+                    identity_type,
+                    section_salt,
+                    &metadata_key,
+                    &hkdf,
+                ))
+                .unwrap();
+
+            for de in data_elements {
+                section_builder.add_de(|_| de).unwrap();
+            }
+
+            assert_eq!(
+                hex::decode(tc["encoded_section"].as_str().unwrap()).unwrap(),
+                section_builder.into_section().as_slice()
+            );
+        }
+    }
+
+    Ok(())
+}
+
+#[ignore]
+#[test]
+fn gen_mic_encrypted_test_vectors() {
+    let mut rng = rand::rngs::StdRng::from_entropy();
+
+    let mut array = Vec::<serde_json::Value>::new();
+
+    for _ in 0..100 {
+        let num_des = rng.gen_range(0..=5);
+
+        let extra_des = (0..num_des)
+            .map(|_| {
+                let de_len = rng.gen_range(0..=30);
+                DummyDataElement {
+                    de_type: rng.gen_range(0_u32..=1_000).into(),
+                    data: rand_ext::random_vec_rc(&mut rng, de_len),
+                }
+            })
+            .collect::<Vec<_>>();
+
+        let metadata_key = rng.gen();
+        let key_seed = rng.gen();
+        let adv_header_byte = 0b00100000;
+        let identity_type =
+            *EncryptedIdentityDataElementType::iter().collect::<Vec<_>>().choose(&mut rng).unwrap();
+
+        let key_seed_hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+
+        let mut adv_builder = AdvBuilder::new();
+
+        let section_salt = v1_salt::V1Salt::<CryptoProviderImpl>::from(rng.gen::<[u8; 16]>());
+        let mut section_builder = adv_builder
+            .section_builder(MicEncrypted::new(
+                identity_type,
+                V1Salt::from(*section_salt.as_array_ref()),
+                &metadata_key,
+                &key_seed_hkdf,
+            ))
+            .unwrap();
+
+        for de in extra_des.iter() {
+            section_builder.add_de(|_| de).unwrap();
+        }
+
+        let nonce = section_salt.derive::<{ AES_CTR_NONCE_LEN }>(Some(1.into())).unwrap();
+
+        array
+            .push(json!({
+                "key_seed": hex::encode_upper(key_seed),
+                "metadata_key": hex::encode_upper(metadata_key),
+                "adv_header_byte": hex::encode_upper([adv_header_byte]),
+                "section_salt": hex::encode_upper(section_salt.as_slice()),
+                "identity_type": identity_type_label(identity_type),
+                "data_elements": extra_des.iter().map(|de| json!({
+                    "de_type": de.de_type.as_u32(),
+                    "contents": hex::encode_upper(&de.data)
+                })).collect::<Vec<_>>(),
+                "aes_key": hex::encode_upper(np_hkdf::UnsignedSectionKeys::aes_key(&key_seed_hkdf).as_slice()),
+                "nonce": hex::encode_upper(nonce),
+                "section_mic_hmac_key": hex::encode_upper(np_hkdf::UnsignedSectionKeys::hmac_key(&key_seed_hkdf).as_bytes()),
+                "encoded_section": hex::encode_upper(section_builder.into_section().as_slice())
+            }));
+    }
+
+    println!("{}", serde_json::ser::to_string_pretty(&array).unwrap());
+}
+
+fn identity_type_label(t: EncryptedIdentityDataElementType) -> &'static str {
+    match t {
+        EncryptedIdentityDataElementType::Private => "private",
+        EncryptedIdentityDataElementType::Trusted => "trusted",
+        EncryptedIdentityDataElementType::Provisioned => "provisioned",
+    }
+}
+
+fn identity_type_from_label(label: &str) -> EncryptedIdentityDataElementType {
+    match label {
+        "private" => EncryptedIdentityDataElementType::Private,
+        "trusted" => EncryptedIdentityDataElementType::Trusted,
+        "provisioned" => EncryptedIdentityDataElementType::Provisioned,
+        _ => panic!("unknown label: {}", label),
+    }
+}
diff --git a/nearby/presence/np_adv/src/header_parse_tests.rs b/nearby/presence/np_adv/src/header_parse_tests.rs
new file mode 100644
index 0000000..2da1b4a
--- /dev/null
+++ b/nearby/presence/np_adv/src/header_parse_tests.rs
@@ -0,0 +1,58 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use super::*;
+
+extern crate std;
+
+use nom::error;
+
+#[test]
+fn parse_header_v0() {
+    let (_, header) = parse_adv_header(&[0x00]).unwrap();
+    assert_eq!(AdvHeader::V0, header);
+}
+
+#[test]
+fn parse_header_v0_nonzero_reserved() {
+    let input = &[0x01];
+    assert_eq!(
+        nom::Err::Error(error::Error { input: input.as_slice(), code: error::ErrorKind::Verify }),
+        parse_adv_header(input).unwrap_err()
+    );
+}
+
+#[test]
+fn parse_header_v1_nonzero_reserved() {
+    let input = &[0x30];
+    assert_eq!(
+        nom::Err::Error(error::Error { input: input.as_slice(), code: error::ErrorKind::Verify }),
+        parse_adv_header(input).unwrap_err()
+    );
+}
+
+#[test]
+fn parse_header_bad_version() {
+    let input = &[0x80];
+    assert_eq!(
+        nom::Err::Error(error::Error { input: input.as_slice(), code: error::ErrorKind::Verify }),
+        parse_adv_header(input).unwrap_err()
+    );
+}
+
+#[test]
+fn parse_header_v1() {
+    let (_, header) = parse_adv_header(&[0x20]).unwrap();
+    assert_eq!(AdvHeader::V1(V1Header { header_byte: 0x20 }), header);
+}
diff --git a/nearby/presence/np_adv/src/legacy/actions/macros.rs b/nearby/presence/np_adv/src/legacy/actions/macros.rs
new file mode 100644
index 0000000..ecafeb3
--- /dev/null
+++ b/nearby/presence/np_adv/src/legacy/actions/macros.rs
@@ -0,0 +1,138 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+/// Create a struct holding a `bool`.
+macro_rules! boolean_element_struct {
+    ($type_name:ident) => {
+        #[derive(Debug)]
+        #[allow(missing_docs)]
+        pub struct $type_name {
+            enabled: bool,
+        }
+    };
+}
+
+/// Create a `From<bool>` impl for a struct made with [boolean_element_struct].
+macro_rules! boolean_element_struct_from_bool {
+    ($type_name:ident) => {
+        impl From<bool> for $type_name {
+            fn from(value: bool) -> Self {
+                $type_name { enabled: value }
+            }
+        }
+    };
+}
+
+/// The guts of an ActionElement impl
+macro_rules! boolean_element_action_element_impl_shared {
+    ($type_name:ident, $index:expr) => {
+        const HIGH_BIT_INDEX: u32 = $index;
+        const BITS_LEN: u32 = 1;
+        const ACTION_TYPE: $crate::legacy::actions::ActionType =
+            $crate::legacy::actions::ActionType::$type_name;
+    };
+}
+
+/// Create a struct w/ From<bool> and ActionElement impls.
+/// Use `plaintext_only`, `ciphertext_only`, or `plaintext_and_ciphertext` to create appropriate
+/// impls.
+macro_rules! boolean_element {
+    ($type_name:ident, $index:expr, plaintext_only) => {
+        $crate::legacy::actions::macros::boolean_element_struct!($type_name);
+        $crate::legacy::actions::macros::boolean_element_struct_from_bool!($type_name);
+
+        impl $crate::legacy::actions::ActionElement for $type_name {
+            $crate::legacy::actions::macros::boolean_element_action_element_impl_shared!(
+                $type_name, $index
+            );
+
+            fn supports_flavor(flavor: $crate::legacy::PacketFlavorEnum) -> bool {
+                match flavor {
+                    $crate::legacy::PacketFlavorEnum::Plaintext => true,
+                    $crate::legacy::PacketFlavorEnum::Ciphertext => false,
+                }
+            }
+        }
+
+        $crate::legacy::actions::macros::boolean_element_to_plaintext_element!($type_name);
+    };
+    ($type_name:ident, $index:expr, ciphertext_only) => {
+        $crate::legacy::actions::macros::boolean_element_struct!($type_name);
+        $crate::legacy::actions::macros::boolean_element_struct_from_bool!($type_name);
+
+        impl $crate::legacy::actions::ActionElement for $type_name {
+            $crate::legacy::actions::macros::boolean_element_action_element_impl_shared!(
+                $type_name, $index
+            );
+
+            fn supports_flavor(flavor: $crate::legacy::PacketFlavorEnum) -> bool {
+                match flavor {
+                    $crate::legacy::PacketFlavorEnum::Plaintext => false,
+                    $crate::legacy::PacketFlavorEnum::Ciphertext => true,
+                }
+            }
+        }
+
+        $crate::legacy::actions::macros::boolean_element_to_encrypted_element!($type_name);
+    };
+    ($type_name:ident, $index:expr, plaintext_and_ciphertext) => {
+        $crate::legacy::actions::macros::boolean_element_struct!($type_name);
+        $crate::legacy::actions::macros::boolean_element_struct_from_bool!($type_name);
+
+        impl $crate::legacy::actions::ActionElement for $type_name {
+            $crate::legacy::actions::macros::boolean_element_action_element_impl_shared!(
+                $type_name, $index
+            );
+
+            fn supports_flavor(flavor: $crate::legacy::PacketFlavorEnum) -> bool {
+                match flavor {
+                    $crate::legacy::PacketFlavorEnum::Plaintext => true,
+                    $crate::legacy::PacketFlavorEnum::Ciphertext => true,
+                }
+            }
+        }
+
+        $crate::legacy::actions::macros::boolean_element_to_plaintext_element!($type_name);
+        $crate::legacy::actions::macros::boolean_element_to_encrypted_element!($type_name);
+    };
+}
+
+/// Create a [ToActionElement<Encrypted>] impl with the given index and length 1.
+macro_rules! boolean_element_to_encrypted_element {
+    ( $type_name:ident) => {
+        impl $crate::legacy::actions::ToActionElement<$crate::legacy::Ciphertext> for $type_name {
+            fn bits(&self) -> u8 {
+                self.enabled as u8
+            }
+        }
+    };
+}
+
+/// Create a [ToActionElement<Plaintext>] impl with the given index and length 1.
+macro_rules! boolean_element_to_plaintext_element {
+    ( $type_name:ident) => {
+        impl $crate::legacy::actions::ToActionElement<$crate::legacy::Plaintext> for $type_name {
+            fn bits(&self) -> u8 {
+                self.enabled as u8
+            }
+        }
+    };
+}
+
+// expose macros to the rest of the crate without macro_export's behavior of exporting at crate root
+pub(crate) use {
+    boolean_element, boolean_element_action_element_impl_shared, boolean_element_struct,
+    boolean_element_struct_from_bool, boolean_element_to_encrypted_element,
+    boolean_element_to_plaintext_element,
+};
diff --git a/nearby/presence/np_adv/src/legacy/actions/mod.rs b/nearby/presence/np_adv/src/legacy/actions/mod.rs
new file mode 100644
index 0000000..353848e
--- /dev/null
+++ b/nearby/presence/np_adv/src/legacy/actions/mod.rs
@@ -0,0 +1,442 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! The "Actions" data element and associated types.
+//!
+//! This DE is somewhat more complex than other DEs. Whether or not it supports a particular flavor
+//! depends on the actions set, so it has to be treated as two separate types based on which
+//! flavor type parameter is used.
+use crate::{
+    legacy::{
+        data_elements::{DataElement, DataElementDeserializeError},
+        de_type::{DataElementType, PlainDataElementType},
+        serialize::{DataElementBundle, ToDataElementBundle},
+        Ciphertext, PacketFlavor, PacketFlavorEnum, Plaintext,
+    },
+    shared_data::ContextSyncSeqNum,
+};
+#[cfg(feature = "devtools")]
+use core::ops::Range;
+use core::{marker, num, ops};
+use nom::{bytes, combinator, error};
+use strum::IntoEnumIterator as _;
+
+mod macros;
+#[cfg(test)]
+pub(crate) mod tests;
+
+/// Actions DE.
+/// Only as many DE payload bytes will be present as needed to represent all set bits that are encoded,
+/// with a lower bound of 1 byte in the special case of no set action bits, and an upper bound
+/// of 3 bytes occupied by the DE payload.
+#[derive(Debug, PartialEq, Eq)]
+pub struct ActionsDataElement<F: PacketFlavor> {
+    action: ActionBits<F>,
+}
+
+impl<F: PacketFlavor> ActionsDataElement<F> {
+    /// Returns the actions bits as a u32. The upper limit of an actions field is 3 bytes,
+    /// so the last bytes of this u32 will always be 0
+    pub fn as_u32(self) -> u32 {
+        self.action.bits
+    }
+
+    /// Return whether a boolean action type is set in this data element, or `None` if the given
+    /// action type does not represent a boolean.
+    pub fn has_action(&self, action_type: &ActionType) -> Option<bool> {
+        (action_type.bits_len() == 1).then_some(self.action.bits_for_type(action_type) != 0)
+    }
+
+    /// Return the context sync sequence number.
+    pub fn context_sync_seq_num(&self) -> ContextSyncSeqNum {
+        ContextSyncSeqNum::try_from(self.action.bits_for_type(&ActionType::ContextSyncSeqNum) as u8)
+            .expect("Masking with ActionType::ContextSyncSeqNum should always be in range")
+    }
+}
+
+pub(crate) const ACTIONS_MAX_LEN: usize = 3;
+
+impl<F> ActionsDataElement<F>
+where
+    F: PacketFlavor,
+    ActionsDataElement<F>: DataElement,
+{
+    pub(crate) const ACTIONS_LEN: ops::RangeInclusive<usize> = (1..=ACTIONS_MAX_LEN);
+
+    /// Generic deserialize, not meant to be called directly -- use [DataElement] impls instead.
+    fn deserialize(de_contents: &[u8]) -> Result<Self, DataElementDeserializeError> {
+        combinator::all_consuming::<&[u8], _, error::Error<&[u8]>, _>(combinator::map(
+            bytes::complete::take_while_m_n(0, ACTIONS_MAX_LEN, |_| true),
+            |bytes: &[u8]| {
+                let mut action_bytes = [0_u8; 4];
+                action_bytes[..bytes.len()].copy_from_slice(bytes);
+                u32::from_be_bytes(action_bytes)
+            },
+        ))(de_contents)
+        .map_err(|_| DataElementDeserializeError::DeserializeError {
+            de_type: Self::DE_TYPE_VARIANT,
+        })
+        .map(|(_remaining, actions)| actions)
+        .and_then(|action_bits_num| {
+            let action = ActionBits::try_from(action_bits_num).map_err(|e| {
+                DataElementDeserializeError::FlavorNotSupported {
+                    de_type: Self::DE_TYPE_VARIANT,
+                    flavor: e.flavor,
+                }
+            })?;
+            Ok(Self { action })
+        })
+    }
+}
+
+impl<F: PacketFlavor> From<ActionBits<F>> for ActionsDataElement<F> {
+    fn from(action: ActionBits<F>) -> Self {
+        Self { action }
+    }
+}
+
+impl<F: PacketFlavor> ToDataElementBundle<F> for ActionsDataElement<F> {
+    fn to_de_bundle(&self) -> DataElementBundle<F> {
+        let action_byte_len = self.action.bytes_used();
+        let slice = &self.action.bits.to_be_bytes()[..action_byte_len];
+
+        DataElementBundle::try_from(PlainDataElementType::Actions, slice)
+            .expect("Length < max DE size")
+    }
+}
+
+impl DataElement for ActionsDataElement<Plaintext> {
+    const DE_TYPE_VARIANT: DataElementType = DataElementType::Actions;
+
+    fn supports_flavor(flavor: PacketFlavorEnum) -> bool {
+        match flavor {
+            PacketFlavorEnum::Plaintext => true,
+            PacketFlavorEnum::Ciphertext => false,
+        }
+    }
+
+    fn deserialize<F: PacketFlavor>(
+        de_contents: &[u8],
+    ) -> Result<Self, DataElementDeserializeError> {
+        match F::ENUM_VARIANT {
+            PacketFlavorEnum::Plaintext => ActionsDataElement::deserialize(de_contents),
+            PacketFlavorEnum::Ciphertext => Err(DataElementDeserializeError::FlavorNotSupported {
+                de_type: DataElementType::Actions,
+                flavor: F::ENUM_VARIANT,
+            }),
+        }
+    }
+}
+
+impl DataElement for ActionsDataElement<Ciphertext> {
+    const DE_TYPE_VARIANT: DataElementType = DataElementType::Actions;
+
+    fn supports_flavor(flavor: PacketFlavorEnum) -> bool {
+        match flavor {
+            PacketFlavorEnum::Plaintext => false,
+            PacketFlavorEnum::Ciphertext => true,
+        }
+    }
+
+    fn deserialize<F: PacketFlavor>(
+        de_contents: &[u8],
+    ) -> Result<Self, DataElementDeserializeError> {
+        match F::ENUM_VARIANT {
+            PacketFlavorEnum::Plaintext => Err(DataElementDeserializeError::FlavorNotSupported {
+                de_type: DataElementType::Actions,
+                flavor: F::ENUM_VARIANT,
+            }),
+            PacketFlavorEnum::Ciphertext => ActionsDataElement::deserialize(de_contents),
+        }
+    }
+}
+
+/// Container for the 24 bits defined for "actions" (feature flags and the like).
+/// This internally stores a u32, but only the 24 highest bits of this
+/// field will actually ever be populated.
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub struct ActionBits<F: PacketFlavor> {
+    bits: u32,
+    // marker for element type
+    flavor: marker::PhantomData<F>,
+}
+
+impl<F: PacketFlavor> Default for ActionBits<F> {
+    fn default() -> Self {
+        ActionBits {
+            bits: 0, // no bits set
+            flavor: marker::PhantomData,
+        }
+    }
+}
+
+/// At least one action doesn't support the required flavor
+#[derive(PartialEq, Eq, Debug)]
+pub struct FlavorNotSupported {
+    flavor: PacketFlavorEnum,
+}
+
+lazy_static::lazy_static! {
+    /// All bits for plaintext action types: 1 where a plaintext action could have a bit, 0 elsewhere.
+    static ref ALL_PLAINTEXT_ELEMENT_BITS: u32 = ActionType::iter()
+        .filter(|t| t.supports_flavor(PacketFlavorEnum::Plaintext))
+        .map(|t| t.all_bits())
+        .fold(0_u32, |accum, bits| accum | bits);
+}
+
+lazy_static::lazy_static! {
+    /// All bits for ciphertext action types: 1 where a ciphertext action could have a bit, 0 elsewhere.
+    static ref ALL_CIPHERTEXT_ELEMENT_BITS: u32 = ActionType::iter()
+        .filter(|t| t.supports_flavor(PacketFlavorEnum::Ciphertext))
+        .map(|t| t.all_bits())
+        .fold(0_u32, |accum, bits| accum | bits);
+}
+
+impl<F: PacketFlavor> ActionBits<F> {
+    /// Tries to create ActionBits from a u32, returning error in the event a specific bit is set for
+    /// an unsupported flavor
+    pub fn try_from(value: u32) -> Result<Self, FlavorNotSupported> {
+        let ok_bits: u32 = match F::ENUM_VARIANT {
+            PacketFlavorEnum::Plaintext => *ALL_PLAINTEXT_ELEMENT_BITS,
+            PacketFlavorEnum::Ciphertext => *ALL_CIPHERTEXT_ELEMENT_BITS,
+        };
+
+        // no bits set beyond what's allowed for this flavor
+        if value | ok_bits == ok_bits {
+            Ok(Self { bits: value, flavor: marker::PhantomData })
+        } else {
+            Err(FlavorNotSupported { flavor: F::ENUM_VARIANT })
+        }
+    }
+
+    /// Set the bits for the provided element.
+    /// Bits outside the range set by the action will be unaffected.
+    pub fn set_action<E: ToActionElement<F>>(&mut self, to_element: E) {
+        let element = to_element.to_action_element();
+        let len = element.len.get();
+
+        // validate that the element is not horribly broken
+        debug_assert!(len + element.index <= 32);
+        // must not have bits set past the high `len` bits
+        debug_assert_eq!(0, element.bits >> (8 - len));
+
+        // 0-extend to u32
+        let byte_extended = element.bits as u32;
+        // Shift so that the high bit is at the desired index.
+        // Won't overflow since length > 0.
+        let bits_in_position = byte_extended << (32 - len - element.index);
+
+        // We want to effectively clear out the bits already in place, so we don't want to just |=.
+        // Instead, we construct a u32 with all 1s above and below the relevant bits and &=, so that
+        // if the new bits are 0, the stored bits will be cleared.
+
+        // avoid overflow when index = 0 -- need zero 1 bits to the left in that case
+        let left_1s = u32::MAX.checked_shl(32 - element.index).unwrap_or(0);
+        // avoid underflow when index + len = 32 -- zero 1 bits to the right
+        let right_1s = u32::MAX.checked_shr(element.index + len).unwrap_or(0);
+        let mask = left_1s | right_1s;
+        let bits_for_other_actions = self.bits & mask;
+        self.bits = bits_for_other_actions | bits_in_position;
+    }
+
+    /// How many bytes (1-3) are needed to represent the set bits, starting from the most
+    /// significant bit. The lower bound of 1 is because the unique special case of
+    /// an actions field of all zeroes is required by the spec to occupy exactly one byte.
+    pub(crate) fn bytes_used(&self) -> usize {
+        let bits_used = 32 - self.bits.trailing_zeros();
+        let raw_count = (bits_used as usize + 7) / 8;
+        if raw_count == 0 {
+            1 // Uncommon case - should only be hit for all-zero action bits
+        } else {
+            raw_count
+        }
+    }
+
+    /// Return the bits for a given action type as the low bits in the returned u32.
+    ///
+    /// For example, when extracting the bits `B` from `0bXXXXXXXXXXBBBBBBXXXXXXXXXXXXXXXX`, the
+    /// return value will be `0b00000000000000000000000000BBBBBB`.
+    pub fn bits_for_type(&self, action_type: &ActionType) -> u32 {
+        self.bits << action_type.high_bit_index() >> (32 - action_type.bits_len())
+    }
+}
+
+/// The encoded form of an individual action element.
+#[derive(Debug, Clone, Copy)]
+pub struct ActionElementBits<F: PacketFlavor> {
+    /// Offset from the high bit in `ActionBits.bits`, which would be bit 0 of byte 0 of the big-endian
+    /// representation.
+    /// Must leave enough room for `len` bits in a u32; that is, `index + len <= 32`.
+    index: u32,
+    /// Number of bits used.
+    /// `len + index <= 32` must be true.
+    len: num::NonZeroU32,
+    /// Returns the bits to set as the lower `len` bits of the byte.
+    bits: u8,
+    /// Marker for whether it can be used in plaintext or encrypted data elements.
+    flavor: marker::PhantomData<F>,
+}
+
+/// Core trait for an individual action
+pub trait ActionElement {
+    /// The offset from the high bit in the eventual bit sequence of all actions.
+    /// See [ActionElementBits.index].
+    ///
+    /// Each implementation must have a non-overlapping sequence of bits defined by
+    /// `HIGH_BIT_INDEX` and `BITS_LEN` w.r.t every other implementation.
+    const HIGH_BIT_INDEX: u32;
+    /// The number of high bits in a `u8` that should be used when assembling the complete
+    /// action bit vector.
+    ///
+    /// Must be >0.
+    const BITS_LEN: u32;
+    /// Forces implementations to have a matching enum variant so the enum can be kept up to date.
+    const ACTION_TYPE: ActionType;
+
+    /// Returns whether or not this action supports the provided `flavor`.
+    ///
+    /// Must match the implementations of [ToActionElement].
+    fn supports_flavor(flavor: PacketFlavorEnum) -> bool;
+
+    /// Returns true if the bits for this element are all zero, or if the flavor is supported.
+    fn action_is_supported_or_not_set(bits: u32, flavor: PacketFlavorEnum) -> bool {
+        let shifted = bits << Self::HIGH_BIT_INDEX;
+        let masked = shifted & (!(u32::MAX >> Self::BITS_LEN));
+
+        (masked == 0) || Self::supports_flavor(flavor)
+    }
+}
+
+/// An analog of `Into` tailored to converting structs modeling specific action elements into the
+/// representation needed by [ActionBits].
+pub trait ToActionElement<F: PacketFlavor>: ActionElement {
+    /// Convert the high-level representation of an element into the literal bits needed.
+    fn to_action_element(&self) -> ActionElementBits<F> {
+        ActionElementBits {
+            index: Self::HIGH_BIT_INDEX,
+            len: Self::BITS_LEN.try_into().expect("all elements must have nonzero len"),
+            bits: self.bits(),
+            flavor: marker::PhantomData,
+        }
+    }
+
+    /// Returns the bits that should be set starting at `Self::INDEX`.
+    ///
+    /// Must not have more than the low `len()` bits set.
+    fn bits(&self) -> u8;
+}
+
+/// Provides a way to iterate over all action types.
+#[derive(Clone, Copy, strum_macros::EnumIter, PartialEq, Eq, Hash, Debug)]
+#[allow(missing_docs)]
+pub enum ActionType {
+    ContextSyncSeqNum,
+    ActiveUnlock,
+    NearbyShare,
+    InstantTethering,
+    PhoneHub,
+    Finder,
+    FastPairSass,
+    PresenceManager,
+}
+
+impl ActionType {
+    /// A u32 with all possible bits for this action type set
+    const fn all_bits(&self) -> u32 {
+        (u32::MAX << (32_u32 - self.bits_len())) >> self.high_bit_index()
+    }
+
+    /// Get the range of the bits occupied used by this bit index. For example, if the action type
+    /// uses the 5th and 6th bits, the returned range will be (5..7).
+    /// (0 is the index of the most significant bit).
+    #[cfg(feature = "devtools")]
+    pub const fn bits_range_for_devtools(&self) -> Range<u32> {
+        let high_bit_index = self.high_bit_index();
+        high_bit_index..high_bit_index + self.bits_len()
+    }
+
+    const fn high_bit_index(&self) -> u32 {
+        match self {
+            ActionType::ContextSyncSeqNum => ContextSyncSeqNum::HIGH_BIT_INDEX,
+            ActionType::ActiveUnlock => ActiveUnlock::HIGH_BIT_INDEX,
+            ActionType::NearbyShare => NearbyShare::HIGH_BIT_INDEX,
+            ActionType::InstantTethering => InstantTethering::HIGH_BIT_INDEX,
+            ActionType::PhoneHub => PhoneHub::HIGH_BIT_INDEX,
+            ActionType::Finder => Finder::HIGH_BIT_INDEX,
+            ActionType::FastPairSass => FastPairSass::HIGH_BIT_INDEX,
+            ActionType::PresenceManager => PresenceManager::HIGH_BIT_INDEX,
+        }
+    }
+
+    const fn bits_len(&self) -> u32 {
+        match self {
+            ActionType::ContextSyncSeqNum => ContextSyncSeqNum::BITS_LEN,
+            ActionType::ActiveUnlock => ActiveUnlock::BITS_LEN,
+            ActionType::NearbyShare => NearbyShare::BITS_LEN,
+            ActionType::InstantTethering => InstantTethering::BITS_LEN,
+            ActionType::PhoneHub => PhoneHub::BITS_LEN,
+            ActionType::Finder => Finder::BITS_LEN,
+            ActionType::FastPairSass => FastPairSass::BITS_LEN,
+            ActionType::PresenceManager => PresenceManager::BITS_LEN,
+        }
+    }
+
+    pub(crate) fn supports_flavor(&self, flavor: PacketFlavorEnum) -> bool {
+        match self {
+            ActionType::ContextSyncSeqNum => ContextSyncSeqNum::supports_flavor(flavor),
+            ActionType::ActiveUnlock => ActiveUnlock::supports_flavor(flavor),
+            ActionType::NearbyShare => NearbyShare::supports_flavor(flavor),
+            ActionType::InstantTethering => InstantTethering::supports_flavor(flavor),
+            ActionType::PhoneHub => PhoneHub::supports_flavor(flavor),
+            ActionType::Finder => Finder::supports_flavor(flavor),
+            ActionType::FastPairSass => FastPairSass::supports_flavor(flavor),
+            ActionType::PresenceManager => PresenceManager::supports_flavor(flavor),
+        }
+    }
+}
+
+impl ActionElement for ContextSyncSeqNum {
+    const HIGH_BIT_INDEX: u32 = 0;
+    const BITS_LEN: u32 = 4;
+    const ACTION_TYPE: ActionType = ActionType::ContextSyncSeqNum;
+
+    fn supports_flavor(flavor: PacketFlavorEnum) -> bool {
+        match flavor {
+            PacketFlavorEnum::Plaintext => true,
+            PacketFlavorEnum::Ciphertext => true,
+        }
+    }
+}
+
+impl ToActionElement<Plaintext> for ContextSyncSeqNum {
+    fn bits(&self) -> u8 {
+        self.as_u8()
+    }
+}
+
+impl ToActionElement<Ciphertext> for ContextSyncSeqNum {
+    fn bits(&self) -> u8 {
+        self.as_u8()
+    }
+}
+
+// enabling an element for public adv requires privacy approval due to fingerprinting risk
+
+macros::boolean_element!(ActiveUnlock, 8, ciphertext_only);
+macros::boolean_element!(NearbyShare, 9, plaintext_and_ciphertext);
+macros::boolean_element!(InstantTethering, 10, ciphertext_only);
+macros::boolean_element!(PhoneHub, 11, ciphertext_only);
+macros::boolean_element!(PresenceManager, 12, ciphertext_only);
+macros::boolean_element!(Finder, 13, plaintext_only);
+macros::boolean_element!(FastPairSass, 14, plaintext_only);
diff --git a/nearby/presence/np_adv/src/legacy/actions/tests.rs b/nearby/presence/np_adv/src/legacy/actions/tests.rs
new file mode 100644
index 0000000..2e3fda0
--- /dev/null
+++ b/nearby/presence/np_adv/src/legacy/actions/tests.rs
@@ -0,0 +1,378 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+extern crate std;
+
+use crate::legacy::{
+    actions::*, serialize::ToDataElementBundle, Ciphertext, PacketFlavorEnum, Plaintext,
+};
+use std::collections;
+
+#[test]
+fn set_context_sync_works() {
+    let mut actions = ActionBits::<Plaintext>::default();
+
+    actions.set_action(ContextSyncSeqNum::try_from(15).unwrap());
+    assert_eq_hex(0xF0000000, actions.bits);
+
+    assert_eq!(actions.bits_for_type(&ActionType::ContextSyncSeqNum), 15);
+}
+
+#[test]
+fn set_context_sync_doesnt_clobber_neighboring_bit() {
+    let mut actions = ActionBits::<Plaintext>::default();
+
+    // set bit just below
+    actions.bits |= 0x8000000;
+
+    actions.set_action(ContextSyncSeqNum::try_from(15).unwrap());
+    assert_eq_hex(0xF8000000, actions.bits);
+
+    assert_eq!(actions.bits_for_type(&ActionType::ContextSyncSeqNum), 15);
+}
+
+#[test]
+fn unset_context_sync_works() {
+    let mut actions = ActionBits::<Plaintext> {
+        // all 1s
+        bits: u32::MAX,
+        ..Default::default()
+    };
+
+    actions.set_action(ContextSyncSeqNum::try_from(0).unwrap());
+    assert_eq_hex(0x0FFFFFFF, actions.bits);
+
+    assert_eq!(actions.bits_for_type(&ActionType::ContextSyncSeqNum), 0);
+}
+
+#[test]
+fn set_ns_works() {
+    let mut actions = ActionBits::<Plaintext>::default();
+
+    actions.set_action(NearbyShare::from(true));
+    assert_eq_hex(0x00400000, actions.bits);
+
+    assert_eq!(actions.bits_for_type(&ActionType::NearbyShare), 1);
+    assert_eq!(actions.bits_for_type(&ActionType::ActiveUnlock), 0);
+    assert_eq!(actions.bits_for_type(&ActionType::InstantTethering), 0);
+}
+
+#[test]
+fn set_ns_doesnt_clobber_others() {
+    let mut actions = ActionBits::<Plaintext>::default();
+
+    // set neighboring bits
+    actions.bits |= 0x00120000;
+
+    actions.set_action(NearbyShare::from(true));
+    assert_eq_hex(0x00520000, actions.bits);
+
+    assert_eq!(actions.bits_for_type(&ActionType::NearbyShare), 1);
+    assert_eq!(actions.bits_for_type(&ActionType::PhoneHub), 1);
+    assert_eq!(actions.bits_for_type(&ActionType::FastPairSass), 1);
+}
+
+#[test]
+fn unset_ns_works() {
+    let mut actions = ActionBits::<Plaintext> {
+        // all 1s
+        bits: u32::MAX,
+        ..Default::default()
+    };
+
+    actions.set_action(NearbyShare::from(false));
+    assert_eq_hex(0xFFBFFFFF, actions.bits);
+}
+
+#[test]
+fn set_last_bit_works() {
+    let mut actions = ActionBits::<Plaintext>::default();
+
+    actions.set_action(LastBit::from(true));
+    assert_eq_hex(0x0100, actions.bits);
+}
+
+#[test]
+fn set_last_bit_doesnt_clobber_others() {
+    let mut actions = ActionBits::<Plaintext>::default();
+
+    // set neighboring bits
+    actions.bits |= 0x200;
+
+    actions.set_action(LastBit::from(true));
+    assert_eq_hex(0x300, actions.bits);
+}
+
+#[test]
+fn unset_last_bit_works() {
+    let mut actions = ActionBits::<Plaintext> {
+        // all 1s
+        bits: u32::MAX,
+        ..Default::default()
+    };
+
+    actions.set_action(LastBit::from(false));
+    assert_eq_hex(0xFFFFFEFF, actions.bits);
+}
+
+#[test]
+fn bytes_used_works() {
+    let mut actions = ActionBits::<Plaintext>::default();
+
+    // Special-case: All-zeroes should lead to a single byte being used.
+    assert_eq!(1, actions.bytes_used());
+
+    actions.set_action(ContextSyncSeqNum::try_from(3).unwrap());
+    assert_eq!(1, actions.bytes_used());
+
+    actions.set_action(NearbyShare::from(true));
+    assert_eq!(2, actions.bytes_used());
+
+    actions.set_action(LastBit::from(true));
+    assert_eq!(3, actions.bytes_used());
+
+    actions.set_action(LastBit::from(false));
+    assert_eq!(2, actions.bytes_used());
+}
+
+#[test]
+fn write_de_empty_actions() {
+    // The special case of no action bits set should still occupy one byte [of all zeroes].
+    let de = ActionsDataElement::<Plaintext>::from(ActionBits::default()).to_de_bundle();
+
+    assert_eq!(&[0x00], de.contents_as_slice());
+}
+
+#[test]
+fn write_de_one_action_byte() {
+    let mut action = ActionBits::default();
+    action.set_action(ContextSyncSeqNum::try_from(7).unwrap());
+    let de = ActionsDataElement::<Plaintext>::from(action).to_de_bundle();
+
+    assert_eq!(&[0x70], de.contents_as_slice());
+}
+
+#[test]
+fn write_de_three_action_bytes() {
+    let mut action = ActionBits::default();
+    action.set_action(LastBit::from(true));
+    let de = ActionsDataElement::<Plaintext>::from(action).to_de_bundle();
+
+    assert_eq!(&[0, 0, 1], de.contents_as_slice());
+}
+
+#[test]
+fn write_de_all_plaintext_actions() {
+    let mut action = all_plaintext_actions();
+    action.set_action(LastBit::from(true));
+    let de = ActionsDataElement::<Plaintext>::from(action).to_de_bundle();
+
+    // byte 0: context sync
+    // byte 1: nearby share, finder, fp sass
+    // byte 2: last bit
+    assert_eq!(&[0x90, 0x46, 0x01], de.contents_as_slice());
+}
+
+#[test]
+fn write_de_all_encrypted_actions() {
+    let mut action = all_ciphertext_actions();
+    action.set_action(LastBit::from(true));
+    let de = ActionsDataElement::<Ciphertext>::from(action).to_de_bundle();
+
+    // byte 1: context sync num = 9, 4 unused bits
+    // byte 2: active unlock, nearby share, instant tethering, phone hub,
+    // presence manager, last 3 bits unused
+    // byte 3: last bit
+    assert_eq!(&[0x90, 0xF8, 0x01], de.contents_as_slice());
+}
+
+#[test]
+fn action_element_nonzero_len() {
+    for t in ActionType::iter() {
+        assert!(t.bits_len() > 0);
+    }
+}
+
+#[test]
+fn action_element_bits_dont_overlap() {
+    let type_to_bits =
+        ActionType::iter().map(|t| (t, t.all_bits())).collect::<collections::HashMap<_, _>>();
+
+    for t in ActionType::iter() {
+        let bits = type_to_bits.get(&t).unwrap();
+
+        for (_, other_bits) in type_to_bits.iter().filter(|(other_type, _)| t != **other_type) {
+            assert_eq!(0, bits & other_bits, "type {t:?}");
+        }
+    }
+}
+
+#[test]
+fn action_type_all_bits() {
+    assert_eq!(0xF0000000, ActionType::ContextSyncSeqNum.all_bits());
+    assert_eq!(0x00800000, ActionType::ActiveUnlock.all_bits());
+    assert_eq!(0x00020000, ActionType::FastPairSass.all_bits());
+}
+
+#[test]
+fn action_type_all_bits_in_per_type_masks() {
+    for t in ActionType::iter().filter(|t| t.supports_flavor(PacketFlavorEnum::Plaintext)) {
+        assert_eq!(t.all_bits(), t.all_bits() & *ALL_PLAINTEXT_ELEMENT_BITS);
+    }
+    for t in ActionType::iter().filter(|t| t.supports_flavor(PacketFlavorEnum::Ciphertext)) {
+        assert_eq!(t.all_bits(), t.all_bits() & *ALL_CIPHERTEXT_ELEMENT_BITS);
+    }
+}
+
+#[test]
+fn action_bits_try_from_flavor_mismatch_plaintext() {
+    assert_eq!(
+        FlavorNotSupported { flavor: PacketFlavorEnum::Plaintext },
+        ActionBits::<Plaintext>::try_from(ActionType::PresenceManager.all_bits()).unwrap_err()
+    );
+    assert_eq!(
+        0xF0000000,
+        ActionBits::<Plaintext>::try_from(ActionType::ContextSyncSeqNum.all_bits()).unwrap().bits
+    );
+}
+
+#[test]
+fn action_bits_try_from_flavor_mismatch_ciphertext() {
+    assert_eq!(
+        FlavorNotSupported { flavor: PacketFlavorEnum::Ciphertext },
+        ActionBits::<Ciphertext>::try_from(ActionType::Finder.all_bits()).unwrap_err()
+    );
+    assert_eq!(
+        0xF0000000,
+        ActionBits::<Ciphertext>::try_from(ActionType::ContextSyncSeqNum.all_bits()).unwrap().bits
+    );
+}
+
+#[test]
+fn actions_de_deser_plaintext_with_ciphertext_action() {
+    assert_eq!(
+        DataElementDeserializeError::FlavorNotSupported {
+            de_type: DataElementType::Actions,
+            flavor: PacketFlavorEnum::Plaintext
+        },
+        <ActionsDataElement<Plaintext> as DataElement>::deserialize::<Plaintext>(&[
+            // active unlock bit set
+            0x00, 0x80, 0x00,
+        ])
+        .unwrap_err()
+    );
+}
+
+#[test]
+fn actions_de_deser_ciphertext_with_plaintext_action() {
+    assert_eq!(
+        DataElementDeserializeError::FlavorNotSupported {
+            de_type: DataElementType::Actions,
+            flavor: PacketFlavorEnum::Ciphertext
+        },
+        <ActionsDataElement<Ciphertext> as DataElement>::deserialize::<Ciphertext>(&[
+            // Finder bit set
+            0x00, 0x00, 0x80,
+        ])
+        .unwrap_err()
+    );
+}
+
+#[test]
+fn context_sync_seq_num_works() {
+    let mut action_bits = ActionBits::<Plaintext>::default();
+    action_bits.set_action(ContextSyncSeqNum::try_from(15).unwrap());
+    let action_de = ActionsDataElement::from(action_bits);
+    assert_eq!(15, action_de.context_sync_seq_num().as_u8());
+}
+
+#[test]
+fn context_sync_seq_num_default_zero() {
+    let action_bits = ActionBits::<Plaintext>::default();
+    let action_de = ActionsDataElement::from(action_bits);
+    assert_eq!(0, action_de.context_sync_seq_num().as_u8());
+}
+
+#[test]
+fn has_action_plaintext_works() {
+    let mut action_bits = ActionBits::<Plaintext>::default();
+    action_bits.set_action(ContextSyncSeqNum::try_from(15).unwrap());
+    action_bits.set_action(NearbyShare::from(true));
+    let action_de = ActionsDataElement::from(action_bits);
+    assert_eq!(action_de.has_action(&ActionType::NearbyShare), Some(true));
+    assert_eq!(action_de.has_action(&ActionType::ActiveUnlock), Some(false));
+    assert_eq!(action_de.has_action(&ActionType::PhoneHub), Some(false));
+}
+
+#[test]
+fn has_action_encrypted_works() {
+    let mut action_bits = ActionBits::<Ciphertext>::default();
+    action_bits.set_action(ContextSyncSeqNum::try_from(15).unwrap());
+    action_bits.set_action(NearbyShare::from(true));
+    action_bits.set_action(ActiveUnlock::from(true));
+    let action_de = ActionsDataElement::from(action_bits);
+    assert_eq!(action_de.has_action(&ActionType::NearbyShare), Some(true));
+    assert_eq!(action_de.has_action(&ActionType::ActiveUnlock), Some(true));
+    assert_eq!(action_de.has_action(&ActionType::PhoneHub), Some(false));
+    assert_eq!(action_de.has_action(&ActionType::ContextSyncSeqNum), None);
+}
+
+// hypothetical action using the last bit
+#[derive(Debug)]
+struct LastBit {
+    enabled: bool,
+}
+impl From<bool> for LastBit {
+    fn from(value: bool) -> Self {
+        LastBit { enabled: value }
+    }
+}
+impl ActionElement for LastBit {
+    const HIGH_BIT_INDEX: u32 = 23;
+    const BITS_LEN: u32 = 1;
+
+    // don't want to add a variant for this test only type
+    const ACTION_TYPE: ActionType = ActionType::ActiveUnlock;
+
+    fn supports_flavor(_flavor: PacketFlavorEnum) -> bool {
+        true
+    }
+}
+
+macros::boolean_element_to_plaintext_element!(LastBit);
+macros::boolean_element_to_encrypted_element!(LastBit);
+
+fn assert_eq_hex(expected: u32, actual: u32) {
+    assert_eq!(expected, actual, "{expected:#010X} != {actual:#010X}");
+}
+
+pub(crate) fn all_plaintext_actions() -> ActionBits<Plaintext> {
+    let mut action = ActionBits::default();
+    action.set_action(ContextSyncSeqNum::try_from(9).unwrap());
+    action.set_action(NearbyShare::from(true));
+    action.set_action(Finder::from(true));
+    action.set_action(FastPairSass::from(true));
+    action
+}
+
+pub(crate) fn all_ciphertext_actions() -> ActionBits<Ciphertext> {
+    let mut action = ActionBits::default();
+    action.set_action(ContextSyncSeqNum::try_from(9).unwrap());
+    action.set_action(ActiveUnlock::from(true));
+    action.set_action(NearbyShare::from(true));
+    action.set_action(InstantTethering::from(true));
+    action.set_action(PhoneHub::from(true));
+    action.set_action(PresenceManager::from(true));
+    action
+}
diff --git a/nearby/presence/np_adv/src/legacy/data_elements.rs b/nearby/presence/np_adv/src/legacy/data_elements.rs
new file mode 100644
index 0000000..e9c2308
--- /dev/null
+++ b/nearby/presence/np_adv/src/legacy/data_elements.rs
@@ -0,0 +1,109 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! V0 data elements and core trait impls.
+use crate::legacy::{
+    de_type::{DataElementType, PlainDataElementType},
+    serialize::{DataElementBundle, ToDataElementBundle},
+    PacketFlavor, PacketFlavorEnum,
+};
+use crate::shared_data::*;
+
+/// Core behavior for data elements.
+///
+/// See also [ToDataElementBundle] for flavor-specific, infallible serialization.
+pub trait DataElement: Sized {
+    /// The corresponding DataElementType variant.
+    const DE_TYPE_VARIANT: DataElementType;
+
+    /// Return true if the DE supports serialization and deserialization for the provided flavor.
+    fn supports_flavor(flavor: PacketFlavorEnum) -> bool;
+
+    /// Returns `Err` if the flavor is not supported or if parsing fails.
+    ///
+    /// `<F>` is the flavor of the packet being deserialized.
+    fn deserialize<F: PacketFlavor>(
+        de_contents: &[u8],
+    ) -> Result<Self, DataElementDeserializeError>;
+}
+
+/// Errors possible when deserializing a DE
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub enum DataElementDeserializeError {
+    /// The data element doesn't support the [PacketFlavor] of the advertisement packet.
+    FlavorNotSupported {
+        /// The DE type attempting to be deserialized
+        de_type: DataElementType,
+        /// The flavor that was not supported
+        flavor: PacketFlavorEnum,
+    },
+    /// The data element couldn't be deserialized from the supplied data.
+    DeserializeError {
+        /// The DE type attempting to be deserialized
+        de_type: DataElementType,
+    },
+}
+
+/// Data element holding a [TxPower].
+#[derive(Debug, PartialEq, Eq)]
+pub struct TxPowerDataElement {
+    tx_power: TxPower,
+}
+
+impl TxPowerDataElement {
+    /// Gets the underlying Tx Power value
+    pub fn tx_power_value(&self) -> i8 {
+        self.tx_power.as_i8()
+    }
+}
+
+impl From<TxPower> for TxPowerDataElement {
+    fn from(tx_power: TxPower) -> Self {
+        Self { tx_power }
+    }
+}
+
+impl<F: PacketFlavor> ToDataElementBundle<F> for TxPowerDataElement {
+    fn to_de_bundle(&self) -> DataElementBundle<F> {
+        let tx_power = self.tx_power.as_i8();
+        DataElementBundle::try_from(
+            PlainDataElementType::TxPower,
+            tx_power.to_be_bytes().as_slice(),
+        )
+        .expect("Length < max DE size")
+    }
+}
+
+impl DataElement for TxPowerDataElement {
+    const DE_TYPE_VARIANT: DataElementType = DataElementType::TxPower;
+
+    fn supports_flavor(flavor: PacketFlavorEnum) -> bool {
+        match flavor {
+            PacketFlavorEnum::Plaintext => true,
+            PacketFlavorEnum::Ciphertext => true,
+        }
+    }
+    fn deserialize<F: PacketFlavor>(
+        de_contents: &[u8],
+    ) -> Result<Self, DataElementDeserializeError> {
+        de_contents
+            .try_into()
+            .ok()
+            .and_then(|arr: [u8; 1]| TxPower::try_from(i8::from_be_bytes(arr)).ok())
+            .map(|tx_power| Self { tx_power })
+            .ok_or(DataElementDeserializeError::DeserializeError {
+                de_type: DataElementType::TxPower,
+            })
+    }
+}
diff --git a/nearby/presence/np_adv/src/legacy/de_type/mod.rs b/nearby/presence/np_adv/src/legacy/de_type/mod.rs
new file mode 100644
index 0000000..5c7ebfa
--- /dev/null
+++ b/nearby/presence/np_adv/src/legacy/de_type/mod.rs
@@ -0,0 +1,355 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! V0 data element types.
+//!
+//! In V0, there are only 16 DE types total, and parsing unknown types is not possible, so we can
+//! represent all known DE types in enums without needing to handle the "unknown type" case.
+
+use crate::{
+    de_type::IdentityDataElementType,
+    legacy::{
+        actions::ActionsDataElement,
+        data_elements::{DataElement as _, TxPowerDataElement},
+        Ciphertext, PacketFlavorEnum, Plaintext, NP_MAX_DE_CONTENT_LEN,
+    },
+    DeLengthOutOfRange,
+};
+use core::ops;
+use ldt_np_adv::NP_LEGACY_METADATA_KEY_LEN;
+use strum_macros::EnumIter;
+
+#[cfg(test)]
+mod tests;
+
+/// A V0 DE type in `[0, 15]`.
+#[derive(Debug, PartialEq, Eq, Hash)]
+pub(crate) struct DeTypeCode {
+    /// The code used in a V0 adv header
+    code: u8,
+}
+
+impl DeTypeCode {
+    /// Returns a u8 in `[0, 15`].
+    pub(crate) fn as_u8(&self) -> u8 {
+        self.code
+    }
+}
+
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub(crate) struct DeTypeCodeOutOfRange;
+
+impl TryFrom<u8> for DeTypeCode {
+    type Error = DeTypeCodeOutOfRange;
+
+    fn try_from(value: u8) -> Result<Self, Self::Error> {
+        if value < 16 {
+            Ok(Self { code: value })
+        } else {
+            Err(DeTypeCodeOutOfRange)
+        }
+    }
+}
+
+/// The actual length of a DE, not the encoded representation.
+///
+/// See [DeEncodedLength] for the encoded length.
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub(crate) struct DeActualLength {
+    /// Invariant: <= `NP_MAX_DE_CONTENT_LEN`.
+    len: u8,
+}
+
+impl DeActualLength {
+    pub(crate) const ZERO: DeActualLength = DeActualLength { len: 0 };
+
+    pub(crate) fn as_usize(&self) -> usize {
+        self.len as usize
+    }
+}
+
+impl TryFrom<u8> for DeActualLength {
+    type Error = DeLengthOutOfRange;
+
+    fn try_from(value: u8) -> Result<Self, Self::Error> {
+        if (value as usize) <= NP_MAX_DE_CONTENT_LEN {
+            Ok(Self { len: value })
+        } else {
+            Err(DeLengthOutOfRange)
+        }
+    }
+}
+
+impl TryFrom<usize> for DeActualLength {
+    type Error = DeLengthOutOfRange;
+
+    fn try_from(value: usize) -> Result<Self, Self::Error> {
+        if value <= NP_MAX_DE_CONTENT_LEN {
+            Ok(Self { len: value as u8 })
+        } else {
+            Err(DeLengthOutOfRange)
+        }
+    }
+}
+
+/// The encoded length of a DE, not the actual length of the DE contents.
+///
+/// See [DeActualLength] for the length of the contents.
+#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
+pub(crate) struct DeEncodedLength {
+    /// Invariant: `len <= 0x0F` (15, aka 4 bits)
+    len: u8,
+}
+
+impl DeEncodedLength {
+    /// Returns a u8 in `[0, 15]`
+    pub(crate) fn as_u8(&self) -> u8 {
+        self.len
+    }
+
+    /// Returns a usize in `[0, 15]`
+    pub(crate) fn as_usize(&self) -> usize {
+        self.len as usize
+    }
+}
+
+impl TryFrom<u8> for DeEncodedLength {
+    type Error = DeLengthOutOfRange;
+
+    fn try_from(value: u8) -> Result<Self, Self::Error> {
+        if value < 16 {
+            Ok(Self { len: value })
+        } else {
+            Err(DeLengthOutOfRange)
+        }
+    }
+}
+
+/// DE types for normal DEs (not an identity).
+///
+/// May be contained in identity DEs (see [IdentityDataElementType]). Must not overlap with
+/// [IdentityDataElementType].
+#[derive(EnumIter, Debug, Clone, Copy, PartialEq, Eq)]
+pub(crate) enum PlainDataElementType {
+    TxPower,
+    Actions,
+}
+
+impl PlainDataElementType {
+    pub(crate) fn as_generic_de_type(&self) -> DataElementType {
+        match self {
+            PlainDataElementType::TxPower => DataElementType::TxPower,
+            PlainDataElementType::Actions => DataElementType::Actions,
+        }
+    }
+
+    pub(crate) fn supports_flavor(&self, flavor: PacketFlavorEnum) -> bool {
+        match self {
+            PlainDataElementType::Actions => {
+                // Actions is effectively two different DEs based on which actions it can
+                // contain, so we have to check them separately. The Plaintext one obviously
+                // supports plaintext, and vice versa, so we could just say `true` here, but we
+                // spell it out to be consistent with the other DE types.
+                match flavor {
+                    PacketFlavorEnum::Plaintext => {
+                        ActionsDataElement::<Plaintext>::supports_flavor(flavor)
+                    }
+                    PacketFlavorEnum::Ciphertext => {
+                        ActionsDataElement::<Ciphertext>::supports_flavor(flavor)
+                    }
+                }
+            }
+            PlainDataElementType::TxPower => TxPowerDataElement::supports_flavor(flavor),
+        }
+    }
+}
+
+/// Corresponds to the different implementations of [DataElement].
+///
+/// It's intended for use cases that don't care if a DE is a plain or identity DE. Every variant
+/// corresponds to either a [PlainDataElementType] or a [IdentityDataElementType].
+#[derive(EnumIter, Debug, Clone, Copy, PartialEq, Eq)]
+#[allow(missing_docs)]
+#[doc(hidden)]
+pub enum DataElementType {
+    PrivateIdentity,
+    TrustedIdentity,
+    PublicIdentity,
+    ProvisionedIdentity,
+    TxPower,
+    Actions,
+}
+
+const DE_TYPES_BY_CODE: [Option<DataElementType>; 16] = [
+    None,                                       // 0b0000
+    Some(DataElementType::PrivateIdentity),     // 0b0001
+    Some(DataElementType::TrustedIdentity),     // 0b0010
+    Some(DataElementType::PublicIdentity),      // 0b0011
+    Some(DataElementType::ProvisionedIdentity), // 0b0100
+    Some(DataElementType::TxPower),             // 0b0101
+    Some(DataElementType::Actions),             // 0b0110
+    None,                                       // 0b0111
+    None,                                       // 0b1000
+    None,                                       // 0b1001
+    None,                                       // 0b1010
+    None,                                       // 0b1011
+    None,                                       // 0b1100
+    None,                                       // 0b1101
+    None,                                       // 0b1110
+    None,                                       // 0b1111
+];
+
+impl DataElementType {
+    /// Salt + key + at least 2 bytes of DE to make LDT ciphertext min length
+    const VALID_ENCRYPTED_IDENTITY_DE_ACTUAL_LEN: ops::RangeInclusive<usize> =
+        (2 + NP_LEGACY_METADATA_KEY_LEN + 2..=NP_MAX_DE_CONTENT_LEN);
+    const VALID_ENCRYPTED_IDENTITY_DE_HEADER_LEN: ops::RangeInclusive<usize> = (2..=6);
+
+    /// If there is a corresponding [ContainerDataElementType], returns it, otherwise None.
+    pub(crate) fn try_as_identity_de_type(&self) -> Option<IdentityDataElementType> {
+        match self {
+            DataElementType::PrivateIdentity => Some(IdentityDataElementType::Private),
+            DataElementType::TrustedIdentity => Some(IdentityDataElementType::Trusted),
+            DataElementType::PublicIdentity => Some(IdentityDataElementType::Public),
+            DataElementType::ProvisionedIdentity => Some(IdentityDataElementType::Provisioned),
+            DataElementType::TxPower | DataElementType::Actions => None,
+        }
+    }
+
+    /// If there is a corresponding [PlainDataElementType], returns it, otherwise None.
+    pub(crate) fn try_as_plain_de_type(&self) -> Option<PlainDataElementType> {
+        match self {
+            DataElementType::TxPower => Some(PlainDataElementType::TxPower),
+            DataElementType::Actions => Some(PlainDataElementType::Actions),
+            DataElementType::PrivateIdentity
+            | DataElementType::TrustedIdentity
+            | DataElementType::PublicIdentity
+            | DataElementType::ProvisionedIdentity => None,
+        }
+    }
+
+    /// Returns the matching type for the code, else `None`
+    pub(crate) fn from_type_code(de_type: DeTypeCode) -> Option<Self> {
+        DE_TYPES_BY_CODE.get(de_type.as_u8() as usize).and_then(|o| *o)
+    }
+
+    /// A type code in `[0,15]` for use in the high bits of the DE header byte.
+    pub(crate) fn type_code(&self) -> DeTypeCode {
+        match self {
+            DataElementType::PrivateIdentity => IdentityDataElementType::Private.shared_type_code(),
+            DataElementType::TrustedIdentity => IdentityDataElementType::Trusted.shared_type_code(),
+            DataElementType::PublicIdentity => IdentityDataElementType::Public.shared_type_code(),
+            DataElementType::ProvisionedIdentity => {
+                IdentityDataElementType::Provisioned.shared_type_code()
+            }
+            DataElementType::TxPower => 0b0101,
+            DataElementType::Actions => 0b0110,
+        }
+        .try_into()
+        .expect("hardcoded type codes are valid")
+    }
+
+    /// Convert the actual DE length to the encoded length included in the header.
+    ///
+    /// Returns `Err` if the actual length is invalid for the type, or the corresponding encoded length is out of range.
+    pub(crate) fn encoded_len_for_actual_len(
+        &self,
+        actual_len: DeActualLength,
+    ) -> Result<DeEncodedLength, DeLengthOutOfRange> {
+        match self {
+            // TODO 0-length provisioned
+            DataElementType::PrivateIdentity
+            | DataElementType::TrustedIdentity
+            | DataElementType::ProvisionedIdentity => {
+                if !Self::VALID_ENCRYPTED_IDENTITY_DE_ACTUAL_LEN.contains(&actual_len.as_usize()) {
+                    Err(DeLengthOutOfRange)
+                } else {
+                    actual_len
+                        .len
+                        .checked_sub(16)
+                        .ok_or(DeLengthOutOfRange)
+                        .and_then(|n| n.try_into())
+                }
+            }
+            DataElementType::PublicIdentity => {
+                if actual_len.len != 0 {
+                    Err(DeLengthOutOfRange)
+                } else {
+                    actual_len.len.try_into()
+                }
+            }
+            DataElementType::TxPower => {
+                if actual_len.len != 1 {
+                    Err(DeLengthOutOfRange)
+                } else {
+                    actual_len.len.try_into()
+                }
+            }
+            DataElementType::Actions => {
+                // doesn't matter which variant is used
+                if !ActionsDataElement::<Plaintext>::ACTIONS_LEN.contains(&actual_len.as_usize()) {
+                    Err(DeLengthOutOfRange)
+                } else {
+                    actual_len.len.try_into()
+                }
+            }
+        }
+    }
+
+    /// Convert the length in the header to the actual DE length.
+    ///
+    /// Returns `Err` if the encoded length is invalid for the type, or the corresponding actual length is out of range.
+    pub(crate) fn actual_len_for_encoded_len(
+        &self,
+        header_len: DeEncodedLength,
+    ) -> Result<DeActualLength, DeLengthOutOfRange> {
+        match self {
+            DataElementType::PrivateIdentity
+            | DataElementType::TrustedIdentity
+            // TODO provisioned 0 length
+            | DataElementType::ProvisionedIdentity => {
+                if !Self::VALID_ENCRYPTED_IDENTITY_DE_HEADER_LEN.contains(&header_len.as_usize()) {
+                    Err(DeLengthOutOfRange)
+                } else {
+                    header_len
+                        .len
+                        .checked_add(16)
+                        .ok_or(DeLengthOutOfRange)
+                        .and_then(|n| n.try_into())
+                }
+            }
+            DataElementType::PublicIdentity => {
+                if header_len.len != 0 {
+                    Err(DeLengthOutOfRange)
+                } else {
+                    header_len.len.try_into()
+                }
+            }
+            DataElementType::TxPower => {
+                if header_len.len != 1 {
+                    Err(DeLengthOutOfRange)
+                } else {
+                    header_len.len.try_into()
+                }
+            }
+            DataElementType::Actions => {
+                if !ActionsDataElement::<Plaintext>::ACTIONS_LEN.contains(&header_len.as_usize()) {
+                    Err(DeLengthOutOfRange)
+                } else {
+                    header_len.len.try_into()
+                }
+            }
+        }
+    }
+}
diff --git a/nearby/presence/np_adv/src/legacy/de_type/tests.rs b/nearby/presence/np_adv/src/legacy/de_type/tests.rs
new file mode 100644
index 0000000..59075aa
--- /dev/null
+++ b/nearby/presence/np_adv/src/legacy/de_type/tests.rs
@@ -0,0 +1,112 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+extern crate std;
+
+use super::*;
+use crate::legacy::serialize::id_de_type_as_generic_de_type;
+use std::{collections, vec::Vec};
+use strum::IntoEnumIterator as _;
+
+#[test]
+fn no_plain_vs_identity_type_overlap() {
+    let plain_types =
+        PlainDataElementType::iter().map(|t| t.as_generic_de_type()).collect::<Vec<_>>();
+    let identity_types =
+        IdentityDataElementType::iter().map(id_de_type_as_generic_de_type).collect::<Vec<_>>();
+
+    for plain_de_type in plain_types.iter() {
+        assert!(!identity_types.iter().any(|i| i == plain_de_type));
+        assert_eq!(None, plain_de_type.try_as_identity_de_type());
+    }
+
+    for id_de_type in identity_types.iter() {
+        assert!(!plain_types.iter().any(|p| p == id_de_type));
+        assert_eq!(None, id_de_type.try_as_plain_de_type());
+    }
+}
+
+#[test]
+fn generic_type_is_either_plain_or_identity() {
+    let generic_types = DataElementType::iter().collect::<Vec<_>>();
+
+    for g in generic_types.iter() {
+        let total = g.try_as_identity_de_type().map(|_| 1).unwrap_or(0)
+            + g.try_as_plain_de_type().map(|_| 1).unwrap_or(0);
+
+        assert_eq!(1, total);
+    }
+}
+
+#[test]
+fn generic_de_type_codes_are_consistent() {
+    for det in DataElementType::iter() {
+        let actual = DataElementType::from_type_code(det.type_code());
+        assert_eq!(Some(det), actual)
+    }
+}
+
+#[test]
+fn generic_de_distinct_type_codes() {
+    let codes =
+        DataElementType::iter().map(|det| det.type_code()).collect::<collections::HashSet<_>>();
+    assert_eq!(codes.len(), DataElementType::iter().count());
+}
+
+#[test]
+fn generic_de_no_accidentally_mapped_type_codes() {
+    let codes =
+        DataElementType::iter().map(|det| det.type_code()).collect::<collections::HashSet<_>>();
+    for possible_code in 0..=15 {
+        if codes.contains(&possible_code.try_into().unwrap()) {
+            continue;
+        }
+
+        assert_eq!(None, DataElementType::from_type_code(possible_code.try_into().unwrap()));
+    }
+}
+
+#[test]
+fn actions_de_length_zero_rejected() {
+    let encoded = DeEncodedLength::try_from(0).unwrap();
+    let maybe_actual_len = DataElementType::Actions.actual_len_for_encoded_len(encoded);
+    assert_eq!(Err(DeLengthOutOfRange), maybe_actual_len);
+}
+
+#[test]
+fn de_length_actual_encoded_round_trip() {
+    for de_type in DataElementType::iter() {
+        // for all possible lengths, calculate actual -> encoded and the inverse
+        let actual_to_encoded = (0_u8..=255)
+            .filter_map(|num| num.try_into().ok())
+            .filter_map(|actual: DeActualLength| {
+                de_type.encoded_len_for_actual_len(actual).ok().map(|encoded| (actual, encoded))
+            })
+            .collect::<collections::HashMap<_, _>>();
+
+        let encoded_to_actual = (0_u8..=255)
+            .filter_map(|num| num.try_into().ok())
+            .filter_map(|encoded: DeEncodedLength| {
+                de_type.actual_len_for_encoded_len(encoded).ok().map(|actual| (encoded, actual))
+            })
+            .collect::<collections::HashMap<_, _>>();
+
+        // ensure the two maps are inverses of each other
+        assert_eq!(
+            actual_to_encoded,
+            encoded_to_actual.into_iter().map(|(encoded, actual)| (actual, encoded)).collect(),
+            "de type: {de_type:?}"
+        );
+    }
+}
diff --git a/nearby/presence/np_adv/src/legacy/deserialize/mod.rs b/nearby/presence/np_adv/src/legacy/deserialize/mod.rs
new file mode 100644
index 0000000..3119f48
--- /dev/null
+++ b/nearby/presence/np_adv/src/legacy/deserialize/mod.rs
@@ -0,0 +1,416 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! V0 data element deserialization.
+//!
+//! This module only deals with the _contents_ of an advertisement, not the advertisement header.
+
+extern crate alloc;
+
+use crate::{
+    de_type::EncryptedIdentityDataElementType,
+    legacy::{
+        actions,
+        data_elements::{DataElement, *},
+        de_type::{DataElementType, DeEncodedLength, DeTypeCode, PlainDataElementType},
+        Ciphertext, PacketFlavor, Plaintext, NP_MAX_DE_CONTENT_LEN,
+    },
+    PlaintextIdentityMode,
+};
+use alloc::vec::Vec;
+use crypto_provider::CryptoProvider;
+use ldt_np_adv::{LegacySalt, NP_LEGACY_METADATA_KEY_LEN};
+use nom::{bytes, combinator, multi, number, sequence};
+
+#[cfg(test)]
+mod tests;
+
+/// Deserialize an advertisement into data elements (if plaintext) or an identity type and
+/// ciphertext.
+pub(crate) fn deserialize_adv_contents<C: CryptoProvider>(
+    input: &[u8],
+) -> Result<IntermediateAdvContents, AdvDeserializeError> {
+    parse_raw_adv_contents::<C>(input).and_then(|raw_adv| match raw_adv {
+        RawAdvertisement::Plaintext(parc) => parc
+            .try_deserialize()
+            .map(IntermediateAdvContents::Plaintext)
+            .map_err(AdvDeserializeError::DataElementDeserializeError),
+        RawAdvertisement::Ciphertext(eac) => Ok(IntermediateAdvContents::Ciphertext(eac)),
+    })
+}
+
+/// Parse an advertisement's contents to the level of raw data elements (i.e no decryption,
+/// no per-type deserialization, etc).
+///
+/// Consumes the entire input.
+fn parse_raw_adv_contents<C: CryptoProvider>(
+    input: &[u8],
+) -> Result<RawAdvertisement, AdvDeserializeError> {
+    let (_, data_elements) = parse_data_elements(input)
+        .map_err(|_e| AdvDeserializeError::AdvertisementDeserializeError)?;
+
+    if let Some(identity_de_type) =
+        data_elements.first().and_then(|de| de.de_type.try_as_identity_de_type())
+    {
+        match identity_de_type.as_encrypted_identity_de_type() {
+            Some(encrypted_de_type) => {
+                if data_elements.len() == 1 {
+                    match encrypted_de_type {
+                        // TODO handle length=0 provisioned identity DEs
+                        EncryptedIdentityDataElementType::Private
+                        | EncryptedIdentityDataElementType::Trusted
+                        | EncryptedIdentityDataElementType::Provisioned => {
+                            combinator::map(
+                                parse_encrypted_identity_de_contents,
+                                |(salt, payload)| {
+                                    RawAdvertisement::Ciphertext(EncryptedAdvContents {
+                                        identity_type: encrypted_de_type,
+                                        salt_padder: ldt_np_adv::salt_padder::<16, C>(salt),
+                                        salt,
+                                        ciphertext: payload,
+                                    })
+                                },
+                            )(data_elements[0].contents)
+                            .map(|(_rem, contents)| contents)
+                            .map_err(|_e| AdvDeserializeError::AdvertisementDeserializeError)
+                        }
+                    }
+                } else {
+                    Err(AdvDeserializeError::TooManyTopLevelDataElements)
+                }
+            }
+            // It's an identity de, but not encrypted, so it must be public, and the rest must be
+            // plain
+            None => plain_data_elements(&data_elements[1..]).map(|pdes| {
+                RawAdvertisement::Plaintext(PlaintextAdvRawContents {
+                    identity_type: PlaintextIdentityMode::Public,
+                    data_elements: pdes,
+                })
+            }),
+        }
+    } else {
+        plain_data_elements(&data_elements).map(|pde| {
+            RawAdvertisement::Plaintext(PlaintextAdvRawContents {
+                identity_type: PlaintextIdentityMode::None,
+                data_elements: pde,
+            })
+        })
+    }
+}
+
+/// Legacy advertisement parsing errors
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub(crate) enum AdvDeserializeError {
+    /// Parsing the overall advertisement or DE structure failed
+    AdvertisementDeserializeError,
+    /// Deserializing an individual DE from its DE contents failed
+    DataElementDeserializeError(DataElementDeserializeError),
+    /// Must not have any other top level data elements if there is an encrypted identity DE
+    TooManyTopLevelDataElements,
+    /// Must not have an identity DE inside an identity DE
+    InvalidDataElementHierarchy,
+}
+
+/// Parse an advertisement's contents into raw DEs.
+///
+/// Consumes the entire input.
+fn parse_data_elements(adv_contents: &[u8]) -> nom::IResult<&[u8], Vec<RawDataElement>> {
+    combinator::all_consuming(multi::many0(parse_de))(adv_contents)
+}
+
+/// Parse an individual DE into its header and contents.
+fn parse_de(input: &[u8]) -> nom::IResult<&[u8], RawDataElement> {
+    let (remaining, (de_type, actual_len)) =
+        combinator::map_opt(number::complete::u8, |de_header| {
+            // header: LLLLTTTT
+            let len = de_header >> 4;
+            let de_type = de_header & 0x0F;
+            DeTypeCode::try_from(de_type).ok().and_then(DataElementType::from_type_code).and_then(
+                |de_type| {
+                    len.try_into()
+                        .ok()
+                        .and_then(|len: DeEncodedLength| {
+                            de_type.actual_len_for_encoded_len(len).ok()
+                        })
+                        .map(|len| (de_type, len))
+                },
+            )
+        })(input)?;
+
+    combinator::map(bytes::complete::take(actual_len.as_usize()), move |contents| RawDataElement {
+        de_type,
+        contents,
+    })(remaining)
+}
+
+/// Returns `Err`` if any DEs are not of a plain DE type.
+fn plain_data_elements<'d, D: AsRef<[RawDataElement<'d>]>>(
+    data_elements: D,
+) -> Result<Vec<RawPlainDataElement<'d>>, AdvDeserializeError> {
+    data_elements
+        .as_ref()
+        .iter()
+        .map(|de| {
+            de.de_type
+                .try_as_plain_de_type()
+                .map(|de_type| RawPlainDataElement { de_type, contents: de.contents })
+        })
+        .collect::<Option<Vec<_>>>()
+        .ok_or(AdvDeserializeError::InvalidDataElementHierarchy)
+}
+
+/// Parse legacy encrypted identity DEs (private, trusted, provisioned) into salt and ciphertext
+/// (encrypted metadata key and at least 2 bytes of DEs).
+///
+/// Consumes the entire input.
+fn parse_encrypted_identity_de_contents(
+    de_contents: &[u8],
+) -> nom::IResult<&[u8], (ldt_np_adv::LegacySalt, &[u8])> {
+    combinator::all_consuming(sequence::tuple((
+        // 2-byte salt
+        combinator::map(
+            combinator::map_res(bytes::complete::take(2_usize), |slice: &[u8]| slice.try_into()),
+            |arr: [u8; 2]| arr.into(),
+        ),
+        // 14-byte encrypted metadata key plus encrypted DEs, which must together be at least 16
+        // bytes (AES block size), and at most a full DE minus the size of the salt.
+        bytes::complete::take_while_m_n(16_usize, NP_MAX_DE_CONTENT_LEN - 2, |_| true),
+    )))(de_contents)
+}
+
+/// A data element with content length determined and validated per its type's length rules, but
+/// no further decoding performed.
+#[derive(Debug, PartialEq, Eq)]
+struct RawDataElement<'d> {
+    de_type: DataElementType,
+    contents: &'d [u8],
+}
+
+/// An advertisement broken down into data elements, but before decryption or mapping to higher
+/// level DE representations.
+#[derive(Debug, PartialEq, Eq)]
+enum RawAdvertisement<'d> {
+    Plaintext(PlaintextAdvRawContents<'d>),
+    Ciphertext(EncryptedAdvContents<'d>),
+}
+
+/// A plaintext advertisement's content in raw DEs but without further deserialization.
+#[derive(Debug, PartialEq, Eq)]
+struct PlaintextAdvRawContents<'d> {
+    identity_type: PlaintextIdentityMode,
+    data_elements: Vec<RawPlainDataElement<'d>>,
+}
+
+impl<'d> PlaintextAdvRawContents<'d> {
+    /// Deserialize the DE contents into per-DE-type structures.
+    ///
+    /// Returns `Some` if each DE's contents can be successfully deserialized, otherwise `None`.
+    fn try_deserialize(&self) -> Result<PlaintextAdvContents, DataElementDeserializeError> {
+        self.data_elements
+            .iter()
+            .map(|de| de.try_deserialize::<Plaintext>())
+            .collect::<Result<Vec<_>, _>>()
+            .map(|des| PlaintextAdvContents {
+                identity_type: self.identity_type,
+                data_elements: des,
+            })
+    }
+}
+
+/// A "plain" data element (not a container) without parsing the content.
+#[derive(Debug, PartialEq, Eq)]
+pub(crate) struct RawPlainDataElement<'d> {
+    de_type: PlainDataElementType,
+    contents: &'d [u8],
+}
+
+impl<'d> RawPlainDataElement<'d> {
+    /// Deserialize into a [PlainDataElement] to expose DE-type-specific data representations.
+    ///
+    /// Returns `None` if the contents of the raw DE can't be deserialized into the corresponding
+    /// DE's representation.
+    fn try_deserialize<F>(&self) -> Result<PlainDataElement<F>, DataElementDeserializeError>
+    where
+        F: PacketFlavor,
+        actions::ActionsDataElement<F>: DataElement,
+    {
+        match self.de_type {
+            PlainDataElementType::Actions => {
+                actions::ActionsDataElement::deserialize::<F>(self.contents)
+                    .map(PlainDataElement::Actions)
+            }
+            PlainDataElementType::TxPower => {
+                TxPowerDataElement::deserialize::<F>(self.contents).map(PlainDataElement::TxPower)
+            }
+        }
+    }
+}
+
+/// Contents of an encrypted advertisement before decryption.
+#[derive(Debug, PartialEq, Eq)]
+pub(crate) struct EncryptedAdvContents<'d> {
+    identity_type: EncryptedIdentityDataElementType,
+    /// Salt from the advertisement, converted into a padder.
+    /// Pre-calculated so it's only derived once across multiple decrypt attempts.
+    salt_padder: ldt::XorPadder<{ crypto_provider::aes::BLOCK_SIZE }>,
+    /// The salt instance used for encryption of this advertisement.
+    salt: LegacySalt,
+    /// Ciphertext containing the metadata key and any data elements
+    ciphertext: &'d [u8],
+}
+
+impl<'d> EncryptedAdvContents<'d> {
+    /// Try decrypting with an identity's LDT cipher and deserializing the resulting data elements.
+    ///
+    /// Returns the decrypted data if decryption and verification succeeded and the resulting DEs could be parsed
+    /// successfully, otherwise `Err`.
+    pub(crate) fn try_decrypt<C: CryptoProvider>(
+        &self,
+        cipher: &ldt_np_adv::LdtNpAdvDecrypterXtsAes128<C>,
+    ) -> Result<DecryptedAdvContents, DecryptError> {
+        let plaintext = cipher
+            .decrypt_and_verify(self.ciphertext, &self.salt_padder)
+            .map_err(|_e| DecryptError::DecryptOrVerifyError)?;
+
+        // plaintext starts with 14 bytes of metadata key, then DEs.
+
+        let (remaining, metadata_key) = combinator::map_res(
+            bytes::complete::take(NP_LEGACY_METADATA_KEY_LEN),
+            |slice: &[u8]| slice.try_into(),
+        )(plaintext.as_slice())
+        .map_err(|_e: nom::Err<nom::error::Error<&[u8]>>| {
+            DecryptError::DeserializeError(AdvDeserializeError::AdvertisementDeserializeError)
+        })?;
+
+        let (_remaining, raw_des) = combinator::all_consuming(parse_data_elements)(remaining)
+            .map_err(|_e| {
+                DecryptError::DeserializeError(AdvDeserializeError::AdvertisementDeserializeError)
+            })?;
+
+        plain_data_elements(&raw_des)?
+            .into_iter()
+            .map(|de| de.try_deserialize())
+            .collect::<Result<Vec<_>, _>>()
+            .map_err(|e| {
+                DecryptError::DeserializeError(AdvDeserializeError::DataElementDeserializeError(e))
+            })
+            .map(|data_elements| {
+                DecryptedAdvContents::new(
+                    self.identity_type,
+                    metadata_key,
+                    self.salt,
+                    data_elements,
+                )
+            })
+    }
+}
+
+/// Errors that can occur decrypting encrypted advertisements.
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub(crate) enum DecryptError {
+    /// Decrypting or verifying the advertisement ciphertext failed
+    DecryptOrVerifyError,
+    /// Decrypting succeeded, but deserializing from the plaintext failed
+    DeserializeError(AdvDeserializeError),
+}
+
+impl From<AdvDeserializeError> for DecryptError {
+    fn from(e: AdvDeserializeError) -> Self {
+        DecryptError::DeserializeError(e)
+    }
+}
+
+/// All v0 normal DE types with deserialized contents.
+#[derive(Debug, PartialEq, Eq)]
+#[allow(missing_docs)]
+pub enum PlainDataElement<F: PacketFlavor> {
+    Actions(actions::ActionsDataElement<F>),
+    TxPower(TxPowerDataElement),
+}
+
+/// The contents of a plaintext advertisement after deserializing DE contents
+#[derive(Debug, PartialEq, Eq)]
+pub struct PlaintextAdvContents {
+    identity_type: PlaintextIdentityMode,
+    data_elements: Vec<PlainDataElement<Plaintext>>,
+}
+
+impl PlaintextAdvContents {
+    /// Returns the identity type used for the advertisement
+    pub fn identity(&self) -> PlaintextIdentityMode {
+        self.identity_type
+    }
+    /// Returns the deserialized data elements
+    pub fn data_elements(&self) -> impl Iterator<Item = &PlainDataElement<Plaintext>> {
+        self.data_elements.iter()
+    }
+    /// Destructures this V0 plaintext advertisement
+    /// into just the contained data elements
+    pub fn to_data_elements(self) -> Vec<PlainDataElement<Plaintext>> {
+        self.data_elements
+    }
+}
+
+/// Contents of an encrypted advertisement after decryption and deserializing DEs.
+#[derive(Debug, PartialEq, Eq)]
+pub struct DecryptedAdvContents {
+    identity_type: EncryptedIdentityDataElementType,
+    metadata_key: [u8; NP_LEGACY_METADATA_KEY_LEN],
+    salt: LegacySalt,
+    data_elements: Vec<PlainDataElement<Ciphertext>>,
+}
+
+impl DecryptedAdvContents {
+    /// Returns a new DecryptedAdvContents with the provided contents.
+    fn new(
+        identity_type: EncryptedIdentityDataElementType,
+        metadata_key: [u8; NP_LEGACY_METADATA_KEY_LEN],
+        salt: LegacySalt,
+        data_elements: Vec<PlainDataElement<Ciphertext>>,
+    ) -> Self {
+        Self { identity_type, metadata_key, salt, data_elements }
+    }
+
+    /// The type of identity DE used in the advertisement.
+    pub fn identity_type(&self) -> EncryptedIdentityDataElementType {
+        self.identity_type
+    }
+
+    /// The decrypted metadata key from the identity DE.
+    pub fn metadata_key(&self) -> &[u8; 14] {
+        &self.metadata_key
+    }
+
+    /// Iterator over the data elements in an advertisement, except for any DEs related to resolving
+    /// the identity or otherwise validating the payload (e.g. any identity DEs like Private
+    /// Identity).
+    pub fn data_elements(&self) -> impl Iterator<Item = &PlainDataElement<Ciphertext>> {
+        self.data_elements.iter()
+    }
+
+    /// The salt used for decryption of this advertisement.
+    pub fn salt(&self) -> LegacySalt {
+        self.salt
+    }
+}
+
+/// The contents of an advertisement after plaintext DEs, if any, have been deserialized, but
+/// before any decryption is done.
+#[derive(Debug, PartialEq, Eq)]
+pub(crate) enum IntermediateAdvContents<'d> {
+    /// Plaintext advertisements
+    Plaintext(PlaintextAdvContents),
+    /// Ciphertext advertisements
+    Ciphertext(EncryptedAdvContents<'d>),
+}
diff --git a/nearby/presence/np_adv/src/legacy/deserialize/tests.rs b/nearby/presence/np_adv/src/legacy/deserialize/tests.rs
new file mode 100644
index 0000000..b577cd9
--- /dev/null
+++ b/nearby/presence/np_adv/src/legacy/deserialize/tests.rs
@@ -0,0 +1,815 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+extern crate std;
+
+use super::*;
+use crate::legacy::actions::{ActionBits, ActionsDataElement};
+use crate::shared_data::TxPower;
+use crate::{
+    de_type::IdentityDataElementType,
+    legacy::{
+        actions,
+        de_type::DeActualLength,
+        random_data_elements::{random_de_ciphertext, random_de_plaintext},
+        serialize::{
+            encode_de_header_actual_len, id_de_type_as_generic_de_type, AdvBuilder,
+            DataElementBundle, Identity, LdtIdentity, ToDataElementBundle as _,
+        },
+        PacketFlavorEnum, BLE_ADV_SVC_CONTENT_LEN,
+    },
+    parse_adv_header, shared_data, AdvHeader, NoIdentity, PublicIdentity,
+};
+use array_view::ArrayView;
+use crypto_provider_default::CryptoProviderImpl;
+use init_with::InitWith as _;
+use ldt_np_adv::LdtEncrypterXtsAes128;
+use nom::error;
+use rand_ext::rand::{prelude::SliceRandom, Rng as _};
+use std::vec;
+use strum::IntoEnumIterator as _;
+
+#[test]
+fn parse_empty_raw_adv() {
+    let data_elements = parse_raw_adv_contents::<CryptoProviderImpl>(&[]).unwrap();
+    assert_eq!(
+        RawAdvertisement::Plaintext(PlaintextAdvRawContents {
+            identity_type: PlaintextIdentityMode::None,
+            data_elements: Vec::new()
+        }),
+        data_elements
+    );
+}
+
+#[test]
+fn parse_raw_adv_1_de_short_no_identity() {
+    // battery uses the header length as is
+    let adv = parse_raw_adv_contents::<CryptoProviderImpl>(&[0x36, 0x01, 0x02, 0x03]).unwrap();
+    assert_eq!(
+        RawAdvertisement::Plaintext(PlaintextAdvRawContents {
+            identity_type: PlaintextIdentityMode::None,
+            data_elements: vec![RawPlainDataElement {
+                de_type: PlainDataElementType::Actions,
+                contents: &[0x01, 0x02, 0x03]
+            }],
+        }),
+        adv
+    );
+}
+
+#[test]
+fn parse_raw_adv_1_de_long_private_identity() {
+    // 3 bytes of payload after metadata key
+    let adv = parse_raw_adv_contents::<CryptoProviderImpl>(&[
+        0x31, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
+        0x0F, 0x10, 0x11, 0x12, 0x13,
+    ])
+    .unwrap();
+    assert_eq!(
+        RawAdvertisement::Ciphertext(EncryptedAdvContents {
+            identity_type: EncryptedIdentityDataElementType::Private,
+            salt_padder: ldt_np_adv::salt_padder::<16, CryptoProviderImpl>(
+                ldt_np_adv::LegacySalt::from([0x01, 0x02])
+            ),
+            salt: ldt_np_adv::LegacySalt::from([0x01, 0x02]),
+            ciphertext: &[
+                0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10,
+                0x11, 0x12, 0x13
+            ]
+        }),
+        adv
+    );
+}
+
+#[test]
+fn parse_raw_adv_3_de_public_identity() {
+    let adv = parse_raw_adv_contents::<CryptoProviderImpl>(&[
+        0x03, // public identity
+        0x15, 0x05, // tx power 5
+        0x36, 0x11, 0x12, 0x13, // actions
+    ])
+    .unwrap();
+    assert_eq!(
+        RawAdvertisement::Plaintext(PlaintextAdvRawContents {
+            identity_type: PlaintextIdentityMode::Public,
+            data_elements: vec![
+                RawPlainDataElement { de_type: PlainDataElementType::TxPower, contents: &[0x05] },
+                RawPlainDataElement {
+                    de_type: PlainDataElementType::Actions,
+                    contents: &[0x11, 0x12, 0x13]
+                }
+            ],
+        }),
+        adv
+    );
+}
+
+#[test]
+fn parse_raw_adv_0_de_public_identity() {
+    let adv = parse_raw_adv_contents::<CryptoProviderImpl>(&[
+        0x03, // public identity
+    ])
+    .unwrap();
+    assert_eq!(
+        RawAdvertisement::Plaintext(PlaintextAdvRawContents {
+            identity_type: PlaintextIdentityMode::Public,
+            data_elements: vec![],
+        }),
+        adv
+    );
+}
+
+#[test]
+fn parse_raw_adv_1_de_length_overrun() {
+    // battery uses the header length as is
+    let input = &[0xFB, 0x01, 0x02, 0x03];
+    assert_eq!(
+        nom::Err::Error(error::Error { input: input.as_slice(), code: error::ErrorKind::Eof }),
+        parse_data_elements(input).unwrap_err()
+    );
+}
+
+#[test]
+fn parse_raw_adv_public_identity_containing_public_identity() {
+    let input = &[
+        0x03, // public identity
+        0x03, // another public identity
+        0x15, 0x03, // tx power de
+    ];
+    assert_eq!(
+        AdvDeserializeError::InvalidDataElementHierarchy,
+        parse_raw_adv_contents::<CryptoProviderImpl>(input).unwrap_err()
+    );
+}
+
+#[test]
+fn parse_raw_adv_no_identity_containing_public_identity() {
+    let input = &[
+        0x15, 0x03, // tx power de
+        0x03, // public identity -- since it's not the first, this is a no identity adv
+        0x15, 0x03, // tx power de
+    ];
+    assert_eq!(
+        AdvDeserializeError::InvalidDataElementHierarchy,
+        parse_raw_adv_contents::<CryptoProviderImpl>(input).unwrap_err()
+    );
+}
+
+#[test]
+fn parse_raw_adv_1_de_long_private_identity_with_another_top_level_de() {
+    let input = &[
+        0x31, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E,
+        0x0F, 0x10, 0x11, 0x12, 0x13, // private identity
+        0x15, 0x03, // tx power de
+    ];
+    assert_eq!(
+        AdvDeserializeError::TooManyTopLevelDataElements,
+        parse_raw_adv_contents::<CryptoProviderImpl>(input).unwrap_err()
+    );
+}
+
+#[test]
+fn parse_raw_adv_private_identity_ciphertext_min_length() {
+    let short_input = &[
+        // private identity w/ salt, len = 1
+        0x11, 0x10, 0x11, // 15 ciphertext bytes, + 2 salt = 17 total
+        0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E,
+    ];
+    assert_eq!(
+        AdvDeserializeError::AdvertisementDeserializeError,
+        parse_raw_adv_contents::<CryptoProviderImpl>(short_input).unwrap_err()
+    );
+
+    let ok_input = &[
+        // private identity w/ salt
+        0x21, 0x10, 0x11, // 16 ciphertext bytes, 18 bytes total de len, encoded len 2
+        0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E,
+        0x2F,
+    ];
+    assert_eq!(
+        RawAdvertisement::Ciphertext(EncryptedAdvContents {
+            identity_type: EncryptedIdentityDataElementType::Private,
+            salt: [0x10, 0x11].into(),
+            salt_padder: ldt_np_adv::salt_padder::<16, CryptoProviderImpl>([0x10, 0x11].into()),
+            ciphertext: &ok_input[3..]
+        }),
+        parse_raw_adv_contents::<CryptoProviderImpl>(ok_input).unwrap()
+    );
+}
+
+#[test]
+fn parse_raw_adv_private_identity_ciphertext_too_long() {
+    let long_input = &[
+        // private identity w/ salt, len = 7
+        0x71, 0x10, 0x11, // 21 ciphertext bytes, + 2 salt
+        0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E,
+        0x2F, 0x30, 0x31, 0x32, 0x33, 0x34,
+    ];
+    assert_eq!(
+        AdvDeserializeError::AdvertisementDeserializeError,
+        parse_raw_adv_contents::<CryptoProviderImpl>(long_input).unwrap_err()
+    );
+
+    // removing 1 byte makes it work
+    let ok_input = &[
+        // private identity w/ salt, len = 6
+        0x61, 0x10, 0x11, // 20 ciphertext bytes, + 2 salt
+        0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E,
+        0x2F, 0x30, 0x31, 0x32, 0x33,
+    ];
+    assert_eq!(
+        RawAdvertisement::Ciphertext(EncryptedAdvContents {
+            identity_type: EncryptedIdentityDataElementType::Private,
+            salt_padder: ldt_np_adv::salt_padder::<16, CryptoProviderImpl>([0x10, 0x11].into()),
+            salt: [0x10, 0x11].into(),
+            ciphertext: &ok_input[3..]
+        }),
+        parse_raw_adv_contents::<CryptoProviderImpl>(ok_input).unwrap()
+    );
+}
+
+/// Test method body that creates an array, deserializes it into a DE, serializes it,
+/// and asserts that the same bytes are produced.
+///
+/// Evaluates to the deserialized DE.
+macro_rules! de_roundtrip_test {
+    ($de_type:ty, $type_variant:ident, $de_variant:ident, $flavor:ty,  $bytes:expr) => {{
+        let parsed_de_enum = parse_plain_de::<$flavor>(PlainDataElementType::$type_variant, $bytes);
+        if let PlainDataElement::$de_variant(de) = parsed_de_enum {
+            let expected = <$de_type>::deserialize::<$flavor>($bytes).unwrap();
+            assert_eq!(expected, de);
+
+            let de_bundle: DataElementBundle<$flavor> = de.to_de_bundle();
+            assert_eq!($bytes, de_bundle.contents_as_slice());
+
+            de
+        } else {
+            panic!("Unexpected variant: {:?}", parsed_de_enum);
+        }
+    }};
+}
+
+#[test]
+fn actions_de_contents_roundtrip_plaintext() {
+    let actions = actions::tests::all_plaintext_actions();
+    let bundle = actions::ActionsDataElement::from(actions).to_de_bundle();
+
+    de_roundtrip_test!(
+        actions::ActionsDataElement::<Plaintext>,
+        Actions,
+        Actions,
+        Plaintext,
+        bundle.contents_as_slice()
+    );
+}
+
+#[test]
+fn actions_de_contents_roundtrip_ciphertext() {
+    let actions = actions::tests::all_ciphertext_actions();
+    let bundle = actions::ActionsDataElement::from(actions).to_de_bundle();
+
+    de_roundtrip_test!(
+        actions::ActionsDataElement::<Ciphertext>,
+        Actions,
+        Actions,
+        Ciphertext,
+        bundle.contents_as_slice()
+    );
+}
+
+#[test]
+fn tx_power_de_contents_roundtrip_plaintext() {
+    let tx = shared_data::TxPower::try_from(-10).unwrap();
+    let bundle: DataElementBundle<Plaintext> = TxPowerDataElement::from(tx).to_de_bundle();
+
+    de_roundtrip_test!(TxPowerDataElement, TxPower, TxPower, Plaintext, bundle.contents_as_slice());
+}
+
+#[test]
+fn tx_power_de_contents_roundtrip_ciphertext() {
+    let tx = shared_data::TxPower::try_from(-10).unwrap();
+    let bundle: DataElementBundle<Ciphertext> = TxPowerDataElement::from(tx).to_de_bundle();
+
+    de_roundtrip_test!(
+        TxPowerDataElement,
+        TxPower,
+        TxPower,
+        Ciphertext,
+        bundle.contents_as_slice()
+    );
+}
+
+#[test]
+fn parse_de_invalid_de_len_error() {
+    let input = &[
+        // bogus 6-byte battery de -- only allows length = 3
+        0x6B, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
+    ];
+
+    assert_eq!(
+        nom::Err::Error(error::Error { input: input.as_slice(), code: error::ErrorKind::MapOpt }),
+        parse_de(&input[..]).unwrap_err()
+    );
+}
+
+#[test]
+fn plain_data_elements_matches_plain_des() {
+    assert_eq!(
+        vec![
+            RawPlainDataElement { de_type: PlainDataElementType::TxPower, contents: &[0x01] },
+            RawPlainDataElement { de_type: PlainDataElementType::Actions, contents: &[0x02] }
+        ],
+        plain_data_elements(&[
+            RawDataElement { de_type: DataElementType::TxPower, contents: &[0x01] },
+            RawDataElement { de_type: DataElementType::Actions, contents: &[0x02] }
+        ])
+        .unwrap()
+    );
+}
+
+#[test]
+fn plain_data_elements_rejects_identity_de_error() {
+    for idet in IdentityDataElementType::iter() {
+        assert_eq!(
+            AdvDeserializeError::InvalidDataElementHierarchy,
+            plain_data_elements(&[
+                RawDataElement { de_type: DataElementType::TxPower, contents: &[0x01] },
+                RawDataElement { de_type: id_de_type_as_generic_de_type(idet), contents: &[0x02] }
+            ])
+            .unwrap_err()
+        );
+    }
+}
+
+#[test]
+fn parse_encrypted_identity_contents_too_short_error() {
+    // 2 byte salt + 15 byte ciphertext: 1 too short
+    let input = <[u8; 17]>::init_with_indices(|i| i as u8);
+    assert_eq!(
+        nom::Err::Error(error::Error { input: &input[2..], code: error::ErrorKind::TakeWhileMN }),
+        parse_encrypted_identity_de_contents(&input).unwrap_err()
+    );
+}
+
+#[test]
+fn parse_encrypted_identity_contents_ok() {
+    // 2 byte salt + minimum 16 byte ciphertext
+    let input = <[u8; 18]>::init_with_indices(|i| i as u8);
+    assert_eq!(
+        ([].as_slice(), (ldt_np_adv::LegacySalt::from([0, 1]), &input[2..])),
+        parse_encrypted_identity_de_contents(&input).unwrap()
+    );
+}
+
+#[test]
+fn plaintext_random_adv_contents_round_trip_public() {
+    plaintext_random_adv_contents_round_trip(PublicIdentity::default, PlaintextIdentityMode::Public)
+}
+
+#[test]
+fn plaintext_random_adv_contents_round_trip_no_identity() {
+    plaintext_random_adv_contents_round_trip(NoIdentity::default, PlaintextIdentityMode::None)
+}
+
+#[test]
+fn ciphertext_random_adv_contents_round_trip() {
+    let mut rng = rand_ext::seeded_rng();
+    let de_types: Vec<PlainDataElementType> = PlainDataElementType::iter()
+        .filter(|t| t.supports_flavor(PacketFlavorEnum::Ciphertext))
+        .collect();
+    let identity_de_types: Vec<EncryptedIdentityDataElementType> =
+        EncryptedIdentityDataElementType::iter().collect();
+
+    for _ in 0..10_000 {
+        let mut des = Vec::new();
+
+        let identity_type = *identity_de_types.choose(&mut rng).unwrap();
+        let key_seed: [u8; 32] = rng.gen();
+        let salt: ldt_np_adv::LegacySalt = rng.gen::<[u8; 2]>().into();
+        let metadata_key: [u8; NP_LEGACY_METADATA_KEY_LEN] = rng.gen();
+        let hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+        let ldt_key = hkdf.legacy_ldt_key();
+        let metadata_key_hmac: [u8; 32] =
+            hkdf.legacy_metadata_key_hmac_key().calculate_hmac(&metadata_key);
+        let cipher = ldt_np_adv::build_np_adv_decrypter_from_key_seed(&hkdf, metadata_key_hmac);
+        let mut builder = AdvBuilder::new(LdtIdentity::<CryptoProviderImpl>::new(
+            identity_type,
+            salt,
+            metadata_key,
+            LdtEncrypterXtsAes128::<CryptoProviderImpl>::new(&ldt_key),
+        ));
+
+        loop {
+            let de_type = *de_types.choose(&mut rng).unwrap();
+            let (de, bundle) = random_de_ciphertext(de_type, &mut rng).unwrap();
+
+            if builder.add_data_element(bundle.clone()).ok().is_none() {
+                // out of room
+                if des.is_empty() {
+                    // need at least one, so try again
+                    continue;
+                } else {
+                    // there's at least one so proceed to serialization
+                    break;
+                }
+            }
+
+            des.push(de);
+        }
+
+        let serialized = builder.into_advertisement().unwrap();
+        let (remaining, header) = parse_adv_header(serialized.as_slice()).unwrap();
+        let parsed_adv = deserialize_adv_contents::<CryptoProviderImpl>(remaining).unwrap();
+
+        assert_eq!(AdvHeader::V0, header);
+        if let IntermediateAdvContents::Ciphertext(eac) = parsed_adv {
+            assert_eq!(
+                EncryptedAdvContents {
+                    identity_type,
+                    salt_padder: ldt_np_adv::salt_padder::<16, CryptoProviderImpl>(salt),
+                    salt,
+                    // skip adv header, de header, salt
+                    ciphertext: &serialized.as_slice()[4..]
+                },
+                eac
+            );
+
+            assert_eq!(
+                DecryptedAdvContents { identity_type, metadata_key, salt, data_elements: des },
+                eac.try_decrypt(&cipher).unwrap()
+            )
+        } else {
+            panic!("Unexpected variant: {:?}", parsed_adv);
+        }
+    }
+}
+
+#[test]
+fn decrypt_and_deserialize_ciphertext_adv_canned() {
+    let key_seed = [0x11_u8; 32];
+    let salt: ldt_np_adv::LegacySalt = [0x22; 2].into();
+    let metadata_key: [u8; NP_LEGACY_METADATA_KEY_LEN] = [0x33; NP_LEGACY_METADATA_KEY_LEN];
+
+    let hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+    let ldt_key = hkdf.legacy_ldt_key();
+    let metadata_key_hmac: [u8; 32] =
+        hkdf.legacy_metadata_key_hmac_key().calculate_hmac(&metadata_key);
+    let cipher = ldt_np_adv::build_np_adv_decrypter_from_key_seed(&hkdf, metadata_key_hmac);
+    let mut builder = AdvBuilder::new(LdtIdentity::<CryptoProviderImpl>::new(
+        EncryptedIdentityDataElementType::Private,
+        salt,
+        metadata_key,
+        LdtEncrypterXtsAes128::<CryptoProviderImpl>::new(&ldt_key),
+    ));
+
+    let tx = shared_data::TxPower::try_from(3).unwrap();
+    builder.add_data_element(TxPowerDataElement::from(tx)).unwrap();
+
+    let serialized = builder.into_advertisement().unwrap();
+
+    assert_eq!(
+        &[
+            0x0,  // adv header
+            0x21, // private DE
+            0x22, 0x22, // salt
+            // ciphertext
+            0x85, 0xBF, 0xA8, 0x83, 0x58, 0x7C, 0x50, 0xCF, 0x98, 0x38, 0xA7, 0x8A, 0xC0, 0x1C,
+            0x96, 0xF9
+        ],
+        serialized.as_slice()
+    );
+
+    let (remaining, header) = parse_adv_header(serialized.as_slice()).unwrap();
+    assert_eq!(AdvHeader::V0, header);
+
+    let parsed_adv = deserialize_adv_contents::<CryptoProviderImpl>(remaining).unwrap();
+    if let IntermediateAdvContents::Ciphertext(eac) = parsed_adv {
+        assert_eq!(
+            EncryptedAdvContents {
+                identity_type: EncryptedIdentityDataElementType::Private,
+                salt_padder: ldt_np_adv::salt_padder::<16, CryptoProviderImpl>(salt),
+                salt,
+                // skip adv header, de header, salt
+                ciphertext: &serialized.as_slice()[4..]
+            },
+            eac
+        );
+
+        assert_eq!(
+            DecryptedAdvContents {
+                identity_type: EncryptedIdentityDataElementType::Private,
+                metadata_key,
+                salt,
+                data_elements: vec![PlainDataElement::TxPower(TxPowerDataElement::from(
+                    TxPower::try_from(3).unwrap()
+                ))],
+            },
+            eac.try_decrypt(&cipher).unwrap()
+        )
+    } else {
+        panic!("Unexpected variant: {:?}", parsed_adv);
+    }
+}
+
+#[test]
+fn decrypt_and_deserialize_plaintext_adv_canned() {
+    let mut builder = AdvBuilder::new(PublicIdentity::default());
+
+    let actions = ActionBits::default();
+    builder.add_data_element(ActionsDataElement::from(actions)).unwrap();
+
+    let serialized = builder.into_advertisement().unwrap();
+
+    assert_eq!(
+        &[
+            0x0,  // adv header
+            0x03, // public DE
+            0x16, 0x00 // actions
+        ],
+        serialized.as_slice()
+    );
+
+    let (remaining, header) = parse_adv_header(serialized.as_slice()).unwrap();
+    assert_eq!(AdvHeader::V0, header);
+
+    let parsed_adv = deserialize_adv_contents::<CryptoProviderImpl>(remaining).unwrap();
+    if let IntermediateAdvContents::Plaintext(parc) = parsed_adv {
+        assert_eq!(
+            PlaintextAdvContents {
+                identity_type: PlaintextIdentityMode::Public,
+                data_elements: vec![PlainDataElement::Actions(ActionsDataElement::from(
+                    ActionBits::default()
+                ))],
+            },
+            parc
+        )
+    } else {
+        panic!("Unexpected variant: {:?}", parsed_adv);
+    }
+}
+
+#[test]
+fn decrypt_with_wrong_key_seed_error() {
+    let salt = ldt_np_adv::LegacySalt::from([0x22; 2]);
+    let metadata_key: [u8; NP_LEGACY_METADATA_KEY_LEN] = [0x33; NP_LEGACY_METADATA_KEY_LEN];
+    let correct_key_seed = [0x11_u8; 32];
+
+    let (adv_content, correct_cipher) =
+        build_ciphertext_adv_contents(salt, &metadata_key, correct_key_seed);
+    let eac = parse_ciphertext_adv_contents(&correct_cipher, &adv_content.as_slice()[1..]);
+
+    // wrong key seed doesn't work (derives wrong ldt key, wrong hmac key)
+    let wrong_key_seed_cipher = {
+        let key_seed = [0x22_u8; 32];
+
+        let hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+        let metadata_key_hmac: [u8; 32] =
+            hkdf.legacy_metadata_key_hmac_key().calculate_hmac(&metadata_key);
+        ldt_np_adv::build_np_adv_decrypter_from_key_seed(&hkdf, metadata_key_hmac)
+    };
+
+    assert_eq!(
+        DecryptError::DecryptOrVerifyError,
+        eac.try_decrypt(&wrong_key_seed_cipher,).unwrap_err()
+    );
+}
+
+#[test]
+fn decrypt_with_wrong_hmac_key_error() {
+    let salt = ldt_np_adv::LegacySalt::from([0x22; 2]);
+    let metadata_key: [u8; NP_LEGACY_METADATA_KEY_LEN] = [0x33; NP_LEGACY_METADATA_KEY_LEN];
+    let correct_key_seed = [0x11_u8; 32];
+
+    let (adv_content, correct_cipher_config) =
+        build_ciphertext_adv_contents(salt, &metadata_key, correct_key_seed);
+    let eac = parse_ciphertext_adv_contents(&correct_cipher_config, &adv_content.as_slice()[1..]);
+
+    let wrong_hmac_key_cipher = {
+        let hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&[0x10_u8; 32]);
+        let metadata_key_hmac: [u8; 32] =
+            hkdf.legacy_metadata_key_hmac_key().calculate_hmac(&metadata_key);
+
+        ldt_np_adv::build_np_adv_decrypter_from_key_seed(&hkdf, metadata_key_hmac)
+    };
+
+    assert_eq!(
+        DecryptError::DecryptOrVerifyError,
+        eac.try_decrypt::<CryptoProviderImpl>(&wrong_hmac_key_cipher,).unwrap_err()
+    );
+}
+
+#[test]
+fn decrypt_with_wrong_hmac_error() {
+    let salt = ldt_np_adv::LegacySalt::from([0x22; 2]);
+    let metadata_key: [u8; NP_LEGACY_METADATA_KEY_LEN] = [0x33; NP_LEGACY_METADATA_KEY_LEN];
+    let correct_key_seed = [0x11_u8; 32];
+
+    let (adv_content, correct_cipher_config) =
+        build_ciphertext_adv_contents(salt, &metadata_key, correct_key_seed);
+    let eac = parse_ciphertext_adv_contents(&correct_cipher_config, &adv_content.as_slice()[1..]);
+
+    let wrong_hmac_key_cipher = {
+        let hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&correct_key_seed);
+
+        ldt_np_adv::build_np_adv_decrypter_from_key_seed(&hkdf, [0x77; 32])
+    };
+
+    assert_eq!(
+        DecryptError::DecryptOrVerifyError,
+        eac.try_decrypt(&wrong_hmac_key_cipher,).unwrap_err()
+    );
+}
+
+#[test]
+fn decrypt_and_deserialize_ciphertext_with_public_adv_inside_error() {
+    let key_seed = [0x11_u8; 32];
+    let salt: ldt_np_adv::LegacySalt = [0x22; 2].into();
+    let metadata_key: [u8; NP_LEGACY_METADATA_KEY_LEN] = [0x33; NP_LEGACY_METADATA_KEY_LEN];
+
+    let hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+    let ldt_key = hkdf.legacy_ldt_key();
+    let metadata_key_hmac: [u8; 32] =
+        hkdf.legacy_metadata_key_hmac_key().calculate_hmac(&metadata_key);
+    let cipher = ldt_np_adv::build_np_adv_decrypter_from_key_seed(&hkdf, metadata_key_hmac);
+
+    let mut plaintext = vec![];
+    plaintext.extend_from_slice(&metadata_key);
+
+    let txpower_de = TxPowerDataElement::from(TxPower::try_from(5).unwrap());
+
+    plaintext.push(
+        encode_de_header_actual_len(DataElementType::TxPower, 1u8.try_into().unwrap()).unwrap(),
+    );
+
+    let plaintext_de_bundle: DataElementBundle<Plaintext> = txpower_de.to_de_bundle();
+    plaintext.extend_from_slice(plaintext_de_bundle.contents_as_slice());
+    // forge an otherwise impossible to express public identity
+    plaintext.push(
+        encode_de_header_actual_len(DataElementType::PublicIdentity, DeActualLength::ZERO).unwrap(),
+    );
+
+    assert_eq!(17, plaintext.len());
+
+    let ldt = LdtEncrypterXtsAes128::<CryptoProviderImpl>::new(&ldt_key);
+    ldt.encrypt(&mut plaintext, &ldt_np_adv::salt_padder::<16, CryptoProviderImpl>(salt)).unwrap();
+    let ciphertext = plaintext;
+
+    let mut adv = vec![];
+    adv.push(0x00); // adv header
+    adv.push(
+        encode_de_header_actual_len(
+            DataElementType::PrivateIdentity,
+            (2 + ciphertext.len()).try_into().unwrap(),
+        )
+        .unwrap(),
+    ); // private DE
+    adv.extend_from_slice(&[0x22; 2]); // salt
+    adv.extend_from_slice(&ciphertext);
+
+    let parsed_adv = deserialize_adv_contents::<CryptoProviderImpl>(&adv[1..]).unwrap();
+    if let IntermediateAdvContents::Ciphertext(eac) = parsed_adv {
+        assert_eq!(
+            DecryptError::DeserializeError(AdvDeserializeError::InvalidDataElementHierarchy),
+            eac.try_decrypt(&cipher).unwrap_err()
+        )
+    } else {
+        panic!("Unexpected variant: {:?}", parsed_adv);
+    }
+}
+
+fn build_ciphertext_adv_contents<C: CryptoProvider>(
+    salt: ldt_np_adv::LegacySalt,
+    metadata_key: &[u8; 14],
+    correct_key_seed: [u8; 32],
+) -> (ArrayView<u8, { BLE_ADV_SVC_CONTENT_LEN }>, ldt_np_adv::LdtNpAdvDecrypterXtsAes128<C>) {
+    let hkdf = np_hkdf::NpKeySeedHkdf::<C>::new(&correct_key_seed);
+    let ldt_key = hkdf.legacy_ldt_key();
+
+    let metadata_key_hmac: [u8; 32] =
+        hkdf.legacy_metadata_key_hmac_key().calculate_hmac(metadata_key.as_slice());
+
+    let correct_cipher = ldt_np_adv::build_np_adv_decrypter_from_key_seed(&hkdf, metadata_key_hmac);
+
+    let mut builder = AdvBuilder::new(LdtIdentity::<CryptoProviderImpl>::new(
+        EncryptedIdentityDataElementType::Private,
+        salt,
+        *metadata_key,
+        LdtEncrypterXtsAes128::<CryptoProviderImpl>::new(&ldt_key),
+    ));
+    builder.add_data_element(TxPowerDataElement::from(TxPower::try_from(3).unwrap())).unwrap();
+    (builder.into_advertisement().unwrap(), correct_cipher)
+}
+
+fn parse_ciphertext_adv_contents<'b>(
+    cipher: &ldt_np_adv::LdtNpAdvDecrypterXtsAes128<CryptoProviderImpl>,
+    adv_content: &'b [u8],
+) -> EncryptedAdvContents<'b> {
+    let eac = match deserialize_adv_contents::<CryptoProviderImpl>(adv_content).unwrap() {
+        IntermediateAdvContents::Plaintext(_) => panic!(),
+        // quick confirmation that we did get something
+        IntermediateAdvContents::Ciphertext(eac) => eac,
+    };
+
+    // correct cipher works
+    assert!(eac.try_decrypt(cipher).is_ok());
+
+    eac
+}
+
+/// Construct the serialized DE and parse it
+fn parse_plain_de<F>(de_type: PlainDataElementType, contents: &[u8]) -> PlainDataElement<F>
+where
+    F: PacketFlavor,
+    actions::ActionsDataElement<F>: DataElement,
+{
+    let mut buf = vec![];
+    buf.push(
+        encode_de_header_actual_len(
+            de_type.as_generic_de_type(),
+            contents.len().try_into().unwrap(),
+        )
+        .unwrap(),
+    );
+    buf.extend_from_slice(contents);
+
+    let raw_de = combinator::all_consuming(parse_de)(&buf).map(|(_remaining, de)| de).unwrap();
+
+    let plain_des = plain_data_elements(&[raw_de]).unwrap();
+    assert_eq!(1, plain_des.len());
+    plain_des.first().unwrap().try_deserialize().unwrap()
+}
+
+fn plaintext_random_adv_contents_round_trip<I: Identity<Flavor = Plaintext>, F: Fn() -> I>(
+    mk_identity: F,
+    identity_type: PlaintextIdentityMode,
+) {
+    let mut rng = rand_ext::seeded_rng();
+    let de_types: Vec<PlainDataElementType> = PlainDataElementType::iter()
+        .filter(|t| t.supports_flavor(PacketFlavorEnum::Plaintext))
+        .collect();
+
+    for _ in 0..10_000 {
+        let mut de_tuples = Vec::new();
+        let mut builder = AdvBuilder::new(mk_identity());
+
+        loop {
+            let de_type = *de_types.choose(&mut rng).unwrap();
+            let (de, bundle) = random_de_plaintext(de_type, &mut rng).unwrap();
+
+            if builder.add_data_element(bundle.clone()).ok().is_none() {
+                // out of room
+                break;
+            }
+
+            de_tuples.push((de, de_type, bundle));
+        }
+
+        let serialized = builder.into_advertisement().unwrap();
+
+        let (_rem, header) =
+            combinator::all_consuming(parse_adv_header)(&serialized.as_slice()[..1]).unwrap();
+        let parsed_adv =
+            parse_raw_adv_contents::<CryptoProviderImpl>(&serialized.as_slice()[1..]).unwrap();
+
+        assert_eq!(AdvHeader::V0, header);
+        if let RawAdvertisement::Plaintext(parc) = parsed_adv {
+            assert_eq!(
+                PlaintextAdvRawContents {
+                    identity_type,
+                    data_elements: de_tuples
+                        .iter()
+                        .map(|(_de, de_type, bundle)| RawPlainDataElement {
+                            de_type: *de_type,
+                            contents: bundle.contents_as_slice(),
+                        })
+                        .collect()
+                },
+                parc
+            );
+
+            assert_eq!(
+                PlaintextAdvContents {
+                    identity_type,
+                    data_elements: de_tuples
+                        .into_iter()
+                        .map(|(de, _de_type, _bundle)| de)
+                        .collect(),
+                },
+                parc.try_deserialize().unwrap()
+            )
+        } else {
+            panic!("Unexpected variant: {:?}", parsed_adv);
+        }
+    }
+}
diff --git a/nearby/presence/np_adv/src/legacy/mod.rs b/nearby/presence/np_adv/src/legacy/mod.rs
new file mode 100644
index 0000000..0eb035d
--- /dev/null
+++ b/nearby/presence/np_adv/src/legacy/mod.rs
@@ -0,0 +1,66 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! V0 advertisement support.
+
+use core::fmt;
+
+pub mod actions;
+pub mod data_elements;
+pub mod de_type;
+pub mod deserialize;
+pub mod serialize;
+
+#[cfg(test)]
+mod random_data_elements;
+
+/// Advertisement capacity after 5 bytes of BLE header and 2 bytes of svc UUID are reserved from a
+/// 31-byte advertisement
+pub const BLE_ADV_SVC_CONTENT_LEN: usize = 24;
+/// Maximum possible DE content: packet size minus 2 for adv header & DE header
+const NP_MAX_DE_CONTENT_LEN: usize = BLE_ADV_SVC_CONTENT_LEN - 2;
+
+/// Marker type to allow disambiguating between plaintext and encrypted packets at compile time.
+///
+/// See also [PacketFlavorEnum] for when runtime flavor checks are more suitable.
+pub trait PacketFlavor: fmt::Debug + Clone + Copy {
+    /// The corresponding [PacketFlavorEnum] variant.
+    const ENUM_VARIANT: PacketFlavorEnum;
+}
+
+/// Marker type for plaintext packets (public identity and no identity).
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub struct Plaintext;
+
+impl PacketFlavor for Plaintext {
+    const ENUM_VARIANT: PacketFlavorEnum = PacketFlavorEnum::Plaintext;
+}
+
+/// Marker type for ciphertext packets (private, trusted, and provisioned identity).
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub struct Ciphertext;
+
+impl PacketFlavor for Ciphertext {
+    const ENUM_VARIANT: PacketFlavorEnum = PacketFlavorEnum::Ciphertext;
+}
+
+/// An enum version of the implementors of [PacketFlavor] for use cases where runtime checking is
+/// a better fit than compile time checking.
+#[derive(Debug, Clone, Copy, strum_macros::EnumIter, PartialEq, Eq)]
+pub enum PacketFlavorEnum {
+    /// Corresponds to [Plaintext].
+    Plaintext,
+    /// Corresponds to [Ciphertext].
+    Ciphertext,
+}
diff --git a/nearby/presence/np_adv/src/legacy/random_data_elements.rs b/nearby/presence/np_adv/src/legacy/random_data_elements.rs
new file mode 100644
index 0000000..f416ffe
--- /dev/null
+++ b/nearby/presence/np_adv/src/legacy/random_data_elements.rs
@@ -0,0 +1,170 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+extern crate std;
+
+use crate::{
+    legacy::{
+        actions::*,
+        data_elements::*,
+        de_type::PlainDataElementType,
+        deserialize::PlainDataElement,
+        serialize::{DataElementBundle, ToDataElementBundle},
+        Ciphertext, PacketFlavor, PacketFlavorEnum, Plaintext,
+    },
+    shared_data::{ContextSyncSeqNum, TxPower},
+};
+use rand_ext::rand::{self, distributions, prelude::SliceRandom as _};
+use std::prelude::rust_2021::*;
+use strum::IntoEnumIterator;
+
+impl distributions::Distribution<ActionsDataElement<Plaintext>> for distributions::Standard {
+    fn sample<R: rand::Rng + ?Sized>(&self, rng: &mut R) -> ActionsDataElement<Plaintext> {
+        let mut available_actions = ActionType::iter()
+            .filter(|at| at.supports_flavor(PacketFlavorEnum::Plaintext))
+            .collect::<Vec<_>>();
+        available_actions.shuffle(rng);
+
+        // choose some of the available actions.
+        let selected_actions: &[ActionType] =
+            &available_actions[0..rng.gen_range(0..available_actions.len())];
+
+        let mut bits = ActionBits::default();
+
+        for a in selected_actions {
+            match a {
+                ActionType::ContextSyncSeqNum => {
+                    bits.set_action(ContextSyncSeqNum::try_from(rng.gen_range(0..=15)).unwrap())
+                }
+                // generating boolean actions with `true` since we already did our random selection
+                // of which actions to use above
+                ActionType::NearbyShare => bits.set_action(NearbyShare::from(true)),
+                ActionType::Finder => bits.set_action(Finder::from(true)),
+                ActionType::FastPairSass => bits.set_action(FastPairSass::from(true)),
+                ActionType::ActiveUnlock
+                | ActionType::PresenceManager
+                | ActionType::InstantTethering
+                | ActionType::PhoneHub => unreachable!("not plaintext actions"),
+            }
+        }
+
+        ActionsDataElement::from(bits)
+    }
+}
+impl distributions::Distribution<ActionsDataElement<Ciphertext>> for distributions::Standard {
+    fn sample<R: rand::Rng + ?Sized>(&self, rng: &mut R) -> ActionsDataElement<Ciphertext> {
+        let mut available_actions = ActionType::iter()
+            .filter(|at| at.supports_flavor(PacketFlavorEnum::Ciphertext))
+            .collect::<Vec<_>>();
+        available_actions.shuffle(rng);
+
+        // choose some of the available actions
+        let selected_actions: &[ActionType] =
+            &available_actions[0..rng.gen_range(0..available_actions.len())];
+
+        let mut bits = ActionBits::default();
+
+        for a in selected_actions {
+            match a {
+                ActionType::ContextSyncSeqNum => {
+                    bits.set_action(ContextSyncSeqNum::try_from(rng.gen_range(0..=15)).unwrap())
+                }
+                ActionType::ActiveUnlock => bits.set_action(ActiveUnlock::from(true)),
+                // generating boolean actions with `true` since we already did our random selection
+                // of which actions to use above
+                ActionType::NearbyShare => bits.set_action(NearbyShare::from(true)),
+                ActionType::PresenceManager => bits.set_action(PresenceManager::from(true)),
+                ActionType::InstantTethering => bits.set_action(InstantTethering::from(true)),
+                ActionType::PhoneHub => bits.set_action(PhoneHub::from(true)),
+                ActionType::Finder | ActionType::FastPairSass => {
+                    unreachable!("not ciphertext actions")
+                }
+            }
+        }
+
+        ActionsDataElement::from(bits)
+    }
+}
+
+impl distributions::Distribution<TxPower> for distributions::Standard {
+    fn sample<R: rand::Rng + ?Sized>(&self, rng: &mut R) -> TxPower {
+        let tx_power: i8 = rng.gen_range(-100..=20);
+        TxPower::try_from(tx_power).unwrap()
+    }
+}
+
+impl distributions::Distribution<TxPowerDataElement> for distributions::Standard {
+    fn sample<R: rand::Rng + ?Sized>(&self, rng: &mut R) -> TxPowerDataElement {
+        let tx_power: TxPower = self.sample(rng);
+        TxPowerDataElement::from(tx_power)
+    }
+}
+
+/// Generate a random instance of the requested DE and return it wrapped in [PlainDataElement] along
+/// with its bundle representation.
+pub(crate) fn rand_de_and_bundle<F, D, E, R>(
+    to_enum: E,
+    rng: &mut R,
+) -> (PlainDataElement<F>, DataElementBundle<F>)
+where
+    F: PacketFlavor,
+    D: ToDataElementBundle<F>,
+    E: Fn(D) -> PlainDataElement<F>,
+    R: rand::Rng,
+    distributions::Standard: distributions::Distribution<D>,
+{
+    let de = rng.gen::<D>();
+    let bundle = de.to_de_bundle();
+    (to_enum(de), bundle)
+}
+
+/// Generate a random instance of the requested de type, or `None` if that type does not support
+/// plaintext.
+pub(crate) fn random_de_plaintext<R>(
+    de_type: PlainDataElementType,
+    rng: &mut R,
+) -> Option<(PlainDataElement<Plaintext>, DataElementBundle<Plaintext>)>
+where
+    R: rand::Rng,
+{
+    let opt = match de_type {
+        PlainDataElementType::TxPower => Some(rand_de_and_bundle(PlainDataElement::TxPower, rng)),
+        PlainDataElementType::Actions => Some(rand_de_and_bundle(PlainDataElement::Actions, rng)),
+    };
+
+    // make sure flavor support is consistent
+    assert_eq!(opt.is_some(), de_type.supports_flavor(PacketFlavorEnum::Plaintext));
+
+    opt
+}
+
+/// Generate a random instance of the requested de type, or `None` if that type does not support
+/// ciphertext.
+pub(crate) fn random_de_ciphertext<R>(
+    de_type: PlainDataElementType,
+    rng: &mut R,
+) -> Option<(PlainDataElement<Ciphertext>, DataElementBundle<Ciphertext>)>
+where
+    R: rand::Rng,
+{
+    let opt = match de_type {
+        PlainDataElementType::TxPower => Some(rand_de_and_bundle(PlainDataElement::TxPower, rng)),
+        PlainDataElementType::Actions => Some(rand_de_and_bundle(PlainDataElement::Actions, rng)),
+    };
+
+    // make sure flavor support is consistent
+    assert_eq!(opt.is_some(), de_type.supports_flavor(PacketFlavorEnum::Ciphertext));
+
+    opt
+}
diff --git a/nearby/presence/np_adv/src/legacy/serialize/mod.rs b/nearby/presence/np_adv/src/legacy/serialize/mod.rs
new file mode 100644
index 0000000..38e46e1
--- /dev/null
+++ b/nearby/presence/np_adv/src/legacy/serialize/mod.rs
@@ -0,0 +1,402 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Serialization for V0 advertisements.
+//!
+//! # Examples
+//!
+//! Serializing a plaintext advertisement:
+//!
+//! ```
+//! use np_adv::{legacy::{data_elements::*, serialize::*}, shared_data::*, PublicIdentity};
+//! use np_adv::shared_data::TxPower;
+//!
+//! let mut builder = AdvBuilder::new(PublicIdentity::default());
+//! builder
+//!     .add_data_element(TxPowerDataElement::from(TxPower::try_from(3).expect("3 is a valid TxPower value")))
+//!     .unwrap();
+//! let packet = builder.into_advertisement().unwrap();
+//! assert_eq!(
+//!     &[
+//!         0x00, // Adv Header
+//!         0x03, // Public DE header
+//!         0x15, 0x03, // tx power de
+//!     ],
+//!     packet.as_slice()
+//! );
+//! ```
+//!
+//! Serializing an encrypted advertisement:
+//!
+//! ```
+//! use np_adv::{shared_data::*, de_type::*, legacy::{de_type::*, data_elements::*, serialize::*}};
+//! use crypto_provider::CryptoProvider;
+//! use crypto_provider_default::CryptoProviderImpl;
+//! use ldt_np_adv::{salt_padder, LegacySalt, LdtEncrypterXtsAes128};
+//!
+//! // Generate these from proper CSPRNGs -- using fixed data here
+//! let metadata_key = [0x33; 14];
+//! let salt = LegacySalt::from([0x01, 0x02]);
+//! let key_seed = [0x44; 32];
+//! let ldt_enc = LdtEncrypterXtsAes128::<CryptoProviderImpl>::new(
+//!     &np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed).legacy_ldt_key()
+//! );
+//!
+//! let mut builder = AdvBuilder::new(LdtIdentity::<CryptoProviderImpl>::new(
+//!     EncryptedIdentityDataElementType::Private,
+//!     salt,
+//!     metadata_key,
+//!     ldt_enc,
+//! ));
+//!
+//! builder
+//!     .add_data_element(TxPowerDataElement::from(TxPower::try_from(3).expect("3 is a valid TxPower value")))
+//!     .unwrap();
+//!
+//! let packet = builder.into_advertisement().unwrap();
+//! ```
+use crate::{
+    de_type::{EncryptedIdentityDataElementType, IdentityDataElementType},
+    legacy::{
+        de_type::{DataElementType, DeActualLength, DeEncodedLength, PlainDataElementType},
+        Ciphertext, PacketFlavor, Plaintext, BLE_ADV_SVC_CONTENT_LEN, NP_MAX_DE_CONTENT_LEN,
+    },
+    DeLengthOutOfRange, NoIdentity, PublicIdentity,
+};
+use array_view::ArrayView;
+use core::{convert, fmt, marker};
+use crypto_provider::CryptoProvider;
+use ldt_np_adv::NP_LEGACY_METADATA_KEY_LEN;
+
+#[cfg(test)]
+mod tests;
+
+/// An identity used in serializing an advertisement.
+pub trait Identity: fmt::Debug {
+    /// The flavor of packet this identity produces
+    type Flavor: PacketFlavor;
+    /// The error returned if postprocessing fails
+    type Error: fmt::Debug;
+    /// How much space needs to be reserved for this identity's prefix bytes
+    const OVERHEAD_LEN: usize;
+
+    /// Perform identity-specific manipulation to the serialized DEs to produce the final
+    /// advertisement format.
+    ///
+    /// `buf` is `OVERHEAD_LEN` bytes set aside for the identity's use, followed by all of the DEs
+    /// added to a packet. It does not include the NP top level header.
+    ///
+    /// Returns `Ok` if postprocessing was successful and the packet is finished, or `Err` if
+    /// postprocessing failed and the packet should be discarded.
+    fn postprocess(&self, buf: &mut [u8]) -> Result<(), Self::Error>;
+}
+
+lazy_static::lazy_static! {
+    // Avoid either a panic-able code path or an error case that never happens by precalculating.
+    static ref PUBLIC_IDENTITY_DE_HEADER: u8 =
+        encode_de_header_actual_len(DataElementType::PublicIdentity, DeActualLength::ZERO).unwrap();
+}
+
+impl Identity for PublicIdentity {
+    type Flavor = Plaintext;
+    type Error = convert::Infallible;
+    // 1 byte for public DE header (0 content)
+    const OVERHEAD_LEN: usize = 1;
+
+    fn postprocess(&self, buf: &mut [u8]) -> Result<(), Self::Error> {
+        buf[0] = *PUBLIC_IDENTITY_DE_HEADER;
+
+        Ok(())
+    }
+}
+
+impl Identity for NoIdentity {
+    type Flavor = Plaintext;
+    type Error = convert::Infallible;
+    // No DE header
+    const OVERHEAD_LEN: usize = 0;
+
+    fn postprocess(&self, _buf: &mut [u8]) -> Result<(), Self::Error> {
+        Ok(())
+    }
+}
+
+/// Identity used for encrypted packets (private, trusted, provisioned) that encrypts other DEs
+/// (as well as the metadata key).
+pub struct LdtIdentity<C: CryptoProvider> {
+    de_type: EncryptedIdentityDataElementType,
+    salt: ldt_np_adv::LegacySalt,
+    metadata_key: [u8; NP_LEGACY_METADATA_KEY_LEN],
+    ldt_enc: ldt_np_adv::LdtEncrypterXtsAes128<C>,
+    // keep C parameter alive for when A disappears into it
+    _crypto_provider: marker::PhantomData<C>,
+}
+
+// Exclude sensitive members
+impl<C: CryptoProvider> fmt::Debug for LdtIdentity<C> {
+    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+        write!(f, "LdtIdentity {{ de_type: {:?}, salt: {:X?} }}", self.de_type, self.salt)
+    }
+}
+
+impl<C: CryptoProvider> LdtIdentity<C> {
+    /// Build an `LdtIdentity` for the provided identity, salt, metadata key, and ldt.
+    pub fn new(
+        de_type: EncryptedIdentityDataElementType,
+        salt: ldt_np_adv::LegacySalt,
+        metadata_key: [u8; NP_LEGACY_METADATA_KEY_LEN],
+        ldt_enc: ldt_np_adv::LdtEncrypterXtsAes128<C>,
+    ) -> LdtIdentity<C> {
+        LdtIdentity { de_type, salt, metadata_key, ldt_enc, _crypto_provider: marker::PhantomData }
+    }
+}
+
+impl<C: CryptoProvider> Identity for LdtIdentity<C> {
+    type Flavor = Ciphertext;
+    type Error = LdtPostprocessError;
+    // Identity DE header + salt + metadata key
+    const OVERHEAD_LEN: usize = 17;
+
+    fn postprocess(&self, buf: &mut [u8]) -> Result<(), LdtPostprocessError> {
+        let de_type = self.de_type.as_identity_data_element_type();
+        // there's space for the identity DE header byte, but we don't count that in the DE length
+        let actual_len: DeActualLength = buf
+            .len()
+            .checked_sub(1)
+            .ok_or(LdtPostprocessError::InvalidLength)
+            .and_then(|len| len.try_into().map_err(|_e| LdtPostprocessError::InvalidLength))?;
+        // header
+        buf[0] = encode_de_header_actual_len(id_de_type_as_generic_de_type(de_type), actual_len)
+            .map_err(|_e| LdtPostprocessError::InvalidLength)?;
+        buf[1..3].copy_from_slice(self.salt.bytes().as_slice());
+        buf[3..17].copy_from_slice(&self.metadata_key);
+
+        // encrypt everything after DE header and salt
+        self.ldt_enc.encrypt(&mut buf[3..], &ldt_np_adv::salt_padder::<16, C>(self.salt)).map_err(
+            |e| match e {
+                // too short, not enough DEs -- should be caught by length validation above, though
+                ldt::LdtError::InvalidLength(_) => LdtPostprocessError::InvalidLength,
+            },
+        )
+    }
+}
+
+/// Something went wrong, or preconditions were not met, during identity postprocessing.
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub enum LdtPostprocessError {
+    /// The minimum size (2 bytes) or maximum size (6 bytes) of DE payload was not met
+    InvalidLength,
+}
+
+/// Accumulates DEs, then massages the serialized DEs with the configured identity to produce
+/// the final advertisement.
+#[derive(Debug)]
+pub struct AdvBuilder<I: Identity> {
+    /// The first byte is for the adv header, then the next I::OVERHEAD_LEN bytes are set aside for
+    /// use by [Identity::postprocess].
+    buffer: [u8; BLE_ADV_SVC_CONTENT_LEN],
+    /// How much of the buffer is consumed.
+    /// Always <= buffer length
+    len: usize,
+    identity: I,
+}
+
+impl<I: Identity> AdvBuilder<I> {
+    /// Create an empty AdvBuilder with the provided identity.
+    pub fn new(identity: I) -> AdvBuilder<I> {
+        // adv header + identity overhead
+        let len = 1 + I::OVERHEAD_LEN;
+        // check for broken identities
+        assert!(len < BLE_ADV_SVC_CONTENT_LEN);
+        AdvBuilder {
+            // conveniently the first byte is already 0, which is the correct header for v0.
+            // 3 bit version (000 since this is version 0), 5 bit reserved (also all 0)
+            buffer: [0; BLE_ADV_SVC_CONTENT_LEN],
+            len,
+            identity,
+        }
+    }
+
+    /// Add the data element to the packet buffer, if there is space.
+    pub fn add_data_element<B: ToDataElementBundle<I::Flavor>>(
+        &mut self,
+        data_element: B,
+    ) -> Result<(), AddDataElementError> {
+        let remaining = self.buffer.len() - self.len;
+        let bundle = data_element.to_de_bundle();
+        // length including header byte
+        let de_slice = bundle.contents_as_slice();
+        let de_total_len = 1 + de_slice.len();
+        if remaining < de_total_len {
+            return Err(AddDataElementError::InsufficientAdvSpace);
+        }
+
+        // header
+        self.buffer[self.len] =
+            encode_de_header(bundle.de_type.as_generic_de_type(), bundle.encoded_len);
+        self.len += 1;
+        // de contents
+        self.buffer[self.len..self.len + de_slice.len()].copy_from_slice(de_slice);
+        self.len += de_slice.len();
+        Ok(())
+    }
+
+    /// Return the finished advertisement (adv header + DEs), or `None` if the adv could not be
+    /// built.
+    pub fn into_advertisement(
+        mut self,
+    ) -> Result<ArrayView<u8, BLE_ADV_SVC_CONTENT_LEN>, I::Error> {
+        // encrypt, if applicable
+        self.identity
+            // skip adv header for postprocessing
+            .postprocess(&mut self.buffer[1..self.len])
+            .map(|_| ArrayView::try_from_array(self.buffer, self.len).expect("len is always valid"))
+    }
+}
+
+/// Errors that can occur for [AdvBuilder.add_data_element].
+#[derive(Debug, PartialEq, Eq)]
+pub enum AddDataElementError {
+    /// The provided DE can't fit in the remaining space
+    InsufficientAdvSpace,
+}
+
+/// The serialized form of a data element.
+#[derive(Clone, Debug)]
+pub struct DataElementBundle<F: PacketFlavor> {
+    de_type: PlainDataElementType,
+    /// Data element payload
+    data: DePayload,
+    /// The header-encoded form of `data`'s length
+    encoded_len: DeEncodedLength,
+    /// Type marker for whether this DE can be used in encrypted or plaintext packets.
+    flavor: marker::PhantomData<F>,
+}
+
+impl<F: PacketFlavor> DataElementBundle<F> {
+    /// Returns `Err` if the provided `data` or requested [PacketFlavor] are not valid for
+    /// `de_type`.
+    pub(crate) fn try_from(
+        de_type: PlainDataElementType,
+        data: &[u8],
+    ) -> Result<DataElementBundle<F>, DeBundleError> {
+        if !de_type.supports_flavor(F::ENUM_VARIANT) {
+            return Err(DeBundleError::InvalidFlavor);
+        }
+
+        let mut buffer = [0; NP_MAX_DE_CONTENT_LEN];
+        buffer
+            .get_mut(0..data.len())
+            .map(|dest| dest.copy_from_slice(data))
+            .ok_or(DeBundleError::InvalidLength)?;
+
+        let payload: DePayload = ArrayView::try_from_array(buffer, data.len())
+            .expect("data already copied into buffer")
+            .into();
+
+        // get the encoded length now so we know the length is valid for the DE type
+        let encoded_len = de_type
+            .as_generic_de_type()
+            .encoded_len_for_actual_len(payload.len())
+            .map_err(|_| DeBundleError::InvalidLength)?;
+
+        Ok(DataElementBundle { de_type, data: payload, encoded_len, flavor: marker::PhantomData })
+    }
+
+    /// The data contained in the DE, excluding the header byte
+    pub(crate) fn contents_as_slice(&self) -> &[u8] {
+        self.data.as_slice()
+    }
+}
+
+/// Errors that can occur when building a [DataElementBundle]
+#[derive(Debug, PartialEq, Eq)]
+pub(crate) enum DeBundleError {
+    /// The DE type does not support the requested flavor
+    InvalidFlavor,
+    /// The data is too long to fit in a DE, or is invalid for the DE type
+    InvalidLength,
+}
+
+/// Implemented by higher-level types that represent data elements.
+pub trait ToDataElementBundle<F: PacketFlavor> {
+    /// Serialize `self` into the impl-specific byte encoding used for that DE type.
+    fn to_de_bundle(&self) -> DataElementBundle<F>;
+}
+
+// for cases where it's more convenient to already have a DataElementBundle than a DE
+impl<F: PacketFlavor> ToDataElementBundle<F> for DataElementBundle<F> {
+    fn to_de_bundle(&self) -> DataElementBundle<F> {
+        Self {
+            de_type: self.de_type,
+            data: self.data.clone(),
+            encoded_len: self.encoded_len,
+            flavor: marker::PhantomData,
+        }
+    }
+}
+
+// Biggest size a DE could possibly be is the entire payload
+#[derive(Clone, PartialEq, Eq, Debug)]
+struct DePayload {
+    payload: ArrayView<u8, { NP_MAX_DE_CONTENT_LEN }>,
+}
+
+impl DePayload {
+    /// The actual length of the payload
+    fn len(&self) -> DeActualLength {
+        self.payload
+            .len()
+            .try_into()
+            .expect("Payload is an array of the max size which always has a valid length")
+    }
+
+    fn as_slice(&self) -> &[u8] {
+        self.payload.as_slice()
+    }
+}
+
+impl From<ArrayView<u8, { NP_MAX_DE_CONTENT_LEN }>> for DePayload {
+    fn from(array: ArrayView<u8, { NP_MAX_DE_CONTENT_LEN }>) -> Self {
+        Self { payload: array }
+    }
+}
+
+/// Encode a DE type and length into a DE header byte.
+pub(crate) fn encode_de_header(de_type: DataElementType, header_len: DeEncodedLength) -> u8 {
+    // 4 high bits are length, 4 low bits are type
+    (header_len.as_u8() << 4) | de_type.type_code().as_u8()
+}
+
+/// Encode a DE type and length into a DE header byte.
+pub(crate) fn encode_de_header_actual_len(
+    de_type: DataElementType,
+    header_len: DeActualLength,
+) -> Result<u8, DeLengthOutOfRange> {
+    de_type
+        .encoded_len_for_actual_len(header_len)
+        // 4 high bits are length, 4 low bits are type
+        .map(|len| encode_de_header(de_type, len))
+}
+
+pub(crate) fn id_de_type_as_generic_de_type(
+    id_de_type: IdentityDataElementType,
+) -> DataElementType {
+    match id_de_type {
+        IdentityDataElementType::Private => DataElementType::PrivateIdentity,
+        IdentityDataElementType::Trusted => DataElementType::TrustedIdentity,
+        IdentityDataElementType::Public => DataElementType::PublicIdentity,
+        IdentityDataElementType::Provisioned => DataElementType::ProvisionedIdentity,
+    }
+}
diff --git a/nearby/presence/np_adv/src/legacy/serialize/tests.rs b/nearby/presence/np_adv/src/legacy/serialize/tests.rs
new file mode 100644
index 0000000..192b8f4
--- /dev/null
+++ b/nearby/presence/np_adv/src/legacy/serialize/tests.rs
@@ -0,0 +1,169 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+extern crate std;
+
+use crate::legacy::actions::FastPairSass;
+use crate::legacy::actions::NearbyShare;
+use crate::{
+    de_type::EncryptedIdentityDataElementType,
+    legacy::{actions::*, data_elements::*, serialize::*},
+    shared_data::TxPower,
+};
+use crypto_provider_default::CryptoProviderImpl;
+use ldt_np_adv::{salt_padder, LdtEncrypterXtsAes128, LegacySalt};
+use std::vec;
+
+#[test]
+fn public_identity_packet_serialization() {
+    let mut builder = AdvBuilder::new(PublicIdentity::default());
+
+    let tx_power = TxPower::try_from(3).unwrap();
+    let mut action = ActionBits::default();
+    action.set_action(NearbyShare::from(true));
+    builder.add_data_element(TxPowerDataElement::from(tx_power)).unwrap();
+    builder.add_data_element(ActionsDataElement::from(action)).unwrap();
+
+    let packet = builder.into_advertisement().unwrap();
+    assert_eq!(
+        &[
+            0x00, // Adv Header
+            0x03, // Public DE header
+            0x15, 0x03, // Tx Power DE with value 3
+            0x26, 0x00, 0x40, // Actions DE w/ bit 9
+        ],
+        packet.as_slice()
+    );
+}
+
+#[test]
+fn no_identity_packet_serialization() {
+    let mut builder = AdvBuilder::new(NoIdentity::default());
+
+    let tx_power = TxPower::try_from(3).unwrap();
+    let mut action = ActionBits::default();
+    action.set_action(NearbyShare::from(true));
+    builder.add_data_element(TxPowerDataElement::from(tx_power)).unwrap();
+    builder.add_data_element(ActionsDataElement::from(action)).unwrap();
+
+    let packet = builder.into_advertisement().unwrap();
+    assert_eq!(
+        &[
+            0x00, // Adv Header
+            0x15, 0x03, // Tx Power DE with value 3
+            0x26, 0x00, 0x40, // Actions DE w/ bit 9
+        ],
+        packet.as_slice()
+    );
+}
+
+#[test]
+fn packet_limits_capacity() {
+    let mut builder = AdvBuilder::new(PublicIdentity::default());
+    // 2 + 1 left out of 24 payload bytes
+    builder.len = 21;
+    let mut bits = ActionBits::default();
+    bits.set_action(NearbyShare::from(true));
+    bits.set_action(FastPairSass::from(true));
+
+    assert_eq!(Ok(()), builder.add_data_element(ActionsDataElement::from(bits)));
+
+    // too small for 2+ 1 DE
+    builder.len = 22;
+    assert_eq!(
+        Err(AddDataElementError::InsufficientAdvSpace),
+        builder.add_data_element(ActionsDataElement::from(bits))
+    );
+}
+
+#[test]
+fn ldt_packet_serialization() {
+    // don't care about the HMAC since we're not decrypting
+    let hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&[0; 32]);
+    let ldt = LdtEncrypterXtsAes128::<CryptoProviderImpl>::new(&hkdf.legacy_ldt_key());
+    let metadata_key = [0x33; 14];
+    let salt = LegacySalt::from([0x01, 0x02]);
+
+    let mut ciphertext = vec![];
+    ciphertext.extend_from_slice(&metadata_key);
+    // tx power & action DEs
+    ciphertext.extend_from_slice(&[0x15, 0x03, 0x26, 0x00, 0x10]);
+    ldt.encrypt(&mut ciphertext, &salt_padder::<16, CryptoProviderImpl>(salt)).unwrap();
+
+    let mut builder = AdvBuilder::new(LdtIdentity::<CryptoProviderImpl>::new(
+        EncryptedIdentityDataElementType::Private,
+        salt,
+        metadata_key,
+        ldt,
+    ));
+
+    let tx_power = TxPower::try_from(3).unwrap();
+    let mut action = ActionBits::default();
+    action.set_action(PhoneHub::from(true));
+    builder.add_data_element(TxPowerDataElement::from(tx_power)).unwrap();
+    builder.add_data_element(ActionsDataElement::from(action)).unwrap();
+
+    let packet = builder.into_advertisement().unwrap();
+    // header
+    let mut expected = vec![0x00];
+    // private header with five bytes after it
+    expected.push(0x51);
+    expected.extend_from_slice(salt.bytes());
+    expected.extend_from_slice(&ciphertext);
+    assert_eq!(&expected, packet.as_slice());
+}
+
+#[test]
+fn ldt_packet_cant_encrypt_without_des() {
+    let metadata_key = [0x33; 14];
+    let salt = LegacySalt::from([0x01, 0x02]);
+
+    let builder = AdvBuilder::new(LdtIdentity::<CryptoProviderImpl>::new(
+        EncryptedIdentityDataElementType::Private,
+        salt,
+        metadata_key,
+        LdtEncrypterXtsAes128::<CryptoProviderImpl>::new(
+            &np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&[0xFE; 32]).legacy_ldt_key(),
+        ),
+    ));
+
+    // not enough ciphertext
+    assert_eq!(Err(LdtPostprocessError::InvalidLength), builder.into_advertisement());
+}
+
+#[test]
+fn nearby_share_action() {
+    let mut builder = AdvBuilder::new(PublicIdentity::default());
+
+    let mut action = ActionBits::default();
+    action.set_action(NearbyShare::from(true));
+
+    let actions_de = ActionsDataElement::from(action);
+    builder.add_data_element(actions_de).unwrap();
+
+    let tx_power_de = TxPowerDataElement::from(TxPower::try_from(-100).unwrap());
+    builder.add_data_element(tx_power_de).unwrap();
+
+    assert_eq!(
+        &[
+            0x00, // version 0
+            0x03, // public identity
+            0x26, // length 2, DE type 6 for actions
+            0x00, 0x40, // bit 9 is active
+            0x15, // length 1, DE type 5 for tx power
+            0x9C, // tx power of -100
+        ],
+        builder.into_advertisement().unwrap().as_slice()
+    );
+}
diff --git a/nearby/presence/np_adv/src/lib.rs b/nearby/presence/np_adv/src/lib.rs
new file mode 100644
index 0000000..a6a155e
--- /dev/null
+++ b/nearby/presence/np_adv/src/lib.rs
@@ -0,0 +1,534 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//! Serialization and deserialization for v0 (legacy) and v1 (extended) Nearby Presence
+//! advertisements.
+//!
+//! See `tests/examples_v0.rs` and `tests/examples_v1.rs` for some tests that show common
+//! deserialization scenarios.
+
+#![no_std]
+#![forbid(unsafe_code)]
+#![deny(missing_docs)]
+
+extern crate alloc;
+extern crate core;
+use crate::{
+    credential::{
+        source::{BothCredentialSource, CredentialSource},
+        v0::V0CryptoMaterial,
+        MatchedCredFromCred, MatchedCredential, V0Credential, V1Credential,
+    },
+    extended::deserialize::{
+        parse_sections, CiphertextSection, DataElements, DecryptedSection, IntermediateSection,
+        PlaintextSection, Section, SectionDeserializeError,
+    },
+    legacy::deserialize::{
+        DecryptError, DecryptedAdvContents, IntermediateAdvContents, PlaintextAdvContents,
+    },
+};
+use alloc::vec::Vec;
+#[cfg(feature = "devtools")]
+use array_view::ArrayView;
+use core::{fmt::Debug, marker};
+use crypto_provider::CryptoProvider;
+#[cfg(feature = "devtools")]
+use extended::NP_ADV_MAX_SECTION_LEN;
+use legacy::{data_elements::DataElementDeserializeError, deserialize::AdvDeserializeError};
+use nom::{combinator, number};
+pub mod credential;
+pub mod de_type;
+#[cfg(test)]
+mod deser_v0_tests;
+#[cfg(test)]
+mod deser_v1_tests;
+pub mod extended;
+#[cfg(test)]
+mod header_parse_tests;
+pub mod legacy;
+pub mod shared_data;
+/// Canonical form of NP's service UUID.
+///
+/// Note that UUIDs are encoded in BT frames in little-endian order, so these bytes may need to be
+/// reversed depending on the host BT API.
+pub const NP_SVC_UUID: [u8; 2] = [0xFC, 0xF1];
+
+/// Parse, deserialize, decrypt, and validate a complete NP advertisement (the entire contents of
+/// the service data for the NP UUID).
+pub fn deserialize_advertisement<'s, C0, C1, M, S, P>(
+    adv: &[u8],
+    cred_source: &'s S,
+) -> Result<DeserializedAdvertisement<'s, M>, AdvDeserializationError>
+where
+    C0: V0Credential<Matched<'s> = M> + 's,
+    C1: V1Credential<Matched<'s> = M> + 's,
+    M: MatchedCredential<'s>,
+    S: BothCredentialSource<C0, C1>,
+    P: CryptoProvider,
+{
+    let (remaining, header) =
+        parse_adv_header(adv).map_err(|_e| AdvDeserializationError::HeaderParseError)?;
+    match header {
+        AdvHeader::V1(header) => {
+            deser_decrypt_v1::<C1, S::V1Source, P>(cred_source.v1(), remaining, header)
+                .map(DeserializedAdvertisement::V1)
+        }
+        AdvHeader::V0 => deser_decrypt_v0::<C0, S::V0Source, P>(cred_source.v0(), remaining)
+            .map(DeserializedAdvertisement::V0),
+    }
+}
+
+/// Parse, deserialize, decrypt, and validate a complete V0 NP advertisement (the entire contents
+/// of the service data for the NP UUID). If the advertisement version header does not match V0,
+/// this method will return an [`AdvDeserializationError::HeaderParseError`]
+pub fn deserialize_v0_advertisement<'s, C, S, P>(
+    adv: &[u8],
+    cred_source: &'s S,
+) -> Result<V0AdvertisementContents<'s, C>, AdvDeserializationError>
+where
+    C: V0Credential,
+    S: CredentialSource<C>,
+    P: CryptoProvider,
+{
+    let (remaining, header) =
+        parse_adv_header(adv).map_err(|_e| AdvDeserializationError::HeaderParseError)?;
+
+    match header {
+        AdvHeader::V0 => deser_decrypt_v0::<C, S, P>(cred_source, remaining),
+        AdvHeader::V1(_) => Err(AdvDeserializationError::HeaderParseError),
+    }
+}
+
+/// Parse, deserialize, decrypt, and validate a complete V1 NP advertisement (the entire contents
+/// of the service data for the NP UUID). If the advertisement version header does not match V1,
+/// this method will return an [`AdvDeserializationError::HeaderParseError`]
+pub fn deserialize_v1_advertisement<'s, C, S, P>(
+    adv: &[u8],
+    cred_source: &'s S,
+) -> Result<V1AdvertisementContents<'s, C>, AdvDeserializationError>
+where
+    C: V1Credential,
+    S: CredentialSource<C>,
+    P: CryptoProvider,
+{
+    let (remaining, header) =
+        parse_adv_header(adv).map_err(|_e| AdvDeserializationError::HeaderParseError)?;
+
+    match header {
+        AdvHeader::V0 => Err(AdvDeserializationError::HeaderParseError),
+        AdvHeader::V1(header) => deser_decrypt_v1::<C, S, P>(cred_source, remaining, header),
+    }
+}
+
+type V1AdvertisementContents<'s, C> = V1AdvContents<'s, MatchedCredFromCred<'s, C>>;
+
+/// The encryption scheme used for a V1 advertisement.
+#[derive(Debug, Clone, PartialEq, Eq)]
+pub enum V1EncryptionScheme {
+    /// Indicates MIC-based encryption and verification.
+    Mic,
+    /// Indicates signature-based encryption and verification.
+    Signature,
+}
+
+/// Error in decryption operations for `deser_decrypt_v1_section_bytes_for_dev_tools`.
+#[cfg(feature = "devtools")]
+#[derive(Debug, Clone)]
+pub enum AdvDecryptionError {
+    /// Cannot decrypt because the input section is not encrypted.
+    InputNotEncrypted,
+    /// Error parsing the given section.
+    ParseError,
+    /// No suitable credential found to decrypt the given section.
+    NoMatchingCredentials,
+}
+
+/// Decrypt, but do not further deserialize the v1 bytes, intended for developer tooling uses only.
+/// Production uses should use [deserialize_v1_advertisement] instead, which deserializes to a
+/// structured format and provides extra type safety.
+#[cfg(feature = "devtools")]
+pub fn deser_decrypt_v1_section_bytes_for_dev_tools<S, V1, P>(
+    cred_source: &S,
+    header_byte: u8,
+    section_bytes: &[u8],
+) -> Result<(ArrayView<u8, NP_ADV_MAX_SECTION_LEN>, V1EncryptionScheme), AdvDecryptionError>
+where
+    S: CredentialSource<V1>,
+    V1: V1Credential,
+    P: CryptoProvider,
+{
+    let header = V1Header { header_byte };
+    let int_sections =
+        parse_sections(&header, section_bytes).map_err(|_| AdvDecryptionError::ParseError)?;
+    let cipher_section = match &int_sections[0] {
+        IntermediateSection::Plaintext(_) => Err(AdvDecryptionError::InputNotEncrypted)?,
+        IntermediateSection::Ciphertext(section) => section,
+    };
+
+    use crate::credential::v1::V1CryptoMaterial;
+    use core::borrow::Borrow;
+
+    for cred in cred_source.iter() {
+        let crypto_material = cred.crypto_material();
+
+        match cipher_section {
+            CiphertextSection::SignatureEncryptedIdentity(encrypted_section) => {
+                let identity_resolution_material =
+                    crypto_material.signed_identity_resolution_material::<P>();
+                match encrypted_section.try_decrypt::<P>(identity_resolution_material.borrow()) {
+                    Ok(plaintext) => return Ok((plaintext, V1EncryptionScheme::Signature)),
+                    Err(_) => continue,
+                }
+            }
+            CiphertextSection::MicEncryptedIdentity(encrypted_section) => {
+                let identity_resolution_material =
+                    crypto_material.unsigned_identity_resolution_material::<P>();
+                let verification_material = crypto_material.unsigned_verification_material::<P>();
+                match encrypted_section
+                    .try_decrypt::<P>(identity_resolution_material.borrow(), &verification_material)
+                {
+                    Ok(plaintext) => return Ok((plaintext, V1EncryptionScheme::Mic)),
+                    Err(_) => continue,
+                }
+            }
+        }
+    }
+    Err(AdvDecryptionError::NoMatchingCredentials)
+}
+
+/// Deserialize and decrypt the contents of a v1 adv after the version header
+fn deser_decrypt_v1<'s, C, S, P>(
+    cred_source: &'s S,
+    remaining: &[u8],
+    header: V1Header,
+) -> Result<V1AdvertisementContents<'s, C>, AdvDeserializationError>
+where
+    C: V1Credential,
+    S: CredentialSource<C>,
+    P: CryptoProvider,
+{
+    let int_sections =
+        parse_sections(&header, remaining).map_err(|_| AdvDeserializationError::ParseError {
+            details_hazmat: AdvDeserializationErrorDetailsHazmat::AdvertisementDeserializeError,
+        })?;
+    let mut sections = Vec::new();
+    let mut to_decrypt = Vec::new();
+    // keep track of ordering for later sorting
+    for (idx, s) in int_sections.into_iter().enumerate() {
+        match s {
+            IntermediateSection::Plaintext(p) => {
+                sections.push((idx, V1DeserializedSection::Plaintext(p)))
+            }
+            IntermediateSection::Ciphertext(c) => to_decrypt.push((idx, c)),
+        }
+    }
+    let mut invalid_sections = 0;
+    // Hot loop
+    // We assume that iterating credentials is more expensive than iterating sections
+    for cred in cred_source.iter() {
+        let mut i = 0;
+        while i < to_decrypt.len() {
+            let (section_idx, c): &(usize, CiphertextSection) = &to_decrypt[i];
+            match c.try_deserialize::<C, P>(cred) {
+                Ok(s) => {
+                    sections.push((
+                        *section_idx,
+                        V1DeserializedSection::Decrypted(WithMatchedCredential::new(
+                            cred.matched(),
+                            s,
+                        )),
+                    ));
+                    // we don't care about maintaining order, so use O(1) remove
+                    to_decrypt.swap_remove(i);
+                    // don't advance i -- it now points to a new element
+                }
+                Err(e) => match e {
+                    SectionDeserializeError::IncorrectCredential => {
+                        // keep it around to try with another credential
+                        i += 1;
+                    }
+                    SectionDeserializeError::ParseError => {
+                        // the credential worked, but the section itself was bogus, so drop
+                        // it
+                        invalid_sections += 1;
+                        to_decrypt.swap_remove(i);
+                    }
+                },
+            }
+        }
+        if to_decrypt.is_empty() {
+            // no need to consider the remaining credentials
+            break;
+        }
+    }
+    invalid_sections += to_decrypt.len();
+    // decryption may produce sections out of order
+    sections.sort_by_key(|(idx, _section)| *idx);
+    Ok(V1AdvContents::new(sections.into_iter().map(|(_idx, s)| s).collect(), invalid_sections))
+}
+
+type V0AdvertisementContents<'s, C> = V0AdvContents<'s, MatchedCredFromCred<'s, C>>;
+
+/// Deserialize and decrypt the contents of a v0 adv after the version header
+fn deser_decrypt_v0<'s, C, S, P>(
+    cred_source: &'s S,
+    remaining: &[u8],
+) -> Result<V0AdvertisementContents<'s, C>, AdvDeserializationError>
+where
+    C: V0Credential,
+    S: CredentialSource<C>,
+    P: CryptoProvider,
+{
+    let contents = legacy::deserialize::deserialize_adv_contents::<P>(remaining)?;
+    return match contents {
+        IntermediateAdvContents::Plaintext(p) => Ok(V0AdvContents::Plaintext(p)),
+        IntermediateAdvContents::Ciphertext(c) => {
+            for cred in cred_source.iter() {
+                let cm = cred.crypto_material();
+                let ldt = cm.ldt_adv_cipher::<P>();
+                match c.try_decrypt(&ldt) {
+                    Ok(c) => {
+                        return Ok(V0AdvContents::Decrypted(WithMatchedCredential::new(
+                            cred.matched(),
+                            c,
+                        )))
+                    }
+                    Err(e) => match e {
+                        DecryptError::DecryptOrVerifyError => continue,
+                        DecryptError::DeserializeError(e) => {
+                            return Err(e.into());
+                        }
+                    },
+                }
+            }
+            Ok(V0AdvContents::NoMatchingCredentials)
+        }
+    };
+}
+/// Parse a NP advertisement header.
+///
+/// This can be used on all versions of advertisements since it's the header that determines the
+/// version.
+///
+/// Returns a `nom::IResult` with the parsed header and the remaining bytes of the advertisement.
+fn parse_adv_header(adv: &[u8]) -> nom::IResult<&[u8], AdvHeader> {
+    // header bits: VVVxxxxx
+    let (remaining, (header_byte, version, _low_bits)) = combinator::verify(
+        // splitting a byte at a bit boundary to take lower 5 bits
+        combinator::map(number::complete::u8, |byte| (byte, byte >> 5, byte & 0x1F)),
+        |&(_header_byte, version, low_bits)| match version {
+            // reserved bits, for any version, must be zero
+            PROTOCOL_VERSION_LEGACY | PROTOCOL_VERSION_EXTENDED => low_bits == 0,
+            _ => false,
+        },
+    )(adv)?;
+    match version {
+        PROTOCOL_VERSION_LEGACY => Ok((remaining, AdvHeader::V0)),
+        PROTOCOL_VERSION_EXTENDED => Ok((remaining, AdvHeader::V1(V1Header { header_byte }))),
+        _ => unreachable!(),
+    }
+}
+#[derive(Debug, PartialEq, Eq, Clone)]
+pub(crate) enum AdvHeader {
+    V0,
+    V1(V1Header),
+}
+/// An NP advertisement with its header parsed.
+#[derive(Debug, PartialEq, Eq)]
+pub enum DeserializedAdvertisement<'m, M: MatchedCredential<'m>> {
+    /// V0 header has all reserved bits, so there is no data to represent other than the version
+    /// itself.
+    V0(V0AdvContents<'m, M>),
+    /// V1 advertisement
+    V1(V1AdvContents<'m, M>),
+}
+/// The contents of a deserialized and decrypted V1 advertisement.
+#[derive(Debug, PartialEq, Eq)]
+pub struct V1AdvContents<'m, M: MatchedCredential<'m>> {
+    sections: Vec<V1DeserializedSection<'m, M>>,
+    invalid_sections: usize,
+}
+impl<'m, M: MatchedCredential<'m>> V1AdvContents<'m, M> {
+    fn new(sections: Vec<V1DeserializedSection<'m, M>>, invalid_sections: usize) -> Self {
+        Self { sections, invalid_sections }
+    }
+    /// Destructures this V1 advertisement into just the sections
+    /// which could be successfully deserialized and decrypted
+    pub fn into_valid_sections(self) -> Vec<V1DeserializedSection<'m, M>> {
+        self.sections
+    }
+    /// The sections that could be successfully deserialized and decrypted
+    pub fn sections(&self) -> impl Iterator<Item = &V1DeserializedSection<M>> {
+        self.sections.iter()
+    }
+    /// The number of sections that could not be parsed or decrypted.
+    pub fn invalid_sections_count(&self) -> usize {
+        self.invalid_sections
+    }
+}
+/// Advertisement content that was either already plaintext or has been decrypted.
+#[derive(Debug, PartialEq, Eq)]
+pub enum V0AdvContents<'m, M: MatchedCredential<'m>> {
+    /// Contents of an originally plaintext advertisement
+    Plaintext(PlaintextAdvContents),
+    /// Contents that was ciphertext in the original advertisement, and has been decrypted
+    /// with the credential in the [MatchedCredential]
+    Decrypted(WithMatchedCredential<'m, M, DecryptedAdvContents>),
+    /// The advertisement was encrypted, but no credentials matched
+    NoMatchingCredentials,
+}
+/// Advertisement content that was either already plaintext or has been decrypted.
+#[derive(Debug, PartialEq, Eq)]
+pub enum V1DeserializedSection<'m, M: MatchedCredential<'m>> {
+    /// Section that was plaintext in the original advertisement
+    Plaintext(PlaintextSection),
+    /// Section that was ciphertext in the original advertisement, and has been decrypted
+    /// with the credential in the [MatchedCredential]
+    Decrypted(WithMatchedCredential<'m, M, DecryptedSection>),
+}
+impl<'m, M> Section for V1DeserializedSection<'m, M>
+where
+    M: MatchedCredential<'m>,
+{
+    type Iterator<'d>  = DataElements<'d> where Self: 'd;
+    fn data_elements(&'_ self) -> Self::Iterator<'_> {
+        match self {
+            V1DeserializedSection::Plaintext(p) => p.data_elements(),
+            V1DeserializedSection::Decrypted(d) => d.contents.data_elements(),
+        }
+    }
+}
+/// Decrypted advertisement content with the [MatchedCredential] from the credential that decrypted
+/// it.
+#[derive(Debug, PartialEq, Eq)]
+pub struct WithMatchedCredential<'m, M: MatchedCredential<'m>, T> {
+    matched: M,
+    contents: T,
+    // the compiler sees 'm as unused
+    marker: marker::PhantomData<&'m ()>,
+}
+impl<'m, M: MatchedCredential<'m>, T> WithMatchedCredential<'m, M, T> {
+    fn new(matched: M, contents: T) -> Self {
+        Self { matched, contents, marker: marker::PhantomData }
+    }
+    /// Credential data for the credential that decrypted the content.
+    pub fn matched_credential(&self) -> &M {
+        &self.matched
+    }
+    /// The decrypted advertisement content.
+    pub fn contents(&self) -> &T {
+        &self.contents
+    }
+}
+/// Data in a V1 advertisement header.
+#[derive(Debug, PartialEq, Eq, Clone)]
+pub(crate) struct V1Header {
+    header_byte: u8,
+}
+const PROTOCOL_VERSION_LEGACY: u8 = 0;
+const PROTOCOL_VERSION_EXTENDED: u8 = 1;
+
+/// Errors that can occur during advertisement deserialization.
+#[derive(PartialEq)]
+pub enum AdvDeserializationError {
+    /// The advertisement header could not be parsed
+    HeaderParseError,
+    /// The advertisement content could not be parsed
+    ParseError {
+        /// Potentially hazardous details about deserialization errors. Read the documentation for
+        /// [AdvDeserializationErrorDetailsHazmat] before using this field.
+        details_hazmat: AdvDeserializationErrorDetailsHazmat,
+    },
+}
+
+impl Debug for AdvDeserializationError {
+    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
+        match self {
+            AdvDeserializationError::HeaderParseError => write!(f, "HeaderParseError"),
+            AdvDeserializationError::ParseError { .. } => write!(f, "ParseError"),
+        }
+    }
+}
+
+/// Potentially hazardous details about deserialization errors. These error information can
+/// potentially expose side-channel information about the plaintext of the advertisements and/or
+/// the keys used to decrypt them. For any place that you avoid exposing the keys directly
+/// (e.g. across FFIs, print to log, etc), avoid exposing these error details as well.
+#[derive(PartialEq)]
+pub enum AdvDeserializationErrorDetailsHazmat {
+    /// Parsing the overall advertisement or DE structure failed
+    AdvertisementDeserializeError,
+    /// Deserializing an individual DE from its DE contents failed
+    V0DataElementDeserializeError(DataElementDeserializeError),
+    /// Must not have any other top level data elements if there is an encrypted identity DE
+    TooManyTopLevelDataElements,
+    /// Must not have an identity DE inside an identity DE
+    InvalidDataElementHierarchy,
+}
+
+impl From<AdvDeserializeError> for AdvDeserializationError {
+    fn from(err: AdvDeserializeError) -> Self {
+        match err {
+            AdvDeserializeError::AdvertisementDeserializeError => {
+                AdvDeserializationError::ParseError {
+                    details_hazmat:
+                        AdvDeserializationErrorDetailsHazmat::AdvertisementDeserializeError,
+                }
+            }
+            AdvDeserializeError::DataElementDeserializeError(e) => {
+                AdvDeserializationError::ParseError {
+                    details_hazmat:
+                        AdvDeserializationErrorDetailsHazmat::V0DataElementDeserializeError(e),
+                }
+            }
+            AdvDeserializeError::TooManyTopLevelDataElements => {
+                AdvDeserializationError::ParseError {
+                    details_hazmat:
+                        AdvDeserializationErrorDetailsHazmat::TooManyTopLevelDataElements,
+                }
+            }
+            AdvDeserializeError::InvalidDataElementHierarchy => {
+                AdvDeserializationError::ParseError {
+                    details_hazmat:
+                        AdvDeserializationErrorDetailsHazmat::InvalidDataElementHierarchy,
+                }
+            }
+        }
+    }
+}
+
+/// DE length is out of range (e.g. > 4 bits for encoded V0, > max DE size for actual V0, >127 for
+/// V1) or invalid for the relevant DE type.
+#[derive(Debug, PartialEq, Eq)]
+pub struct DeLengthOutOfRange;
+
+/// The identity mode for a deserialized plaintext section or advertisement.
+#[derive(PartialEq, Eq, Debug, Clone, Copy)]
+pub enum PlaintextIdentityMode {
+    /// No identity DE was present in the section
+    None,
+    /// A "Public Identity" DE was present in the section
+    Public,
+}
+
+/// A "public identity" -- a nonspecific "empty identity".
+///
+/// Used when serializing V0 advertisements or V1 sections.
+#[derive(Default, Debug)]
+pub struct PublicIdentity {}
+
+/// The lack of any identity information whatsoever, which is distinct from [PublicIdentity].
+///
+/// Used when serializing V0 advertisements or V1 sections.
+#[derive(Default, Debug)]
+pub struct NoIdentity {}
diff --git a/nearby/presence/np_adv/src/shared_data.rs b/nearby/presence/np_adv/src/shared_data.rs
new file mode 100644
index 0000000..b511ed2
--- /dev/null
+++ b/nearby/presence/np_adv/src/shared_data.rs
@@ -0,0 +1,77 @@
+// Copyright 2022 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Data types shared between V0 and V1 advertisements
+
+/// Power in dBm, calibrated as per
+/// [Eddystone](https://github.com/google/eddystone/tree/master/eddystone-uid#tx-power)
+#[derive(Debug, PartialEq, Eq, Clone)]
+pub struct TxPower {
+    /// Power in `[-100, 20]`
+    power: i8,
+}
+
+impl TxPower {
+    /// Power in `[-100, 20]`
+    pub fn as_i8(&self) -> i8 {
+        self.power
+    }
+}
+
+impl TryFrom<i8> for TxPower {
+    type Error = TxPowerOutOfRange;
+
+    fn try_from(value: i8) -> Result<Self, Self::Error> {
+        if !(-100..=20).contains(&value) {
+            Err(TxPowerOutOfRange)
+        } else {
+            Ok(TxPower { power: value })
+        }
+    }
+}
+
+/// Tx power was out of the valid range `[-100, 20]`.
+#[derive(Debug)]
+pub struct TxPowerOutOfRange;
+
+/// MDP's context sync number, used to inform other devices that they have stale context.
+#[derive(Debug, PartialEq, Eq, Clone, Copy)]
+pub struct ContextSyncSeqNum {
+    /// 4-bit sequence
+    num: u8,
+}
+
+impl ContextSyncSeqNum {
+    /// Returns the context seq num as a u8
+    pub fn as_u8(&self) -> u8 {
+        self.num
+    }
+}
+
+impl TryFrom<u8> for ContextSyncSeqNum {
+    type Error = ContextSyncSeqNumOutOfRange;
+
+    fn try_from(value: u8) -> Result<Self, Self::Error> {
+        // must only have low nibble
+        if value > 0x0F {
+            Err(ContextSyncSeqNumOutOfRange)
+        } else {
+            Ok(ContextSyncSeqNum { num: value })
+        }
+    }
+}
+
+/// Seq num must be in `[0-15]`.
+#[derive(Debug)]
+pub struct ContextSyncSeqNumOutOfRange;
diff --git a/nearby/presence/np_adv/test.json b/nearby/presence/np_adv/test.json
new file mode 100644
index 0000000..953eebf
--- /dev/null
+++ b/nearby/presence/np_adv/test.json
@@ -0,0 +1,24122 @@
+[
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8CDE04CBC59C9134F37B1FFBCF5C1136",
+    "aes_key": "0C04AAE1338E928EA903CAF2FD806749",
+    "data_elements": [
+      {
+        "contents": "3DF2D0883246D50B5C981ADB",
+        "de_type": 163
+      },
+      {
+        "contents": "5628511D93E01312D69F5484",
+        "de_type": 317
+      },
+      {
+        "contents": "C255FFF1D4F8501E3467B084BDD124DF26",
+        "de_type": 721
+      }
+    ],
+    "encoded_section": "69901356E7F8215A0B45D559EFD0EE88A6398B911000C807A0FFE7C79ABD61B1862AFBD097AF9001D042A9F585F02B4DE34C7412A717A08034ECDC1862BB599B6CD7CD3F95D191135555C01A0D1A71EBF2593213E9439552D625736E024EADFA950BA7B78D6AD844AD0A",
+    "identity_type": "private",
+    "iv": "2170459EF8C3E6DB3BFB808B62A5D03E",
+    "key_seed": "43A340DE5AFC350888FB696FC77D8CB0467668F18E7EDCB8CC3AC2F59F075ACB",
+    "metadata_key": "593580A4B65DEF1E6B117C8055CB6257",
+    "section_mic_hmac_key": "CDB8526FA8BEC42B51495EEA23F347B2F8E07A757DF63FE9C5C9100E8EB39435",
+    "section_salt": "C807A0FFE7C79ABD61B1862AFBD097AF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8630E9D33F2AB78558BB4AF5C09F4C9E",
+    "aes_key": "E9FE3EF4069698F338256E23AAC08029",
+    "data_elements": [
+      {
+        "contents": "C70548D64F0D131D8551D3C2B3",
+        "de_type": 448
+      },
+      {
+        "contents": "E4EAA94038A8B4A0D46C83695DABC05262C7DA5ED2395B673527C5C337",
+        "de_type": 859
+      }
+    ],
+    "encoded_section": "6790134C7B6E97BE50C21ADAEE4D5EC611313B911000A6C0ECE0A9D25663F329C6C218D07CB59004603C46143E88C0F872F341BE2C06FB4DF9ECF1A970CAFBCD5315C9D8389770E627D3C913690256AA8BD753910DBB4FEA57E8AC5125E5B906CA0E0DF17081F34D",
+    "identity_type": "provisioned",
+    "iv": "39201C314CBC2D3F88EE094E627E7ADC",
+    "key_seed": "83FEF3C4A9E58DAA566F19AECC7C9CEE6EA4BA37F360EE8A40A26FBB99938F4B",
+    "metadata_key": "90A529D185FE0105D76179ED5AC841C8",
+    "section_mic_hmac_key": "8466111DFC334299442A84F91E3F6616C1023F2A29C72670C483F2445C18B75A",
+    "section_salt": "A6C0ECE0A9D25663F329C6C218D07CB5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6FB3720F743A68E6474B1459990DFAC6",
+    "aes_key": "A2E0437B429330BF82B8BA3B2B762770",
+    "data_elements": [
+      {
+        "contents": "13851601256B24E7",
+        "de_type": 404
+      },
+      {
+        "contents": "82FAAF4977AE0B80EAAC",
+        "de_type": 81
+      },
+      {
+        "contents": "C9B19F78DDF6FD66AA623267E9656C2E1EEB9F0F8253B1041626",
+        "de_type": 152
+      },
+      {
+        "contents": "EFD96E20D81B0ACD",
+        "de_type": 474
+      },
+      {
+        "contents": "2120F35E2B9EB9D5027BDC",
+        "de_type": 264
+      }
+    ],
+    "encoded_section": "8490137D769DEFAA2E8B1BCD01332139B1F4F99110008F7DCA2DC4146183C14177A6F847468B90043E07B7A107CC2C88A183F2D8D5A6C4A6119DFCB0603F251F3994F0468C56F2014A98BEF0881B342F28E7E83B89EBB28E2E54D88B0AAFEB4FDE73F8C8D918E818ED997A0CFB3ED6344189D0A06F4FDD3F780FC6E87421578FF68B06E6E0",
+    "identity_type": "provisioned",
+    "iv": "52A7C3FC58494668CB193C7C583AB583",
+    "key_seed": "D0B97B7B4CB8CF85A9E707ADD592E017BD7B3964F59801EA9A08DEB3E8A3EA47",
+    "metadata_key": "6AF91918569B21EC14C90B099284EEED",
+    "section_mic_hmac_key": "EA04A0F8FF46882A8B759E7E9D53CAAF2D847C393B5A47F6AA4284DA1BF8CF11",
+    "section_salt": "8F7DCA2DC4146183C14177A6F847468B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6F144BE070388B857B001873992CA0EF",
+    "aes_key": "0165985CBCA678350F250112E1354FCE",
+    "data_elements": [
+      {
+        "contents": "B6D2CE67C704514BB9F370812B470A56BA4BDD",
+        "de_type": 164
+      },
+      {
+        "contents": "49DCA454994B399B9914768E457F",
+        "de_type": 701
+      },
+      {
+        "contents": "FBD41AC2FCBB9B47F6B04863B8139AE83A9AF049A137F2A766",
+        "de_type": 466
+      },
+      {
+        "contents": "73A400CB6E36EB45BD1AE7",
+        "de_type": 172
+      },
+      {
+        "contents": "1113B990D3D4B31D4CEEFB849F8CAFD01A82968A61",
+        "de_type": 725
+      }
+    ],
+    "encoded_section": "A09013988012579D82091B81D39640A1F4B47891100077789262A428CFE712797C28D85A644A90021BBE826D956C08B86149427A8EFA6D801523C348FA78AF09433AF1A947269D58CDCA26055838209A01615CB0FFD9C55234D2EF9805FCB1FF8ED66137B2DE6A8C34F57F6FAC98645D1C482E851C77BFB1ACBB5A22E2CA297BAD14CAD0C08E4C8424C7A6E683C7EE8392A091DD9217DD6E5396D3644F01EF3CAE",
+    "identity_type": "trusted",
+    "iv": "7BAE887BD9B8BE99864343D585848A63",
+    "key_seed": "70CC58965C36307BE580E2793ACDC8D792FCFE8B17392B4F0B7A6ABC31D3CF02",
+    "metadata_key": "E503087FCE974FEDCC3290C2ABC2AF15",
+    "section_mic_hmac_key": "173560AC7513A51677C06801D39CE68B2E32F6BA7C02364800EF73AE27916ACC",
+    "section_salt": "77789262A428CFE712797C28D85A644A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BD864BCB86CC4FAFA1DF15D05C693F70",
+    "aes_key": "B7A853164A7D88165F7044725DE648FC",
+    "data_elements": [
+      {
+        "contents": "B6A9A4926FEDFDE5D8D870BA06144690",
+        "de_type": 175
+      },
+      {
+        "contents": "B8C403AC879A7EBB6D69458D",
+        "de_type": 720
+      }
+    ],
+    "encoded_section": "5990139BE32BB50428F39C6510AB0BCAE0A4519110002542EBE3983FF77643536AF98A47BDFE9001D2EFF80C4D9A6391063A16F2E989F5C02424E527596A15A5E2424EEA7317214FEEC57E1C28E1F47C8BE40C43839BD6CC2EE1",
+    "identity_type": "private",
+    "iv": "F1411FAE6BBB7AF0F798EF7898C1A026",
+    "key_seed": "15C3A38E12E82DE3D05867A72C09259B2F163E0F7E2B900013FD9589E4FCB08B",
+    "metadata_key": "BEF599A91BB40E6A3A12D69AA8AA40D5",
+    "section_mic_hmac_key": "B268F77855AAFA3A0AEC62CEF115FAF98C4616536512F7AD13EBAA17CC36237E",
+    "section_salt": "2542EBE3983FF77643536AF98A47BDFE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C4112B2B6BC0C275800AF30E221E029A",
+    "aes_key": "CB3E8DA92E33B125E206698CCDDB4E17",
+    "data_elements": [
+      {
+        "contents": "99A2BBD12EA3D487BA35A47215",
+        "de_type": 374
+      },
+      {
+        "contents": "3B4AD8B0AC9370A0DBECE41039A7C136D66AE40E251A274483E1E04B",
+        "de_type": 322
+      },
+      {
+        "contents": "3B5465ABD3AB9E51E37FE1825D19EBCB6D75",
+        "de_type": 882
+      },
+      {
+        "contents": "C3303DEB37C1CBF6F2D83CF60B5AAE7343",
+        "de_type": 508
+      },
+      {
+        "contents": "5AC15AF945563810514171B4D3CF13EB7CD056ED84CC4AD84E5C8C",
+        "de_type": 734
+      }
+    ],
+    "encoded_section": "AD9013C80618AEF0E93826CCBB9F1FC3CA1D2E911000BA4390D760820DE7D19BDD18E12105A99001E4F5385E499355B62DC8EB87A3B4B44BF0A799A099FF59F83CF7042DC080D469575ECB02FD8DC04FB60539411A4142E3386DDB945F456D90F6104B6D5893E7697CCB294A98597A07EDA2FA2A1B5C92DC85F720DCCC7B4F25639F1A8E912041148020E7EF5DBFDB6455C1DEF20F9B7A14218826843B218FA12FEC92D0AC0C0664304BF11B3962",
+    "identity_type": "private",
+    "iv": "E39A28DAC41BAE56D9C38A90DE18970E",
+    "key_seed": "F8956985D12A7454C239C35BD7F5B98FED6987FE6097F27888DC942E9B4F5BAE",
+    "metadata_key": "0DFAB0A1A5C1F1FB82F4E19C387EF630",
+    "section_mic_hmac_key": "D52D92CED4F96F98A96CDE0CBCBA70D22D695FE28A792490C9EC8AD3D7C512E4",
+    "section_salt": "BA4390D760820DE7D19BDD18E12105A9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C8281FAD7EBE43124AD3E52A64BDFC08",
+    "aes_key": "37FEED11494EC97655A7CDFAAFA0B332",
+    "data_elements": [
+      {
+        "contents": "2FEB5C0E9CB50EA61479D2",
+        "de_type": 182
+      },
+      {
+        "contents": "",
+        "de_type": 76
+      },
+      {
+        "contents": "EDFE252EC0AF1BCF3203E68626BD87DC210591FB4087E5",
+        "de_type": 186
+      },
+      {
+        "contents": "F3B28EE0AA3540",
+        "de_type": 53
+      }
+    ],
+    "encoded_section": "6A901326C139F9297299F3291C4C5449667C1E9110001C4A655CE96B261144D0DC30EEB06E819001ED20997FF72B0145678564A0823492B38F82A2908345E56312025794BFAB4154F007A7B8B672F38D5D78E5E201BB839A44D8E5819E8EE1563FF02619DBB4F3179D5719",
+    "identity_type": "private",
+    "iv": "6DD5002B0EC75F051EC1C94C9C5BD7DC",
+    "key_seed": "4E462ABDDDE34121284FE9958F24C16DBA38929E38A34F2019783CDAD5E08706",
+    "metadata_key": "AFEB6946137C5F406D7849DBC57AEA66",
+    "section_mic_hmac_key": "8C3FF0042FD0E1C4145EFCD9A7A84D636B6A58BE736B10AF391C72DB7B4CE6B7",
+    "section_salt": "1C4A655CE96B261144D0DC30EEB06E81"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E64361FB1C8C7325B408FAEE1E49547A",
+    "aes_key": "7BBC46B2F18B3D283060D0A697FD11CD",
+    "data_elements": [
+      {
+        "contents": "9E4B0F0E1E5F8B4A48E6E85204B7B761BB77C2B8E9D87A",
+        "de_type": 398
+      },
+      {
+        "contents": "4DA86FD08563540F21F4D25BC7B6C8FFE5D0C256F695231A9758CB",
+        "de_type": 536
+      },
+      {
+        "contents": "0EF79DA8BA03209867C317EE62ED67FE793C10338A07C7509E5B394A",
+        "de_type": 892
+      },
+      {
+        "contents": "E5282DD8F645D9C437993F0B64E1C0126B51",
+        "de_type": 44
+      }
+    ],
+    "encoded_section": "A2901389A25CC355CD62CBE4A5003ACDF8EE059110002E283829FBEBE221CF9A1F91C1B0BD1D900171AB8293D624A4D2BE56FDE47583BBD8845F3855B25932CD6A1DCA7098797D301AFBFCF9A4A8A806E391C54F110D1B9D80A21CB9769249E819530E57270E20135F0406FC4C0BB0BBFB5EF126993AEE724E98B9E92A5B6992F8298B8C4FDC7D631588EAB84DD79BD92555DCD93E5FACC5EC36EB8B9F8DF0AB62F718",
+    "identity_type": "private",
+    "iv": "A926171CE5153CBD347A51C9978CE93F",
+    "key_seed": "F36B60BF6F555557AA212FC62B5C02A13C9C2BA4DF41EDD5A72F16AE66D236AD",
+    "metadata_key": "BB668D0081DBF606A285AD033DE92814",
+    "section_mic_hmac_key": "91908BF2F777B922CC1CC476A770C7FCAECCE0DE0B2A8F95FE44D507024B93A2",
+    "section_salt": "2E283829FBEBE221CF9A1F91C1B0BD1D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9DB5D8E94ABD7216DABD6C8F66C5F52F",
+    "aes_key": "75EB4826F32F9F8B7328CB265FDE141A",
+    "data_elements": [],
+    "encoded_section": "379013542EB74608EA671B4B9C539D5DAC9E0B911000371E5AA6A854D8B34632AF62FB16F9E39002958BD9049E4B9D49DB40BFB15A1DEB0C",
+    "identity_type": "trusted",
+    "iv": "FE2F66ADC508DBE090043C56A1D4CC2F",
+    "key_seed": "5694BC71EA736D6F1C9F9CB3F7359AF337754178D62E0CB2C8305813F7334036",
+    "metadata_key": "D7DF4817E2E00574C1CF3B5BA51411C3",
+    "section_mic_hmac_key": "B6CF96993547CD0B865BA29ACD9E7989CCA2A2CCFD940E81C97A613423F34D2B",
+    "section_salt": "371E5AA6A854D8B34632AF62FB16F9E3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "815CAF890EB0DEA3D861BE22C7BE8485",
+    "aes_key": "34D85A4581FF6A69DBBD8CD74D881E2A",
+    "data_elements": [
+      {
+        "contents": "8E976835BD38B761F8F5C5E3",
+        "de_type": 175
+      }
+    ],
+    "encoded_section": "469013F70BA8EF34F0B010A6EDFF3E02486FFB91100057434E8D7DA6137D885EE4B43DA850B09001367A8D04108F605A363DDE7A55DBC6D28C92FE23A27E7D70FF072A469793CD",
+    "identity_type": "private",
+    "iv": "0F43CBDBB69194C72762C45B8A959AE2",
+    "key_seed": "9DCDB616C7824FE6E29EDEE371A1F019AB9035DEA6A2FAEED01086EB7C7BA56E",
+    "metadata_key": "386504600FDC6BB6D29B931F997569C3",
+    "section_mic_hmac_key": "40CCE5D2E8BD439CE407FADC7D03C1E5E3EE7BDB2AE09C3DAEEDBCD383994AAC",
+    "section_salt": "57434E8D7DA6137D885EE4B43DA850B0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "20AA489B07F54A47398F0D452085BA80",
+    "aes_key": "70E8FE98FC7B2F2BAF0F571C5A6CA285",
+    "data_elements": [
+      {
+        "contents": "895FC4C4D7C5327B823935153EE5",
+        "de_type": 603
+      }
+    ],
+    "encoded_section": "489013E548BFD8D8BF4BABE9BBA791575D88F0911000EA0BC8652F833AA286C9B67BDBEEFFDD90012C035FA41FD24BC9E2154A4A746EC39BD898F5AC0D626F6FDC9EC1625F4A6E0278",
+    "identity_type": "private",
+    "iv": "27675AE693055520D818FA2DF75BA1DD",
+    "key_seed": "7BE2B5351B3AF721D834EFC7D92EDCFBB356CD30C149CFF13FFA6BB9E9EB4E9E",
+    "metadata_key": "C51BF8A84C682176009DAFC96E45E52A",
+    "section_mic_hmac_key": "63BB6F972081FE41233CC4657536A17D3DA9AC374FCCAAE4A390FBB9467E6B10",
+    "section_salt": "EA0BC8652F833AA286C9B67BDBEEFFDD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E7BF03DDA652D45DE79BEC7C63C52888",
+    "aes_key": "DEC78F8DAAD1135EDA4BA73CA2EDDE93",
+    "data_elements": [
+      {
+        "contents": "CA",
+        "de_type": 831
+      },
+      {
+        "contents": "0681689828FE001F46FB",
+        "de_type": 640
+      },
+      {
+        "contents": "A0",
+        "de_type": 925
+      },
+      {
+        "contents": "6EF5787D1B7E",
+        "de_type": 821
+      }
+    ],
+    "encoded_section": "559013122F1A904EE013BF5054BD17CB565C7B911000BA917BAFABA916680B68E584D7B3C74F9002124726B3336C5A2E714BDA406F4ECAE6942867CFB87D060B7CA2B90E553A7980483C575AA8F669191B6652D622FF",
+    "identity_type": "trusted",
+    "iv": "5623FFAEE945A52FED893932E2C2831B",
+    "key_seed": "EB421B623B6601022B06C3B84A805B0BECB369AC96BDDB227D35F720BB88E54D",
+    "metadata_key": "481736D7E51E562209CB88D5098D7AB8",
+    "section_mic_hmac_key": "73839ABE23D964F432D5109E0FD1AF2B7458ACA6C4FC8C81B00F17697ADC7140",
+    "section_salt": "BA917BAFABA916680B68E584D7B3C74F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C4F478C39E6822FD65B039A579058329",
+    "aes_key": "942E583271C5BAB68F5A289F13B4AD3D",
+    "data_elements": [
+      {
+        "contents": "6740DA0B7D7422B46668B2A4748EF1723D4740177B561E28",
+        "de_type": 25
+      },
+      {
+        "contents": "57673A8C3CA46CFBA015193726BA9D1B87C155F230",
+        "de_type": 157
+      },
+      {
+        "contents": "966C4FDAFD61602A93A588FCC9E9",
+        "de_type": 997
+      }
+    ],
+    "encoded_section": "7A9013E8068D3273AD4073892EC5B38DFE7A85911000F20408CF4792B57C5EAB5F364D498024900485D9D787000902A41BF9B32EBE0B9BC5457E424445793F00C68FF17BA783444CED2BC3DF3E7FD930C5D53A8FF8A279DBD838FEA95D0DB5047C90A20128D099424453872597B42EC79617D8460C78EFCDD06166",
+    "identity_type": "provisioned",
+    "iv": "97A725CAFF2ECB63466FC4FE92F1D93F",
+    "key_seed": "3B1148D64481A45A5ED6A0C71204CE9EFBBBFB24772F4376D14A60809095A80C",
+    "metadata_key": "E356AB5D0B7B4A162CFFB3DC9200B03E",
+    "section_mic_hmac_key": "622F90CBC74C39F7E270CCFEDC73CC2501A788B6233CE65018C90D315EB1B5BC",
+    "section_salt": "F20408CF4792B57C5EAB5F364D498024"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E3E029E6CCC13E76F6537200F6FE6609",
+    "aes_key": "13395363678EB859D922B0AC513D569D",
+    "data_elements": [
+      {
+        "contents": "E88903",
+        "de_type": 1
+      },
+      {
+        "contents": "9177F23C1703",
+        "de_type": 498
+      }
+    ],
+    "encoded_section": "449013DAEF852821B69637E7ECB1814AA11E6E911000C35F60118757A8DC6AC94A3145568E2C900258CBCB74090D6AEB5721940B6889ED4C3C225551A6693E6011097D84BD",
+    "identity_type": "trusted",
+    "iv": "FECC334DA28A05283126BB74D6D86328",
+    "key_seed": "836FC0759CA3CBB83B1DC440AAC7EA8832723A1804CCF55FA82B3DE62CF6EF94",
+    "metadata_key": "108F487561268EC3E2139081F2C18B93",
+    "section_mic_hmac_key": "1FAB84D97BFBBA1E719918D561F9F49A7190014740FDD66FD6521884BF997D91",
+    "section_salt": "C35F60118757A8DC6AC94A3145568E2C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "ED9AB8CBA38B0378A57060CAEEB7DC37",
+    "aes_key": "85016D4CE263E72594660319A4008F5C",
+    "data_elements": [],
+    "encoded_section": "37901315D82A68468424FC66C3F583A599E184911000484C4A72DC77F3D141DFD0251501313C900421DAA8789829C8B74D5A81CD5E003B97",
+    "identity_type": "provisioned",
+    "iv": "91A3EBC0493D70CC75CD52A15EDE7EE1",
+    "key_seed": "DC9A2935DA138DBA468602F58BA4C10B2CA2073931C2CD76EB89BE9E0C62EC35",
+    "metadata_key": "6B7B939EC1DFD9DFB28A5AF4834D9837",
+    "section_mic_hmac_key": "A37F2450D25ECFEB5F5BA3B902280E75A8CD266E134AFA52489EC23247D191A0",
+    "section_salt": "484C4A72DC77F3D141DFD0251501313C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "AA01BEF21050FC2F2E10253E8D1C1976",
+    "aes_key": "EC5750863DC5A63EE6C924204FDA7434",
+    "data_elements": [
+      {
+        "contents": "C9FB1F10A5EECEB78957471B0E9F5DD4F6B378",
+        "de_type": 843
+      },
+      {
+        "contents": "4E43DF33AFBCD1D9659E19B0A90FCB04634B",
+        "de_type": 419
+      },
+      {
+        "contents": "4F3484030125E7350D12E9663A",
+        "de_type": 51
+      },
+      {
+        "contents": "",
+        "de_type": 39
+      },
+      {
+        "contents": "7604411E964954B0FC27",
+        "de_type": 233
+      }
+    ],
+    "encoded_section": "809013E0B47E9EE5B8805FAE10443E6B5463BF911000DB703DF2D395F42E99EA0544CF85C1F790025E4F401EDB54B36B8CBE582AA5BD19FE4C2671F43DAA3F4E1A060E06AE4A7922BB500BF7E27485959C1A3129450249D0909ABE0F1C34BCED066AFF0140262A2007FA37F2617803C68B429540B65383073558874972F06DE286",
+    "identity_type": "trusted",
+    "iv": "9B68EF8ED1D81A8E00D41A8EDF863F8B",
+    "key_seed": "1D03BFEAD804837303B5363C8F089C79B3FAEC4D566803A636C8C566180D9587",
+    "metadata_key": "3F72F934C211CFBDE074CCB0A54DCD50",
+    "section_mic_hmac_key": "331F932E99A5D100F95C6DA9ABBDE9486649FA13D9F40B6075C678B1FD02E42F",
+    "section_salt": "DB703DF2D395F42E99EA0544CF85C1F7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "75A2C0202C54B148B3A8325523E39AC4",
+    "aes_key": "62C0EBC73039A209769197670BA21D32",
+    "data_elements": [
+      {
+        "contents": "1053D13B0CD897",
+        "de_type": 913
+      },
+      {
+        "contents": "08D336BE6750FAADCC063556753748C6D80E7BFE3AA5016139DC9EE23054",
+        "de_type": 385
+      },
+      {
+        "contents": "CA9FA19B1A1D2662477670DBAC88B27E484B45A21A4EB0",
+        "de_type": 78
+      },
+      {
+        "contents": "150352672FC7AD44BA4F3AD0AE8F1FB86B342072982DCA44D8C028",
+        "de_type": 246
+      }
+    ],
+    "encoded_section": "9990130900396AEDFDC487B3C663EED8CEB672911000607C74788B6319F4BEB5D1B4CB02D7BD900118F1E3D46294A4BA21D910380DE516BE171072179B90364446BA39519AA03E30382BAD7560A891FFB6F72D1F17D6C6385762460985DCBBBF3C890F8AAE57BE0BBBA483917D4CCA0A6837669F7B00D710D0CC2E760E3E0B4903CDCF5AC83DE4CC1995FB93278C9E0EE2667A93387B1ADBA08C",
+    "identity_type": "private",
+    "iv": "F2C95E5EC2FA105C282643BA7C800549",
+    "key_seed": "4B6810C7997D7DDE597C9268442CE989762AAD10290801679FF4594198DEA08B",
+    "metadata_key": "83562D42E58C363E0E48127F1B3897B2",
+    "section_mic_hmac_key": "43A0F588C743498AB2FC9BCEB915A1BCD353E02B9AB75CB952A6430C4D6C9062",
+    "section_salt": "607C74788B6319F4BEB5D1B4CB02D7BD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "212440B8E8D36B2CC1327699BFC93206",
+    "aes_key": "6A2AD6F934FAFA71982F6C4AA26A4F56",
+    "data_elements": [],
+    "encoded_section": "379013D5557C5A6CE2CAF81CE036A91EF70A3E9110009DC45FD603A6B020B509B8D9BFC969DB90041218B5589E2AB40D4B0B82061756E4DB",
+    "identity_type": "provisioned",
+    "iv": "F72C452B0E570EB5B9DE952C4791095A",
+    "key_seed": "47B2C609DC4A2F6785197E6EA791FEAFF65BA00A43E5A18A677933ED15386ADA",
+    "metadata_key": "8F209D0C0585905DF5DE92BD3B654667",
+    "section_mic_hmac_key": "D9FA303E247451D08056ADF12DBDD9EC49332E3AC4CA3E301069728FE0063569",
+    "section_salt": "9DC45FD603A6B020B509B8D9BFC969DB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "433465189236D09078373B8ED0CCCCAC",
+    "aes_key": "E43BC17300BCFBEB25108453100382C2",
+    "data_elements": [],
+    "encoded_section": "379013A40450E97B1E7F305B04EEA1CC6C6FF7911000858846A0F9FD9E2E0611D97BF2EF06469002A3D2D64941BB2C16BE63E6233FA8BBD9",
+    "identity_type": "trusted",
+    "iv": "5FFB8A197BE6260CBE3EF3F5A69D6F9A",
+    "key_seed": "950084CE1A17C18014492E2D819E1A4A8918E418B5D793D41CE40AC01962AB45",
+    "metadata_key": "F3105517DA032D58D69A3604C768A207",
+    "section_mic_hmac_key": "81F142D0B4A95BBF07A155889C7B253A70BE5AD20EBEE9E38B730A9201FADD47",
+    "section_salt": "858846A0F9FD9E2E0611D97BF2EF0646"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "AE407D2A8A6A0F933972D7926F06C555",
+    "aes_key": "6684D1C9DA338DD00813CE3BACA74FDF",
+    "data_elements": [
+      {
+        "contents": "BA4B31050C802CCFD9F9",
+        "de_type": 261
+      },
+      {
+        "contents": "A07F15",
+        "de_type": 533
+      },
+      {
+        "contents": "3D59A78F9181304C3974C28F99BA56FC",
+        "de_type": 680
+      },
+      {
+        "contents": "BF97709E54F7",
+        "de_type": 452
+      }
+    ],
+    "encoded_section": "6690134F1022868C775755B32E82021EA423C39110001F7DE96605E9315D3517A53C620C9DFD900485ED9FED88BAEA7D0F7F2649C5C60EF3A8B1985EAC9CA0670D89222827DA233F046290021C3D90C872AAA85B5DAA376E3EF6359C0B865FBDCB1DE9AC211D91",
+    "identity_type": "provisioned",
+    "iv": "7CB6244938A943AE0C2223EE5478D9F0",
+    "key_seed": "2DF4F998B4046363F13903E444563666752112E7A50CCA849AA20A1B632BA11C",
+    "metadata_key": "81D88DAABD6499A41CC39A0B69C88149",
+    "section_mic_hmac_key": "2579AC31B40E6259D86560A179396A8C8D2460B065479AD84D1672A8E6AAF100",
+    "section_salt": "1F7DE96605E9315D3517A53C620C9DFD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6BEFDA99ED6531BCC16097D12D8E054F",
+    "aes_key": "5EAB15A140D70A229BB83A187E9F02CB",
+    "data_elements": [
+      {
+        "contents": "0F0E43C4406FA2936FA381",
+        "de_type": 236
+      },
+      {
+        "contents": "08C74C0A5E82AB",
+        "de_type": 569
+      },
+      {
+        "contents": "B739FE96118484",
+        "de_type": 911
+      }
+    ],
+    "encoded_section": "5990133C1C7C478A9872741B2CACDCE6EF85F59110005F03C93641025F2C7C9AFE7A14A9CCD590040783A8D0F38BBB63558E4FD0359A1ED0479EB554E8FB8D695366CEAC447857027FF727D304764FE2A2033DC87C56017725F3",
+    "identity_type": "provisioned",
+    "iv": "3DBA7081144B735EA26C11843C84939A",
+    "key_seed": "A6E1BBB65242EF0297CFD3F36A26E92131DF8AE1124785A313A03CBA129A5708",
+    "metadata_key": "B756D4BB650054A9B555F945179AC0BF",
+    "section_mic_hmac_key": "672FD0220AD1CE18CB5C2865E369343213F98286F70F932B6864E77878042155",
+    "section_salt": "5F03C93641025F2C7C9AFE7A14A9CCD5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "936F85512A5DA1B653FB8A2DCF27EBF9",
+    "aes_key": "212B797347439C09143EDEE8D49D1145",
+    "data_elements": [
+      {
+        "contents": "4C46272C464F1F327ABA",
+        "de_type": 300
+      },
+      {
+        "contents": "90DFEBBD2FD42483D8",
+        "de_type": 576
+      },
+      {
+        "contents": "9C67",
+        "de_type": 590
+      },
+      {
+        "contents": "54EE",
+        "de_type": 237
+      }
+    ],
+    "encoded_section": "5A9013FEC4DE90AE4B04DB998D69D7B9DAB3B6911000071925257522B40B840ADEA964E0F8549002A053445506418A7BF78DB30EAF544AC34AD6F4B2298373091CF13DB14519C86BEA5E5241124929BC2DF6F87314D8C22DE90D9A",
+    "identity_type": "trusted",
+    "iv": "2575BE3DB96C9E3EB6C7635C6F6B0E7A",
+    "key_seed": "F57E01ED4A19496DC227DE1B016B09C1EBE135D484ED8B80DD00C6EC31ED5B5D",
+    "metadata_key": "DEC2CABDD66E55B71A83AFC163D7FADB",
+    "section_mic_hmac_key": "4D01BAE5168047AD89DA9A7126549672887F9CDDA5442E356BED3D6B00AAEBFD",
+    "section_salt": "071925257522B40B840ADEA964E0F854"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7E7DA96580420BA0D659EC43121322D8",
+    "aes_key": "A8FB66F215BC84C5FE083146B193AB8D",
+    "data_elements": [
+      {
+        "contents": "FFB586B557659859",
+        "de_type": 397
+      },
+      {
+        "contents": "4263",
+        "de_type": 671
+      },
+      {
+        "contents": "E0886DD5892A663968BF0F850FDBC48C32E2C0C1268AD368AA794D",
+        "de_type": 612
+      }
+    ],
+    "encoded_section": "65901376D02BAAF38EA4CB4BDD1C73BC3871AC91100051AEC209767B8CAA7980A3BD7C3FAFF29001AF29552C93754001FD0D837E2314FDCAAB5F3F83221EBEAA38EE14E5DEB24E81B4DD949B42A0A8AF3FA573DFD9B28FF81902561D21E508C845551668B4A9",
+    "identity_type": "private",
+    "iv": "17EBA64E62386CD3B3A3DFCAA57C8990",
+    "key_seed": "598D2245CA116C288DD7F884902FD6966A3EAE9F42C0836BE31CE29C29AE3EF8",
+    "metadata_key": "05686049146A99EB4A1FE87216DCAB1B",
+    "section_mic_hmac_key": "6FA0EF16D9CAA4AC317B88DC23341FDB92AF5B2B4EBAB09202AB3CA30C38CB75",
+    "section_salt": "51AEC209767B8CAA7980A3BD7C3FAFF2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4E5974753C765E7C366AE0ABD13B6032",
+    "aes_key": "B33B94CD44650B66F7ADBC2EE729BB6E",
+    "data_elements": [
+      {
+        "contents": "86DD5BAF9A7C3DDD8447254F3203CA9E",
+        "de_type": 588
+      },
+      {
+        "contents": "AD60D51F76FB590E2E783C7120C160E0DC15543848D74BD898BF21",
+        "de_type": 887
+      },
+      {
+        "contents": "46F5356343E961455A3F74",
+        "de_type": 584
+      }
+    ],
+    "encoded_section": "7690133360E0A798FBD58AC2C9E37CEA3A383E911000FE2C7ED573CD9CBA19F2AA6AFDD623299001A71787DF83BE1DE49338E1ACF15530E60197A15D7D3007AC410A6D443BBE7F7694D2B54E3FF5BDB62ABF52F85A5180C014FB86A8DE0315F7CF97F2FEA63E21EAB45758898AD526D9AB8B38726E9315",
+    "identity_type": "private",
+    "iv": "06E07BBF2D5201688926629511421FDA",
+    "key_seed": "66E4D540348E429F58155175C858A8BD1E7CB0999B49781D348A321AA6138173",
+    "metadata_key": "48A307411309490BED28B84E99A5557E",
+    "section_mic_hmac_key": "1BBC012E6C6D7955641BC6D4D06550739840EAA718C15AD3A19816957E58528C",
+    "section_salt": "FE2C7ED573CD9CBA19F2AA6AFDD62329"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "74CB68B7EA1E95E04B832182154B0A91",
+    "aes_key": "B022EAFEFB9FF1B5C2F98A40B9ACC3D4",
+    "data_elements": [
+      {
+        "contents": "7E37E828730AB3F87C1EB99B8E",
+        "de_type": 787
+      },
+      {
+        "contents": "9135DA70E02D2232DED4F3F5568A0371",
+        "de_type": 420
+      },
+      {
+        "contents": "C89D3EC94DD71F",
+        "de_type": 236
+      },
+      {
+        "contents": "07F52CFFDEF1D58177543155723441BEDF06D3",
+        "de_type": 980
+      },
+      {
+        "contents": "CEE968AC8F1B700C2BB3019A4E9472CA7E",
+        "de_type": 169
+      }
+    ],
+    "encoded_section": "8E90134F49609F3C0B6286BCD6BB68D9F4E24E91100052CAF10EC936B174958042A90C112E5B9001ECDBEFA0B57D0456BF272B7A1D20269C96F6B666647AC239FAED67E348F463D9B7DF48FAF7A27BD87A9CF5E6B66F7AEE194A485F76350003AFFDEE337DDFCA1DA36D0CC1BE171B72A48C70809218513429B567E3465E8FF5E2033367E102CA20AAC3F702B0DC1A",
+    "identity_type": "private",
+    "iv": "A5C0BD5B8496CED016A2AF10A6F91FB1",
+    "key_seed": "BFBC7FF2263EBED86F9C96A09FC127CE977C9239CC08316F8287B00DBD0B3498",
+    "metadata_key": "A832A816BD5B77EDA8EECCA1EBABB014",
+    "section_mic_hmac_key": "710B9F30D232D15E9DE12974DA748A32F65D122AD460B292ABAFB60338BBB60E",
+    "section_salt": "52CAF10EC936B174958042A90C112E5B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BCCA0E7341FBF76B2B5F5BA041CF1E5A",
+    "aes_key": "D12B503A2F126AF19D0AF97566785ABF",
+    "data_elements": [
+      {
+        "contents": "64749203BD66A2F9ECBBE0D588092B4354",
+        "de_type": 19
+      },
+      {
+        "contents": "C163763F7A4D635495BD26B704AA19D140DAA82EC06DDAC118",
+        "de_type": 908
+      },
+      {
+        "contents": "60B0B36271380D99A2A25F",
+        "de_type": 222
+      },
+      {
+        "contents": "796D6F2B775593F100B9",
+        "de_type": 760
+      },
+      {
+        "contents": "3A0B8533F323DE0B7C2B5DE29F34DF3D265C6CE5190AA0F958811D",
+        "de_type": 994
+      }
+    ],
+    "encoded_section": "9F90136082051F8CBEAA0CCBC6113961AF0C93911000B90142AFBFD356D46AC2B2720D1F8481900205E87BF19BCF1B2CFCED4986FC2A31A121106BDD978C20BC7E027FD26CB2AA0052C1DBB34B42F03C324129015E97C6FE9694ACE4FD254641272F6873CA455E6863D3025F03D209F1C554D250F0EF5BDC10CDCD01CF4831D8C9F30EB2586D41A2CC2D6CDECF4F42AAC02C1B985BE84A98831A26B00B27596A",
+    "identity_type": "trusted",
+    "iv": "4765E55F52DA037253303C93F66A6DCD",
+    "key_seed": "50CA1651529AAF0D0E3874C19E7EE47519CBEEB16DB1A7EF99F69315502A02C6",
+    "metadata_key": "70AEC06B61DD252B459F5BE7FC72F7E8",
+    "section_mic_hmac_key": "598AC0D450A9FDAD2DD86DAFDA3011B9179E56DE268CBD38AB8B9B9726B0B2D0",
+    "section_salt": "B90142AFBFD356D46AC2B2720D1F8481"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2C14A845A98E4C0EC1D3D37E7770C558",
+    "aes_key": "A68054A9CC008CCE3091CECA4B305A11",
+    "data_elements": [
+      {
+        "contents": "DCB2B2ABBEAB26EA71BB01D24C",
+        "de_type": 12
+      },
+      {
+        "contents": "E3109D",
+        "de_type": 799
+      },
+      {
+        "contents": "EA153371A83C3827DE52AF886B3ABDDC5601",
+        "de_type": 223
+      },
+      {
+        "contents": "358C051EF89D4B2A70A66557C0E40523E07CEE5D702602A63301",
+        "de_type": 466
+      },
+      {
+        "contents": "1E3264B6EDF37242534C9123818D649D38695C4AB285727F7AB64D6D33FE",
+        "de_type": 662
+      }
+    ],
+    "encoded_section": "9F90134CFBFA0A7E0F1D95CE9E7DDE4D9D0F119110007C677DA19284373DF76BF8DC23F62A2C90018ED6D11D434C81E0813AE27A8A08FED219D8D2D509FBE4D738C507D35AF118126F68CD7A0CBDB12D6416E38172D47F328DD389DB4AFD0D27028366DF30755D45C06DA90E6A00EE097C5354215144CF3C39D600112B8853736303B3D5589D9690891FD597AFB197D8272C0FF4C4774BB0EE0E8BBD16981621",
+    "identity_type": "private",
+    "iv": "0BCB734C4A958CAA0BD6818BFC616225",
+    "key_seed": "52E8480972975E4BA2FE7605453EA8349E9BC5A94E29540433F860556F01884C",
+    "metadata_key": "8FC6598BCE8ADD3790D7EBDAF49D0103",
+    "section_mic_hmac_key": "ECCEEA279B282C887A23EC16580BE97CDD50135DEA36DCAB5DF44156A29C1607",
+    "section_salt": "7C677DA19284373DF76BF8DC23F62A2C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "229EEACD212DC405EE4811F9A977F2CF",
+    "aes_key": "B650D65C7FBB23472BB72579A77181E7",
+    "data_elements": [],
+    "encoded_section": "379013D438766EAF4C661EDD88BAA0FCB42A1E911000855BD2F01023E6A57B6E71DD49DAA2AE90041D6AFAB5B808B58855F9C7AA4F4D7EE8",
+    "identity_type": "provisioned",
+    "iv": "9902444F8F3857B3E0BEA260972F28B6",
+    "key_seed": "80897CE9046AAA4A739B63E163EB437BCFF71E3E3653B6EF46E3C6AA06D7A121",
+    "metadata_key": "34683AD177E872DCBD2A5E7E63EE0A3B",
+    "section_mic_hmac_key": "BAB117F9C1BD11C895F4602EE9EF166CFDB9267B3954B5CB5D84D4737676E3E5",
+    "section_salt": "855BD2F01023E6A57B6E71DD49DAA2AE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2A0C8512737C3A026EA6F37CB99230EC",
+    "aes_key": "9E758D2B63DDD9875440E40B527116E7",
+    "data_elements": [
+      {
+        "contents": "EB02C160F935EC11145161E1CE4018A85DC6C6B87E",
+        "de_type": 947
+      },
+      {
+        "contents": "",
+        "de_type": 273
+      },
+      {
+        "contents": "513989E8F256F4BB4833E9",
+        "de_type": 980
+      }
+    ],
+    "encoded_section": "60901342D70D1E94399CE4FFC098059653E5939110001D9723326BB9045D0FA8AD2D055AB7E290013A4BC24317039BC6F6742EDF1BE1FF740DDA42AA9D246BFDB1004EE8CCADE443AEDB88834895F0E1DE5C71512B93FB850303B6C36838EBADFC",
+    "identity_type": "private",
+    "iv": "A498D9B0ABD9DF7BAE1C56730B8EE99D",
+    "key_seed": "007973A9512305072C4B09ADE63EE2B1473CC8800EE101C3B15B7601A53CA570",
+    "metadata_key": "7D44DCD6C2EAC7C368BF131C16F56757",
+    "section_mic_hmac_key": "FE60C7116D645B0830D381EF145EEF0D76CED5639BDD5BE55BD6796495102AE7",
+    "section_salt": "1D9723326BB9045D0FA8AD2D055AB7E2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "AA5C563E4C1823D73563F7C3706AFDB3",
+    "aes_key": "C999C60B91C13F5DFAF5217C0D5B5C34",
+    "data_elements": [
+      {
+        "contents": "A5A7EBAC14D1B41520E40AC51864A16754521D4A7E54F92A7D",
+        "de_type": 88
+      }
+    ],
+    "encoded_section": "52901375BA880AD3ED961F78870D04157CE0E6911000EE361CB440B15CE82D93E0C1DA85A9379004C2FF0F23A2FF140F44ADBE468A1A74B9F702645EB8D1D9A8BE0BC82F88D404479CE665DFF4AE98007DC791",
+    "identity_type": "provisioned",
+    "iv": "538C25B23A3C86BCDA97A0CFD35A6FC6",
+    "key_seed": "ED88849FC0BDA24F6E40D9DE41DA1E13D489B4532491DC76DF1FA6B2119AACB7",
+    "metadata_key": "FB3E3B0DC3A793B84A8BAA8B76C66339",
+    "section_mic_hmac_key": "8B61AC0A77B70BD562BECA6B9EC68D3AE19A43F75E7C20DCBBB772E72335031F",
+    "section_salt": "EE361CB440B15CE82D93E0C1DA85A937"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "619C4C8EF05A933823C2D65A31B92B00",
+    "aes_key": "9A57A7F7C65D4129320E88946A9DC223",
+    "data_elements": [
+      {
+        "contents": "CE0E4BE0690C0A5BF044",
+        "de_type": 831
+      },
+      {
+        "contents": "BCA982D5431D61B73230868E555B97C3464366E2A4267F64",
+        "de_type": 200
+      },
+      {
+        "contents": "C82659D54B9B19F6C502A2",
+        "de_type": 338
+      },
+      {
+        "contents": "45B4B7C9A022B79136DE",
+        "de_type": 197
+      }
+    ],
+    "encoded_section": "7A90136D731B5176129F207201B4A5D0F6673A91100096D3507A4EC35496932F887BD27700429002BD18C7C64DBAFDF85D34F178917F923C0656AB4C77BD56DA1FDFD011885B997312645D52617E2F428FAA6CBD6CFE285AC1713EFAC1A641DAA3856D5F455D08BCDFE7F308E22A41706C5556B5E8996955934EC0",
+    "identity_type": "trusted",
+    "iv": "8D39404C79316D7EA939A237B0DA32A8",
+    "key_seed": "25C985FC227F539121AA167BFA906D05760D8AEFF52102154CBC785FDBD64514",
+    "metadata_key": "14318D2A0E05B5E1A77A50CDEABFA81F",
+    "section_mic_hmac_key": "123A5EAAE2B67C4169444F1235E071BBD36804622722A7DCAB1A321F22507A81",
+    "section_salt": "96D3507A4EC35496932F887BD2770042"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "ADA623A6380A3F4522EE69542E99D25E",
+    "aes_key": "331F18CC2ECBE380C1590D5DBCB4E970",
+    "data_elements": [
+      {
+        "contents": "0174A015",
+        "de_type": 588
+      },
+      {
+        "contents": "9D5A034F0AFBAF",
+        "de_type": 17
+      },
+      {
+        "contents": "E0AAFAD94D19113E64B96863147869E9859DE50FDE4270216231B3184D",
+        "de_type": 99
+      },
+      {
+        "contents": "F24EB6B5AEB4FEA479F5083B7F028FA4B5B8D4DA82AE263A34",
+        "de_type": 356
+      },
+      {
+        "contents": "F8911686E780BA27D8516A00999512CFA3BDA6B6",
+        "de_type": 955
+      }
+    ],
+    "encoded_section": "9990132880845C490110E6A5557732B923E92D911000621BC78DBCDEABAF66E6D1402BC169059001AB11D8A9FF159246AF50E950BD8E400E4D615242ABF1080B0B75A379AA4368ACDBCA95F2010F3841D150725F8A670CA3FFE83412241EDF6EC0C12D1A5CB71D15F9C121E2B378017E5D61F6C1036A8B25790B193380C3897B66D488FA4DA297E39DBB71D3F430B4035F7EBF539DF3F5296380",
+    "identity_type": "private",
+    "iv": "C98BFAFEF62296B28CD51297CF787F52",
+    "key_seed": "86109574BBFC42BC1D620F4EA1018967D9B48E655E5C6DFEC0FB6773CCA774E8",
+    "metadata_key": "8D07E48C35FB78B8A5513345B3C40C9A",
+    "section_mic_hmac_key": "70AD2654896DB69E49246717749BA8FE8262F0A9EEBEF5D947BCB5253224BE17",
+    "section_salt": "621BC78DBCDEABAF66E6D1402BC16905"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "397D6D6B5613F8AC2FAEA44797C0A638",
+    "aes_key": "632129B34E30FEC65D800EA6BE5F7A61",
+    "data_elements": [
+      {
+        "contents": "796EE13738E80BD71145D729",
+        "de_type": 756
+      },
+      {
+        "contents": "1D7E9E3DF4EBC7615F0923B7C6352829DDD5E4E295F9695E3E75",
+        "de_type": 960
+      },
+      {
+        "contents": "C9308827A08A7B53E73C3D8FB9DDC3A9C61E50425623FFF66B7DAB5FA9",
+        "de_type": 391
+      },
+      {
+        "contents": "3740A8AA731F460FCBF8D08E17437A92EEBE2554CA90D8E5B063165D199A",
+        "de_type": 666
+      }
+    ],
+    "encoded_section": "A490134F9B86D148E83C40F686AEA68DECE504911000FFB3EB0B6BBD03AACDE886D4B64963A790046E990FA420DBE8370E20B582D0F390FC2EB3B4027A44D55BE09DF6AED7C73280D7B271397917B220A8E81422893C7FD705E02ED8A0D672DEF820343A46C18FF08611639060A1324C24DEFC5B4E8BCE9F9CBAF58E48EAC6DCFE80A916FB7CDE7582422D06E9287896BF6F4211D2395A5028690E94F6CC2136252D8A7105",
+    "identity_type": "provisioned",
+    "iv": "5276C1A1ED1B081D2A2A6F5DEA96F665",
+    "key_seed": "D95BE815CD7B0FD68B3E7446B8B2D79E348D548C6183AAA1BC4AEA344738987D",
+    "metadata_key": "25302242FB45A172D3B3FF58EBB4068C",
+    "section_mic_hmac_key": "CF8906BE97A01B93944A42FB2DB4610CD87BD1678F8C88F0486D9BC527FC41C4",
+    "section_salt": "FFB3EB0B6BBD03AACDE886D4B64963A7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "AF24B060AFFEAC233E864603EE00A9CD",
+    "aes_key": "D93AAFC5986BC8683E27129BE1E82563",
+    "data_elements": [],
+    "encoded_section": "379013E9112895D9EA079C03219B88C45A925D91100033555799B45F9C4B35FC02644ED660DA90026A0D952277833EE72223017DD0D09AF3",
+    "identity_type": "trusted",
+    "iv": "768BFD528B829A1EBA49204A0CCB4B02",
+    "key_seed": "970EB18227C61CEC00A2A05F5263593CB7C0495397DD0F533DE7CFDA67180147",
+    "metadata_key": "122A3B297DC2A96CDB5B3BBB05D6B536",
+    "section_mic_hmac_key": "2192C8F4C87ECD29422DF7A686A1EE7DA0943B83F89D81442550BD786F1F648B",
+    "section_salt": "33555799B45F9C4B35FC02644ED660DA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "82B9B8A6DE7077940685F5FAA7DF422F",
+    "aes_key": "7BFD4D7DF1E0E9C478A06570E9B9CD94",
+    "data_elements": [
+      {
+        "contents": "ADB48AB0F67DA8D5A9618BA4253EAAE7D39E310D5BD37BC56AFCF41F",
+        "de_type": 461
+      },
+      {
+        "contents": "9A86354A04BF30E00DBE8C414A9FB24C86C8EEB7FC83E460",
+        "de_type": 936
+      }
+    ],
+    "encoded_section": "71901316B26D715D337B501770721CCBE8D13B9110002C99BBEA9A300BAA95863AB8AB9A9BD39001FF44AFBB9D1C0A28266B562AE0E7B38C1BDA2D66BC2DEED15F33F3034E934A9D7FF8E3718F68A23361EB574956A6D723F38EE0575D4A922AD0DB7DCECAE52CF2C44BB26E1E71DC16BCAE",
+    "identity_type": "private",
+    "iv": "7718D52D9D5CC851A7B2C047E8E56916",
+    "key_seed": "2C2905CFE0366D03717F4F8084FEBD30602C7CB22BAE0F5E8AC4902C762AC880",
+    "metadata_key": "35E0C0C417D995CC800143D9A392B94A",
+    "section_mic_hmac_key": "A8AC22011356C040DDDD1830F1881474FAE157EDF4D0129D5DC616244F495E51",
+    "section_salt": "2C99BBEA9A300BAA95863AB8AB9A9BD3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D49E9CD1D20A4B4F340A593D6BCD93A9",
+    "aes_key": "A8BD4420579EA3F0F63C1BC03F9F6893",
+    "data_elements": [
+      {
+        "contents": "3B986384C79F675F",
+        "de_type": 650
+      },
+      {
+        "contents": "",
+        "de_type": 640
+      },
+      {
+        "contents": "40EB0279736AAA9A100E2C26941448AE2277AB",
+        "de_type": 990
+      },
+      {
+        "contents": "",
+        "de_type": 470
+      },
+      {
+        "contents": "91318CF7EE4B2E35241F",
+        "de_type": 694
+      }
+    ],
+    "encoded_section": "6B9013DDCFA87C6ECA5D9778AE29ED4AFDE2FE911000182084A74C01395449B1A065B30D8080900433A6E91CED224E8632C5205DBE49C3C810CC5A826F3F058111AF85E8729E0900EDEAFE67BA46EBDD09A8D9390F47EF040498143310AB8776ECAC80461AFD91D2A5318B82",
+    "identity_type": "provisioned",
+    "iv": "134179E764FCE0DF7ADA95F934D30276",
+    "key_seed": "BDF4556FC6C4D53488D013E20A98C17524875EAD68B64ED0BE9E0EB9DA2B7BBB",
+    "metadata_key": "F4DC6D1E64678F9606BDF71B0EA52BB9",
+    "section_mic_hmac_key": "96D8CA32AD841897F0AE2C292B9359E901760A16B9FEA999490FA1CC80C944E5",
+    "section_salt": "182084A74C01395449B1A065B30D8080"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F6A8AA713174F7D9C61E5328D2FBC88A",
+    "aes_key": "C2221BD4696591A3CEB7806807E54F5B",
+    "data_elements": [
+      {
+        "contents": "BA4C375C376640ACC08AA1864AF3BE5AEB9A59",
+        "de_type": 667
+      },
+      {
+        "contents": "54F3E1E4DDDA",
+        "de_type": 390
+      },
+      {
+        "contents": "3F3851F502FC37945B512B2DA0398A6AF6299C08DF21A49A",
+        "de_type": 664
+      },
+      {
+        "contents": "BF39F68C7BECA2FA6D4A56E4F01589339D619761",
+        "de_type": 425
+      },
+      {
+        "contents": "53B006EABB64D1206347779AEC7E47CC",
+        "de_type": 177
+      }
+    ],
+    "encoded_section": "9B9013E2396E53181A2D3263100883209CC1C2911000A30816D0EE95944953EAED4DF1C8E2069004407CB081B3ECF537ECDC12A2C42A866F9CAD0593863B3C5FB9425336A46BEC045CA6EFEC8439DAAF4C7107C4A09A5678FF4787379C733C9D71E520F141F7E1C9D048E2C6C56C0B7E1AE04A11CBB9EC7DAD91F8B8B3A783DCAB0CBE44B354B19F2D205E3550BE0CA3E25FB15F8368D0AD060D1BDC",
+    "identity_type": "provisioned",
+    "iv": "49DDF471C624612F805C254CACC512DF",
+    "key_seed": "9B73B7B20095CE1A1B91186605AFA5C48463E2A93E1F3163AAA0DC4ABA51D273",
+    "metadata_key": "7755D72850CB417465414B8AD50BC492",
+    "section_mic_hmac_key": "E15A4CC4DC3E2E1AFFEE0D584E82999BDC30D6BEC9C1143A236A4354598E69FD",
+    "section_salt": "A30816D0EE95944953EAED4DF1C8E206"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B7820F847BAB14663F5B9729C770A903",
+    "aes_key": "ED1C41116C53D174E700C90465D29FB8",
+    "data_elements": [
+      {
+        "contents": "40980514A48D57566E6CEDBC1F13125EBF242B6BE09C",
+        "de_type": 982
+      },
+      {
+        "contents": "31CC3F9A09A2163C86581D7A795A2C7D3BE9AFD63F00D797A4",
+        "de_type": 304
+      },
+      {
+        "contents": "6D85FA25468C5164AF6E8D7A5CCFE94DD7759B684850E0D007",
+        "de_type": 633
+      },
+      {
+        "contents": "191D0F07EF",
+        "de_type": 686
+      }
+    ],
+    "encoded_section": "90901336A6FD32C63BAB8221AA293FA3979ADA9110004FBD36EB5BE03713867E3B3B06A4B53C9004C4F0B8515D402330041A6614E4BA859F1A6444377518C0289C14D01EDEE0939FA2BE910809ECEBDD265B2E89B26C60B42428084CA567C85EB2B76C8035DD8B8787E94AB3C760DBD281CD84D0C8CF8F281E486096E34230F0DE44456677971EDCC5A2F5DA4E0ACFBD94",
+    "identity_type": "provisioned",
+    "iv": "C157C8C8BAF421A7020E0F5AD4399A7C",
+    "key_seed": "0D5FD7A0EB16F50FB1C3CBB0ED4EFEB3C022AC15566F7481FBD9DFADF9BFE596",
+    "metadata_key": "26294EA549B9B814C43F866176D22280",
+    "section_mic_hmac_key": "676112EF0807098F45519595990076B83DFCBD0E55B9414225990D9A6046FCD7",
+    "section_salt": "4FBD36EB5BE03713867E3B3B06A4B53C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4A8D0B8F6B7F9E6221EDCAB57C36BFEF",
+    "aes_key": "B9A82BE9DF86E2FCD72839955485B828",
+    "data_elements": [
+      {
+        "contents": "2B0FE4B16D2740AF13A500",
+        "de_type": 209
+      },
+      {
+        "contents": "BBB807A186D2C3F87855",
+        "de_type": 999
+      },
+      {
+        "contents": "8A34F77DD5A61121C4917A48AA085776ABE1",
+        "de_type": 323
+      },
+      {
+        "contents": "ABC7CC",
+        "de_type": 138
+      },
+      {
+        "contents": "7A5C43A5C1B70C0403E055FCDFE81A5297DA1FD729C47776DC5D5F",
+        "de_type": 499
+      }
+    ],
+    "encoded_section": "8B901302D13FE7AC33AFF3924F23BB90E9D53891100058FD054F518764F7FFA68EDC5E76897C9002C8019C9BDB34ED694F527F1A74A171D4DB910B76FD198A047FF0A723356BCAC3F103689FC91F58B627B3E1E761849E237D9F28D154025D4153CA2D22555EF4351328FB3B9473CD12972BB2B2EACBB1B8612525B21BF117E283394DF7A464BFF56D7CE298",
+    "identity_type": "trusted",
+    "iv": "8BD5C8CF29932090561C480D4AEB8E36",
+    "key_seed": "321AF261DCA753BEE3CBAF5D7DE64DCBFB04C0585F7FA27D20D11CC0059712D9",
+    "metadata_key": "F0BE3BEB618DA219C8DF306367CD47F4",
+    "section_mic_hmac_key": "00F983CFCF9D1F0F4E8D74A6FA26E6F8A13E7EC53388C10E81EF31FFECAEEE87",
+    "section_salt": "58FD054F518764F7FFA68EDC5E76897C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C7BA44249D8BFABFAB9B54F90B12F222",
+    "aes_key": "A56D794C950BB5A50D04EDB2699B967E",
+    "data_elements": [
+      {
+        "contents": "773856891169289C79ACE48945E05618FC738071",
+        "de_type": 799
+      }
+    ],
+    "encoded_section": "4E9013B45A17060677E85EA10D75DDE8C12D3C911000CADE7094733167FAC6390816307D14159004DE8DE98CF28805D142425AE5F24F616AAB3BF83AD109A4F753E55F37D7AC1E6FCF6534806D9740",
+    "identity_type": "provisioned",
+    "iv": "BD0CD0756F90453E808F180E923758EC",
+    "key_seed": "E0440C8BB83D2E4A5ADFD1B123A1D55AE0C78ED8F14C14DD9CF1AA5B3CF3D650",
+    "metadata_key": "5CA211769EFD29892C0058779633355F",
+    "section_mic_hmac_key": "36CE6C896028CCE6845B791384FFE622B9E8774F12F44C00CF410FDD543D7EE1",
+    "section_salt": "CADE7094733167FAC6390816307D1415"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EC717CB0D92304E7C8A5886A78DB5034",
+    "aes_key": "7E9A8C8DE80E37F263D24E3DDF281A86",
+    "data_elements": [
+      {
+        "contents": "34E5A87FF8650308",
+        "de_type": 954
+      },
+      {
+        "contents": "FB132CF4999537D6DBECC9CE4D88BC0E0C66437891091F49E137569E20C0",
+        "de_type": 277
+      }
+    ],
+    "encoded_section": "639013E9DEC88D9D254BAF7E818338DB5B69699110006B1150D7267D5DA8573E97C7DE07E1A89004FBAA70C03E33206A3417BD94DB9CF1B17A1C2B7968732BE4326A647FE22B4F2CEFF689ADAA4B278FA37931CB60D22363385B4816C4736F2A05A6EE28",
+    "identity_type": "provisioned",
+    "iv": "9D13A28391F3EC75EAB2C424E505FD99",
+    "key_seed": "CC5C727CB341CB25BC5AEFBC7D49177263FB4978B4E4E5186BABE100E5F3212D",
+    "metadata_key": "6616F3E1AB67EEAAB018CAF0368EE6EB",
+    "section_mic_hmac_key": "BB1DA65CC10CE54179F3E39CED7BC4A00CDE225FE15A11E2A0B26A01C2EF00AE",
+    "section_salt": "6B1150D7267D5DA8573E97C7DE07E1A8"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F817848433DAE38015DA750CED78183B",
+    "aes_key": "020009EC448EF1E4CEB74B078296868E",
+    "data_elements": [
+      {
+        "contents": "5946AA9A7E7F78583A2593221E",
+        "de_type": 819
+      },
+      {
+        "contents": "F3FCAA87BBFFBB6DAC6D",
+        "de_type": 396
+      },
+      {
+        "contents": "7616F64C32BEB7A3",
+        "de_type": 848
+      }
+    ],
+    "encoded_section": "5F9013C1CEAC79565703663F399E1968C2470D9110007BD86A32FF05C5A3467AC4770AD53060900405E742BD974A141B76639EDE0CF231F727BD196A8C863E60EB8B78E51632632F66AC501B2AC22B50F5EC417B9140C81BD8DA0070E2381DAF",
+    "identity_type": "provisioned",
+    "iv": "69D2FD8DE211E9C5BB873A2D7D2B6CB9",
+    "key_seed": "A0334C2F26179EF4E774DCB7CD5A391CC98BFF20B494B723245929CF735448DF",
+    "metadata_key": "9851F80BA3762814A9E72D468DEBFA61",
+    "section_mic_hmac_key": "15D84B9D02BDE9C0C9DA6AC3EC67292ACD5D8630CCEF4641DB19DD4CC8D895C5",
+    "section_salt": "7BD86A32FF05C5A3467AC4770AD53060"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E40CA7C0648E07D9192133CC75F0615E",
+    "aes_key": "28081717F56B17979C8FA959D1705DEA",
+    "data_elements": [
+      {
+        "contents": "3684845D716D939E",
+        "de_type": 119
+      },
+      {
+        "contents": "5947145E79893A962656DB4C59AD50EEAD01F1",
+        "de_type": 727
+      },
+      {
+        "contents": "5978AE5D485DCFFB9867D2F0",
+        "de_type": 641
+      },
+      {
+        "contents": "962B9E9370A4C36C43FEEC0528002B35ECC2ED",
+        "de_type": 938
+      },
+      {
+        "contents": "EB29C1",
+        "de_type": 186
+      }
+    ],
+    "encoded_section": "829013293A19BEAE341B678E05CA9E75DBA8BC91100057B76CE356A06E76CFA8BB68D107FDC39004037C94F1AFD8F33D737F2064155467C3207485B5F71525974A812736FB82850AB38C76D001D5E5CD0B4328D0671D515BD3A96875EE561D2771F74DB2AFAF4EFABB0F0F12B7A17E237FB068C81260B34C1A1BAF706519F3803E23C0",
+    "identity_type": "provisioned",
+    "iv": "40F169746958A56E53FED40BF97B2393",
+    "key_seed": "D49D918900133822B62FD10A29B94E6BE3A2292AD816F2E70BDBC54D028FE522",
+    "metadata_key": "D4AE0FE4DCC55363A8466CF3B4F51435",
+    "section_mic_hmac_key": "1D49C1AD9F730E0160754250778275FFD5799B819699A89B58EF2B3A41903A8B",
+    "section_salt": "57B76CE356A06E76CFA8BB68D107FDC3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "757EE18FCEFF081F4652936C61C98FA4",
+    "aes_key": "402C0F4BDF07820EDD02DB5D70184906",
+    "data_elements": [
+      {
+        "contents": "16023C5646467C0D21089216EBCD2C5413BCEF76CE991FCF661FC4D0C699",
+        "de_type": 362
+      }
+    ],
+    "encoded_section": "589013F1FC637B2DE2561AD1B961848A1C31DE91100012709EC52C322E758DD1D4B3347B16299001DBD653A91D6CFA3EB9D465D9633FBD9D86F1ABE4C9CD01BA0EF5AC6DDFD32AD069F6A6AFA8B424DE31F9D096DDF88B5517",
+    "identity_type": "private",
+    "iv": "94F193ED7C3685CBF02FBCAC1BD8AB90",
+    "key_seed": "01466D478F60FB0CA89BE406E370ED7BF41C0BDC1B4E3C00A21D639968FAEC72",
+    "metadata_key": "55850F8341492920ABD7B9F783E48899",
+    "section_mic_hmac_key": "969F5321DEDA0678199C25C7FD9428994949F8553438F227114C2E2E2DC84599",
+    "section_salt": "12709EC52C322E758DD1D4B3347B1629"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "42BBB939A0B851EBB455B0B9CC6CA629",
+    "aes_key": "3A239E17B2D8469E47B47F8AD8026A61",
+    "data_elements": [
+      {
+        "contents": "A85630426C2034091E33C8805C8470161D9E03FBE5FFC6DA16",
+        "de_type": 1000
+      },
+      {
+        "contents": "",
+        "de_type": 680
+      },
+      {
+        "contents": "22B766878655BAE8D17D60104A",
+        "de_type": 203
+      }
+    ],
+    "encoded_section": "66901361BFCCAF1C31DC52F1BCBDE2CA129C719110008D11CCCA32A98B153EAE11A9A82D5B8B90011EE1A3D2126B9947D2B7738A2AAFDFE4AB95B394A7152262808E7E30B50085DAEFD42870EE6C929F3D694215247C54659972A9EDBEFA4504FC8A8E44174522",
+    "identity_type": "private",
+    "iv": "B4592168B5F6432ED7AA739A5EFD1BEA",
+    "key_seed": "B80CF25126E7DF740A3C7A4C3F070220ECED0A230C46D4166786B7924A3EB873",
+    "metadata_key": "AEC4D47281DFB8882A751CD4D30AC338",
+    "section_mic_hmac_key": "8505CF64E272040C22176713164AB15E9A59595E77793D79E4FA517901E5619E",
+    "section_salt": "8D11CCCA32A98B153EAE11A9A82D5B8B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7FA90676A637142CF7CB5C912AC1F98F",
+    "aes_key": "DA5F3DD4DA5B5420500EB8F9CAF9807B",
+    "data_elements": [],
+    "encoded_section": "3790139616C2562B842335B3474F07B4D10A81911000F24039339EF2187F8D6958E05AAE8D2B9002DA1F8883F7B4BD72A21F62487E578D60",
+    "identity_type": "trusted",
+    "iv": "F24D530E53213A55CF5A6DE13E8BDEF6",
+    "key_seed": "217B43E5524A922F4BA6D492809942BB9021143D3337961443AF613301210AB0",
+    "metadata_key": "83202E063706BD296D9F1E4A7F1C7951",
+    "section_mic_hmac_key": "234DA6C4D3E64D80479D48A109F449C888A444DB541E0CDF9E6ED02303C82A84",
+    "section_salt": "F24039339EF2187F8D6958E05AAE8D2B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "67D52BBE900B7D4B9C3689669C4574BE",
+    "aes_key": "CF50974C04B44AF21E8DA91AB769E3C5",
+    "data_elements": [],
+    "encoded_section": "3790134F982E377F44CCE5EDD47A02E14D0074911000EC29B4AC8612C65A3910C4F542341B169002F16B78F5F6A227EB47469338E73B5591",
+    "identity_type": "trusted",
+    "iv": "DCA9FA6379C1592FCBF87CF2C356022C",
+    "key_seed": "BB1C2824578A27C5BD463EEA37C51DBF8380C9C418DA31629EFB9BC3E2E1E5AF",
+    "metadata_key": "F716A36DE6F63EF6280780B52950B263",
+    "section_mic_hmac_key": "36DB68165CFBE7D58747A358D101CA6BCFEEFF26F6071452017AFEDB64EF411E",
+    "section_salt": "EC29B4AC8612C65A3910C4F542341B16"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A8166ADB4DAE7D4B20347694120671F9",
+    "aes_key": "ABD91B9CED37FF55564836110D6582FE",
+    "data_elements": [
+      {
+        "contents": "E5ED8A82CCC764F7A2223F9C6D4701FB4E",
+        "de_type": 485
+      },
+      {
+        "contents": "30A7FADE0C23C8528D5CF2043572EAB8D6981184",
+        "de_type": 430
+      },
+      {
+        "contents": "2697",
+        "de_type": 607
+      },
+      {
+        "contents": "C8052125E93A57796DC2FE0A560176FA099D06309581D8CF0349DCD63D",
+        "de_type": 175
+      },
+      {
+        "contents": "E7D9B6F5BF4B0A7321F2A3BB4CFA955BB0723229527586F2D8AFD286",
+        "de_type": 802
+      }
+    ],
+    "encoded_section": "A6901329A398A67801759F9CA6A0FE27829740911000B048311CB6B2A4B7CE2518E1CD9356239002F002B86EE8DE89899528BB9568107ADE1966E76715DFF2DCBD3149DEEFA21EDFB4FCC9E4BD0099887239950EAA3AE6245C379A2EA7A2010F82B5966FD9BD4791D3B9281A622EE0C21C089EB54F342574EE043B87CC8C9CDC920EFA3C1026B277E34B6D8A19A9A54F8E4D7461781F87F64B697AEAAFDE058D2D68A0600E6FF3",
+    "identity_type": "trusted",
+    "iv": "ED7F17674307775199068DBF510647C7",
+    "key_seed": "D0BCE2863FDBABA82CBA792D89EA4DB95642305B5967BC96C22D5936E155CE1C",
+    "metadata_key": "6993BBC4A4D2A05F8938EF1CA65CB545",
+    "section_mic_hmac_key": "6E7BB863EB3E1B0026872D4487C94E020D0BD53572D65D7C0D6C860A8D6D0479",
+    "section_salt": "B048311CB6B2A4B7CE2518E1CD935623"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EE774E050991C3C3C9021112F6F6EC06",
+    "aes_key": "AE6E6D8F193D0262BC994CF38FA772DB",
+    "data_elements": [
+      {
+        "contents": "442095408DF056",
+        "de_type": 170
+      },
+      {
+        "contents": "85CA4D8451F85564A337E66E3D",
+        "de_type": 101
+      }
+    ],
+    "encoded_section": "50901385B9A090D6F00D94495AC0F8196830709110006141474D448BDE019B1ACCD97B5898A29001B076A9F616D35B3F67A9324816D2268BC4F1884707102D3D23202C966E0647ED7FAB056222AD712CE5",
+    "identity_type": "private",
+    "iv": "069306DBC724AD554F5241390602AA31",
+    "key_seed": "9CC25445803440DBF96652CC28DA5AFA1735953DCA314BB7EC9FC1C11C3E4DD1",
+    "metadata_key": "541C17F0B1EFF90F37B511C84CB01D06",
+    "section_mic_hmac_key": "6E7AC64E36AC9A870E06118382D82BC2B47D35820715A53DD9954F4BE868517D",
+    "section_salt": "6141474D448BDE019B1ACCD97B5898A2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D51174BCF89730FA639EF480EB430A8F",
+    "aes_key": "DA6B7E261E3C36E6FCF07C079887B799",
+    "data_elements": [
+      {
+        "contents": "7E03CE74C8591B567A1EDA2A366C7E",
+        "de_type": 734
+      },
+      {
+        "contents": "66ABCE0999131CDE50E7C35DB2D8BE895D9938E4E658D37B9A4601",
+        "de_type": 511
+      }
+    ],
+    "encoded_section": "679013CAFCD53B1A04DDA344493191C7EAC7B99110004A952640E5B79A89A0655B00CF018DAC900446881055D48B06AA711F6C8DC456BAACAC13BFF4D46C5A85AC0102A2DC9BF94DC1F012EE6198AA698214B30A1414C363E1020F23A4822AE91A04BA2FE48AD10E",
+    "identity_type": "provisioned",
+    "iv": "07F3DB13F74CCEBDB585C022ED0F4B56",
+    "key_seed": "33B0E0FBAB31D8FE35848E2F78C9D5390DD11ED65F7E4BA39C71D748E92438C7",
+    "metadata_key": "D695C5430C16E9EA343D065570644C0E",
+    "section_mic_hmac_key": "93952E5EEE989B740674ADE0A44A2C64D6A4CF9AFBA3446C07967C14FF5F72DC",
+    "section_salt": "4A952640E5B79A89A0655B00CF018DAC"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "774C0D533FE66410BDD55592E3036A0F",
+    "aes_key": "18AE71C0EE69346777AB7B1E8C253B3B",
+    "data_elements": [],
+    "encoded_section": "3790135D1CB9ACA8C85EBA088DAEEB5F7B2F0F911000B88681185AA3C583D44424B27FE983BD9001D1435474765A6D46A2E1DB20190EC0B5",
+    "identity_type": "private",
+    "iv": "DD2B97D25158EEDC1E23AE53BFAFC480",
+    "key_seed": "58339EC9EAC03D85F9E049005AFC9CB869C91E42AD1579F9B483A94AF53AEF85",
+    "metadata_key": "3849D3FB177823CF145390B303471646",
+    "section_mic_hmac_key": "9514FBB9156CFFA72FB2B0D83B2E1A7F8F12E1089A54B602A1B6E1954BA75500",
+    "section_salt": "B88681185AA3C583D44424B27FE983BD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2A4628CF753A8EA365C9B865A1882111",
+    "aes_key": "A155E6D506D2F148E0AB36A972E814BC",
+    "data_elements": [
+      {
+        "contents": "8C77898782AFDD3BBB5415BD",
+        "de_type": 639
+      },
+      {
+        "contents": "7B0C5D7023C73B8522C9EA75",
+        "de_type": 903
+      },
+      {
+        "contents": "9CDB06ED0CA5436E486401F2BD230C0BFB4C",
+        "de_type": 421
+      },
+      {
+        "contents": "B7841BAB20AA8DFFAFDBE875C19C0479189092AB",
+        "de_type": 914
+      },
+      {
+        "contents": "7DBC5D",
+        "de_type": 13
+      }
+    ],
+    "encoded_section": "859013018B2B85208E151D0AE32ACE1338E72C9110005F4F13AE0A18955384461083CBDD4808900253E05D4D34C0F0AE7B49116B244A88D9A46A108C9CC629BB2425C7FFA06C65B8776B3F14DB40950B88A64CB748A51F9774EB4D520DEAB00ACCEA9B8C21BBCD78DE99503D58C3180C74D9975717039336048301DA335326C27A515D26BA18",
+    "identity_type": "trusted",
+    "iv": "D19E93815AF20322A04DA98F0C71E960",
+    "key_seed": "EFAE9C42B2580C7BD3B6F72022C14514C52214F90B4592AE55DBA17AECC21CA9",
+    "metadata_key": "D8DA27FC09648F9A7B03CE89C6C0E73B",
+    "section_mic_hmac_key": "C9B288EA8BD044EF4F94D580F71B5411A511D4BF8731FAA43760FFE5854D690B",
+    "section_salt": "5F4F13AE0A18955384461083CBDD4808"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "63C164C01739526FDFF320C932DF63AA",
+    "aes_key": "6571AF72F4E833E632EA672CD1ED748F",
+    "data_elements": [
+      {
+        "contents": "E3590FC9ED1455080A7F9141290E3A7A86CF07E56EC946",
+        "de_type": 158
+      },
+      {
+        "contents": "DCEC6A40CE44EBB393E18282D6EC2942AF3E4C0ECA67ECD01CD450",
+        "de_type": 331
+      },
+      {
+        "contents": "E7",
+        "de_type": 627
+      },
+      {
+        "contents": "550A",
+        "de_type": 213
+      }
+    ],
+    "encoded_section": "7890135C8416F66FBF8296AFC54C0B51DD9D54911000C730E6814F61380EFAEF16F4AC12251B9002290C795417F652150706F2122E017A644903C036E3A38349C982CA8A03D481CAC715B9B95F40189FE7470117B3D7097D8DF2B09187190A285B937C7CAB276D0801AE6B224F710CBB80585C3A66EDF99293",
+    "identity_type": "trusted",
+    "iv": "23C8041707E666CDD9B92CE4E16390C6",
+    "key_seed": "E54B5923FBCAC75CF05EBA91DF3C5A62DEF8A88671EAE2D9261C30FD83245BB4",
+    "metadata_key": "DB91F1262351AD353C9CEF87EC701A18",
+    "section_mic_hmac_key": "0A44BEDF00C054D356FEC008D901B583FC99CECB4DD06FF16BABD31C7595312F",
+    "section_salt": "C730E6814F61380EFAEF16F4AC12251B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D6A2EAD0DBDFF521DB943F9164E9ABF5",
+    "aes_key": "BD03B9DA72C3E8AFC6C0E7E62F02D66E",
+    "data_elements": [
+      {
+        "contents": "FB62FA28DE416B3FF7C32CDE250E503A38AC512010D9A11E21ED08",
+        "de_type": 580
+      },
+      {
+        "contents": "5B6053833E7DA425451F",
+        "de_type": 86
+      }
+    ],
+    "encoded_section": "619013B8C630B2133545FF1C0C09F167B63A769110005DBAE9CE6653D2E2B9466DE1F81BE8BA90022F5C1D5F8C8B84AE9E2988700331EC43097F2B12FC61E105086BCDF84D27411E91717096B8EFDA92630445AE4D2F984A2863C71CBA45AC3290A8",
+    "identity_type": "trusted",
+    "iv": "E82975873E9953E02212AF85698F56A9",
+    "key_seed": "88F7698955CC78F3019EA531FB78FB1DB904390B04C10F42F19257F35001FA89",
+    "metadata_key": "66E54B6B9FB695DBD3CA8C66C5FDF514",
+    "section_mic_hmac_key": "C739EE6C7D4FDF5A76FADA66C0872E628EE444761679A4005F45F01CD1A748CC",
+    "section_salt": "5DBAE9CE6653D2E2B9466DE1F81BE8BA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BAF192B97D33369E018E81BC50AC8F7A",
+    "aes_key": "325B3B524F9BF9100439F3089DA3C7FA",
+    "data_elements": [
+      {
+        "contents": "B0",
+        "de_type": 856
+      }
+    ],
+    "encoded_section": "3B901356FF1D5E7200783B9778078D010BA13D9110001FC604425A47F60D3C1CC80624EC40139004A2EB00B81AE9CE42819E6CBB1CDA25BC43B99433",
+    "identity_type": "provisioned",
+    "iv": "5BC3D50F1BBEC06A2B6B68DA3D21075B",
+    "key_seed": "449CF830F890204B2D836B34548904080906F492D5CF84FC0C2C82D782CAB553",
+    "metadata_key": "79C0215D30C0B475C608D77C570B4CE8",
+    "section_mic_hmac_key": "6B3F15514E22EE373A70F39F81516BE169F8AF5458E35CBB3C5B60AC036A6E64",
+    "section_salt": "1FC604425A47F60D3C1CC80624EC4013"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "719A721598179D4D4B26E2ADC7E3C50F",
+    "aes_key": "ABADECB605978F38B860C1AC618EF22E",
+    "data_elements": [
+      {
+        "contents": "2B481F57DBA2E4528AADB3F65A2E0A10FD912A517252F49806DC",
+        "de_type": 452
+      },
+      {
+        "contents": "7EDA82863D",
+        "de_type": 366
+      },
+      {
+        "contents": "8A8868E25778C9D2DBF3E428",
+        "de_type": 541
+      }
+    ],
+    "encoded_section": "6B9013B2C0BE2B338651F83C9DEE9FF7A5E9B3911000320082AFF78C58B12275134DD71800779002E109918D72EB73A7CF12E71CB578633A99BBE624409264B989AD42AD9FF7386B107AB874BE50CEDC6C193CC56FB20F9986CF982065C0867E248B792655F223FB1B99B268",
+    "identity_type": "trusted",
+    "iv": "EACEF787A9AA0D378B47AF7B7BAACC41",
+    "key_seed": "8C96ADE771F0EC82E8A65EAB09768E0D2779DC80D10AC3A93C69EDADA363C9D6",
+    "metadata_key": "980207617795323129DA7B883489A471",
+    "section_mic_hmac_key": "878F73081377F28C1DCD6BA7A3C9CCDB12B2F9D0577D37F2217558C7D5B560B7",
+    "section_salt": "320082AFF78C58B12275134DD7180077"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "898AF84E18B19268BF0066E1B843DB2A",
+    "aes_key": "D18AA5914985AE77CE2FCE7552F09B46",
+    "data_elements": [
+      {
+        "contents": "4615409B344399237B3ABDB8F670E5B8655C8EF5449E5DE40A9A015E197A",
+        "de_type": 851
+      },
+      {
+        "contents": "3D6EBF61130ADEE935CA18BFEFECD70BD2F9C05F276F52860E6C",
+        "de_type": 516
+      },
+      {
+        "contents": "9E",
+        "de_type": 916
+      }
+    ],
+    "encoded_section": "79901393C3CD52AE720625794E99D501168018911000B225FB4D96E5A2AD5966E0201447323F9002B0CE58BA8230AE27D19688FCA438C5C94AAD5E60F0750EB7F63D98739E51CDCC0AEFF8E374AD8CA4B87E671B1163F8075511F02B94493CE489C0BFD6626FFCD80A78A99F869E6D048D89A29D7EE9DC94572B",
+    "identity_type": "trusted",
+    "iv": "0F973AE8405A878AAF91F3F3030CCDB5",
+    "key_seed": "FC64BAB5EBFD28BCC2DF64A332591AC18E67D4F0D8D04B09D15BE99F992BD0F6",
+    "metadata_key": "2817DC0D3018C8208062F9F09F0217C5",
+    "section_mic_hmac_key": "DFAB6D5BBC1AEEDC067EC644D7AB15D0A0FBBFA0FF766A45BC6AE217B00C1A76",
+    "section_salt": "B225FB4D96E5A2AD5966E0201447323F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6CA09CF038262F0B86AFC0F196F079A1",
+    "aes_key": "DC35D7E7C27384B92F1F218AA96E5815",
+    "data_elements": [
+      {
+        "contents": "F11DD7ACEED992",
+        "de_type": 439
+      },
+      {
+        "contents": "19CA080B4B458E94D3973AEBE5",
+        "de_type": 120
+      },
+      {
+        "contents": "",
+        "de_type": 973
+      },
+      {
+        "contents": "138501DB6DF8DE97",
+        "de_type": 122
+      }
+    ],
+    "encoded_section": "5D901335901EB3DFE18DDCC333E258CEBC67A6911000C453204CA5BF1BE8A080F58E1E046BDB90013A59DFC6058F6E641E7F6BCE6B71D94D022FF601B5D7CB45AE24E902357B8AB7332484AFB64A5EE9B2D654B67879279632B8226CD83A",
+    "identity_type": "private",
+    "iv": "C4013A2D4DCC401351902092CA23D50E",
+    "key_seed": "9C31224BE4354E49AFB6CCD5EE02E4CD13A1E57ABE9FD2CE2501A039B51E6425",
+    "metadata_key": "7A67555F40D8FA75031A57BFCA376901",
+    "section_mic_hmac_key": "32FA238989BD8A58E646578F6ABF19C7A49B10F8A626BBAA984C7163A6129896",
+    "section_salt": "C453204CA5BF1BE8A080F58E1E046BDB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1AD93C4DB2AA2956308F6B40D2227DE4",
+    "aes_key": "702409CD2C1478EA23213540CAD5A499",
+    "data_elements": [
+      {
+        "contents": "A104DBE9FC480BD7403A4F2488AA305DB6CDC31C85923D7F71B751",
+        "de_type": 441
+      },
+      {
+        "contents": "3AC2773587350DE26099CF",
+        "de_type": 827
+      },
+      {
+        "contents": "320622",
+        "de_type": 969
+      }
+    ],
+    "encoded_section": "699013A36C4D395FF98F721DECC40BC9CE7A96911000687BD81DC1D918FE6F5EA0EA6871D83590016D763DF756CE03623E713A3A5CEFC54FB9A77EDA7C91BA0072023850ABE73DE6F6E4CA176F830D0E0A33FA5D169D172F2B50ECC62C75A95C5A9BACBE4FAB29A3DB7A",
+    "identity_type": "private",
+    "iv": "AF815000B11B4D2338590EE859E43B26",
+    "key_seed": "BCF8775858AF8BB34B9296C2B9CB9604AA68CEAF0E015FC23F88F60CA73E0EC1",
+    "metadata_key": "22AD97286075323B5D9C97A18C8516C2",
+    "section_mic_hmac_key": "E59A1CB6BD1ADF2BF24F4C657428105B097C70A80EE4F707ED96551FE4FE834C",
+    "section_salt": "687BD81DC1D918FE6F5EA0EA6871D835"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CF0F5C6FF715661FDD243EEFCC3DF000",
+    "aes_key": "465940811F2D7624AF1BC24ECF583A31",
+    "data_elements": [
+      {
+        "contents": "ED5B2856E0",
+        "de_type": 480
+      },
+      {
+        "contents": "5C9037389AE1E052391238AFA847305B8D52F177ACF119F8F5958475C1DD",
+        "de_type": 458
+      },
+      {
+        "contents": "F1207137",
+        "de_type": 42
+      },
+      {
+        "contents": "9EA01A",
+        "de_type": 627
+      }
+    ],
+    "encoded_section": "6C901358A772231DD98A3887EE3F43DBADB5219110002BC0BF28D21A7964B7F0993AE4F5B0EB90013C3E4A659C9FF925633BE6B56F540526D0F5ECDCA82350FE06A01B7DF9180909C186D3892E87DFE229957C59982999EE546326D04870BA1F7D953C8F4E7BC2A62F0940C9C1",
+    "identity_type": "private",
+    "iv": "668CB07C7E17BBC9C738DB7DDE67F0B8",
+    "key_seed": "D86A2754D9774433632916979DA1EBB2D15DEBE68568D976D6F611E7767C6CD4",
+    "metadata_key": "7D9BBF1CBA464E5B3D3E1132C99C3D2D",
+    "section_mic_hmac_key": "16C2939D01D4B63ADDBC2CE217C412B1DB240E79171BDF904BF90A2F0E5DD55D",
+    "section_salt": "2BC0BF28D21A7964B7F0993AE4F5B0EB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A4F08E8443AAE40F4E7DAC88701D0A61",
+    "aes_key": "E32648F00DE2B1472DF2AC0C21D46D41",
+    "data_elements": [
+      {
+        "contents": "67ADC5EFF86C7C6823C644A2",
+        "de_type": 245
+      },
+      {
+        "contents": "A2FE5429988C99F4608621F625D2",
+        "de_type": 446
+      },
+      {
+        "contents": "CDD480DE03360DAE07242D23F079",
+        "de_type": 236
+      },
+      {
+        "contents": "66517DDF7ABCB8577D19413F67E25F",
+        "de_type": 307
+      }
+    ],
+    "encoded_section": "7A90138693FA8FDE6BC60CA1E4714073108989911000C10DC9C0C4A68B9018C3488D10740CBB90044E395EF33AEC517158560D95A90F95FD4F901983D6F8FFDDB7B22CA5054BADD29B844F5E589C81D03EB39FC74D0E88B8D6D708CB0A8A8073FEBC2DC580146760537167FD194907D3DE050A6CD1807E2A7B2BC9",
+    "identity_type": "provisioned",
+    "iv": "40B3E8038361FDC0CA520885C4BA45EE",
+    "key_seed": "12CA6E10625D8A743F3980FF5B82786D1E11A0B2E7095D1C60B6500947C7A80F",
+    "metadata_key": "47D63E40F400537213FA6C39741EA95A",
+    "section_mic_hmac_key": "C2DC1307FFA2E742682513F21A7F585D155EB98549978992A6561DA4F9C2779D",
+    "section_salt": "C10DC9C0C4A68B9018C3488D10740CBB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7F3B4AC49A6859D7121614C35F5B54B0",
+    "aes_key": "A0E754DDBDC126DED5C2E5BD3ED151A8",
+    "data_elements": [],
+    "encoded_section": "379013F66D7FA47F0BF107AF009FBD4FD70BD3911000FD6B5B75A82F46AD1EE3944D6229D1059004094FD3464A10B7EBB9FD171DB106A835",
+    "identity_type": "provisioned",
+    "iv": "5F212B399449367351A9BE5E8CC87ACD",
+    "key_seed": "687577B839C89F80ABB09A60CB09330F201F7E109C18AABCF5B7CE3ACCEB7C9D",
+    "metadata_key": "9190921467B2FCFC928327A128A00D5D",
+    "section_mic_hmac_key": "EE0BE709ACDA6445F99E7F9709367F1970CC0FF034BB9BAB2525B06838192DE4",
+    "section_salt": "FD6B5B75A82F46AD1EE3944D6229D105"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1D2E3A430DA547BCCC40814B7CB98093",
+    "aes_key": "EB9DE857753B905D9DAD3D6D68B97845",
+    "data_elements": [
+      {
+        "contents": "7D25",
+        "de_type": 960
+      }
+    ],
+    "encoded_section": "3C90138C32DC48034E13962C03225C7CCC98E19110001F9ECD3C6A5399AE4A22D21D04D50F3D90022E75DADE997D7635B4AB53D54DB577263C8E60D0F7",
+    "identity_type": "trusted",
+    "iv": "DE93D4114DE77843376E66C9C1FED8C8",
+    "key_seed": "FF1AD1F98E7A02BFD970E2E6D969E4BAB06F89AAE1D901C5158ECEA444EE7569",
+    "metadata_key": "0A83D4CB8541829EB4E13989DEE85722",
+    "section_mic_hmac_key": "336BE3349032B9BE9AC4E030B439CA29C22300C39C29A768E5429DFDD59CB347",
+    "section_salt": "1F9ECD3C6A5399AE4A22D21D04D50F3D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "95EF9550DD4E6DAB348F32EC6ACE9ACE",
+    "aes_key": "9282028C74EA00E0A695AA0127941CD4",
+    "data_elements": [
+      {
+        "contents": "014FD0938269F334",
+        "de_type": 26
+      },
+      {
+        "contents": "B419499BCF2AD0B5",
+        "de_type": 732
+      },
+      {
+        "contents": "998BF95EF3754B4684BA80",
+        "de_type": 84
+      },
+      {
+        "contents": "61BB19",
+        "de_type": 525
+      },
+      {
+        "contents": "E911B16D15B9D70D53BCD3B27705427D11C34D8EC29011A6FC33A1205D",
+        "de_type": 9
+      }
+    ],
+    "encoded_section": "7E9013F9317F3EF17F72D0E6E671B482D48FE8911000A5E06CFDFE69CCD42F56062A56578B739004E967DC13B2AEFE2F508828E75102BA7D102B73D8563823F379ACE502595F925B51489A8A865904136429350CA3FC0E80475D5EF603BFBBF13483E718CC349627424499020BA3738BF25127BCF7FB6122FFA582FC9D4806",
+    "identity_type": "provisioned",
+    "iv": "0B48A691BEE1A64AC8D64656A4C6E8F5",
+    "key_seed": "BAC80598D5D058B07BAB96DD55772405A2E8A8F533907534D9A0E3FAA9F30F8A",
+    "metadata_key": "F759E495DD16BC4B4536A72A4FD88C2E",
+    "section_mic_hmac_key": "A69B4595E2EF8D19BDD30DB2B3A6C6890840D061A2516C12B9C137832906B7FD",
+    "section_salt": "A5E06CFDFE69CCD42F56062A56578B73"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "70F3562E36D87A53735B298C8920DCCE",
+    "aes_key": "2A04329E89E63A6EEE1E5B9FE26FF072",
+    "data_elements": [
+      {
+        "contents": "E26993B71A36032D7B6BD3BE1DFC1A916A6BFDE486468C",
+        "de_type": 619
+      },
+      {
+        "contents": "4E4B6D3471BA6DE8958649F7A8F3F2D1D8B858BACA4F9D737E622F",
+        "de_type": 159
+      },
+      {
+        "contents": "0C30D8A9B7F50CE9EC",
+        "de_type": 992
+      },
+      {
+        "contents": "D682BEFA334E31CC3D253BC9B8F9E7",
+        "de_type": 379
+      }
+    ],
+    "encoded_section": "8D90137C433C789FC67F116E0B42170BBE1A2C911000ACC738CA77736DA78E61AE2F8BFD56EF90029BDCB44AB171091ADCABA9B4C47698F06A60E7785AE6EB868FA0D3508C4028357D558423ABD64E685A53B84E7CEFBA04B41B7AFE9701E27C2A655BB0FD8E4BACEED81D020887BDEAD433D10A2ECC65781E33C048D8FB20599660EF16CA4964D39E1775E80970",
+    "identity_type": "trusted",
+    "iv": "1AA5C3111877402AB12DF3A5D98BE228",
+    "key_seed": "23FE203BEE209B85F8FBFF96FFD45C5CBBBA541638C875E7D3E882407E75BF0A",
+    "metadata_key": "9D984FDB62E86B53E9D7DF7A14C9961F",
+    "section_mic_hmac_key": "3D5C46804EE11C44B04E69BD02A26FC9F8140A98E0BF5B6B28601D9BA19223AE",
+    "section_salt": "ACC738CA77736DA78E61AE2F8BFD56EF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E17588ABD3AE8E7D6C334D1B0AF92891",
+    "aes_key": "EC4481D436C1713129486151E496D152",
+    "data_elements": [],
+    "encoded_section": "3790139A5DA17E993C1658DBFA6658604A3001911000D08F272BBAB54B86764CDE901B979BE09002B897890E043267F8EE1F98C5F9BBDD30",
+    "identity_type": "trusted",
+    "iv": "251B33B9AF829B6ED1ABDA627054F6F7",
+    "key_seed": "EAEC6309BB2C6EFFBCB0C2BE01F11E4F90F5E7B8887E818D5AC1D4A7DB57069A",
+    "metadata_key": "F542D812841B2DD775BBB4A8410C492E",
+    "section_mic_hmac_key": "F67EF00325C91A6AB801927DA0B6796DD8DC33C90329FA717824EE7E180C1760",
+    "section_salt": "D08F272BBAB54B86764CDE901B979BE0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2345A6D584F3974CF098E8C192904039",
+    "aes_key": "4DB8F7C88764BB94D3A3ABE8A1F8AA20",
+    "data_elements": [
+      {
+        "contents": "FBD07BACA069E273FABEB5458519AC66",
+        "de_type": 270
+      }
+    ],
+    "encoded_section": "4A9013928EE6E8ECEFE0F28379CF5C9032291991100098A4C16E5FDCB9E737355B6BF7EAB38D90028A111BA84A1E974CF9DEB93971DA7789A71713E4BFAEB4AC83415674B15BAB0CF85A89",
+    "identity_type": "trusted",
+    "iv": "212CD8997AAA9236F1FDA4DB9BD918A7",
+    "key_seed": "67E2C8B99AAEE6CFD7809BF4BE4439021C1917798195E90C095AB601C718CE52",
+    "metadata_key": "F1FEE18C49BA92C3F2F65E445A273F17",
+    "section_mic_hmac_key": "76ED254493D473BDC8188E855AE215771406C7EAD2655C0699E1408905F39146",
+    "section_salt": "98A4C16E5FDCB9E737355B6BF7EAB38D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F9AC3BDFBD989B3B7B99227F4A75895E",
+    "aes_key": "F4A4A68E314433E1525A20A7CE56CF0D",
+    "data_elements": [
+      {
+        "contents": "8953B51DCADD4B6DDAE1F254D6FF075F023EE782962BA2E5EC3F",
+        "de_type": 51
+      },
+      {
+        "contents": "3B90B29DDDB595115F94",
+        "de_type": 474
+      },
+      {
+        "contents": "3AE3DC2B64E42DEE4591D3017A373707622603E768FF",
+        "de_type": 420
+      },
+      {
+        "contents": "606367570FAEE5",
+        "de_type": 567
+      },
+      {
+        "contents": "8058E4",
+        "de_type": 400
+      }
+    ],
+    "encoded_section": "899013F28C4419C0F39FEF91816ED59BB640CF9110008A20C8F8A8F8066BCC1BE4A65AC5792A900117084AF29AE92FD19FA96EBE5C8A2A42563981458E841FB326A570E844CB1C9DF86C5ECD71E381212CA1AB349CBAB6E08E587987A237010D73012F12DA01137A6DB31DC714AC92A7E6ABD3D25D66DDD4A3F017E36180B1BC81BE906A37A7E5847306",
+    "identity_type": "private",
+    "iv": "001886333197146B65A467C6A5ADABD0",
+    "key_seed": "9FD56F525349238F02680E5213FA5A0976841E232787AF705FBCBC9B20064E11",
+    "metadata_key": "688DE85D9D408FA2DE99A56F603BA664",
+    "section_mic_hmac_key": "496FC8B5DDFF85EA5AFB6257048F16A63C38E6B1B0B6880B6DC982AC06F61F5C",
+    "section_salt": "8A20C8F8A8F8066BCC1BE4A65AC5792A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "82BA44E40EE515F4EDB7BD0835B26BCA",
+    "aes_key": "E63C191EBB567BB2A374A6C5CA7789B9",
+    "data_elements": [
+      {
+        "contents": "936AD5B9E6439EFB69339392A4FD2913",
+        "de_type": 897
+      },
+      {
+        "contents": "BB64D6B15EE9AAA7A2A4E90CD9D3D7DFF853855652F3C314",
+        "de_type": 128
+      }
+    ],
+    "encoded_section": "659013898A83F5E4A7D3DB3F24B83BBAF8FF0C911000A9BAAB812351BFBC259E10C891B67FB490020580A146D32401847A52599D99C1059DFC1B9E2C00E18BE478924C134C5EF2FCB007EF712EDB4C8A69389EA6AAE580B3A3D549891C657768EE03112B204B",
+    "identity_type": "trusted",
+    "iv": "A40BE5CD2ED5BB0EBB4725421B8DCAC5",
+    "key_seed": "3A2C30261D095C238E882B56F8D8CD61B607E7386D35FE3DF3C577A501D583B2",
+    "metadata_key": "39DB2F2278DB54194F32AF85B1E78C21",
+    "section_mic_hmac_key": "DDBDFB689EFB7F278636DAA76509101635BD2F29F5374C2FE5FF61C0BC7777A8",
+    "section_salt": "A9BAAB812351BFBC259E10C891B67FB4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A8B3C773BB49A28374AB878083EF4DD0",
+    "aes_key": "A7AE16ABAAB4F23FE69F81219078B6B3",
+    "data_elements": [
+      {
+        "contents": "941B67D98B",
+        "de_type": 482
+      },
+      {
+        "contents": "B56226DF686EE11F00F46D8EAC2FA6B3",
+        "de_type": 124
+      },
+      {
+        "contents": "1DAEF38ACABF3F7F72E0C36D95CE462F",
+        "de_type": 451
+      },
+      {
+        "contents": "C5AE1183996F56207CB46CCF9292D5FE2076EC2FC7DCB8BC5B5C",
+        "de_type": 200
+      }
+    ],
+    "encoded_section": "8190131E760FF2E9791B7C00259DE6622D097B9110008F7B71C5430C84A4A66BA8D98FB94F4B900234D15FEF96C1A3789732CCB516DA820979DAC80D2385402A65AE0C15A2234225C44833EB9FF44685B5C5F63331C9A54DD49754676E9A9EFA33BC008618F6FF6EFDA711690EB21B15E1FDD560000C2914756DE9B3ED6F3E26972B",
+    "identity_type": "trusted",
+    "iv": "A3F606AB7B1C0576ECD16E9FE421CDD9",
+    "key_seed": "9B041D4F0C1EF90F3FA1F40CC00F8E2B5F76237D87E8A3532B59953F72C44806",
+    "metadata_key": "654C72908F7B826008996F7F055E37BA",
+    "section_mic_hmac_key": "9F368D4991C333653B18B8E47BC2228B4B8AF094D9B0CFAAB697EAA4BDDD0EDB",
+    "section_salt": "8F7B71C5430C84A4A66BA8D98FB94F4B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3FF717A2F51020F0A8E7EEF5A58FF598",
+    "aes_key": "6B159573A0B1AD7A064F2B0C7E112009",
+    "data_elements": [
+      {
+        "contents": "170495D7E094775F3FE95D8B687AEED4201D2565013BB6D143B4368AB3",
+        "de_type": 261
+      }
+    ],
+    "encoded_section": "579013C0015142640B5256342482B97540A7F3911000391F6DD321079B0843F5D827A33F72FC9004DC8B35CA45AA35A6FBD7B3775EE4A1E612928B2B6F7915B574AF3B76C69D151D7B6948E811B99489CC62D223399F4007",
+    "identity_type": "provisioned",
+    "iv": "DB8D8BB540FE93482C143E02B46DBB41",
+    "key_seed": "2A25270DBE2575BF55DCA0EAE26CFBF9B57CD40F4F3676A108C187C20D4A6F26",
+    "metadata_key": "970D974CABAEDE9ECFE8B1A9CC874879",
+    "section_mic_hmac_key": "405D13A8D5CD5035A191FDB35DD6D3EEB16ACDD4253098B9DF5626EDD56F7329",
+    "section_salt": "391F6DD321079B0843F5D827A33F72FC"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C604ED2EC8A3D1C29EC5A827AE9EDDA2",
+    "aes_key": "52795E8FBEF4F5EB97CC11774B1B3C3B",
+    "data_elements": [
+      {
+        "contents": "3E",
+        "de_type": 834
+      },
+      {
+        "contents": "682F12CA13A8346A46FF",
+        "de_type": 549
+      },
+      {
+        "contents": "11DD9D8544F5BF2CA35D580E223AD090D48C62E3085AB6CFF4A756",
+        "de_type": 194
+      },
+      {
+        "contents": "A949786794EB5D",
+        "de_type": 543
+      }
+    ],
+    "encoded_section": "70901355836184F4627B8EC7B78B6BB25D230A911000B462B56430FA636C4A6077DAE3E8490C90014B885213D89DC53C660697E09A405EEF027A56F667D32250711FB9AF57E6B173293D4EC62278A5047EE2D95D71CF8297D0BB81882856A9C03855BE2759368C3B68A19E2B7D4926DDF6",
+    "identity_type": "private",
+    "iv": "9FB083D020CF0194A51614C38F4CB78E",
+    "key_seed": "BB328C2C3773B18C637890F7F307C4D5EE297251BD0A3F101061B7C7DDE4436B",
+    "metadata_key": "2044D85EFE05830A56C3828A60E1B22F",
+    "section_mic_hmac_key": "9296C374AAF9CFC2E968F9D212EA9FAA10E7CA1712E740F8C423F58377DEBEA6",
+    "section_salt": "B462B56430FA636C4A6077DAE3E8490C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E4AE638B1788F6A4A7AE8A95A170217D",
+    "aes_key": "F86260862227268C0AC94B2821714BEE",
+    "data_elements": [
+      {
+        "contents": "095F42586EFFA90A02AD1377438DC0FB442F8BC36B084071A340",
+        "de_type": 991
+      },
+      {
+        "contents": "21D38A40C8F0CC8CD37E8B99E395",
+        "de_type": 663
+      },
+      {
+        "contents": "0610976CBF91C272697FF6F3DF90CDBF",
+        "de_type": 331
+      },
+      {
+        "contents": "C46F54",
+        "de_type": 806
+      }
+    ],
+    "encoded_section": "7E901310E81093792AB0299A1F5B9AAEDC438A911000FE1897EC2C7F696F9A12BA2E3AB8FF109001BD9694097F3C01B81BBAE58DC0AE45DCEEE6725DEF44E95C4651F50683E6E1452ECE362EB210B8F69E64C2147D7ACCB82C7A8FFBB1872CFB90BD33A33CB73837084C658664373AB183EFDE54555E374E0282DBE99F4FA4",
+    "identity_type": "private",
+    "iv": "0B8F21A0532C5CC2183796C8116C1AB2",
+    "key_seed": "144F46384687F7622633B6BF79597124B6602947F71FE56D358D8255FE706F75",
+    "metadata_key": "FBA8A028F20EDC2617B4EFF42F1B6449",
+    "section_mic_hmac_key": "6842368E240421D08BB41E23656533362CC290661EF54E887756D7BDE52E90A6",
+    "section_salt": "FE1897EC2C7F696F9A12BA2E3AB8FF10"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "21D9EBBF5909A89E702560D71E29B2C4",
+    "aes_key": "81CA1370B0438486CCDB17555BB775B0",
+    "data_elements": [
+      {
+        "contents": "111FCD56D62B43",
+        "de_type": 52
+      },
+      {
+        "contents": "C15A18724AC7E528B46E9E35F7554B1209E7F902A60333061B5381",
+        "de_type": 424
+      }
+    ],
+    "encoded_section": "5E9013D9B742F3C9077E30BF514C324378A6A6911000074399230FFE3522BF65A0E4DCCEEF149002A212E54AD7F78EE74E021C037C9C0B3A4493EE50C04B6BD43D728CCD62DF48707D3D3503E56426ED0CEC9DC87AC7FC6596B8DC23D4E10B",
+    "identity_type": "trusted",
+    "iv": "BD67CFC964A067113164BA2579085C26",
+    "key_seed": "63FB25167C581FE8ADE6766A9CBB04B2D734564EA92161E6DF67C3776B7589E7",
+    "metadata_key": "93081F4B0D4644A3EEFB094ACADCDB72",
+    "section_mic_hmac_key": "B01F9FFC04A6ABDFA23B54EE3A0855251B07ECBA387FAC32783C2D1E31502187",
+    "section_salt": "074399230FFE3522BF65A0E4DCCEEF14"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "376F7973FB47B8DE4EFBB10BA01B4CAD",
+    "aes_key": "AC46F566457606055B133DAA5632FDA9",
+    "data_elements": [
+      {
+        "contents": "4FABE07C139A4BB10FED0547",
+        "de_type": 717
+      },
+      {
+        "contents": "B0A28EBF12",
+        "de_type": 337
+      },
+      {
+        "contents": "2EC51325F981AF5E505025CF2432078896A5A4C5079CC2AF4067C5A9",
+        "de_type": 565
+      },
+      {
+        "contents": "B50C",
+        "de_type": 246
+      }
+    ],
+    "encoded_section": "72901355710202686237786A7FAB75ED3F998E91100094670B48A85C57471200A7A15C35EF2D90044551AD5E4D9C0F656F0D5A1EF39F021CF714060E5F72C5E4165827B2D33B39A68AD8E0B747C2FCB223D61B51C4CD32C0C14273A496135AD4459FC8615EF2D076B9942FB9D6A3F6A39F8152",
+    "identity_type": "provisioned",
+    "iv": "1F042222693F97550BC695DE068B0F27",
+    "key_seed": "B7CCCD49D67B3D822F0EB6389CD28D0D0F709EBCE75A1D41CF78BDAB9C649F8E",
+    "metadata_key": "D484AF3D402DCE7C7765AFE667044B4E",
+    "section_mic_hmac_key": "9D04723E57927BB0E47023BFFFB73D7ACD3A75807E62C48D34D81F47DCD2213C",
+    "section_salt": "94670B48A85C57471200A7A15C35EF2D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "633A93C20610A1F816E80581D99A8B3E",
+    "aes_key": "4371A9D1A3EB70A57E84488A54E24687",
+    "data_elements": [
+      {
+        "contents": "AD8C2BC724A8477BCDABB0118A33D84A98C8807FB87D9CEF9FCAA3D1",
+        "de_type": 853
+      },
+      {
+        "contents": "01B3970FC3FDD7E7ED030AD7AAF1AD72863B93FA61",
+        "de_type": 658
+      },
+      {
+        "contents": "8780D33466F56DB455D0D46E24CC32AE0695308F2F63BC6548B4",
+        "de_type": 728
+      },
+      {
+        "contents": "8F76",
+        "de_type": 45
+      },
+      {
+        "contents": "94F61429E70AEF3E8003487BAB3AE1D6319FC95FD097672D626F",
+        "de_type": 65
+      }
+    ],
+    "encoded_section": "AB9013195BA9A9F3767992302308D00CC1C1EE911000D293112ABD9E9E2DE6C9580BFBF3EEC590047F67987EF7E1FA205D9F59BFD255EF665258B5DA63CDD2CA567DA31D331C085AAB47056FB34C5637C13EC88A08BD9D7D96250A8CE4B314B4FAA00870BBCB5F2B060BE6492B524821708BD765303EB55C2C3DE721F34C3249BDD36AE5595B6AD9E9BAE6925E0BBEFEF7D5400A5BB802BD8F96D54B15C2F0A4E672174CEA6E0EE5C2030648",
+    "identity_type": "provisioned",
+    "iv": "EF05D22E05D50648CE4B24BAB3070391",
+    "key_seed": "63626EA34F2C9B87028C0977809D2F7768E73DD48D9D4BC4E9A8AA6AB63E51CF",
+    "metadata_key": "A028CF69452B18E0B48C12F43A92BFFC",
+    "section_mic_hmac_key": "CC71E5A17B3F67FC8293349047F85966CC1D2107A6C9A868904CE012FF6D1EB7",
+    "section_salt": "D293112ABD9E9E2DE6C9580BFBF3EEC5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A2FAFCF0C3D4653B115D3C2BE07661CB",
+    "aes_key": "D3F0BD209D67F0C6793F151852DEBD06",
+    "data_elements": [
+      {
+        "contents": "82A3CE3347A4",
+        "de_type": 831
+      },
+      {
+        "contents": "F3AAF8D0",
+        "de_type": 633
+      }
+    ],
+    "encoded_section": "4790130DB30D981DE33703A0264019ADBDA644911000B76D1505FDE3A6DB5745C79C2ED803CA9001486C1A884EB0CACB9ADF1F0D7FF508AB81EE16696136F0FA512B4FD6C6A16B9E",
+    "identity_type": "private",
+    "iv": "A35D9428CEF6CA021B52076EA6DCB262",
+    "key_seed": "CA2DD34D998FEE70368831DD2798E0F1936A589B1C1A5B60FA3D0A4C8D4E0FF4",
+    "metadata_key": "599B29224832981BD60E11082FC157C3",
+    "section_mic_hmac_key": "5095030D99F2E81933347E8311CE3391BD1FB3C0B5F9397915FD1ACBC0B1494B",
+    "section_salt": "B76D1505FDE3A6DB5745C79C2ED803CA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FE6A04FEB87E30414222FE02FC1DED3C",
+    "aes_key": "AD143FFF025A7B908F3028F255017A0F",
+    "data_elements": [
+      {
+        "contents": "B41FFF16CE",
+        "de_type": 692
+      },
+      {
+        "contents": "C5EE2285043F76FF038B30EF5EC3888A9D9EEFAF6EF2C4A7F1",
+        "de_type": 275
+      },
+      {
+        "contents": "4F22FC1B2C68EFEA",
+        "de_type": 389
+      }
+    ],
+    "encoded_section": "669013AF4FE79DE836E8BAC2A418D44693F4EC9110005DE51155F2A2EE8C7E16026723F4B81E900295FCF7C7A95DA0AADD01DF2EF798AC707CB88138553B4DECBF061D353A6206561B4756BEBFB3536AF66EC01D29C4842F1522AC4894BE7B69927FA6DE2F5B7F",
+    "identity_type": "trusted",
+    "iv": "983E35C1E9170FF4EB62F9C900BFDE14",
+    "key_seed": "3894FC2EE542091EBD73841E9C92E846682B47EE41ABC7BFC9A6CFB9C7EC4282",
+    "metadata_key": "0C17FCFFDA6B8AB386C3D801A33DDC7E",
+    "section_mic_hmac_key": "310376D63A925F217B048D0E4C6908764C80444503F89A3AA1763951A33FCAFB",
+    "section_salt": "5DE51155F2A2EE8C7E16026723F4B81E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CEB2DB3907DA1426F9AEE8AAD33216DC",
+    "aes_key": "33F5AB96D76920C2F144DE4962D862ED",
+    "data_elements": [
+      {
+        "contents": "0E094C04A66FF6909AD423192740",
+        "de_type": 511
+      }
+    ],
+    "encoded_section": "48901337DBFB04B30BCF0A8422AEED7BE57B73911000636EAA5C104EB02DDC7F6EE4968AD387900179756A7F8E031AA7411DC75308F251B330B7FE2D754B5E999D9DB499716B48AE6E",
+    "identity_type": "private",
+    "iv": "79A3FE62EBD753E71B1445F203F5F781",
+    "key_seed": "B2B7DDAC8583B3D6E27434EE969DEBA37C310AC0764D86B202280244015F4D4B",
+    "metadata_key": "4E807DECBB61C3EF3A3530264B354C38",
+    "section_mic_hmac_key": "50A2AF48A3375502973C8E59A22E83359F137EE2391724F8CEA70E71D7DA9FD8",
+    "section_salt": "636EAA5C104EB02DDC7F6EE4968AD387"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C8581CCA00A9614D0A2F3F513490ADC2",
+    "aes_key": "9B6D1622C67BFCD29AC65E8A5B503A9D",
+    "data_elements": [
+      {
+        "contents": "A1AF",
+        "de_type": 717
+      }
+    ],
+    "encoded_section": "3C9013926DC8C5AB1FAD70EA31134CAFD3EDA9911000ACBE394BCE0BA06BEBA61EE1737000CA9004A9631597C4C3F54FB2DE97D60CB38982950678FB41",
+    "identity_type": "provisioned",
+    "iv": "82EAD32BC4E1860FD17E049036F408A2",
+    "key_seed": "F6B2520AAEB47FCC56D10059ACB35A41937374E73497583FC997CD9643E2E0D2",
+    "metadata_key": "312D0D394B55AF6328C2527FA2754E92",
+    "section_mic_hmac_key": "077FE6345CE01680AACD3CD7514C8B248F35325D8EDDA3BB4AE284D01068340B",
+    "section_salt": "ACBE394BCE0BA06BEBA61EE1737000CA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A8936F1979C158886EA3687E6802647A",
+    "aes_key": "C123C7A271606C99EB7F65A90594DB01",
+    "data_elements": [
+      {
+        "contents": "503EB3",
+        "de_type": 360
+      },
+      {
+        "contents": "DCEEE7F22896FC9B32B55C34A0FEBD5443F897062EDF",
+        "de_type": 693
+      }
+    ],
+    "encoded_section": "569013AF54CE1D3CBE08F7711B3755799477B3911000546E3934E379D2D397491FE39A9C82FB90028608200CA18E4F6256DDE1C34367161B23C14E639155B0D9A24AD8EDAC13316CBBB6F45BFE2DC243C9259D8E66ED46",
+    "identity_type": "trusted",
+    "iv": "5BCD15EE9166022B1383FA6733B14C25",
+    "key_seed": "21E6F589CF96987FE3A3CB4FBF3EAF56F057D19B1E95A312AC51A43C4F810A0A",
+    "metadata_key": "13E4BB8217379D14813705DD1D830EB7",
+    "section_mic_hmac_key": "0349739276968E6FCFFE70B6CA646BE03C7BA2A905B676C37AC67C9174C5023B",
+    "section_salt": "546E3934E379D2D397491FE39A9C82FB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1BD514F1002291FC8579AAF845DF2230",
+    "aes_key": "DD4891029D9730B48DE4C95DC2B32849",
+    "data_elements": [
+      {
+        "contents": "2DD2428876819B13D3",
+        "de_type": 842
+      }
+    ],
+    "encoded_section": "4390131A15BD6E7E99C7DF950BA8486CE47426911000A3C9342FBF29A1B56D1BF70A126385899004066176CFC62D6CDBA8BDABF873C1B76C928C16281576D8EC953B356C",
+    "identity_type": "provisioned",
+    "iv": "DBC1EC47C39EED7FC5BACFCBD3E50F33",
+    "key_seed": "119A29D81C336C1450B9A52B08D5FA1C82BEA2F7EA53EADBDC786F17EA5174EC",
+    "metadata_key": "A11144C257937AA9AB72AF4D400943AE",
+    "section_mic_hmac_key": "77495025D48B3D4BA26ABCB62AC9489A8CF1EEEA8540E85B22F44F6F70302EBE",
+    "section_salt": "A3C9342FBF29A1B56D1BF70A12638589"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7CB42CD67E6B64297634ED57EE9A84FC",
+    "aes_key": "80748A341D96F6CF336DF1A491AB1DB6",
+    "data_elements": [
+      {
+        "contents": "96DA066AD9185B22D2E69A26F2D47377",
+        "de_type": 529
+      },
+      {
+        "contents": "8C54B317A75F31CF50FC60B0FC7E1BC16E",
+        "de_type": 943
+      },
+      {
+        "contents": "63FB812B761B5EA081E0E7743F2BFDCFBCF360083F3C46",
+        "de_type": 638
+      },
+      {
+        "contents": "26",
+        "de_type": 4
+      }
+    ],
+    "encoded_section": "7A90132D1AB37039B085A7A9C70BE256B8094A9110001CA7C89408F3F729EAFB6FF60C3AFD049004AE29327125D2A449F33B1E6A8A7AABF9FF1B96CCE102DA7B3D0D8F9F828163A7D7BF775250D2C8EBD9C2DFE30CBE79A1AD0F5D3F40868351D67A6D0D4BDB8EE0408FB6E59CA2C19EC94D81A05DC10B685D26B4",
+    "identity_type": "provisioned",
+    "iv": "14C33DEE0CD9255F91CB3DB918642ADD",
+    "key_seed": "E0C0046701BC9386E772D494429939639AF9845521C2718C1ADCC28BACDBFFBA",
+    "metadata_key": "B16130046B39490E2360E8249AEBA2F5",
+    "section_mic_hmac_key": "77D4D3388B0329728C3D684A0513235BFDF00100185824A42A29F1833081B293",
+    "section_salt": "1CA7C89408F3F729EAFB6FF60C3AFD04"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D3B33E595721C50D2105135754F892D4",
+    "aes_key": "6759279E5AF9E480F163DE933C79D7CA",
+    "data_elements": [
+      {
+        "contents": "5A",
+        "de_type": 459
+      },
+      {
+        "contents": "876A88BB07E3",
+        "de_type": 919
+      },
+      {
+        "contents": "650357",
+        "de_type": 366
+      },
+      {
+        "contents": "3965C8AACA7BE822FD421DCDD5416DEF11A5ED",
+        "de_type": 182
+      }
+    ],
+    "encoded_section": "609013E4263C83FBE154EBE9B418C8E1F92A2E9110001C68B664FC0B6735A00A9C32DAC328FE90023E487DCF351F9A4B55726B5324627617478B27454D994520BE41E126B4F0FC225770EECBCE400FDA160986F267A97446F5EE178DB730669B5C",
+    "identity_type": "trusted",
+    "iv": "FC06614343EE9CF8E5A4D06EB3594318",
+    "key_seed": "5F6F3840D07D9C758A5D3FA6CF48325B79DCA9357C30DEA1E35AD885916612A4",
+    "metadata_key": "7C701457BE076B13A91CB3033AADA84F",
+    "section_mic_hmac_key": "0964A5F27C3EE5BC3CB8DD22F71FCE6F30C9B15BB4DACDF2D04FC5EA4F909881",
+    "section_salt": "1C68B664FC0B6735A00A9C32DAC328FE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C4A0B5B35DBA6225783403F4DE018659",
+    "aes_key": "473B79E267C0D84E4412A4093255563D",
+    "data_elements": [
+      {
+        "contents": "33B53C95303F25",
+        "de_type": 993
+      }
+    ],
+    "encoded_section": "419013AAFF2B02E2B22C8C7AB49138C7BBBD129110000517504587FC306540BE7FE50F18898F900444C2F40376DAC920EBFA282D8EFF436D9A36B53B58D5BD48ED08",
+    "identity_type": "provisioned",
+    "iv": "7CD1649D9693811DA48B34243B254D09",
+    "key_seed": "FC839072ED4097D2EE824442D37A0F95B80BE907398E946F0085ACF1709B5013",
+    "metadata_key": "F62052D0301C5441B3A568D4294A8523",
+    "section_mic_hmac_key": "282471379DA6B963F2436B4AE2C5FC3348826856CDC1FB0F8253115B208F8B2D",
+    "section_salt": "0517504587FC306540BE7FE50F18898F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "93CC5E3BEDD29966EBFE44F20068ABD0",
+    "aes_key": "0E7C22653A3C4E73E38247BD04BBA53B",
+    "data_elements": [
+      {
+        "contents": "AE8F1926F17DC55FDA14D4D112FF57872DCE3C90D5",
+        "de_type": 532
+      }
+    ],
+    "encoded_section": "4F9013DD23F4E8CEE064993278A409CED7F59D91100024B889D2BAC8DFE8490B8DB914A2C6179002B9CCEADF1CCCE30FF715B151BF3376ADBA9A4C086F89C357AD894C88A85EE085EF3E4A11802A2A78",
+    "identity_type": "trusted",
+    "iv": "3EC81F59D1FCB6D4F75A7027CE96B1A4",
+    "key_seed": "0C290657B22EAA068CC79DE1762BD7AE049F34DC9801C029C183C20B7641E2C3",
+    "metadata_key": "9D8BBD240583337C47347E2E3527305C",
+    "section_mic_hmac_key": "C8887D8C621FB6A6FDFB0BCC033014D68EE1D6E4B3587EA4BE7DDE9F3981C430",
+    "section_salt": "24B889D2BAC8DFE8490B8DB914A2C617"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C5CBBCC948D1D87B9AFD66807377E695",
+    "aes_key": "8A9C73FDE45E8AACA4CD44F6DD70418B",
+    "data_elements": [
+      {
+        "contents": "9A2BC2BCFEA2",
+        "de_type": 48
+      }
+    ],
+    "encoded_section": "3F9013A5F912E862C431DAFC9EC3B5E8E7A958911000F7F65F4A4F260B1A6FEB1A59AD18C1139004F28E1460E2D4086FEF3182AE2343658F4D6A362C6F3D7A3E",
+    "identity_type": "provisioned",
+    "iv": "2D897492AACFDE004CC854FB0837712C",
+    "key_seed": "7EA6A1B03842D637543676B12E61F6D9F1C60C9FE015E30D53AEF8D698F317C2",
+    "metadata_key": "EB718446E9F62D1D5E1C71FE9DA626C9",
+    "section_mic_hmac_key": "3B4CFB52E8711CE0B1154C45AD7C1A05C36F26307463C4DB5AD8A584EBB74487",
+    "section_salt": "F7F65F4A4F260B1A6FEB1A59AD18C113"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "65A047E0391416283B7306BDCBD0DB41",
+    "aes_key": "E5AC27A9E1CFD23C71098444F5FEAFB6",
+    "data_elements": [
+      {
+        "contents": "FE46A0590767816BEBF65CD0A06F0248F6060C86C6552155942B12",
+        "de_type": 53
+      },
+      {
+        "contents": "04DB45",
+        "de_type": 573
+      },
+      {
+        "contents": "4120206B315914CFE259150DCC0643146D86",
+        "de_type": 269
+      }
+    ],
+    "encoded_section": "6F90134653404B3A826DA5D63380AE51571889911000434EDD9F18AE06EBB1887589C846F4E19002F724DF5E9B4A15ABDD0C93D42FBA6E44D5B0C564A2364B59B4F8AF594071B81F429CEA6A6A97D2808C57378A1660A528C7813D9FE4AF8E6A8A82C2F0EBD3CF4D95E4DEBF15C2EB22",
+    "identity_type": "trusted",
+    "iv": "940185F0052AE8B5655BEF6A900141CE",
+    "key_seed": "725E4D87BD5610F4BE9F424729C7BC6F3B89C7A5FBB5FB976A405BAEC28865C7",
+    "metadata_key": "5529FCAEF9E42680CC37BCF7A52CB571",
+    "section_mic_hmac_key": "1072211CFEE4A9B080F5CE4A682975C8C702B0D25FFB50ED39673238EF61AAD6",
+    "section_salt": "434EDD9F18AE06EBB1887589C846F4E1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "11B8A815C96272426FE670EBD95F2A74",
+    "aes_key": "9CC50A2EB9DC906838B319D6F635B290",
+    "data_elements": [
+      {
+        "contents": "CF8CA8F97258BDAA03C9F47FE93C73628555F7B7188DD071",
+        "de_type": 863
+      },
+      {
+        "contents": "50DDF94F9A90AF06402A8EE4E5E0440C068557",
+        "de_type": 140
+      },
+      {
+        "contents": "FD530CD016",
+        "de_type": 560
+      },
+      {
+        "contents": "3EC44909478F",
+        "de_type": 565
+      },
+      {
+        "contents": "9322306E45BE",
+        "de_type": 259
+      }
+    ],
+    "encoded_section": "829013111DE9F4FC976D1FCB172FF6475BC43C9110000DA35B02A62A0DFD3EEEF6F0C95B67169002D299BC5DEACAF00803395A88EBC7286257F4B34EED000A0D84C2B5697992CD343E351FC180BAB101781C0002BEBF9FAF4332F2D568B6E928BD2F3C990094FF1EF912B8EBC584A544FF6D769A320755F673C8F82964AE77516FB951",
+    "identity_type": "trusted",
+    "iv": "8AAC6F64AF5CD7541A317ED78BDDB48A",
+    "key_seed": "BB9F80C0E138923EBB663EFC182D0643EB8B9C4A58A98D58C3837AACBB2752C8",
+    "metadata_key": "F9A2A06EB5CAF1152BF79B6E21E842AA",
+    "section_mic_hmac_key": "4095220E1316503E17A6FDE2D4E6CDF34BEFC40685288156F7446D5068CFA9BC",
+    "section_salt": "0DA35B02A62A0DFD3EEEF6F0C95B6716"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2A4808B2F62685B5F55475AB574E7E26",
+    "aes_key": "AEC76AC229D0DE42E296D372873706DD",
+    "data_elements": [
+      {
+        "contents": "A8CBB6C27EE05402885DDF07B4B192AA53C304C6",
+        "de_type": 822
+      }
+    ],
+    "encoded_section": "4E901339AEC7384257FE89C3AAEB488B1E2D289110006ADF613C2421616F31B9639D876AC2B99002EFD645D79149ABCBBB2BAB3C0B00BBD1720EAF50BC23D78FA75B236C51B304C40863AD3FC62F6C",
+    "identity_type": "trusted",
+    "iv": "AB8EB79353453909672FF436216919D1",
+    "key_seed": "50201DD1C8E2AC7B1A62572253D3B22E09BC1F9ED9B3B435CC4A4C3A654771C8",
+    "metadata_key": "BF749E18C5E02BEE9705A1E2A8EDAF8E",
+    "section_mic_hmac_key": "3DC9AAA970DB8BF9EDDF51BC73AA81AED4227BEFE5B4FB374D33464C9B1C845E",
+    "section_salt": "6ADF613C2421616F31B9639D876AC2B9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1F59D9660522D8FBA3B16883F70F11C9",
+    "aes_key": "370A64FE5AD9B1FB602447BF4BF9D514",
+    "data_elements": [
+      {
+        "contents": "F67DBEA2F3E590F21C3A313915",
+        "de_type": 734
+      },
+      {
+        "contents": "7E112C",
+        "de_type": 336
+      },
+      {
+        "contents": "56D3B96A1D91F0CF57",
+        "de_type": 138
+      },
+      {
+        "contents": "00EE1F",
+        "de_type": 336
+      }
+    ],
+    "encoded_section": "5F901339F817C69D4CF580D378EE7E242984BD911000A71C128E5EBBB0E4FDF891F77639D1E490010D5F79F998BDD9BDF1F7BC2EFECC5EE2F9F994830D2FBA0C803101745C51A41E07AA18ABD1312F3D56CF58841BA20A60D7FE34E36DB0F27B",
+    "identity_type": "private",
+    "iv": "B092FA4BCCA953F068CC959747D83639",
+    "key_seed": "692463627EBDE72CAF060DBA5FDD40E032568C3B81C9DFE4B20DC148D32F7035",
+    "metadata_key": "71DF47545B930AF7861785B2A0519571",
+    "section_mic_hmac_key": "9FDD7949219C0824705B41969A6B0B39564EB3C376A443F740F9F3983CD9B3F4",
+    "section_salt": "A71C128E5EBBB0E4FDF891F77639D1E4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BE2BAFF188D27B3DEBB76D55424CF7A8",
+    "aes_key": "11519220C41A2431E087DA954F82DD2A",
+    "data_elements": [
+      {
+        "contents": "AC894032C14D4442280719211CDA8F42A8FC90497439B5A14529",
+        "de_type": 146
+      }
+    ],
+    "encoded_section": "5490139DD2CF23FADFFE0C94A6E8E327F720A7911000B38B64D0469A8468D3CAA65B8BB04228900224C6C7A8B2C73344F312ED7FCFF642112C0E3F95526AEBB29729E203C85BC3D9AFCF3050772AF4D320820A0883",
+    "identity_type": "trusted",
+    "iv": "069FD992E0C1DE2F9D197CC3D0342099",
+    "key_seed": "FD4AA1F19FAA7BC4F26ED6AF2153079A6D9F6BF4F144C95E609947E620E07BDE",
+    "metadata_key": "C092C09E74DAD832EA8DD576E23BF873",
+    "section_mic_hmac_key": "F721743C7C61BDBC19597A30DF414CE7EA3D9BE816140712FC23440F473F1DEB",
+    "section_salt": "B38B64D0469A8468D3CAA65B8BB04228"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "77549089D6D3867FA06DA36615503637",
+    "aes_key": "AF5B34E65AD38943EFBCC3B3870CFA0E",
+    "data_elements": [],
+    "encoded_section": "3790139B1BECE4655A5CB45B6D3A30BFE6730B9110001F22305A25CC405B049D1131AA3B46559002410D700D2FE5856E61E834BADD1FF8DA",
+    "identity_type": "trusted",
+    "iv": "5714AD90F45BAD10E57F8C79C0D16BED",
+    "key_seed": "71F4BEA99646F1706EA4A84397EB43CE6B44E381874992EF972617EB640B3A36",
+    "metadata_key": "53A2FBE800F5224390B2F5417E7F9C1D",
+    "section_mic_hmac_key": "600452BABA57916415DF1C59CEC4E50D72E1BC14B9DBA7842BDC4A3AAAE81384",
+    "section_salt": "1F22305A25CC405B049D1131AA3B4655"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "AA4A1FB44833A27A2820C26ED4EDA010",
+    "aes_key": "C1F9AF7702938F9DADD7257B4478BFAC",
+    "data_elements": [
+      {
+        "contents": "7AED34",
+        "de_type": 407
+      },
+      {
+        "contents": "7784760988FFAC4996",
+        "de_type": 189
+      }
+    ],
+    "encoded_section": "49901306DC71C77895654B6FA9840DF88823F5911000026B34871390A27E60707AA4CBEE91A190025B45B3472ECEB8587465A76CD0C08AB383049E0E095AFE3EA26DB78E9DD412A1E1BF",
+    "identity_type": "trusted",
+    "iv": "4883588693CA0745A10C85CF49823C55",
+    "key_seed": "75295A1F3E2689CA79744BB328404DB873F3C4BDECCE9FE9C2781494B59D96EB",
+    "metadata_key": "4F1AC34364D0257D3CA00300DFB1F1F8",
+    "section_mic_hmac_key": "AC27EC75005A294F6A63263B6B4B15981A6FC481B65646FF315A9FD7E1C72468",
+    "section_salt": "026B34871390A27E60707AA4CBEE91A1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "078DDE8D05FD1B537A238D6645219040",
+    "aes_key": "2766ADE6816F4045B273D4E1CBAEF9E5",
+    "data_elements": [
+      {
+        "contents": "6EBC1F8D58C1565541E9F64D5460BB5C0A95ED1DFC9E29FBBB",
+        "de_type": 808
+      },
+      {
+        "contents": "3135E9387E084FCC35B173C0E9F9AB",
+        "de_type": 347
+      },
+      {
+        "contents": "DB92249A54ABB93E6797CA85039FA215647FB4",
+        "de_type": 21
+      },
+      {
+        "contents": "79288DD2716427CA78A9194491",
+        "de_type": 721
+      },
+      {
+        "contents": "73EDF5",
+        "de_type": 529
+      }
+    ],
+    "encoded_section": "90901373F65B3C85D86824F42F83B84048C6229110009E38512BAFDF12A3783C75D6C694F62790015B99A08B9D7A88AF8172BFBEE70CAE42260C83F0F60F06B79C125D77323EB12D7F5FD27ED9B916562485B9C9DC9E2DFF08F5B19FCF7CF8CFFEB6B99D95AB5D5EA00384953D3A053681FA63BB86B565B479EB49282780CE91FBA3C2976BC7F7B945BCC3E8A59A6C7F55",
+    "identity_type": "private",
+    "iv": "EF43F76400A48297E2B662EDDF34027C",
+    "key_seed": "4EF8A2BA84737FB0150841C23EC25D43C47FF933FA9AB2C5927D5B507C87EA2D",
+    "metadata_key": "378AD8906BDB267835B3C09C96A19575",
+    "section_mic_hmac_key": "A7C12070CDA75EBCBC890C8F85E21D6069C91006B0350065806CC188E5409CCA",
+    "section_salt": "9E38512BAFDF12A3783C75D6C694F627"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "95BE8BAF31EC4BB917CC3A2C7FB03DD4",
+    "aes_key": "212A4DB3EDB93B86E38661EAB32D3899",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 657
+      },
+      {
+        "contents": "46CD03FCCE18F7504C5C855CF189298CB67858A974ADB18500437642",
+        "de_type": 190
+      },
+      {
+        "contents": "3676B5CE1A207A",
+        "de_type": 142
+      },
+      {
+        "contents": "28383F354FEADE799572E4D15C96B4F6F0",
+        "de_type": 145
+      }
+    ],
+    "encoded_section": "7790135ECAF5AAE1BA1C64EE01424B51C2867D911000CDD06ECFAAA6F2401AD94229ACCA991590048D658DFC9B60B28E0997C8D85E975BA9D0B823487BA20A7C004379A82C97193F06260554E7B6D51C198EF01120BFD7284EC9963828D910D83D90812C2772E3357505FAC4036F483231B41124A3A8DBF2",
+    "identity_type": "provisioned",
+    "iv": "4B39E2AC421BF39FF32CB77ADA2A7923",
+    "key_seed": "653C200BFC98321AF11AD97638B4088CDF44F10D20996A2E39B6AA52628D81E0",
+    "metadata_key": "9328E95CDBAEB26EF1D330AB07A34FEC",
+    "section_mic_hmac_key": "10D58DADD334BB6D030EC8703174E882455E4C6626AA29BF6032013EB5CCAC41",
+    "section_salt": "CDD06ECFAAA6F2401AD94229ACCA9915"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7A7BC9104E4F6277DB44B83EC568D7A2",
+    "aes_key": "1E4B737CF0D3DE9B0AB7B23C62E19000",
+    "data_elements": [
+      {
+        "contents": "82C5DC605CC0B0C534A07204CF6EE9800C258F5876A2BB4D67BE97FA",
+        "de_type": 53
+      },
+      {
+        "contents": "0BAA5558",
+        "de_type": 865
+      },
+      {
+        "contents": "",
+        "de_type": 15
+      }
+    ],
+    "encoded_section": "5D901316F449431385886874B56F21C6EF076D911000CF9BB4939F48BC5B870C1274DB7FE0EF90029BCFE0E6FB66D97C97B97146DC9923FF872C1C82F9E6D58075046BD6EAAC9BC620B1087C9766192D38AA2B9B02D703637EF7434C1F95",
+    "identity_type": "trusted",
+    "iv": "5EDF27336329967B430B8BBC6511B3AF",
+    "key_seed": "6EEA708F4D7A23E95A290D0F7C7C2C1FABCCB06E2BEDDAB673FCF52531CB9949",
+    "metadata_key": "D58071E30F1F4F280A52547C0D940B6B",
+    "section_mic_hmac_key": "748BB640722F4197BE2AB67B25D10B13D0463BDA9651A7A09D072B29B678034B",
+    "section_salt": "CF9BB4939F48BC5B870C1274DB7FE0EF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6B2784661C35BE0A3E429A2C6964C55C",
+    "aes_key": "B7A7DD23E0BA11F990A724517482CDE2",
+    "data_elements": [],
+    "encoded_section": "379013D9B173EADBD3B3B83EFDA96221945EF591100013800CD344B3A2AE1F5013E1DFAD3CB090046474715969917E830F5BE55D47CFF831",
+    "identity_type": "provisioned",
+    "iv": "4A91BFEB38EDE9B000D0E68B1789117C",
+    "key_seed": "4272E95BD5A3F9E55FCAF98D88C776F3F43860BA57169089F0F43923F9743AD6",
+    "metadata_key": "D5513C47ECE8FC6A0544F3F67055C101",
+    "section_mic_hmac_key": "34C33FCC3774716A479B5A1B646C375BB563B045C8E1B020594E0C6CC637B402",
+    "section_salt": "13800CD344B3A2AE1F5013E1DFAD3CB0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "129B711CE9903C07E3C79E0C66953083",
+    "aes_key": "018DF0C4092B2887012CC0E3FA06138D",
+    "data_elements": [
+      {
+        "contents": "36166C05E659A86C25318FF5",
+        "de_type": 486
+      },
+      {
+        "contents": "C9113E4284307544D5452CF918",
+        "de_type": 207
+      },
+      {
+        "contents": "113DF414AC6D1ED5005B46712D2C585BDC195F836C545B4C9D63B8E3F7",
+        "de_type": 59
+      },
+      {
+        "contents": "DB7FEE8E34B1106ECFC83CD95F05",
+        "de_type": 278
+      }
+    ],
+    "encoded_section": "8690132D01834FE1F90892354A8D60F469D69A911000723A408BDAF7D502315A69861DBE19359001E5557F8FFBBA84A06E145068D2B755EF7C628F44909A90F69A26ACE41CC47C7A5CDB5ED9276B167EAAF20B92CBE3FDAD487F587119D70BC069CFB0709ABEDA42D6C799F4BAF2A0FE359CC18BC2C8CF16937F30BD382B6D5EA6590E94366134",
+    "identity_type": "private",
+    "iv": "A804F89694F4348DE72BE6DA40146DE2",
+    "key_seed": "3A3D0F62E7DB4E7B35A2BED010905C168A5BF029F93487B4B70FE06DBFD8F336",
+    "metadata_key": "6A4DECAE9A088A4100B25933DE8CE454",
+    "section_mic_hmac_key": "965B4BFCCC2FB9473AB9E3BCC41A5DD7C74311C9A8E54F6E59D7644D2686388F",
+    "section_salt": "723A408BDAF7D502315A69861DBE1935"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E0CA1AA3AF1191E3819741B3DEFFAFDE",
+    "aes_key": "1D5E8EDC48783BA37E4B1799FABB4ABE",
+    "data_elements": [
+      {
+        "contents": "7FDFE51E7ACA9FD4E4D768319A58337D53CDE7B59C0C13D39C91",
+        "de_type": 315
+      },
+      {
+        "contents": "066D6DC387C291",
+        "de_type": 697
+      }
+    ],
+    "encoded_section": "5E9013C567A94B8DEB58041FA6003F6984B55E9110004FA8AEFE32E28F03CA08C323146179A8900481AB869FF38C4A4AC07EBA8593D4078D298254845195108E6EDC6A46E534309A92E2C2EE6B7E585F2F80192B922F7A1B1E27205153D5A8",
+    "identity_type": "provisioned",
+    "iv": "1A49425E07C48D0C622000F534815E10",
+    "key_seed": "E3A4AC9730A13980D92CD512ECA0E6FB9C005C05DD4EC6CF1B16AB10BE9BF0EE",
+    "metadata_key": "6EFD60E02792E27FF514484A55667047",
+    "section_mic_hmac_key": "D1E5D811FB30478207868A6B7F75BC379740BC5FE2D67928A9BF1C27287F5729",
+    "section_salt": "4FA8AEFE32E28F03CA08C323146179A8"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4370155ACF139B1128FB84304A5528CA",
+    "aes_key": "2F204AEAFF274885B403599787146CFF",
+    "data_elements": [],
+    "encoded_section": "3790136E72A2B54E54872677EB0711B10EC0F6911000CD2155E85F2D8011E7CC8A841B84663B90043BD0BFF11972D8A321CC2FEA6CDD5D3D",
+    "identity_type": "provisioned",
+    "iv": "5899873C8E3AA02A04117D7944F99F79",
+    "key_seed": "9117DBFBC2B7828BD194A841123189D3EFAE7883292BE6D930D5DC654DE163E6",
+    "metadata_key": "2A711976FD8AA71BA52B4E0C159B57EA",
+    "section_mic_hmac_key": "E62B18C7ADA86D2F488DFEB4F44226604EBB71CA197B52611CBC971436E4F416",
+    "section_salt": "CD2155E85F2D8011E7CC8A841B84663B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E1396C2167C2EA23035DDE7F637A22E7",
+    "aes_key": "DF1174BCE2216174DB0591EF868BCC00",
+    "data_elements": [
+      {
+        "contents": "C47031946FBC56732583D99C55B6E1B7521BF87FD7",
+        "de_type": 142
+      },
+      {
+        "contents": "BE62881EC8915D5545B185E4",
+        "de_type": 854
+      },
+      {
+        "contents": "847F051E569E3050817AE714F1CFBC836A",
+        "de_type": 460
+      },
+      {
+        "contents": "F5A734560E04909565F8EE8D110FCF79CCE8441355DB69E248324AC1648B",
+        "de_type": 674
+      }
+    ],
+    "encoded_section": "9390137EFF576731E303EC0E67FA37528CF42D9110009AF304AEC06D6F647D0A6E7F9496F1EF900287E198A1643D026A2A57FB2CC6BB455BD96E7BFFA40AE2E0F9BFEBE079F650D4D224D6E94A45361D5E07FB6B1F607E183CC2740C4219AB4C920CF3E07894945D049586FF2C414ECB417B5A09BFFF01767922EDE5660AA194C03678B4956DF45C18C6D98272A2E20FA9C89F2B",
+    "identity_type": "trusted",
+    "iv": "2F57A532E27C6BB9EFAADD309841DCB9",
+    "key_seed": "F1B9E7ED359076DBA893F8BCCE52A92DED14DBDBF49FF9AC463049AB69D6E69F",
+    "metadata_key": "C2681503C3157A0ECA4ABF5BC029ADC9",
+    "section_mic_hmac_key": "2533F7CA4EB0FA17F8F5EA530CFC482EFDDF3E7E17C7634BADAF773AB0FDC314",
+    "section_salt": "9AF304AEC06D6F647D0A6E7F9496F1EF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C033469A194C17D236D3799F6F810289",
+    "aes_key": "D583C2344A2A9FFFA466F6636DEDCECD",
+    "data_elements": [
+      {
+        "contents": "ED3C30FB7E039894503CCBF3372AE73F62E6BA062DC86BA80D5C",
+        "de_type": 321
+      },
+      {
+        "contents": "56A50CF71ECD4A4D6F8C657A3ED1044F4EB9E8ACB5B67928",
+        "de_type": 329
+      },
+      {
+        "contents": "5C249B18B1A02CE7C5E369D4768F374C94F96FB97EF7E20C566B",
+        "de_type": 781
+      },
+      {
+        "contents": "11914865B2C8E598C7ED5BDDC4009B7552F7B8",
+        "de_type": 392
+      },
+      {
+        "contents": "5E8574C9496DB164C59CBD836C60",
+        "de_type": 421
+      }
+    ],
+    "encoded_section": "B39013058AE9E776265CFBF3FEA5B70CE54268911000FE248957483BBFB171D44B82FFF83FBE900179E4BBF07C901D822A2D5DC2540F5D6B7B32E8150931481CA5299DDFCA680E80EF5554527CF0BB2A857809C703A7594CF02E853D3A713F1C5729A4B37493F64998A0DCD4526C5E1618DE6D16B4307D7843DCFCA192300FF4756FC138BA4B2E157A6D2B5EBEC21DB497053C9717F18250C715CA28DA39F9C1F0C0FBC213AC70DC09308014136458565B01A59E",
+    "identity_type": "private",
+    "iv": "2BB4BDD29DAC7BF3D31AF7575D4373BC",
+    "key_seed": "82E084D15CD7B6C70978DE7DE19596B673CF3EE29A36A32B713496FD67F6F0A7",
+    "metadata_key": "ABF22A200F57CB114D5BEFFD477200A7",
+    "section_mic_hmac_key": "95AB213F52D4E447B6FA5CC544650DDEFB78F285502122175C2F5A103EAD2243",
+    "section_salt": "FE248957483BBFB171D44B82FFF83FBE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D9B6B1F0A69B7B9FE27E8F80069567C0",
+    "aes_key": "C84D0EFD9E47A5D90640A9D7088C5021",
+    "data_elements": [
+      {
+        "contents": "09E6F8330E760D01400A2CFA",
+        "de_type": 572
+      },
+      {
+        "contents": "D2B4",
+        "de_type": 911
+      },
+      {
+        "contents": "761F7E",
+        "de_type": 72
+      }
+    ],
+    "encoded_section": "509013BACCDFD8DB04ECC45DA02B6F1463200C9110006BE4250FD8E960F073C28F3C812DD785900480B27E5A6720404EDD1A03BD7FE9ED984422FE604E77EFA797683D4C65FF1848E25775431C5CBC0D0F",
+    "identity_type": "provisioned",
+    "iv": "568C52B6699A1EFE8632D2AA7CA08F1E",
+    "key_seed": "D80152B000A2814B443ECCC3D861C7480435D9A4AE7C76B354627BE49B903022",
+    "metadata_key": "235F082A46F70C6D07D056CD8302E590",
+    "section_mic_hmac_key": "77249D32B9918E829AB8EE9AB7F1690521BFE9444D8E1C6631D0F3CA0E7A97B0",
+    "section_salt": "6BE4250FD8E960F073C28F3C812DD785"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9622F4D79E9333730B78B9BC45D018D8",
+    "aes_key": "EBB969EA5208D59DC720981E0D7165B2",
+    "data_elements": [
+      {
+        "contents": "8910331A35E52B5CEDF5475C",
+        "de_type": 49
+      },
+      {
+        "contents": "C44C8D",
+        "de_type": 1000
+      },
+      {
+        "contents": "58AA13",
+        "de_type": 182
+      },
+      {
+        "contents": "FFA1715C6158",
+        "de_type": 988
+      },
+      {
+        "contents": "C738C7E2",
+        "de_type": 195
+      }
+    ],
+    "encoded_section": "6190131EBFEC19E821203A81CBA5997277B45391100018A3D32C6D68ECCE86C2636223BC415590041D5D7AF03942C18470CD2FB24DE76784722AD38725E712ADBDF3C681731E6A071438027266CF94D0DCF8B6977AF5EF09433D569ECD90BDC280C1",
+    "identity_type": "provisioned",
+    "iv": "2E0E4A900067722E740C48782D2727F4",
+    "key_seed": "34CA6A5E14C31E2B58FD467CA282371F135FC0E6488219FEEC3D194361416ED3",
+    "metadata_key": "1534AC915B12F7B14CFEC07E905B70B4",
+    "section_mic_hmac_key": "D1B3305F817AB4E6EDA0079FF3B8CA3E7466641381F5D38F31D4DD6336A97C42",
+    "section_salt": "18A3D32C6D68ECCE86C2636223BC4155"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B456A45D23A5C23B3FC7D4FCC2E17915",
+    "aes_key": "0793945D13EB6A7D4F00A59FC158C557",
+    "data_elements": [
+      {
+        "contents": "AF",
+        "de_type": 339
+      }
+    ],
+    "encoded_section": "3B9013DBC90F36C9F1FF8E9371E022326D96C8911000D1988E9F53E270167134FE84104498EE9002A2C66A9C2629C64B6F3CF8EA1BD17FA32F63DD11",
+    "identity_type": "trusted",
+    "iv": "B44C9675A36625470E2D7A5A381596E0",
+    "key_seed": "5E555C4138D5A22C3A975EF93D7C88FBB90B32618661D9EF2A66B14E19E1169C",
+    "metadata_key": "81744A6BBE8C683D7D720AF41783148E",
+    "section_mic_hmac_key": "6E96EBA658E9B9630FC00A38353E4B124102370FD3ED8183ADF0D746326AD0EB",
+    "section_salt": "D1988E9F53E270167134FE84104498EE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "865DB128D0ED615465C4AF33ED747467",
+    "aes_key": "83F6665949CEA0499C06623CE213A83B",
+    "data_elements": [
+      {
+        "contents": "648059EC9A6D7DBA28F98FAD7AEEC6532CE97E6BFF447DEF",
+        "de_type": 114
+      },
+      {
+        "contents": "6E640399BB35A3B4306409C94E87FC01",
+        "de_type": 668
+      },
+      {
+        "contents": "A93CB545FAB30A4742664D4149",
+        "de_type": 830
+      },
+      {
+        "contents": "A3232B62A0E5C5AF352A143BAAE7C285A135A7D4EA5D61",
+        "de_type": 853
+      }
+    ],
+    "encoded_section": "8E90138829246CDB07510CF107652C06222C6E911000668D1D8BCC2E706445B18633C2B2A6E99002285B7692049B38967A46FAAAC9E3B962F961FE806B1FF948E425BA1A82F01DCC601E4AF2000370385A54669989A6D2845E984A850B9FA9FBB5CEA3A4FFD736DBAF48FB432EE5BB8D3F696604B4E133E0543D383D46966C1D47265E1EAFF9FB5D9EEC945343CBB6",
+    "identity_type": "trusted",
+    "iv": "D300ED57F1F0333ED617F9A48A54D00E",
+    "key_seed": "E8CEAB1757CFB2ACB155DD5BBE2A45EBC383B29CC512CD445BA0D4B323F3D50D",
+    "metadata_key": "BE82E42542AAED90F4D6ED5B276C9865",
+    "section_mic_hmac_key": "21EFE7D3CEC8D334C1F5CFDBE2EDD1E3F9B164D8949D629F21348FCFFE479B3C",
+    "section_salt": "668D1D8BCC2E706445B18633C2B2A6E9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7C9D65E47B5C2E0CFA5E700CAE8565D3",
+    "aes_key": "9652732429DBDC4E2E1991C0C86D0399",
+    "data_elements": [
+      {
+        "contents": "603A05EB6CDE557F2181CE8F5C8DE566F7AD9A4EBEB2",
+        "de_type": 755
+      },
+      {
+        "contents": "916FD503DE6BFDA7FB44FCAC3AC2D01E5F9737401235A13BC3965C9660",
+        "de_type": 197
+      }
+    ],
+    "encoded_section": "7090134C8A120B8D74F21503A3F4A924CDC7E59110001C3CF25827D6B07C3DA29410FB3E65889001DE17683402ED39894A9F8D8D73A1379C3177626B72CC7E228915BA9E59842F22EC52A4F12DE1C87B505E41B7F197448F7208E9CCDE7B332E7362B1EDDA249FEA891DA5E428BA7F3B8A",
+    "identity_type": "private",
+    "iv": "D9839CC6B5FA3B7F43F0359AAB386887",
+    "key_seed": "048EB4D544BC85B8026222BB3BF8E829BA5A1D9732B000747C831471D8F584F2",
+    "metadata_key": "98B4B953B6639A1E2E9C264A98BB0247",
+    "section_mic_hmac_key": "A84D8352E99395F20F3B254C761D0647E4CE0D0F5E731F1F02A32D63F721B4E5",
+    "section_salt": "1C3CF25827D6B07C3DA29410FB3E6588"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "396496EE83B2146F12878D5AECFA7945",
+    "aes_key": "701449FA0ED699CB50D88C55F912595F",
+    "data_elements": [
+      {
+        "contents": "3D46DBD04F9E743F41453ACAF24A",
+        "de_type": 797
+      },
+      {
+        "contents": "EDA9FF21CF420BB69ACDFCB00E088703575C",
+        "de_type": 220
+      }
+    ],
+    "encoded_section": "5D9013ECEDE0D46A9124E3C806AC962EF9EC6591100037B25A8B910D21BEC099277838BE0E4B900425DE05F6E9A7D84E24D37D2F7A4307188B1F1E4086A13339E08BB3FD2EB4347B2C3063C09619BEEB61AC53A22B95FEF1EE53A1B8BCB0",
+    "identity_type": "provisioned",
+    "iv": "04D50AADBF5216FEE365473AC14EFF04",
+    "key_seed": "4ED429772F3805E33E327BF674F122DB7E906C7295C6094808E1E775EE2AC748",
+    "metadata_key": "F5BB3CF730A57E58B11EAAB014887EBC",
+    "section_mic_hmac_key": "8B6143DD499724FE80FF2A1CD6186E62D7C8D583265147D222D13BE276EA5B76",
+    "section_salt": "37B25A8B910D21BEC099277838BE0E4B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7E8AE3C9278DEAAB44A0549F62B2AF72",
+    "aes_key": "BCA92DE9B6063961D1F84ECA0C7F6C93",
+    "data_elements": [
+      {
+        "contents": "2CAB785B1AFCD27B65CE80FDD46ED10B10290AB73C307F67EB",
+        "de_type": 542
+      },
+      {
+        "contents": "C74E88BE9C94",
+        "de_type": 979
+      },
+      {
+        "contents": "6DF7B3CD8E17AB4EC4BC118E66622D75",
+        "de_type": 321
+      },
+      {
+        "contents": "23B264B671089BF640B146674E",
+        "de_type": 287
+      },
+      {
+        "contents": "D8526CAB4734644BBFB165AFF944B3DE",
+        "de_type": 396
+      }
+    ],
+    "encoded_section": "92901352EDBA6D632939142BBC95D1B5F6F3B5911000BFF4B3C12EE83E3D7E4D8D334B07650490047DD8DD4231311B1DB06638CBB34F60AB25275FFA10D6C82C325EB5607166A808122420D469489946DD0ED9FF8011AA5F665A5BD3260D64248A48EE3C212CF15EF03DB424536E1AB2CCE9826A89CC0F597C747787A078D98D614D33A71AB3BD1A8F06E6A85EAD38875BB7B0",
+    "identity_type": "provisioned",
+    "iv": "B2938060C2FB3A233E0B0441629A5D54",
+    "key_seed": "A9C66A81FA32BF7736824A6052703C683CDAB0690363FEBB064EC5BF5EAE2D85",
+    "metadata_key": "14F59D0003905680A8E6A3F9F03710EE",
+    "section_mic_hmac_key": "D34BC3D1F158A7340C574C280BFF773A087BFB40DA47AD5C9D59781A5CD6B9FF",
+    "section_salt": "BFF4B3C12EE83E3D7E4D8D334B076504"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "58D90C3496D916C45B1F9629D196FE3E",
+    "aes_key": "3F254DF7C078D8B9BE085F49D44FCE1A",
+    "data_elements": [
+      {
+        "contents": "DAAC6DB1",
+        "de_type": 269
+      },
+      {
+        "contents": "20B5",
+        "de_type": 92
+      }
+    ],
+    "encoded_section": "4290135841F4D3C484D6F0F42B623604D620519110002E6A604207A7F9600BA8826B040124D29001A9A00D43983AEF2049A5CC3D6139B73A1FC6DF1F28DA3B526D64A3",
+    "identity_type": "private",
+    "iv": "A2F7257D7DBBB78925E177FBB9F3E6A6",
+    "key_seed": "5D9A4B660496D7408099AD3AF204A372D5E1B90B5DA37B518FABA1FC72EB29ED",
+    "metadata_key": "E483E747549C5E8FF2E43903A508FF7D",
+    "section_mic_hmac_key": "006E79B19C1D3EB14ADA776B34A4D7601ABF822FD8E69A1BE6F354245E4FEF69",
+    "section_salt": "2E6A604207A7F9600BA8826B040124D2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2EA5530CA0FDCA0E3D26F54B36C63756",
+    "aes_key": "C944C8581944D3A7B2145C20572A48BD",
+    "data_elements": [
+      {
+        "contents": "87",
+        "de_type": 543
+      },
+      {
+        "contents": "624BD963E5CD706B8CEA97FFE4F19FEB72164DEC299F657830EE771F40",
+        "de_type": 38
+      },
+      {
+        "contents": "1F73",
+        "de_type": 693
+      },
+      {
+        "contents": "0E690425BDF2F9697C793C79D9A4B31BA621D37550295D8DEA1650",
+        "de_type": 455
+      }
+    ],
+    "encoded_section": "7D901303D613B4D65DBD34B0C37617F6403DAE911000A90775A9B65F4CEC0DC078F9EC5AE2EB900165055500DB14C4C9DF1475CB2947DAC616B755A1DC498623CBD1E5876A143201343233A2795172250398353EA567A343F7545CFF7D0D47CC7FA7C78040C5AD20AA8A802F2D5931EE0C69B984A697B56C19A71AE99BB9",
+    "identity_type": "private",
+    "iv": "8CB642644013FC19152A421C7AA99747",
+    "key_seed": "160F89D53618D964B47995A7DDB753A8A5E48A1C3252E469E57AE50C1CAEB0BD",
+    "metadata_key": "5CE66B8C2BEE9225C1AB9CC4C80A166F",
+    "section_mic_hmac_key": "F22F3AB674F0F89BE488643EF7D0AF9B0DC35E89EADE13A9D1563250970962B6",
+    "section_salt": "A90775A9B65F4CEC0DC078F9EC5AE2EB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1D51D1DA179BF1915279BF30DE1F4B03",
+    "aes_key": "BCEBEE8528219B39A7950E3D66C9B154",
+    "data_elements": [
+      {
+        "contents": "50528FD9150AD0773ADB5E08436CAD30C30FDA",
+        "de_type": 592
+      },
+      {
+        "contents": "C44A41",
+        "de_type": 561
+      },
+      {
+        "contents": "561F383B33C5EEBDABBDA184A1A4605A82",
+        "de_type": 814
+      }
+    ],
+    "encoded_section": "67901398BBC302C18E49799FA9EEBE11B8FBF1911000C2261F071C3C3CACB7699B63CD49EA1F900142DF2A9BFB0F1A01DEC1A14194866B92A2374755F6DFC853AD50A93FD547E6BFE9FBDEF421A6A18B3D882669EAAE1E4A4C4379BF01D5B44003CA2A66BA38CEB4",
+    "identity_type": "private",
+    "iv": "E7FC9AA29E2E9B3025EF3BBF9D18E508",
+    "key_seed": "28CCFC888CCB929D63843492569B71440F998A36D7F006F7E724F777B5B6EBB5",
+    "metadata_key": "AEC3202A86B1814AE764DD7C97BA19AA",
+    "section_mic_hmac_key": "7443E143DD31C1C97B1BF6E1932D9FC76E5796BE5D2B088062FA5958F4E2ECDA",
+    "section_salt": "C2261F071C3C3CACB7699B63CD49EA1F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B33B26F42720F3F275CAFFE124CD7B60",
+    "aes_key": "B6BF74F4EA862207D56E4B42492C3CF5",
+    "data_elements": [],
+    "encoded_section": "3790135B9259B281BE3914623875BF9E184F98911000C3391346E87D492348FBE56098116AF89002D57C10A9667412E9067FB677AB7A26CA",
+    "identity_type": "trusted",
+    "iv": "45217E0F0C06D7B7918C468D9F0CF490",
+    "key_seed": "175D317E4277BD3F2EDC5F019D5EE8617624648F818058FBA3D605EE3666DC14",
+    "metadata_key": "B92E7217A6255FD283368724DAC465DD",
+    "section_mic_hmac_key": "CB3E7306030B4707AAC625998DD40082CB446835BED1A2B78DE401CAEB39D842",
+    "section_salt": "C3391346E87D492348FBE56098116AF8"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "872CE0191545242D5BF00528AB6C7091",
+    "aes_key": "8032D6560A386D2B603442FE39BA3C7F",
+    "data_elements": [
+      {
+        "contents": "629E6EF672C12AB58DE63B36856CF2EA31E8B9AB20",
+        "de_type": 508
+      },
+      {
+        "contents": "74C4F6C190C2",
+        "de_type": 354
+      },
+      {
+        "contents": "53C627E2262407A36E657CB2D4BE0F4254F68754752D7F76EDEA38BEB0",
+        "de_type": 585
+      },
+      {
+        "contents": "9FCFCD14189045E1EA71527C23E0",
+        "de_type": 36
+      }
+    ],
+    "encoded_section": "889013BA20D5744F0A5B0D208F3FE3875B284D911000FE0E258981EF48CE93EBC213AF3008509001345EBC4DB96528D67C20FEB41E9D7546D0146497B05D4701A172C2B41AED376F0450242A7F99BE6C14749DC04AAD3C3F2FA1E2531C1B7723D1D8651D0360252A83CC256B1001FB12EA9977FBF620BF8D461649F3F0171A3A457F84660A0B61CB9F",
+    "identity_type": "private",
+    "iv": "B31619F16E2A96F0C1834F1CD39193EB",
+    "key_seed": "9B06F9933F5497ED81E7115DFADFC68121B611E0AEC678B4DF8DD3CB4BAEE49A",
+    "metadata_key": "5C8F5F80BB667FAD70D156F07AC0C375",
+    "section_mic_hmac_key": "98FAC07C93E48317E374F2C0AA92E9794BDCE4C9323684D245EF332F0A032D28",
+    "section_salt": "FE0E258981EF48CE93EBC213AF300850"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "086B1E981485B9E1899F0EC60EB9E83D",
+    "aes_key": "AE86A76940D9517BC921B369256E4DDA",
+    "data_elements": [
+      {
+        "contents": "E0D97D47C6C09CD6A1DB96F46DBBD02BB351713DF1F2B0",
+        "de_type": 882
+      },
+      {
+        "contents": "FC3BD546F065A256DC995A5FD110C59F231A47A65CAF7020C7D582E0E6",
+        "de_type": 867
+      }
+    ],
+    "encoded_section": "7190130F2D843A93FC1F1CBBECF81D2A1C6FC0911000495249EE8F8F7ECDCE556774EF54D8B590045C25EAAEDA1187C4C0786320BB35C0FAB443CF096A783348E054BD52DE5D813AFFC6E9E04F9119B64BFDF45ED2D9C410CBDD53B9E6B0056F89AEEAC6702F71FF0F1A03E872EA10D42028",
+    "identity_type": "provisioned",
+    "iv": "15CA63A0FB423A4345E9E1C6B9A5702F",
+    "key_seed": "3DDFBC62D50D8068946200951BF0019D32100459E073453DCB6AD714BBB239B8",
+    "metadata_key": "88E6A925FF482DFDBEF5286BE14362E0",
+    "section_mic_hmac_key": "C0AAF2B1691A87BF9585A47B1C43F73D15657247D75AA873CB27DC2717A16956",
+    "section_salt": "495249EE8F8F7ECDCE556774EF54D8B5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4AA9E6490E510E2078D1C0C3C39A8FE2",
+    "aes_key": "00B42CF723FFB9E400D6E279979133A7",
+    "data_elements": [
+      {
+        "contents": "7EDDDB47C2233581E9E08E",
+        "de_type": 172
+      },
+      {
+        "contents": "29FF84",
+        "de_type": 411
+      },
+      {
+        "contents": "465EEA463E31B716E8F836EF7AA2F4F3841FC0DB6397C2",
+        "de_type": 297
+      },
+      {
+        "contents": "E547C85EC74056696A",
+        "de_type": 916
+      },
+      {
+        "contents": "115F4417",
+        "de_type": 682
+      }
+    ],
+    "encoded_section": "78901348721D68E725F93B39C9A8583F2A65179110000941A104B100C80468194C862B7044DB9004D6BDEE7AA257D998A85D7415504BF0A40A6748CBF0B55C1EA5F7D5D2B9D0D48052FCE5A679E9BABA967262CE798ACF31397983254EF161DCCAC8789DFD88D052C33592CA3682E9DC143104E4506C0CF0F1",
+    "identity_type": "provisioned",
+    "iv": "F9428E5DFFEE82FC83DA408FAD488BA6",
+    "key_seed": "DC69ED874663A6D1321BD38B4FBDE1469EF8033DA98BFA2ED613C62BDEAC381C",
+    "metadata_key": "EE6FDA87A6449B99DB62777CDAB5A388",
+    "section_mic_hmac_key": "E227F098FB6C323970409D263B84AF7F8CDB64BA4D5F13DE8AE304534DE8B2A1",
+    "section_salt": "0941A104B100C80468194C862B7044DB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "AB93EA96A6733359BAD13F6BBCBF7B61",
+    "aes_key": "A52EF583D412622DA1C23480D23A385D",
+    "data_elements": [
+      {
+        "contents": "29DB99B161DA96A74C67E613",
+        "de_type": 62
+      },
+      {
+        "contents": "714F915FE037AF3F5CB8",
+        "de_type": 420
+      },
+      {
+        "contents": "06F14F79DE3048918C71D3",
+        "de_type": 843
+      },
+      {
+        "contents": "D522C29C",
+        "de_type": 635
+      }
+    ],
+    "encoded_section": "679013C6C4FC258307EFA7BCB4439224E74253911000AC7EDAD03EA393EFAE096E5CEFB2CE65900449CEC3FDE6A1D76BAAA872A48CDEC69967A588F62B2BB08A7F9171FAAB1DC49C863FEBEFFCBB817EC29D18DE97FBCAC780743BC6A83E9B5F508B25EC0E51EFFB",
+    "identity_type": "provisioned",
+    "iv": "51A074E8F49F530A81C6ECEA74E8CDCF",
+    "key_seed": "1522F314EAA2926513648D2B83271A75BFEBAAD5387061BE1230F1D8EDC66652",
+    "metadata_key": "E758C77E18404342F1376AC800912CDF",
+    "section_mic_hmac_key": "0F67209BF8099626E6B190676AA37C880BCFF6FB3276D2F9E0A831DB10E4781D",
+    "section_salt": "AC7EDAD03EA393EFAE096E5CEFB2CE65"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "095CA3F2D80C77F0418F84F670BFE4DD",
+    "aes_key": "E98006F8F0DBC0CC557E88A28C8BFCC2",
+    "data_elements": [
+      {
+        "contents": "42DF097BBAED32E65BDAD093BB844FF43E4AC0350B7936287FD513A3",
+        "de_type": 462
+      },
+      {
+        "contents": "856C428A8B8613E12BEDA66CC0B14F80E4AE91625DFB55",
+        "de_type": 846
+      },
+      {
+        "contents": "5722372800A0436D655ABCCE6E1AFC666D996774BB8F5749633D",
+        "de_type": 434
+      },
+      {
+        "contents": "B4",
+        "de_type": 989
+      },
+      {
+        "contents": "17C86D",
+        "de_type": 843
+      }
+    ],
+    "encoded_section": "97901310C6A1E0973AA6302F83F5AE781EF3479110009D8967ED6923306F238BB3006CDA188D9001041B76BACDB753CFFBE885494E2B902326FCC7B845B95EB51BF31D16FDB3B8F1A31165528F6B88DC94C53FD7BE2034E003BD25E0258E27874EC2A30DEF2CB678D1D2B3155A6801CF086B3CC55E9777C651643D5ABC9E09397E8760C20DAA9749047403B15F28F2ECE9504BD5E926697B",
+    "identity_type": "private",
+    "iv": "8BD95493B557D0D6BEE013DF112FB494",
+    "key_seed": "37CBFD8DB4C74643FE9E7DB197BCB40CCD42B5F18E9F2B7D992F3E85FA23E11E",
+    "metadata_key": "FFE4710FD8DE1B837916E1876A10EA14",
+    "section_mic_hmac_key": "51F1387A1CD7B6E8FA54715C4D49B041B88B1EC083BFE9196EF4C3159ED8B240",
+    "section_salt": "9D8967ED6923306F238BB3006CDA188D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D627C02EC7A9E006CB069B3BD4087015",
+    "aes_key": "DE628F5616A31A91575202E224BF8654",
+    "data_elements": [
+      {
+        "contents": "CE3B7D68CEC6826B",
+        "de_type": 768
+      },
+      {
+        "contents": "4B98C12698675C54D6BFFA3284320DA49C",
+        "de_type": 307
+      },
+      {
+        "contents": "6C472F7D1F024972817EBF5D9CFBFDE075C093A2C147460E4E34407E78",
+        "de_type": 501
+      },
+      {
+        "contents": "01D2ECEF31D5DC0647092519E4B01200DC",
+        "de_type": 579
+      },
+      {
+        "contents": "6E88C150DDC8756487059C8509B830ECE39A6650B9A50E795E96C8E48B4E",
+        "de_type": 7
+      }
+    ],
+    "encoded_section": "AA90130868EE3BB2CC54975E92D446C82484A1911000973274E6978EEB00588121FF8F3D27239001954DEF19883BF50F4EC920B26896C66CA5E39D8CCADCEC933FEF576ABBF18F03128EC12C963F80262C6B34F00F850047928D6C145AC20B109AFECB4CF1964254EBCB825846E26C4C1F9D25B68B86955F4AB0C176BB905BCF2DFFD31CB7DF833FEA3BC9FB1E7ACA47E0A4F2469A3DF5AC4A4182C1E20E84EE649F09FDE92FDF7B4DEF91",
+    "identity_type": "private",
+    "iv": "6917AB8BD905BB352E8079F1F88931DC",
+    "key_seed": "DE1289A8ED8D1DF4BDF85AB82ED562ACFFA82F00634CDA0A87DE125DC862B0DE",
+    "metadata_key": "DB5CAFC921FD2A72293660D037EC29B0",
+    "section_mic_hmac_key": "DB3248777D235AC436DD5D78A6601B8391D75E9D13FEDFCC95E5A7EF5E1D5793",
+    "section_salt": "973274E6978EEB00588121FF8F3D2723"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "95C2D7868282E5790EBDDCC89759B4C1",
+    "aes_key": "CD7F86C35D2BD47F9DF1F0929CDF7123",
+    "data_elements": [],
+    "encoded_section": "3790138A13FBFBECC148589176B2F090064A779110003FE8296502CF32A8202018AFC04A52159004B1DCE781C276A9FC00F5380DC9399063",
+    "identity_type": "provisioned",
+    "iv": "413A5B6B45F312FDF51C8DAAECF692F0",
+    "key_seed": "21C30C7548CC08332F259C493F122582C9D2CE04E2E3F22E715F9EDCB12D7100",
+    "metadata_key": "2AECD34AD9CC88413723844F52128EB3",
+    "section_mic_hmac_key": "D31EB890A1B0AC8F46E70771ED9F20D0FA173F33613BEC221A9502FA131B07D3",
+    "section_salt": "3FE8296502CF32A8202018AFC04A5215"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E96C90F3BE79939E8784E2DC5B31BDFE",
+    "aes_key": "775282A7208DBB1E7F6605D293E01569",
+    "data_elements": [
+      {
+        "contents": "A40AE87570892CED908675E9B1",
+        "de_type": 353
+      },
+      {
+        "contents": "C003",
+        "de_type": 516
+      }
+    ],
+    "encoded_section": "4C901368AC6D32D83AE84E55E96F8D2AF048B89110001B662351BB4DEF5C1AA42CDB493A8B36900133373940E3DE0962AAC26099DEF282AEE69427FEAB5A78CFC17FAB668BE3863DD7E13207E5",
+    "identity_type": "private",
+    "iv": "957E38A6D3C646EF05B80926BAC32F8F",
+    "key_seed": "FFEAF2E7E81186AA1F7546BF64C02F19B713424698C2D27230B0C18D0FA88778",
+    "metadata_key": "76052E1B1E33C77A468457355A7A480C",
+    "section_mic_hmac_key": "171933B371C424F5B76BA421F60FCAF87DDA0B96E37278E25F336724BE96573C",
+    "section_salt": "1B662351BB4DEF5C1AA42CDB493A8B36"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7134809DD3BCC616EC1193B90257A9CD",
+    "aes_key": "4F8BFC75339A3481169241E6142BD16E",
+    "data_elements": [
+      {
+        "contents": "813D3DB42909EEB672E0068FFF5D5C11FF27862ED0A7B49C2DF69A1096BC",
+        "de_type": 368
+      }
+    ],
+    "encoded_section": "589013C03A5C09B42E407DFBEF97C62255E63691100075B3832C1FDAE86E2FC3F936C7FA33E4900412099B1DFDD67635F1F0F5EDA28912BF4EC1876FDDFEF75B39246E62447E0AE9BF9C0D5DA26B1C71B0A995CB31D31E2B06",
+    "identity_type": "provisioned",
+    "iv": "87A512B81D64F5E12678BA49BBE8827E",
+    "key_seed": "56ABD8D2A0121F6B2036F5995FB901C671902708CE8F122F9FA2EEEDA76B60A4",
+    "metadata_key": "E2D1095A39383B17B22D89AD524A2503",
+    "section_mic_hmac_key": "3F04EABBB85B4DDDBC2EE93DB5DC9E5748E086829E0A933E5484A2828309C7A1",
+    "section_salt": "75B3832C1FDAE86E2FC3F936C7FA33E4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "04822A3F914BEB02DE158387544B33B7",
+    "aes_key": "9E61F07423A43898F2B2BD793AE78265",
+    "data_elements": [
+      {
+        "contents": "573A24E1C0",
+        "de_type": 73
+      },
+      {
+        "contents": "5737FA2542C8DA3B14D5AF59E185EC",
+        "de_type": 145
+      },
+      {
+        "contents": "B3D90DD4027492BBD8F6A03869891466D2F7",
+        "de_type": 517
+      }
+    ],
+    "encoded_section": "6590132A1E9626DA0DB9A7149FC698FF5A112A911000A5516EE85A8E5F68A7A20CD1AD0F4D8E900151BCBC864AA670083AC7607F17733752559F4B7A02ADBCFCCF538935D532EA7429ED06742544428A52A88BBFBF205D7E1E16D64EF0449E9F70CB8697AC1B",
+    "identity_type": "private",
+    "iv": "C1B1581BE83D958184B1F20B62878655",
+    "key_seed": "434D7F1E6F20E72E968B6967177C7172E89F20605C6A0CEECB940DED13C73417",
+    "metadata_key": "E31B56FB8461D5D0C9CB4D65029B27F0",
+    "section_mic_hmac_key": "D7B91FDAD07753CB972FCB2300055E27CF54F56F1B5C208126917ACB4B98B40E",
+    "section_salt": "A5516EE85A8E5F68A7A20CD1AD0F4D8E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3BDCCBBD6FAEA4D81F0C38846EDB0007",
+    "aes_key": "2009340BB233CF0120BC7B9D43FF6EA6",
+    "data_elements": [
+      {
+        "contents": "9321C26068C444C77A4C",
+        "de_type": 568
+      },
+      {
+        "contents": "5610C34A4873EE4AEA0D64E07AF9F0805EDB22",
+        "de_type": 616
+      }
+    ],
+    "encoded_section": "5A9013BC4CF26CB67978FB671CC8C30360E7F691100000CCB08A96F8FFEE613C18F090085B059001A1F803A6ECEDA8A6D891CA8D93D521231DF5C635EBA09165E8E53EB8A5577299D4F9BE41035EA3C9E9E43A7CF32D44D4DD7BC8",
+    "identity_type": "private",
+    "iv": "4B3E5E0EC2C11AB77F1B5F0F282B1549",
+    "key_seed": "ED165FB36D9788873B3C2AB86363A5FCE5728FDBFA33798E8242A27ABB4E314D",
+    "metadata_key": "E207E837B797DCD4B7ACB5F58312805F",
+    "section_mic_hmac_key": "C9EED4F111AD3783F9F497CE8EBE2591277DCADF8C96A4E4E31648C62C31154F",
+    "section_salt": "00CCB08A96F8FFEE613C18F090085B05"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4E7FB1A6499207FA6E81670CEB1A517F",
+    "aes_key": "ACBD147D71B379B5788ED1708E5AAB0D",
+    "data_elements": [
+      {
+        "contents": "F33836DB6662BEA48A083FEFB086714D",
+        "de_type": 544
+      },
+      {
+        "contents": "008185A991906A5F1E2F45358097F39258",
+        "de_type": 503
+      },
+      {
+        "contents": "A887EB3A5A5DDD3E234CFD84860E570D769BEBDD",
+        "de_type": 401
+      },
+      {
+        "contents": "7FEC120653B2C2F4430F1D4E",
+        "de_type": 285
+      },
+      {
+        "contents": "6C55DC27D312CEF55DE857C7",
+        "de_type": 614
+      }
+    ],
+    "encoded_section": "9390139C09EE9AF9FD231DE8BBAB6A3006E327911000BB8C90B1631FA5349DBE93A8F8089D829004A288A109B78774698FD5CFD572F82AE470B5DB59FC33E58AA8D84517653DB8FFE57FA6DC1584B21D29FB3B744BC763DEC891B42CBBF2162E5634FD2AF6ABBB98E8A222E1F86DB6E92F9E79613D133EE7324A21F78F9F024EDF1BE8C5CC21A1330DE313169D2130088FA49904",
+    "identity_type": "provisioned",
+    "iv": "4D83F30109D4707667D1BAABF2BA1312",
+    "key_seed": "1CD41F0D8F60C95335ECC8B03AECDA964413DFA25F51950A867F86A91E4206BB",
+    "metadata_key": "CE44E301C09D5B72BA4D077648431CF7",
+    "section_mic_hmac_key": "8607BFB5EA7F4CEEE160990667025D950511D4D909A1ADCBBEB8D6F87E9B2F2B",
+    "section_salt": "BB8C90B1631FA5349DBE93A8F8089D82"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "ED8F34826D86C32F70C23B1B7A4B931A",
+    "aes_key": "489A79206A9D1A6778D00DB2A49A6BA0",
+    "data_elements": [],
+    "encoded_section": "379013ACB36757EB46FC893FABF338BBC613D0911000FFBC4E258FF5E9F7D2E3BB3B6B0C03C69002DA9B70F9A96DAAEA10B5DD919D09267B",
+    "identity_type": "trusted",
+    "iv": "0FF0CAC823EC377E5757B4DE2E57EA4A",
+    "key_seed": "D38C6B417FCB3755D9EB0813204623F4D6D15CD26949DFD5639A905C4C58DBBD",
+    "metadata_key": "BA5D7A52C4E2F3B7BE99BF65507ADB9B",
+    "section_mic_hmac_key": "5002DC45274213683ED0C9D8364625DB71326B85DB9B7370F4462D54A94527D7",
+    "section_salt": "FFBC4E258FF5E9F7D2E3BB3B6B0C03C6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7505C20263B4515F9CB242EED923D870",
+    "aes_key": "665A4ED25C48BBCD326496615C99D4EF",
+    "data_elements": [],
+    "encoded_section": "37901355742976F9F16F16C040E5D6ECF4882E91100095564CA7F1E190FC5EE16F47CCF6C23390013538A67CCE880536A01C72FF44A360A0",
+    "identity_type": "private",
+    "iv": "D6BE377B90522E1975AA152F05AC1714",
+    "key_seed": "D1D38E6F7A3C498D1CE230C517F2980757908842DC5156207BEBCE1090091671",
+    "metadata_key": "0A2CF8E7C024A0973C504D339D272277",
+    "section_mic_hmac_key": "A6E7D3BA8BE08EF7DEE3F254B9FA1BA00EAC09FDAE80FB3594A7F45BD20D03D5",
+    "section_salt": "95564CA7F1E190FC5EE16F47CCF6C233"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EA8E64EDDB1675A292FB90F2BA2412CC",
+    "aes_key": "30F49692078E22708DC9576A3D30B872",
+    "data_elements": [
+      {
+        "contents": "91F9F257617B60E1",
+        "de_type": 29
+      },
+      {
+        "contents": "926A971187C6A8743030B07C43C7F92AC3",
+        "de_type": 144
+      },
+      {
+        "contents": "F86E6E5010AC0B38CD920ECBA177745EB482C8C550CC55835C0C4B03",
+        "de_type": 855
+      },
+      {
+        "contents": "FAEC19832C3B80EC7D3D54893B7D8A197AE10BEA0942C77B1860E009E784",
+        "de_type": 666
+      }
+    ],
+    "encoded_section": "95901373ABB9225851815BD480DA08FA8E6D25911000229044FA21CC77C05DE710EE2B6D8903900444EA1F1D35B55D569CCBEDA5F7A130C9733885E75A3E64CB291A1FB898AA1D38ADFA7F54FC82C99CAD3FF8BFAF84E1A629EF64CC44C42A6EB46848C1C484521C3DB5424E9A1373A5B6B61E04B4E9D1CDCF8895A83BB87E3A227105E86461B6A688D9017998EF9037C71724622127",
+    "identity_type": "provisioned",
+    "iv": "B50D2E6EAF29D66713CFD26E4684BCBF",
+    "key_seed": "DAF73BE7AE7DDB8534853BB9AFD81B9A0F84990C601800F064E785AC4E655E85",
+    "metadata_key": "3F7EBA8DE8D0F68019C31AACAF5261F0",
+    "section_mic_hmac_key": "6E85868E853E08E194206FFC05E20676767CC9919ED9D83EFDFF045CBDE41127",
+    "section_salt": "229044FA21CC77C05DE710EE2B6D8903"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "ADAB88DD84C90EC093A37DBD22747F09",
+    "aes_key": "70E5FCF2EA88CD2F7E195CF371F91614",
+    "data_elements": [],
+    "encoded_section": "379013F3E7199AA4111F9CF619FF98EFE320779110007302B6AB9A8C6635C582F17B5C3A0C0C9004AE7E83243075B04693077AE9E27EB88E",
+    "identity_type": "provisioned",
+    "iv": "4406E6C3D68D6ABD808E34740D9E8D33",
+    "key_seed": "9DE259395C1D23114C8FF35253E3B2FD3FF1CD43FE56C35A9A13636E5A88E4FC",
+    "metadata_key": "2D61B2E8816F45A67189DC8CC7247768",
+    "section_mic_hmac_key": "CE942B542959217EF710089A1AF55AD6422DE8D0E57E67CE9E3A2F71E68C3FA2",
+    "section_salt": "7302B6AB9A8C6635C582F17B5C3A0C0C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "93C14952EC8743C5ABA14B9E3CD2A212",
+    "aes_key": "92A48E1409E79E488DE6F3EFB23E8637",
+    "data_elements": [
+      {
+        "contents": "9B8E20ECDFBA7BD59E1115FE",
+        "de_type": 678
+      },
+      {
+        "contents": "1A875433F13FDAECE0BC0F3DF535F1EEE4B48519A5F09094",
+        "de_type": 456
+      },
+      {
+        "contents": "DB29429B7B5EC416E915AF6199C7799B580C8AF38FDD2CA0B978061857",
+        "de_type": 71
+      },
+      {
+        "contents": "9A3C1C6FCBFA243767F11F699FBB05C45E0B",
+        "de_type": 676
+      }
+    ],
+    "encoded_section": "959013DBEDC73C45241D9A454F0C6A9FCB95FE91100060F06A98234891C9EC864EF4C451528090013CFA5840B3F51C06556DC68F28B66C20F000A26CA532D3E66410933BFE1A27F9BD731DADB297BF8D2410821546727456C472E78C2236559A6A19C98C1112955B8E2EBA08F99CCEFFFB79C84294BF3E110D48EDE4C46AEE3B68DBEF75C21B9E899F1B780153C7BCDCF063698B7BB6",
+    "identity_type": "private",
+    "iv": "7B5C65A46F927A75E810DC5BF783DF87",
+    "key_seed": "2D88999EBC4AD1D16AFB3F6956C25843E701958CE6456DA83F2108CF03D1E055",
+    "metadata_key": "844CCA7389ECBD8B35A9570B59100971",
+    "section_mic_hmac_key": "632ACEA290B0CFD3A4404D9FF8C0544E2D2734358F2F12C62280DABB6A50CD5D",
+    "section_salt": "60F06A98234891C9EC864EF4C4515280"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "31D8F19C7BA1B4815280B53E4C848B73",
+    "aes_key": "F5A28DFA51BF40D655E31AD80FD3A00D",
+    "data_elements": [
+      {
+        "contents": "B835",
+        "de_type": 317
+      },
+      {
+        "contents": "0E",
+        "de_type": 505
+      },
+      {
+        "contents": "87E0ECED60A5F831AD115AE163ACD38DD2334F0C2C",
+        "de_type": 724
+      }
+    ],
+    "encoded_section": "58901345C41F264D52643107E9FA58DBA9B42591100025E0D336AA3C2B471BD678673723E5CA90014031003378B065A86FB1CBEEFA7194AE280FD23FE579BE5DC32DD905686D0E706C6893BA092D4FB7960F9D296026A3EFDA",
+    "identity_type": "private",
+    "iv": "D61308A82CDC546B11B0B1FC341BF594",
+    "key_seed": "040A634AABD48B4660C06ABFEC3FCD61ECE2D52BA2A5E434E8D9477A654CE176",
+    "metadata_key": "36A1D6F085BCD1378E14173389DB0956",
+    "section_mic_hmac_key": "A0862AED0DEBD64349EC492BD7E8ACA6F7D874D24DFC983AE1F287D06F147B23",
+    "section_salt": "25E0D336AA3C2B471BD678673723E5CA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "09C377FC67DAC5FA8D0C7E1077618F01",
+    "aes_key": "D7AC2B958F079D386B0B392BF01F537E",
+    "data_elements": [
+      {
+        "contents": "01F59AE40EAAA786B7C46D8B5C2E1CF22A7927D79566",
+        "de_type": 254
+      }
+    ],
+    "encoded_section": "509013153E5C4EAD84B8372B09243DD7F8E90891100064F6BB71376AC822BD1EB434AFB7CD6A9001E4317B766820FEDA9F298B00E0CC0C1BA0F863130C35C146C86C683DF5D53D67E28733C55C3BCBFED5",
+    "identity_type": "private",
+    "iv": "CCA05AFA378ED7E3B6E33DEBCFBF204B",
+    "key_seed": "E224F6BA2E99537502A84B96F633F5E8F2020772A7298A359C860212261FBC8C",
+    "metadata_key": "FE01B6AEDE1A55184EB6477E1E0EC794",
+    "section_mic_hmac_key": "A47DC26C0806F40C5A322E13CB35735CC128C1DEE916EB60DA5BFA0A39F2F661",
+    "section_salt": "64F6BB71376AC822BD1EB434AFB7CD6A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EDD2C2498BFB7A5CC6C86DCF37816EF1",
+    "aes_key": "B638E541BF8E9E4D3F8CAB0D9C43E637",
+    "data_elements": [
+      {
+        "contents": "53BEABE818B66A0648BBC5634C",
+        "de_type": 583
+      },
+      {
+        "contents": "15B95BBF16",
+        "de_type": 965
+      },
+      {
+        "contents": "A72D1FB5F1FCA1FCDB6BD086B1AB05984A2CBAC020F65EA3DCE95ECC8E82",
+        "de_type": 617
+      },
+      {
+        "contents": "BEDBEB964295D2487E60521A0B779C41C92D001865F636E6D188",
+        "de_type": 611
+      },
+      {
+        "contents": "4698F885A5C7385C57CCB1",
+        "de_type": 524
+      }
+    ],
+    "encoded_section": "9B90133F363F1A9D391313EDCB62DC7AA6FDAE91100007942426FD3FFCE7249E32B5F9E1484D900298AA6A9DF9942745B0947DA0AA8DB7E48C35BE7A0E4A439696CBF426A0091045DDD1C04A3205A048DF546DE43851CC0686DE448A75CEA658D7D6092FAF23BF29CBD23D5F5ED23F974838B625C25D73F8E5BD6ABB82860479288BB7D7D0978779F30A9071FCF6EFE1392E1FEE30F696D95FED120D",
+    "identity_type": "trusted",
+    "iv": "6B4203747F8A557FCE61C1E19010B25F",
+    "key_seed": "1590AE9CF009E4B80464AAFBFCAAD6BC46EBDDAA6E628A422A1B4249F4FA830F",
+    "metadata_key": "1935DBB80CC48394742FB7C36B028FAC",
+    "section_mic_hmac_key": "71D7A4B4FE0AF5B94EA90A46FC83E860689BA4396E20B502B0D4864EA65BCCAA",
+    "section_salt": "07942426FD3FFCE7249E32B5F9E1484D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "935B3FFA8B8135594E8527503826B3D2",
+    "aes_key": "93E2CBB2A2EBF1A3AEDB88002066B1A4",
+    "data_elements": [
+      {
+        "contents": "2E4398A194FCB5AB5D16115ECCFC8DF14F",
+        "de_type": 641
+      },
+      {
+        "contents": "C1EA5737",
+        "de_type": 754
+      },
+      {
+        "contents": "B29CCCE545D2C871",
+        "de_type": 110
+      },
+      {
+        "contents": "6EA75755FC7744088E0F7B362E41237279C4FE285F5C635F07D3CF752607",
+        "de_type": 973
+      },
+      {
+        "contents": "874045A5D8A7AA4E81B9EE2882373798DD9ECB95A34E11",
+        "de_type": 733
+      }
+    ],
+    "encoded_section": "979013EA6D1A285718D881780D442828F059B99110001DCB8556D111B113078C24BA2F06257A90028982A17443826EBF908DDC14E2E9453E86613E316703C30041097712D0D411DF102061D68772BD9E8C2092DE956BA65B2E07D9B0A7B17923D252DFB126135175629DD89BF5C96D17EB260EDF8A3D5B81D553CDA272E2DE310635BC84C3954F2A0793434C18915A2C3116A46BD0B858BA",
+    "identity_type": "trusted",
+    "iv": "1B9858676FA1CEB84951BFC4467F1C8B",
+    "key_seed": "CAF5566753E37F13983777EDAAA48A37A6571043DF2006AEF7D119B7AF42CDB0",
+    "metadata_key": "F253A8C6D3DBF176DD97993A3374EE11",
+    "section_mic_hmac_key": "ED5EC19C2A28BD1AF19B1AFF30EA766510474865A3F7F1A202C54F8B4F381B78",
+    "section_salt": "1DCB8556D111B113078C24BA2F06257A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4E0560D260CF64013CD1C5CC2E650168",
+    "aes_key": "A3BDBB9EAF2B23B5B4FF966CE7145FCC",
+    "data_elements": [
+      {
+        "contents": "1FE258CEA28507442694EB54141E014514673A8BC93C",
+        "de_type": 794
+      },
+      {
+        "contents": "43B8336BA71888E38BCAAE61CE2A14800F8391BE83AD3084",
+        "de_type": 752
+      },
+      {
+        "contents": "E1D434ADA8FDE1F7D4DAC388C51B119ED88A3BBB15176E5C2B4D4F",
+        "de_type": 681
+      },
+      {
+        "contents": "05A7198CF43DE4",
+        "de_type": 195
+      }
+    ],
+    "encoded_section": "9390130807BD8B1CD2AEEF80505B5DD980558A911000235636B0516C0EBF29BFEA053BA6F2AA9001E8C847964A02279AB5856888A436078FBEE7524388992EDAD6505EA5910375D473D171744D84BE74C660D2E11F39587D329E1E9179FEB630C8282FDEF0943D8A1C05C27CEAB78D3F2E4840F84C0E111DE4488459DE4476D9EE8F50350B123B54057D3672B664AA442F43E812",
+    "identity_type": "private",
+    "iv": "8E5A00D0BE05A48A2BA357E27C2A67C0",
+    "key_seed": "E90D5815F43501F8DC7DADE9C1FF1E8B42893B9CF708DF00B7C7852C5A4132DC",
+    "metadata_key": "EDEB59B65043C9D70892DE01B1FAE8BB",
+    "section_mic_hmac_key": "DEB63991F7F5B2C38BE71212E5F29C6EAA5030154229B40D1369EECBE2D4B44F",
+    "section_salt": "235636B0516C0EBF29BFEA053BA6F2AA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5B1529C4EF462754DC819B8A7A990368",
+    "aes_key": "85EFE96F8D4DE137F7742C19A794CFA3",
+    "data_elements": [
+      {
+        "contents": "11DFFC1867A923A6F11B76237535D43A",
+        "de_type": 507
+      },
+      {
+        "contents": "24",
+        "de_type": 689
+      },
+      {
+        "contents": "987A00093A8A9BFA2BBFD82D5822586699A7B76899C3CA21B80AA95413",
+        "de_type": 341
+      },
+      {
+        "contents": "816761B857BFB83A8EB308A3",
+        "de_type": 313
+      }
+    ],
+    "encoded_section": "7D9013904699D605A53254C2CF00ECC73CB8E6911000F2EAAC8EE7A9ECAC553E0E8EA6E370369002917F7D53E0000B7D92469C691DC007DDD552F7EF633EC0ECD760CE5A2A5551F2B3EA3B9FF460BA6CB1AC699693216AE065736771BAB5DBFC447BDFD3A0486F7E891703FD14D140190E06692A5C0E4601F0A11CCE364D",
+    "identity_type": "trusted",
+    "iv": "5AE06EF1A9B235583770B28C6F519692",
+    "key_seed": "8CB9FDA44549F1764F0FEDD6C7EC01D2D861BEB2F8314ED90C4780AF46140765",
+    "metadata_key": "4099FB6F91A2857E338956FE29D1A1BA",
+    "section_mic_hmac_key": "C98F2D369EB883C1758AE560E8A1E093C2978F0322E39F8F9EF2723257C7E73A",
+    "section_salt": "F2EAAC8EE7A9ECAC553E0E8EA6E37036"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6AC9566CE6E59CA80D112ABFEC45D36F",
+    "aes_key": "B8E9265C2F748123F5B9F751A7A2D03B",
+    "data_elements": [],
+    "encoded_section": "379013A8BA2217F87C377CFB1EDB0276E64980911000FDAAC5F8B202E266DF331B4D9B46FE4D90011536961048D58AC961B34A4EEB49CDF2",
+    "identity_type": "private",
+    "iv": "B005B7623A86312314C0C0D7FCBC3F2D",
+    "key_seed": "C8A695C2B0FBD7385393A196CCBD82493358E3BE62E1CC7BF2C71186DA29F5D4",
+    "metadata_key": "8E5B6E18F6AD98F4150A32FD656B0C08",
+    "section_mic_hmac_key": "EFBFE5124202575DDAD381003750174824B77800E8707A9CAEE7804E3A63EF16",
+    "section_salt": "FDAAC5F8B202E266DF331B4D9B46FE4D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A7AE7921CC86A87A8C75811E6A9E03A6",
+    "aes_key": "250B08B04A835AAFB9E6076FE700799A",
+    "data_elements": [
+      {
+        "contents": "C6B28E20E9790237477E",
+        "de_type": 504
+      },
+      {
+        "contents": "28606C895F0801DE3F0ABC9EE5D131CDDBEFB3A344D6",
+        "de_type": 396
+      },
+      {
+        "contents": "7127F17814E2EFB43948",
+        "de_type": 537
+      },
+      {
+        "contents": "3082C7",
+        "de_type": 705
+      }
+    ],
+    "encoded_section": "709013C4A2A5BF3547013BBA1B383831D1BCE091100036E0549437A58C8096108736E2E54F839002C5F3CFF2372998337EBB3B98F98ECD208A00A91C9C03D46423D1282994D4AE2AE73612F111C2107AB19ED220A1C50DF885BE240BFFF7BA40FC735FF5159D92C1C36BDE1A3E8DECE91D",
+    "identity_type": "trusted",
+    "iv": "FF91837F451EDF3D18A22D3321C100B0",
+    "key_seed": "37279E81EB85F4A82ACB0A83D1E35C175878673E5991CA8CA24DBC718459BBAD",
+    "metadata_key": "4D47D647A7586385837A57466C13DA37",
+    "section_mic_hmac_key": "176D917352650AA00449B407739BD411141689F7D493E0FB4DE373F6EB227D09",
+    "section_salt": "36E0549437A58C8096108736E2E54F83"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "31CAFA91829553CE7076258C50ABA254",
+    "aes_key": "39055F82C293C2F814D14BB7082021A4",
+    "data_elements": [
+      {
+        "contents": "138DB57FC84A2A9FF858980497BD66AD07B3D35861D398",
+        "de_type": 908
+      },
+      {
+        "contents": "F1AC596899642AB4A3224A33E3F4BEB89567D138A00897",
+        "de_type": 97
+      },
+      {
+        "contents": "F33377C511B8F1A14E",
+        "de_type": 994
+      }
+    ],
+    "encoded_section": "769013A24F473D02C870D82B5A2C492367719791100093084927BDC539B7664A642EE828FBCE900473352C75BD958A2419FE4C5177410E191C38BE4D8B0B21783969B4FBF28D572EC372B59CC8C5BA0E38D9278308403C87CFFFDABBBAEBCAB827E53AF03E87A4E5F443604A7DC6DC78DBDDF0542CE645",
+    "identity_type": "provisioned",
+    "iv": "DD57E44D3F0D0F3DDD0201BAD985A27C",
+    "key_seed": "6E931D385053BA0B12BBD523DCC73B3B4E67551C3F5E2B4DB28D1F877CEE5266",
+    "metadata_key": "74DA1C3C2C26438FA854D14D71B8E385",
+    "section_mic_hmac_key": "DBC7B9EB0B1B3B982AB762BD1AB304184D1400952590DDB7D0D04E1C394ED3C3",
+    "section_salt": "93084927BDC539B7664A642EE828FBCE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C49F4B14FB613C049B9F05EB9CE7879E",
+    "aes_key": "CF327AB0B447A7AF29CA225D0C66BF88",
+    "data_elements": [
+      {
+        "contents": "EA",
+        "de_type": 603
+      },
+      {
+        "contents": "4BFE2D10A8F98339DA94AC7FD972892BE0F7F94C112C2F9018D6",
+        "de_type": 512
+      }
+    ],
+    "encoded_section": "58901345F54B3BB7D5FA01A970B7F3DE3035239110005BD59D6B596E746EB47FFAB378E67610900142AF5B387E46C1D390817ADAE02E9776069475827A331978DBE74C0B598B62EFD874514FD69C4A497DF102F7E7D28E2C15",
+    "identity_type": "private",
+    "iv": "49CE2D4CDDD1FE4C7F55FC3188137869",
+    "key_seed": "62748144FB2FB8F3D1D26B7E29407D49E03EFD9152E00668A8D4CC98B33C1C6C",
+    "metadata_key": "BDA4A1BB532F0F3759B50CC5FBB7FF0D",
+    "section_mic_hmac_key": "92915252B41A8BAC323ED59D919DE01B1983FEF1232D5D3A49618998A334AEC4",
+    "section_salt": "5BD59D6B596E746EB47FFAB378E67610"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "50478F0C95C5ADFF1E22DBC94040F350",
+    "aes_key": "5C24804ECE27E5BA68E99847F7F885AA",
+    "data_elements": [
+      {
+        "contents": "EEBFBE7C8584ED74277C8B3E2B502ACEBF24B267DE6D894B",
+        "de_type": 194
+      }
+    ],
+    "encoded_section": "52901366A0670E47B7DC095DCF73102FDC73E69110007B56EC0A6BABDB182C71BB10F5F08D279001B9D91DAABDBFE394958F6E84E6CD12D44D75C23DF167B985A9192F31C1086D9764E1F18B9B0510E5B85C8E",
+    "identity_type": "private",
+    "iv": "FB5AAAE3EACB3C7010D00F3F5D2C3BDA",
+    "key_seed": "ACA00C1D38AB3622FC6476156686D8C3546B5D7DE0D35CB2E577838779F26FEF",
+    "metadata_key": "F13BAF19DEAB019E02548A01243255FF",
+    "section_mic_hmac_key": "D5B4C8E5CBE16DEC491C3D0B361CE588EBC197E0F8C07B66E45C620DBCF0BFAB",
+    "section_salt": "7B56EC0A6BABDB182C71BB10F5F08D27"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B09E7223DB55CA715A7CDBAD5996A263",
+    "aes_key": "5A08C9A027433AA95DB2853BDA25B1CC",
+    "data_elements": [
+      {
+        "contents": "4D49B84727526D565B651F",
+        "de_type": 191
+      },
+      {
+        "contents": "F5B14E3F786C1DF52258DD7B7E5240A7707EAA887484A166AC4E54",
+        "de_type": 408
+      },
+      {
+        "contents": "A3ED876A074183595073A43A689030",
+        "de_type": 910
+      }
+    ],
+    "encoded_section": "759013C7D3F5BC51A900A5862D9C97C6420421911000742D8D5C8DE82797022EA2DBA6D1D34D9004ACA1B9AF6447CE5086B439B1BAEAECDCFBC67943ED19B7FE2AEEBE927C13A54A0CFF804BD8F6B6273D3750CAD751DE373DCDFFF91B61F4F4BC31F8931DD6B89073E2C00B353709314955E535856C",
+    "identity_type": "provisioned",
+    "iv": "6A4EC7D7D1DF376EFD6C30D4752FD4FE",
+    "key_seed": "B7FBE1F1586D2B63C20CB1153D7204A8CE46AF139AE5ABF1E2473727EF014DBB",
+    "metadata_key": "FF8E365F1C10EE5D9289E6E2A3431604",
+    "section_mic_hmac_key": "FFE968EAFBFAC3D8464618A92DEB901E018E5AD5DC3E4CCD2AFE7765B97E4208",
+    "section_salt": "742D8D5C8DE82797022EA2DBA6D1D34D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "90D4B993DDD10894C7DE4892AA9205F3",
+    "aes_key": "73BAC41B294391FD5D5288BFC9903EF5",
+    "data_elements": [
+      {
+        "contents": "27F554F5A7C415247701F0FC053C47F0EB0F055075E60B56",
+        "de_type": 291
+      }
+    ],
+    "encoded_section": "5290135D9848ABB456C6795F5FDF8A0D2671739110008C9B682EE5FE5EB5CE1BD9870CD71A9990043229E5C5C36B418090ED95DDBF6CC97A05C02E2DEEB8080D6B4B9DADB45B6FC5A20FCBB7CC08B5ECC2909D",
+    "identity_type": "provisioned",
+    "iv": "7695C534D867D68F7C1932B112715819",
+    "key_seed": "6975C61D58BA24A1B4EE54ADDD2C442B98EB26E46A705F388DB5E2ED510B4B28",
+    "metadata_key": "D17E6640A3CA07E378F7065697EA5991",
+    "section_mic_hmac_key": "F96908B8BF76281EDB7BBD7ED61C717F9696F1D86A35A08EAE230403A1107554",
+    "section_salt": "8C9B682EE5FE5EB5CE1BD9870CD71A99"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "68815B831AA0916F568E55263A7A48B2",
+    "aes_key": "5EBE57C4F71896FC3D6C0F1234CFE4C8",
+    "data_elements": [
+      {
+        "contents": "2D2EF51996D21B2E51463AF39E92",
+        "de_type": 266
+      },
+      {
+        "contents": "B5B3289B121AE9D357AFE47D5E824F60",
+        "de_type": 506
+      },
+      {
+        "contents": "CD3BA06429D31778484A63DFE622C417FC91017592E7B2A9999BB95F",
+        "de_type": 605
+      },
+      {
+        "contents": "D75A6907BAA74620FA2085",
+        "de_type": 41
+      }
+    ],
+    "encoded_section": "879013A6C5D0E432008BA653FF7129A306A3EC911000EA1BB84D74CCE63FC6E8A7BAA4D0E8BE9001A66002D08581D42781E1B71D02A14371C531338D6A14F22495832CB9F5ECA5BF022B9E62D6A72168A5889635871DEC3B4BF993A31FA6D88D147BF16E48B99F9F78D7433C9FE0D8900F2B64CFDF5C5B54AD9BDC2AEA6A53CC6AF84FE9AAF59193",
+    "identity_type": "private",
+    "iv": "C35B01B06E5D277079BA8AD9DBC8F362",
+    "key_seed": "F0C3EF794389DDA400ADC8FAA947DD95143F6607B459C306BDAAA576F465E52C",
+    "metadata_key": "AF790FA02EABFB6819FFF681B9DF902B",
+    "section_mic_hmac_key": "71A8D29B91A31FF5FDDAA7C80D68F46CFBBC16402B57282E74129BC4B17499D3",
+    "section_salt": "EA1BB84D74CCE63FC6E8A7BAA4D0E8BE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4A9A6B72387F31CDE7DEE4E7E406DFF6",
+    "aes_key": "B3591F7BBEBCFC4D19A43572B2BBBCF5",
+    "data_elements": [
+      {
+        "contents": "287900DBF7C6EF207125FA0402",
+        "de_type": 126
+      },
+      {
+        "contents": "3DB9807390DD723B2BE6D68E83DF7C2770667A585BAAFDFC6B60F23B6DDC",
+        "de_type": 914
+      }
+    ],
+    "encoded_section": "6790137F9988226CFB15EA43A400BD295BDFCB911000642FBA603E7E92B57E9AE3A01C2A4067900198D788FD01113B8A8C929309797B3A7297B90D01EECEF4B43E92B07E402D59F4C898D6DB4567499719BB98EEF2FDF3949CE4345E58D410B47377BA3A76EF5946",
+    "identity_type": "private",
+    "iv": "85FCE66A5FA02412A1234692C64896BA",
+    "key_seed": "2CC2199AD55B6F938E243F37DA6ACE29254ED61B0B37B0304329430A2A76E0D0",
+    "metadata_key": "631559C94CC2789DE04E60E2ACA530E6",
+    "section_mic_hmac_key": "9A892BFBCF0FD28F4E5A8F4C5758870EFE840BA65BBBD08F47BE62CF648FCC10",
+    "section_salt": "642FBA603E7E92B57E9AE3A01C2A4067"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3B58BD1E258028DC7224E170E5D91527",
+    "aes_key": "A74001E2A3666357CAAC0E33C1855E10",
+    "data_elements": [
+      {
+        "contents": "12A3E1127075B64AE49D7BA96E1C1B",
+        "de_type": 739
+      },
+      {
+        "contents": "A234A52C0FEA5B1BCCC9BF31ABE4",
+        "de_type": 956
+      },
+      {
+        "contents": "8F",
+        "de_type": 184
+      },
+      {
+        "contents": "07D259",
+        "de_type": 483
+      },
+      {
+        "contents": "8CF495883089242BFDD53B4564044BE87A18AB4C27F3506A",
+        "de_type": 646
+      }
+    ],
+    "encoded_section": "7F90134E199204C2471A9115FF2C632668284D91100075629F4391815BD952FB3733BE9FD5ED90029DB3CCDF47466BCF742E415F1B2808173977D02F7174626840312C0AE5F9460BB6D9896D1C906C783523FE087FC586B3CDBD3837F712E2754A920C13760D62AD1407E0FDF94E5A10A0F6B6435DB107288AA0E8DE89F61C41",
+    "identity_type": "trusted",
+    "iv": "ED3E7F6915FBA4453344C5B6E412C564",
+    "key_seed": "1846D5BA042D86730983D0AAF49EA0AB2B83BEB46A36ED91FB14A9EF471FE246",
+    "metadata_key": "E0FD1F3EEBC6BBA6FE654CECD49DB39A",
+    "section_mic_hmac_key": "91BC8A5166C8148062C2CEDFC69EFFFCF988181F45B5B0594999ABD9A6A1D293",
+    "section_salt": "75629F4391815BD952FB3733BE9FD5ED"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6980A6133FD8A5C51F3C733F504318F2",
+    "aes_key": "2114E6476D43B88B62350530B2B5E255",
+    "data_elements": [
+      {
+        "contents": "78D82AC0B53E7EE9DB8E175A4F4C8E3FF309",
+        "de_type": 238
+      },
+      {
+        "contents": "DC40997B9DC9FCE9D3A685B4",
+        "de_type": 949
+      }
+    ],
+    "encoded_section": "5B901364A48CB28EEFCE542E48C436C6E5C9F9911000D88F6109B3C4201C37D0BBCF905E844F9004C5199C455C3382BAAE410F855270883316438EF9A3A4B9F4AA0146A64D40287EE6570800272C4DA3CBD9E8E6855AF2B117E45550",
+    "identity_type": "provisioned",
+    "iv": "2677516D425DE7E57AA134A908F6FA77",
+    "key_seed": "2446CFBD94DE790A7817A3B309B6578724F386F8699C9E60F64E843F1E6F41BE",
+    "metadata_key": "F6619D96FAB75B632E6DB605E17C804E",
+    "section_mic_hmac_key": "467BC68954AA7C5F2E3BC686A88A219025CB25E054A00A51BA7A22F9A8EB85B0",
+    "section_salt": "D88F6109B3C4201C37D0BBCF905E844F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5755CEF6FE6FD55A41FA44CABD97741F",
+    "aes_key": "E8708156531B7A958D952DE7627847BB",
+    "data_elements": [
+      {
+        "contents": "23C735",
+        "de_type": 355
+      }
+    ],
+    "encoded_section": "3D9013409B507183829B924D89F0CDB0114D6B9110005BB6431511D93263B7DB812C5C3169FA90010A0D93D550F4B038870E73551CCC98CACB4BFB4A37AD",
+    "identity_type": "private",
+    "iv": "4190244089F66CA5612739960D6B6265",
+    "key_seed": "A0B97402658B7EB8A9CE7FA833B06BE4113813C5DF44BB4CDD2A1026623CE93E",
+    "metadata_key": "27EA5EDBB15D6D851213D99E85394969",
+    "section_mic_hmac_key": "CBA9B0CE3E1538B7599EB74522BD58E3D6B30CDE7047123EAB8E6C837D3A86C0",
+    "section_salt": "5BB6431511D93263B7DB812C5C3169FA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D12CA4BC0DF622B6F2A6C38F244ECA88",
+    "aes_key": "FE420A08BE520C56C373D90506399368",
+    "data_elements": [
+      {
+        "contents": "2B284B656DFE764CCE6BD0B8A8DC69FFE06A60A0",
+        "de_type": 982
+      },
+      {
+        "contents": "36636E1715B38A596BCC68ABEE73CFAF34EA87B634386C02",
+        "de_type": 537
+      },
+      {
+        "contents": "5BF461ED52EF4F04EB97039F41300BD52529363361208E673FF097D5E9",
+        "de_type": 49
+      },
+      {
+        "contents": "22E82E947110CD667295C59CABFD9CD0340C6F950AB0",
+        "de_type": 665
+      }
+    ],
+    "encoded_section": "A19013E8415BF7F48BAAE5E2349E6AF8C46097911000AEF9DA74479EEAC0C4E65E88E8E8FFE49001A158884B1C0FDBE25B9BFF7F48E3501E1CE87D4BB0C4EDE04ECBE90ED47B150732C022C9666FDF3E7315F74B7776FC5CC9A7E16CA18E90869D563005189D665167689E5DD8BFF6C5C08A8F2EA8025E8BF9C360E5B11918C31F682542595396B18CB98C0F6F2C4B1B7304864F165D897D17CD113D95B5927CD4D2",
+    "identity_type": "private",
+    "iv": "36217155A9B1C113637F5B31A0D52462",
+    "key_seed": "D77AB260151CD044C7B2AAB6E05FBC8E91F36BA08D99DD9DA9B6672CCFB80622",
+    "metadata_key": "D98AE815017F1CCD49B73838CF47C569",
+    "section_mic_hmac_key": "1C58860A31C39611669FD41F05F3DB0E5FB3841796071415958EFD3873F6134C",
+    "section_salt": "AEF9DA74479EEAC0C4E65E88E8E8FFE4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2F7824830FE99F6CEFCEFF4E8DAF9306",
+    "aes_key": "B8C0F18B36A2C4CDFF83C57209CA0877",
+    "data_elements": [],
+    "encoded_section": "3790138347AEC84C563EF86AF3A100CB5C2028911000D26AE3AED6E647BD9318ED7324A032609004420C7090DAC986AC7383E0B07C7D0218",
+    "identity_type": "provisioned",
+    "iv": "B20E80EACF53908799869F1431A64093",
+    "key_seed": "89C8925B2181AC409D718497B652931F78526AEEF0F0D29B16A94CEC57D1C5B7",
+    "metadata_key": "7D40A615D28BD9CABF573DC1990929E7",
+    "section_mic_hmac_key": "8082F293C5E89429553A6F138CB27C283BDC31F342E0049F6871D614B4E0672A",
+    "section_salt": "D26AE3AED6E647BD9318ED7324A03260"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "50835FC1D56A351C460893484BB405D0",
+    "aes_key": "5A5B7EBD7ED56C23D8B6F82912BDAC08",
+    "data_elements": [
+      {
+        "contents": "6CC2B418F4BCBA2E3C334BC068E5",
+        "de_type": 371
+      },
+      {
+        "contents": "7D0C99B63FC2F485D42A56",
+        "de_type": 361
+      },
+      {
+        "contents": "5DA48C5C3DCD",
+        "de_type": 659
+      },
+      {
+        "contents": "",
+        "de_type": 95
+      },
+      {
+        "contents": "3780B32198E3",
+        "de_type": 965
+      }
+    ],
+    "encoded_section": "6A9013522A8B8B0C6E757ED4C020BCE2FA2876911000C7C5CC64D2848A6F5E9B06024AF7CF7490010553DC253CA3A8379FAF58AFC20732CDA0D2D6F1D16B659C6DFA077FB83412170B8A58A249F77F5AEB8D72AA86D3C93F64631650ADDFC8C12FE570B139123F8348B1CB",
+    "identity_type": "private",
+    "iv": "8C1907865989C82AC1E7C94F46ADC1F2",
+    "key_seed": "4108AC4D0FFDFA538E12F709EB5EE2EC58107D42CCC21743E35C4366C8A6E037",
+    "metadata_key": "B569E2A8F95000A5D8616779A1EAB30B",
+    "section_mic_hmac_key": "7B4E3B5C475E1C8FB665FF5942256874C076B8305992371CDA125A3CE0289D25",
+    "section_salt": "C7C5CC64D2848A6F5E9B06024AF7CF74"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B63F775898D49530F53F98C8736B4AD7",
+    "aes_key": "1B2DA0F7C59B3FF7DB2E82675228D075",
+    "data_elements": [
+      {
+        "contents": "039C353B728226EABC1C9BB92C",
+        "de_type": 805
+      },
+      {
+        "contents": "BE5252DD4308972B310168F705",
+        "de_type": 936
+      },
+      {
+        "contents": "35EB21FBC97D47937000F4EC2FF4960751502BC7980B1B3D31",
+        "de_type": 579
+      },
+      {
+        "contents": "759DF16D57824FA1F519774AFE9966",
+        "de_type": 906
+      }
+    ],
+    "encoded_section": "8590138E794DDD1F90AA00C804A1D55D74199B9110000C181E2D488AC2E6382460989CCFD4A79001EB8A74FFF9481D0F8537BDA5E83313389FA2EFE7CFFD063AE79E634FFF0690390AF5D99664325FE479E22B30E672E3A1C9FA7C51C10023DA9D3934B8E2B5E7B302F7D924B5A3841CFFCB5E4173084EB27D0AF3135DC5CD7BD0CC13817AF7",
+    "identity_type": "private",
+    "iv": "ED7A001999A7212E0F8D0A8BBF06F0DA",
+    "key_seed": "D8C605A919DBCA02E857A0E787D643B68252650909FBBC4F92B621C0825DEE63",
+    "metadata_key": "C967056677B2FE105F418127AB4C9BED",
+    "section_mic_hmac_key": "76DA9B9114E01E24DACA9B02E6EA5BBBDEDE38A8CF33001989B421B67D73D5F6",
+    "section_salt": "0C181E2D488AC2E6382460989CCFD4A7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2DEC4BAFFCF3310DBE0F3413788D397F",
+    "aes_key": "E519A2D987D271CF5D3EBFB41C42302E",
+    "data_elements": [
+      {
+        "contents": "F8F7F2291376122477777F1C028B89957234FD1B4D8FBF",
+        "de_type": 294
+      },
+      {
+        "contents": "664104580D04F0299BFA7EA1E379B5140E891DB347F49FE31F58E1",
+        "de_type": 873
+      },
+      {
+        "contents": "8798DB136C098E7EED7A1D",
+        "de_type": 383
+      },
+      {
+        "contents": "3351FB9BE8807FC9D78EE332A0",
+        "de_type": 685
+      },
+      {
+        "contents": "A6F525066B3624AD7ED50466EE08AC9EF6141EFBF0451F87AE8277DF9CF9",
+        "de_type": 827
+      }
+    ],
+    "encoded_section": "AE9013D653FD5F4549F54B1911CAF49FF594F1911000CF4D14BE750B5BA5E49644317DEBD84590015F4C834B18AAE2AA790AC546C1BD9EFBB4FBDC4054A9E5BDFA9E3DFA77C9EA9DDFC714ED34337541979D845D155D15F5EBEA4D7E577172FE9DABFC8EA60B659BF27BC9EA813FD1C6EB693D28F11B35FC1B55CAAD3FACF09A30C6AECBC39FA1F95B6359AD3E7D5135C57B2823637768F51C0608BDC8362E6057A074F6C6A74E34C5CABF14CA7CA1",
+    "identity_type": "private",
+    "iv": "A9FE4C8782689FC14D8BCFBD33F242AA",
+    "key_seed": "E4398DC2A8F536C4250186EC57BB080E3905C0DE7136E5E6684A94DF38020DD3",
+    "metadata_key": "8286CB1DD719F554E9CA70EF5BB78182",
+    "section_mic_hmac_key": "52BD0E9C4C000F837DF8A80D471D145A9625B8F118641FE81B5CCF958F3F35B3",
+    "section_salt": "CF4D14BE750B5BA5E49644317DEBD845"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C2308865C3D290C95E557AEB1189623C",
+    "aes_key": "E8BF8FAA9C15279F3C712FDC28EA9E1F",
+    "data_elements": [
+      {
+        "contents": "AF0F38B4A0EE47BCE5B3F0AAF54D",
+        "de_type": 27
+      },
+      {
+        "contents": "6B2E9F0DF07EB6D9877DE3E238059802D9D04315E0D6C4AFC8DA",
+        "de_type": 337
+      },
+      {
+        "contents": "FA8917EF757AC107B1DD4C",
+        "de_type": 903
+      }
+    ],
+    "encoded_section": "7290138C4539BDC8F8AE4C73FC0ED661D0030A91100007DB45B2A020CD435ACE131E78F8595F9001C20DFF6C112B8F2F9130961C3C0A1B8121F539E238D4ADE2C865A086CC93D56D69D2BF38310ADEFE69AD2FD2679A4203E67D8472A329F52C07E85EFF4684F4113CD7C304090D02494B42F6",
+    "identity_type": "private",
+    "iv": "DA52FF1A543C36D4DCB573EED3492B02",
+    "key_seed": "2AD3751078D15056347708E40974A33C922CC41CC28FDDF988F2E2A5A2239A86",
+    "metadata_key": "FD7BC17ABBE3AE00CB69C5B13AF815A6",
+    "section_mic_hmac_key": "B01C2D3C9C7F049E5F6B994286E4ED7A767AD9727DB0FDE9E0604CD09C5E6EFE",
+    "section_salt": "07DB45B2A020CD435ACE131E78F8595F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0E6250F5E1063FFD5625E4899B7EC23C",
+    "aes_key": "82B4EFBC00345E53944B62098AC4741E",
+    "data_elements": [
+      {
+        "contents": "84BB",
+        "de_type": 108
+      },
+      {
+        "contents": "754F4890235008945EB5DDA0C5794514",
+        "de_type": 296
+      },
+      {
+        "contents": "817310F380A4523BA475A885AC",
+        "de_type": 534
+      }
+    ],
+    "encoded_section": "5E9013257C860C9FE68D13E448BE77AC156B6A91100073EB2D1A7B9A79694383A83819BA58C19002980493534B01BE7A4C0D57A3B7C279037B65AC33424C40D9ED3D3ED5CCAAAA3387F19EF03CEDA947228D791FA10E21C394650A6DECAA80",
+    "identity_type": "trusted",
+    "iv": "7B7ABAED849E8CB85465909BB1008A27",
+    "key_seed": "39FAF4627996D3A4E86A2609345F8CCFBE215FA4959EE8CDEFA7C7ED76F0F063",
+    "metadata_key": "D5CE99E6634247D8D39A6F9FC822F098",
+    "section_mic_hmac_key": "4A8284901D526E778AE208C2A347A49FB10CC2A27E1CED6CF06E1629D5D6A8ED",
+    "section_salt": "73EB2D1A7B9A79694383A83819BA58C1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "73267BDA51FFF82F035394D3EF80D6CB",
+    "aes_key": "3D76734B202CDAB569B4AA364BDD8C38",
+    "data_elements": [
+      {
+        "contents": "2C4473F60CB71FDC87628B247D3DDCE92B0638",
+        "de_type": 432
+      },
+      {
+        "contents": "2D130F6710326FE796AA4A73ECB006B595BD3EE95433AD3CA014",
+        "de_type": 327
+      },
+      {
+        "contents": "88799981CADB882884B4C47884D0944B8B37045F31",
+        "de_type": 884
+      },
+      {
+        "contents": "B2BE3EAF7781B27C26D1C1DED2D503",
+        "de_type": 326
+      },
+      {
+        "contents": "8DE982C8211A0DB37462DF80908A",
+        "de_type": 957
+      }
+    ],
+    "encoded_section": "A59013DD5CB96E28C1A8F5DD5FEC82CB88BE639110007C5463B073E37C64784907BEBE5BBDEF90021514E83EE8FEF5010680B26A5530A8FDD2A2EDFCF02D32FC9F74DE8654F3816A4E9B62D75A7C768B2D247C127C2016A0F2EA412B31A9B75D74DB39BC47617A87C767C3F7E134FD14E3051635789B5C8B29EB1F4DCC60CFC947589904C336DC786AF79471140DD27C5C4808749AEDCCF2DB7848B30022B64A53FC2365DA27",
+    "identity_type": "trusted",
+    "iv": "CEC5679AEB9A51471B5D4681A305DD04",
+    "key_seed": "6F3DB15F4DF627B06073393BAE946B216F91AE6FE5B3CDBF13FF7EC6641A464E",
+    "metadata_key": "0162EF842711DBF3B94E4D471EF750AE",
+    "section_mic_hmac_key": "5529B07938C0FE667CB13099BBBEDAD33B2FA644FEFE54C02B5923CF6A8AA2B7",
+    "section_salt": "7C5463B073E37C64784907BEBE5BBDEF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8F6E3B41929E4835D8A92894E01D3370",
+    "aes_key": "1E7D6DC597401B8495A444FC0DF6BA1E",
+    "data_elements": [
+      {
+        "contents": "426A68378FBD50DAED7B3FB1E90B",
+        "de_type": 275
+      },
+      {
+        "contents": "A915A4A2D2DBD35A71628777FC2454B2",
+        "de_type": 860
+      },
+      {
+        "contents": "44AC7C57E6F86C622909FA47E9",
+        "de_type": 956
+      },
+      {
+        "contents": "20F924FEB103DD50F1A1387EEFAE248676929FB54D48B1E465AE45DF05",
+        "de_type": 25
+      }
+    ],
+    "encoded_section": "8A90130A637967EDD9E12ED105059ED73AFBC69110002FD7D90E8EE16536DC7C67F3E60A010D90023894E74272B0D304BCB3E9DF7FC43C807AAFBD40A77D397D77611BCBA2EAB0DDCDB669DEFD729738A57FFD70703EC2B9695A2A37BF34C0DED20B89D6BC2F8F42711A79429C95A4A0E2E190E8BC6FDC6C7A61ABC01BA824D0CEDB71884F62A33D906D9F",
+    "identity_type": "trusted",
+    "iv": "5DD25A67393B6865442B019CFDB5DF8C",
+    "key_seed": "EF233E0B6A8EC2808EF6FE4C625A6FC21809031077F4C3AF242E4B437D8CAF32",
+    "metadata_key": "6E4695C00A4D71156E1F33ED864069C7",
+    "section_mic_hmac_key": "AC752138D071EEBE9D679C8FC065416E93AE38BFCC21C4F313155F29B827D906",
+    "section_salt": "2FD7D90E8EE16536DC7C67F3E60A010D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "87150E19C730DBF9A86B9E12160CE5D3",
+    "aes_key": "C66FD1768C38128B074B1F8EF5D796EC",
+    "data_elements": [
+      {
+        "contents": "73",
+        "de_type": 429
+      },
+      {
+        "contents": "E6381B5087F9",
+        "de_type": 492
+      }
+    ],
+    "encoded_section": "449013E5B8AE1079C8E1B92B68F9546E149847911000EF0F6F02489A17DBEAB359CE6006C8C09002451233A8A062D0578F6040C49FE712945A45FECFE12A899C112ADEFF99",
+    "identity_type": "trusted",
+    "iv": "AE5502584C0BF952B7CCF3A06D79FB4B",
+    "key_seed": "4C90F913AB9E4AB30DB8EC14CEDABA184990B8630D6E72E3EC55DA678F647567",
+    "metadata_key": "84C0A99DDE5671E33E2916B2C6635A97",
+    "section_mic_hmac_key": "2F96B9CFBB5F2DA7B16B79E2A51B49F8983319461C5E782DC80DE00A36CCB650",
+    "section_salt": "EF0F6F02489A17DBEAB359CE6006C8C0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "AF2F88F8670B45CC12E1F0BB195537E8",
+    "aes_key": "057F34718269CBD6CEE1F96A2281FF4E",
+    "data_elements": [
+      {
+        "contents": "788CB56081AD4BF210B3D2BF2AE24354FC967C426C0D457BF5",
+        "de_type": 419
+      },
+      {
+        "contents": "8F48AFD689E68D180BC9",
+        "de_type": 231
+      },
+      {
+        "contents": "7306BEAFEB639848A3B9006FC5049BC2C570FE64F15F56F5A0B01F47",
+        "de_type": 416
+      },
+      {
+        "contents": "042BCBD8C26AEF494B0262B0203F8C862A3B36BAC14A419BE1AD",
+        "de_type": 390
+      }
+    ],
+    "encoded_section": "9C9013BE62CCCE821A4AB67616B63F417CD90D9110009F2AD41A47D93BCD76F3269EB9ADDE3F900160304961426D9B4BFC017C3599287A4B1509319EF24436CB3E3DDC8A5392E1A8AA714B880956F63F1085F709F1483A3200848F85E8BBC7255F0F878D7FDD472D1FE7664AA5849AA65D890CC229D08AC669C863793A678E9D03B7887856953EF9876DE62D09BFC10B0970C1828D7E00CF9FF05FDE6F",
+    "identity_type": "private",
+    "iv": "00CAED3CFA112DE322DD39A9D46B1057",
+    "key_seed": "6CF216D98ABC54B3D01EAF03E690AA8F705D853D1A409C98AAFB64AB5DB8B777",
+    "metadata_key": "3AEF7BBF65BB6397D331899133978ADE",
+    "section_mic_hmac_key": "4A3B921039E9959F13555CFF983C7FFEFB4C2EB3F8009280814C77E18F2C4E0E",
+    "section_salt": "9F2AD41A47D93BCD76F3269EB9ADDE3F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7794B8D1AB196CA8AC2105A839BCD4A8",
+    "aes_key": "0ADF3A9468C4E726C4DB2A608549EE98",
+    "data_elements": [
+      {
+        "contents": "CB1B557B230D",
+        "de_type": 585
+      },
+      {
+        "contents": "7DBBD4ABC8B4E7589BE1D51921022C026D3D9B95",
+        "de_type": 531
+      },
+      {
+        "contents": "DA2FC203F623B7EB1D",
+        "de_type": 544
+      },
+      {
+        "contents": "2474FDC7BF11E245A27F94E7ED426428CCB3",
+        "de_type": 437
+      },
+      {
+        "contents": "3EE60DA7CBAE5B47FE578E49FEFB1A221F08B825",
+        "de_type": 650
+      }
+    ],
+    "encoded_section": "8F90137E678458819B7DC2C5F15AF080B953859110002CDE4D9F6C04C8FE5FDB6C5E32FE2CCC90025D8153CCCA9FB64C5FB097FA5E89BC09E1C5814AD60F68CCFD49AF6FB93D7D5F9A6032BE33FC6B1C250E5AAA4D26D7D73C334E84411E72B9D486E133675636E3574B0C8B5C43CBB8240F59C0CD41D90F886DDF0BA9177BE3CB9FED65F79FBD0018B8032567A6D069",
+    "identity_type": "trusted",
+    "iv": "1894035341D848E48F9A51C823863216",
+    "key_seed": "91506AB916B8A078A6DDE8B0BE901CE7AF4696136DE8D7DE45CF849F7270AC5F",
+    "metadata_key": "6EC956F9A4E19C08DFE8D4A622325516",
+    "section_mic_hmac_key": "0F4C9028DF6BE7AADA4E075A6BA1DD00677087758012415836160F2057ACD8A1",
+    "section_salt": "2CDE4D9F6C04C8FE5FDB6C5E32FE2CCC"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "26EF54C5E545BAFE7E3FE21889954F4B",
+    "aes_key": "067B439C57F9DE70894D5719B7DB2B35",
+    "data_elements": [],
+    "encoded_section": "379013080E311384411FF6770D2B94AC7ACE169110001FEFA67CEE0923857B10DD52D0B34E71900450893BB7FEACC5728EEDDF1D26ABC6A7",
+    "identity_type": "provisioned",
+    "iv": "7EED03455676377622DA473E4F16F32A",
+    "key_seed": "DED047531F38D53F63678999DBE4BDEFD7B784848EBB7E002F96458E93504118",
+    "metadata_key": "3BEDA0C2BC240C647A331E616CC299AB",
+    "section_mic_hmac_key": "C64D36914AAE044A5615D8C61DE6EFE50B28A276550B62F2CE5085A1189616DF",
+    "section_salt": "1FEFA67CEE0923857B10DD52D0B34E71"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1F519C5224D33911C941374BC65E28D4",
+    "aes_key": "0BE9E36BBA46D40FFEEA09B8F0D5F5C8",
+    "data_elements": [],
+    "encoded_section": "3790130CA72F7349FE92C154A357B63BCA5350911000F93678548B2DA382420B7D5B5C7ABFA19001315D8C73AAB7AF4B00B43FF2E33BECC8",
+    "identity_type": "private",
+    "iv": "9057DD64AD863A184C580C3AC515EF1C",
+    "key_seed": "6C2ADF30FFE6F8DB97F237FA6563503EBED4A6877A7A90F4453C927C5C46A965",
+    "metadata_key": "2A9DCA48AF9238C08F03CBEBAADB5F36",
+    "section_mic_hmac_key": "E8E29CA7B172FE28485E42B6038344EB3850A3B4FDC0526A3FFDCE2B658588C7",
+    "section_salt": "F93678548B2DA382420B7D5B5C7ABFA1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C1576CC52ACA6AEE4E6D72D158321A1A",
+    "aes_key": "AA5444E04F5A5D4CD410584D05BC77C0",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 425
+      }
+    ],
+    "encoded_section": "3A9013E14E5F87EFDCDF15AC1D1B4DCDB691E09110004B1A66BA4FD083871ED0239BADD179979004C17822C5F498155EB82DC5852D9A67BF6E66F1",
+    "identity_type": "provisioned",
+    "iv": "509D22CF33947815509F6D320B155E69",
+    "key_seed": "E42FC4857670BE08A3D4A3A2E7CBBBE2C720CC04CCC411247AB51CD36D87FA3B",
+    "metadata_key": "BD1150EB7D9B06D0FB9688D424143BF7",
+    "section_mic_hmac_key": "0E3917077E4EBF69E843FD7BB0B38765B9BEC3C55D4DDAB58A5FBD74B586622F",
+    "section_salt": "4B1A66BA4FD083871ED0239BADD17997"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "377BC9095D04B301058A806B59A57F57",
+    "aes_key": "5B7C325293C552B1B1286B3F5A988FDA",
+    "data_elements": [
+      {
+        "contents": "BE2875720FDD655D",
+        "de_type": 392
+      },
+      {
+        "contents": "76E75061",
+        "de_type": 901
+      },
+      {
+        "contents": "A6DCBCB08EE974DA3C2677054843F1E3BDC74894A82BDD3ED8E8F231B3",
+        "de_type": 989
+      },
+      {
+        "contents": "F6C0F899C87F7B6F2ADA4CB6AC54F679D871",
+        "de_type": 891
+      }
+    ],
+    "encoded_section": "7E9013D5DEDED151C0BF96D220B3AAFA310EBD91100046C9B3269C4FAA4938C3BE157869EACA90015CD656AB893D2F34D12B52C9212BA6E26191D2054AD777025E72D552876D7F603193F642B9A0AAAAA8F327AEA1C88760EB9968177017593879A486601E2A9FCA7B9AD3F4E3761177516CA335BE2C0F250DB498656A4681",
+    "identity_type": "private",
+    "iv": "9BF1FF6714915AAFE0ACFC6AFB53B67C",
+    "key_seed": "80F614A0EBB5AB849CCC3343443DBD9560983BF83E7F699E742CD736F7C86CC4",
+    "metadata_key": "BF0EB0030D8626F493C9F89271E63EA1",
+    "section_mic_hmac_key": "D32162D8264CD760B9C3FB677C389333D77FBD6AC51BE51FBD11354B4F04151F",
+    "section_salt": "46C9B3269C4FAA4938C3BE157869EACA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BC027A216DD34B788B55394D74F2ACF6",
+    "aes_key": "F4500F319B2E1A064448EFD061A1A869",
+    "data_elements": [
+      {
+        "contents": "51CDB7E7020C96926D5B015EF6AFC86FAD",
+        "de_type": 209
+      },
+      {
+        "contents": "A8",
+        "de_type": 16
+      },
+      {
+        "contents": "6CCC0F2F8660",
+        "de_type": 145
+      },
+      {
+        "contents": "1A6A8EF8B495F771C4BFADF39CFB37",
+        "de_type": 602
+      },
+      {
+        "contents": "FA7D",
+        "de_type": 393
+      }
+    ],
+    "encoded_section": "6E90133436164C4FE9F77A9C7A4331E5670A3191100028BE87A539716E6151518CD624233C80900258DB4E150403902E214CA9BCC5B8DF6F2A79CE406C90817577C0B3ED6D873AB480CC6989346F6893AA42C6F4EB5B83044F3FB86E41B035A7DE509DD369B86297394170886D61A1",
+    "identity_type": "trusted",
+    "iv": "0B7F0AF24D63480085FCF7948C1825BB",
+    "key_seed": "F058BC14D7150596F7251F711B065981E786691012EBC6032D16DD5EA125975F",
+    "metadata_key": "CC6B26C79E16DD81D63644043D76A92F",
+    "section_mic_hmac_key": "6012E0F51DC90446DCD3BDF0701CD4C3A5C9750318C2BE597AFE5EF2E0FDFCBF",
+    "section_salt": "28BE87A539716E6151518CD624233C80"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1A08F7A48EA6CBEC743CF81FC6D56821",
+    "aes_key": "D97C644C27E58A5A498EA72243B4A95C",
+    "data_elements": [
+      {
+        "contents": "AEC98CDC9931D9FA7B",
+        "de_type": 273
+      },
+      {
+        "contents": "0C0C0EF256DA68",
+        "de_type": 380
+      },
+      {
+        "contents": "D3FA7A86",
+        "de_type": 877
+      },
+      {
+        "contents": "EDD68F83E5679FD3AC94D4C2429CF0315E",
+        "de_type": 68
+      },
+      {
+        "contents": "500D0CFF89F6",
+        "de_type": 67
+      }
+    ],
+    "encoded_section": "6F9013DEB0470A1F0FA8A932BFA955957CBC0691100078E0F69271423A55D3CE7B9BAB03CA979004A1F0A1F01FDCC777695FA1905956FC2C0B2E0ECCE69A1DF5B30E799BF694545A488742FCA43945D42FF4A4D85375F6A70A580DD6C262AB36D7EAD41B29960339ED26DA7BA7422477",
+    "identity_type": "provisioned",
+    "iv": "AE5AD7C635F64E56905AA85E0F9B3B82",
+    "key_seed": "CAB76C82AB54159962AF8F8A9E0A6DD4C9B50C5F177EE962D20809A4F547A270",
+    "metadata_key": "1E7A975F40C89469B15AC5375E4373BF",
+    "section_mic_hmac_key": "AE063C8CFE9CE240A12A366F41D2A4B4A8A8BF6A1C423E8B70B3B47D15CD6A5D",
+    "section_salt": "78E0F69271423A55D3CE7B9BAB03CA97"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3D2CBD32D735A997DA15835EFBFA7373",
+    "aes_key": "00FB26A966AEA71F4F3F81EFF6E5829E",
+    "data_elements": [],
+    "encoded_section": "379013B611C34F3E2A898D28DFF2CAF8F00DEE911000BAC5A68FFDDEF9369C1C0BC7CC3720309001B9E0939D28E54DEE710832446AA1307C",
+    "identity_type": "private",
+    "iv": "2A71513622E51E6F2108327F7097E087",
+    "key_seed": "F3BA939307B540A9669FCF4BBA080D1ACB6CEE90C507BF68A4E6AA370D7D984D",
+    "metadata_key": "DA78623C0201AE798FFC6E8F80F84884",
+    "section_mic_hmac_key": "7F14654F8045636DB98447C3BBF86EE7A1956CDFB14CE500A7D8F98C15A43011",
+    "section_salt": "BAC5A68FFDDEF9369C1C0BC7CC372030"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "77ADB3A8157794B68D57E93BF8859870",
+    "aes_key": "4F6EF047DDC92999AD39D14F5E9E8EC0",
+    "data_elements": [
+      {
+        "contents": "4479FC904BF6F8",
+        "de_type": 306
+      },
+      {
+        "contents": "C97FAB7582641A84D1D8FA",
+        "de_type": 403
+      },
+      {
+        "contents": "785BDB2AECFE00",
+        "de_type": 132
+      },
+      {
+        "contents": "34EB7B5DD6FF9A7C75",
+        "de_type": 660
+      }
+    ],
+    "encoded_section": "659013283C8CA35E4ABDC728046AC5E81C10BC911000479E4DBF68E781F32D60231F00FADA7B90012B74C5F9D7D1ACA3B1FDB3BE49719E5B9FB7005799CDED08ED36939500614AFE7585F03593DD5A9C6F9D58A2D508BC234C4471D86AF173D7FDFEF2023448",
+    "identity_type": "private",
+    "iv": "3DCB029A083103E2C7C69763285546A2",
+    "key_seed": "8951296E131C87D3A0A8F8A6E3F91B507A9FC625F2209CFC470E09AB7ECBAEB4",
+    "metadata_key": "E621F60D8C3E75309AC74418E87493D5",
+    "section_mic_hmac_key": "7BB1F0E37007179FFF5E50DA154C0AB6DC07FB15A3A8C2B9CB80FB0B22A3A366",
+    "section_salt": "479E4DBF68E781F32D60231F00FADA7B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5523CC0A3ACAB8E002C5B03E4808D625",
+    "aes_key": "A93EAD18C04AF23BA0B446769ED0D4AF",
+    "data_elements": [
+      {
+        "contents": "57CB2931FF",
+        "de_type": 736
+      },
+      {
+        "contents": "3BCC86FA67D655249461AA5516BB1059579B79",
+        "de_type": 61
+      },
+      {
+        "contents": "7ABEF8CE6D3F04A289C51F3FEEC213AEBB27F491B29F2812F9",
+        "de_type": 660
+      },
+      {
+        "contents": "857393CDE700048F7929F87E700697268B389A526F5B4B",
+        "de_type": 849
+      },
+      {
+        "contents": "DD1F9B8FC82DC694DCE9B17CE1FF",
+        "de_type": 903
+      }
+    ],
+    "encoded_section": "9B9013BFBF9B27EAFBBF9603C2ACA1B8D00B51911000A3C249C74FC22AFC978CE2AB76F99ADC900178863494C9773EF2ED49036A65ADF8B0FCB15AFE7E05523E02D4CA7347DB21D17F63773ECD2FDAD8FEE232AC5B3C3D3EBEFA8DDBD922DEB36CF1CD53C74B55B976651149CD3E192EE54750B4CC7C0108890C5B620F308407DDE2D9E61DDC47286033EC1ACCF7ACAB012F26C116AE0A1F4BA35611",
+    "identity_type": "private",
+    "iv": "ABF1E4825C9043D121C73EF13E7093BE",
+    "key_seed": "811D8AB3E0A91917EEFFE6A65492B725DB16CEF6AC605EC55A719CF855FF4821",
+    "metadata_key": "D0E00E77083797F00688A8B8432BA577",
+    "section_mic_hmac_key": "B1913208DA43E67D32EBD684C9E51C730CA7EA852C57A61B7EC3B6D296327E7F",
+    "section_salt": "A3C249C74FC22AFC978CE2AB76F99ADC"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7B9E42554FB00BFC2CAA42EEBAF748E1",
+    "aes_key": "A93E1B7DC96488FC144480BB65A01C57",
+    "data_elements": [],
+    "encoded_section": "3790138A7CF75B48199BCD5F84CE324A50434591100083E5B4BC98CDA2E4DB2A784724360B57900214878DA8B2CF9E53C4506769CF1E4376",
+    "identity_type": "trusted",
+    "iv": "9779E069B6FA6140944F01A97D4BC89C",
+    "key_seed": "BE0D17E6FD478876E8B9BB74BA9EB382D38D2B98637A318D609A377CA7B83480",
+    "metadata_key": "5595C8B32A8E9C4C83D565DE60F704AE",
+    "section_mic_hmac_key": "7DE7B0C7C21CD1CE05291A17EB174ED90CA69598DD3085DAD647D6FE71A0E0CB",
+    "section_salt": "83E5B4BC98CDA2E4DB2A784724360B57"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "660D2523BFEC72D9DFA03CFCB4094237",
+    "aes_key": "EC158E6BDA8C755EDFA4E7E40E38469D",
+    "data_elements": [
+      {
+        "contents": "CBDCAACFC2C1898E42CB7A27D4661011705D60C5F32DA720C800",
+        "de_type": 965
+      },
+      {
+        "contents": "8F661004B6A92E32BECD006F274BABC1ACC2D3A90FACB1FFA87EDB06",
+        "de_type": 710
+      },
+      {
+        "contents": "626C92A5FDA9B4E1",
+        "de_type": 188
+      }
+    ],
+    "encoded_section": "7E9013F4C1C954AF5D56967CDC2892BD9A9D019110002204CAA1D9652AF0E2DB758DDA67ED3490016FB87E2EE1E01DE9673E1EB155582A33E799954ED39A22240BFC01E566CFBF7B6D67BE1DB06FB422AA106DA95983C2D230A1BE5C31D12A15F84FA7F580532B15AC0376768035A69094E530B9050A99028721CF9BCFC70C",
+    "identity_type": "private",
+    "iv": "8ECF0A26DDE36F8B649DECA07753D512",
+    "key_seed": "5C7C830B694068C1EE51EF76A04D99C195B8A1836095698FDED6934FE84DCED1",
+    "metadata_key": "3257B5AECD39C702BB9D5DF3D8A3F617",
+    "section_mic_hmac_key": "045161FB09CE9C68B8F4F79F8ED355A581305F8B9E92503C1274FAEB0F333BEA",
+    "section_salt": "2204CAA1D9652AF0E2DB758DDA67ED34"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "941BAB785F65055B50D126F54845E785",
+    "aes_key": "36AC7BB4C245CD5A4E082AB5820EFC91",
+    "data_elements": [
+      {
+        "contents": "2B78D10F49303E6870D7D466267F6FE2CD3FFF2545",
+        "de_type": 355
+      }
+    ],
+    "encoded_section": "4F901362962B873249BBE0926B653C83801D70911000AB6695F933776370BBC72AC0856836489001E7C16A69C4CFD200DFB8F7B42153F8A70A967EC5E42D4D2EFD82CA7DB23BA8CDFFF0921EBD24343F",
+    "identity_type": "private",
+    "iv": "C08AEFE2C72088FA9684354784D5B33D",
+    "key_seed": "B20D5B6D74823D69BC64FD37C1298865DE0C23FAB71DACCF4BD83CC5AA4A6F87",
+    "metadata_key": "643E478373531F6F17E71D77550A819D",
+    "section_mic_hmac_key": "4130AA9A3A6E3B0AB872AF92A125F5673A4CBCF6528884520AB8E8A239D93660",
+    "section_salt": "AB6695F933776370BBC72AC085683648"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "455F57E0747AE27EC84FF60FBDAD21C9",
+    "aes_key": "10A3829309D3BB339971100F42811992",
+    "data_elements": [
+      {
+        "contents": "003457",
+        "de_type": 798
+      },
+      {
+        "contents": "6F479F21",
+        "de_type": 728
+      },
+      {
+        "contents": "B815202D9A4B1DFE2A29282156288A",
+        "de_type": 592
+      },
+      {
+        "contents": "F9CDED3294668BB0FD17353C62DF3B78FD85DD",
+        "de_type": 311
+      },
+      {
+        "contents": "7A8C86FBBFC0A452B1B6D1CCCD05D5B3C0D3D519",
+        "de_type": 641
+      }
+    ],
+    "encoded_section": "8390137EFDF8FBCA2BE02D60FDA5CDC52DFDEC911000F9AB6616323C5ACE5C8BBC2F57A4AB0F90012AC5B5D47CBD499393205125BBA713DD97759656839106EA68290A930C46FD260E464B447024CC6554323EE4569315B65BCF8838C238A98F5D07BD4D2545DB255A91C9B878E54B5FA09F97C265623A26B01052F91797C11F9B6B36D6",
+    "identity_type": "private",
+    "iv": "F32FB41CBA0C981CB22F0EF3E128EA1B",
+    "key_seed": "2876E980A8F706B04EE8BC575F7F37E79118170235F478E82333F5592FB95A4F",
+    "metadata_key": "B7657539A88CA716DABF9DB888FE80C4",
+    "section_mic_hmac_key": "078EF4BA19AD750FF10E9234E6F176F4CCD372371D1A1D3F22CE054FA7C8369F",
+    "section_salt": "F9AB6616323C5ACE5C8BBC2F57A4AB0F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D2DB2DB9A8BCF5AEF392BF7F8EDB59EB",
+    "aes_key": "89A33186987B8B2D38B8DAF629F6BB21",
+    "data_elements": [
+      {
+        "contents": "53DB5DDC34D45ADFE541BF69",
+        "de_type": 875
+      },
+      {
+        "contents": "832E",
+        "de_type": 697
+      },
+      {
+        "contents": "1E44D10B600CF4E81ED44BD76A4431B6C23805C1D3AD9DD9",
+        "de_type": 666
+      }
+    ],
+    "encoded_section": "669013E6A1661A04FF0FB79DA17C60495D887F911000426F9B2D45B1019868EA8D7A205A98C990015C3B65037A20CD24E568C61253296917152A7BBD973F3D7372E2207E3E95AA20F8B0E1BEEF741BCA197680E124C9DE12AC5015FB0094F3157A3176ECC58565",
+    "identity_type": "private",
+    "iv": "52FD9A08C2A4744A0ED4DF7DF5A1965B",
+    "key_seed": "1E1C95D178D5D3721482E1AB313BB1CC17CD81107270466954FCBB0AFAE33245",
+    "metadata_key": "8C9E4E3F1616569227DD78E8524FA000",
+    "section_mic_hmac_key": "08A59583A45FF4E63BD51BB22C22049438A228AB48E59DE4180CC9B13F48EF92",
+    "section_salt": "426F9B2D45B1019868EA8D7A205A98C9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D61322B59881683F4CA689625954B4BA",
+    "aes_key": "C5D0F13868492D25CCD7A9ACBB0821CF",
+    "data_elements": [
+      {
+        "contents": "F0D028E4A63FCF08590FE7AA1F78290A952D058A44E483AD",
+        "de_type": 255
+      }
+    ],
+    "encoded_section": "5290133934FA6C6ED6A147EC05881A8DBC9B9C911000D154AA47D8B433C113D44CE491BD27C99001B754FF6A6FAF35E8981928F2129E687D75C7D8A44A4BC54F0A5EAD534A0E8D814D20B27456D3B4DF49DC40",
+    "identity_type": "private",
+    "iv": "39D3563760AC6862EC2BE2D078617533",
+    "key_seed": "9A8AC70E3C17AA4920C892C557DFF22DE933A5225517A506A4A2DA31AE8D13D1",
+    "metadata_key": "E3FD32B1669F4BC7CD8A270537729FAB",
+    "section_mic_hmac_key": "E66F30B485A5F04FF29CCB6FA9354EEFD9519EEC7BFDBFB867FEB3151D6F9A2F",
+    "section_salt": "D154AA47D8B433C113D44CE491BD27C9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8A71F9A833292722EB3AC152EF9E3C2E",
+    "aes_key": "D6C3FE4169BA5C1F7DD5E31A69DE04C7",
+    "data_elements": [],
+    "encoded_section": "379013091C3653AF02D4CD451FD1CC61DD194E911000D08DFCA5EADA20717FD66C7001A13AB89004F7BB3F2D2ECE19D69359C262107426D3",
+    "identity_type": "provisioned",
+    "iv": "D2F89CDEC85C3065FE1855983963A687",
+    "key_seed": "D3A4F31DF78BB537F4319E42EAC800AB91E2A4E0A4860BFDD8F24C38CB24A82B",
+    "metadata_key": "9FCAF36AF47A83C352D8D4DA69C6F3F6",
+    "section_mic_hmac_key": "14F18D13ADF4C22190EF457CE51A6575BAB65698EFD94FBE18CA227D5386E358",
+    "section_salt": "D08DFCA5EADA20717FD66C7001A13AB8"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B56527D15C00EA6C1F64191500E82B17",
+    "aes_key": "6A43BCE02D294DAB0096FBF48E31B9BE",
+    "data_elements": [
+      {
+        "contents": "4634BF3FD479C9804459313CEA",
+        "de_type": 340
+      }
+    ],
+    "encoded_section": "4790133CBE647AE20CBC397A25F52A5B56C936911000A59F02BDE2106CF82A01787C33DF2A089004A05865B1C3F0DDB00C3434147F19F333F1796D784CFD0FA34DD93E3136BA3414",
+    "identity_type": "provisioned",
+    "iv": "3B1A323410690A2F02B5259796488D38",
+    "key_seed": "3AF4E5F9F468FC934D60EB5B64FE42E73F995ADF8530734194AC832AC71BD742",
+    "metadata_key": "8A76F8A2C4C7D2FF7B656DAFAF4D251B",
+    "section_mic_hmac_key": "0635464DCB6685C1D8CD3340BB3E81A1247AFF24A980B5E6690DECDC45854B75",
+    "section_salt": "A59F02BDE2106CF82A01787C33DF2A08"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BB563222EE04AC29FF7A04090A36481C",
+    "aes_key": "95C44DA79C172EA55314090F38767175",
+    "data_elements": [
+      {
+        "contents": "D75B5DDB4C68A3EA5441964A4D",
+        "de_type": 322
+      },
+      {
+        "contents": "37B4C50550C810B4C812417DEB4199026C9355",
+        "de_type": 351
+      }
+    ],
+    "encoded_section": "5D90135D599966D1D25825A58E1CABF51DEF0D911000C01337053877FEEE2433C8675EABA35D9004C3AB83900533AADA9D91C0B11245FE4C8FFEFA907B7F99C9EEA4DD312A7FDA8E24AB21207B8A383DE2F4FF33FC95873FDF96B3303D11",
+    "identity_type": "provisioned",
+    "iv": "17815F8BD9BFF92671528C5F612433BE",
+    "key_seed": "AA1CE89203994182C1FF59E97EEE5E15337C4FC31EBCEA71B890BA95CD103B7A",
+    "metadata_key": "FF7FF9290BBD363B0D43B3158D234AC4",
+    "section_mic_hmac_key": "3FFC5928A11FBE71404CC8CBB4BA8BAE630CDE5421E3165598B0404E72475196",
+    "section_salt": "C01337053877FEEE2433C8675EABA35D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FFB446A0CC75E485DC5F7D16E3B40C5A",
+    "aes_key": "489063A42F9BCD0D45A9A2E19A414039",
+    "data_elements": [
+      {
+        "contents": "62F1CF47D18470AEB527B7F6775296CC6EFE09",
+        "de_type": 177
+      },
+      {
+        "contents": "5ACEF1AA889FDF113138CDAE",
+        "de_type": 498
+      },
+      {
+        "contents": "34AE",
+        "de_type": 271
+      }
+    ],
+    "encoded_section": "6190136C2A97611B8AD5309E3CAB84A3CF565F9110005AD8B5A464405396CF27B92E3318855B9002C9BC281DB61BB7A2B2C669121E354A6D749B4F8891943647B28F0183FB7D0070AF55DF680EBD14987C99345BF20FC263B30FB8ADDD031444FA2D",
+    "identity_type": "trusted",
+    "iv": "D79BA5933791B503075CFC01E0FB7712",
+    "key_seed": "730687FF006CAEE1C0A66A01E54D4A7CF50BEB7A2D7536C0C4AEAB53E00F1513",
+    "metadata_key": "1401AE3D42B1A7EEE03E608B06B44F01",
+    "section_mic_hmac_key": "0270565C4972225F54D2DE44ADA82F04A11FB206EE8016554CE2E34150CBD41D",
+    "section_salt": "5AD8B5A464405396CF27B92E3318855B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "AF42F66B6003BD6524B54DA8D2252AC4",
+    "aes_key": "12383F430FBF68B10F14C36E22CE44C7",
+    "data_elements": [],
+    "encoded_section": "3790132E7185611C4A574D7A958EF281ECDC9F911000AB00F549C0723FF724278B0E94281421900254511D764D856B3D86F6921C0B69BA63",
+    "identity_type": "trusted",
+    "iv": "02BC7DD34BA8A194DEB6394D367379A3",
+    "key_seed": "EAF9F8E130E1D639D765601C07BB3926936B173EAAC71351D43EDF767CCC7155",
+    "metadata_key": "3CED07F3973098FEEC050DAA89D1BAB8",
+    "section_mic_hmac_key": "5599A5813A1058AECC22B1B3DB8A24CE041AE2F6A287A7886C7131C67DCA6F8C",
+    "section_salt": "AB00F549C0723FF724278B0E94281421"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "25670EC81D48FF31F8771189AA170F3B",
+    "aes_key": "5461131B01024CAA85D6F3F04C747EA2",
+    "data_elements": [
+      {
+        "contents": "70F812A1C77562795B634A15",
+        "de_type": 752
+      },
+      {
+        "contents": "4A7098AB14408AA7A49E737FBBB777F0",
+        "de_type": 512
+      },
+      {
+        "contents": "132D64D069C144AA18E7515196547AD6E971",
+        "de_type": 313
+      },
+      {
+        "contents": "07F0E91FA7CEF471AF7E42C74DEFE8AB692B1B5FECD68E4EDDE089",
+        "de_type": 278
+      }
+    ],
+    "encoded_section": "8C9013A42FDE96C60F5F6E2292A1ACD8538E71911000C655B6AD55A141DDDDC8CA239D12944990047F71A803B61F1EEBC3D498E2916784FFA19ABBA694831D36F6E272FF47788F91DDCDDBCE7922E6410EB61D510D257B0A5BF1A89A2C5567300C40D27FA1F76D6C6D1F9DA88844E5B390D02F9A29FAEAF08E5A0401A824D58BE5489B6F272381628C0CE5D552",
+    "identity_type": "provisioned",
+    "iv": "BE73A8FB567E9F85D0AB30D9EF198482",
+    "key_seed": "5FBAB9B4DA6E55AB6A28DB0CFC1848B4B1A2A740176A41779A2B0CA53C85E0C8",
+    "metadata_key": "5A0FC8681CCFD973AFFC3A8A343F875D",
+    "section_mic_hmac_key": "01BD476EF165370B6064C3C61ADB7EB35C28E6AA661DE67AE23DEFD9BF0C62F6",
+    "section_salt": "C655B6AD55A141DDDDC8CA239D129449"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1698A0A2CBC569C04A8ECE5934215D84",
+    "aes_key": "67EEB4455EAB868F8530E5CC19A6D3CF",
+    "data_elements": [
+      {
+        "contents": "3F598536EC1EE56157FAC56036CA37D2FBD91CEC62CF817655879F6C6FD7",
+        "de_type": 699
+      }
+    ],
+    "encoded_section": "58901366D5FF91CA1E85781CB65F9F44A6A915911000D09661823870EA098CD4B79528F570549002B623382EE2174931E09C30B1EF4966869EB8E162A0B91F6299A507A566090E48B276A0AA84B82A02C9388E1572A5749905",
+    "identity_type": "trusted",
+    "iv": "E685B253F5DBECDE5E299677701C3C52",
+    "key_seed": "6F12AA77CA2C0963B48CA6117D5AA7971BD017CB4DCABA81A94027F92A478D36",
+    "metadata_key": "E91B270B0C39EE00A7445A9FEA85589A",
+    "section_mic_hmac_key": "A4D97829E2F5B49AA35B36C8FF77301335A033C6B4BB97987D119B0116A24E80",
+    "section_salt": "D09661823870EA098CD4B79528F57054"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "81CC782D7A1DD2CDC0AB810AB984643D",
+    "aes_key": "B0EB8589C9401F28FC0C26469D89A63B",
+    "data_elements": [
+      {
+        "contents": "D90FCFF0DAD5588D662E8A7486AEC74A9422",
+        "de_type": 382
+      },
+      {
+        "contents": "707B",
+        "de_type": 231
+      },
+      {
+        "contents": "6A6AA7D74F5FD3FC85A3",
+        "de_type": 733
+      },
+      {
+        "contents": "230C99B60765E1753C29C065FD9F9B7F512CA13613F1",
+        "de_type": 47
+      }
+    ],
+    "encoded_section": "7690130FB4E3079CDF302AB7752B12365B7DEA91100088A69F0ECC5AD36DCB48C315F22D302C9002FDE9D76DCF16CDE15E6497EFA632888F9CC783729E139D9B5A54CAF585BDCD3DE00C43748F971D6E8B945DD0A63A53ECC8405AD75DD96ED285EDB30010951E7D995334F0D562E5D5A96B7B69C99180",
+    "identity_type": "trusted",
+    "iv": "3F139EBD60CEE2DEFABCBE5D8C03CC33",
+    "key_seed": "C97A976A77C57D2A16038BF394B1ABCBCF2CB1535CAC921B837418C75FFED5A6",
+    "metadata_key": "253F314C26118C9FF2156BD6B103CF12",
+    "section_mic_hmac_key": "1C2FE36935B0D3B8B54F8F7ADA894CF63D60E34C4E43E3BEEE457239D9CFA090",
+    "section_salt": "88A69F0ECC5AD36DCB48C315F22D302C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3F68DECEB46FC2B26A80632B9F0BC551",
+    "aes_key": "AAB3D40BA404341AB33B80C75A455956",
+    "data_elements": [
+      {
+        "contents": "06A9EDAFCD584B6E38788637216971",
+        "de_type": 671
+      },
+      {
+        "contents": "2108A76D",
+        "de_type": 220
+      },
+      {
+        "contents": "E1AFEA550370A4D8",
+        "de_type": 302
+      },
+      {
+        "contents": "B089AF93656690E7F5D458574E009638064A02ADDD",
+        "de_type": 606
+      }
+    ],
+    "encoded_section": "73901363D824CD389AB1B5405A4084503F93F591100018C01A505928C235EC10AF668DB40FB390020577FABC21B8AD30907FEEE2AA7B75F0DD28EFCBC3A42056D1AAA57CEDC6BC99DDE47E5481C4AED0104EA28B805A32D55C06605488536113061524D6E8D3E082EFCFE9EA04C60E6205DFEA60",
+    "identity_type": "trusted",
+    "iv": "D24223CF7DD83A7A535C1C8C475F8069",
+    "key_seed": "6AB190C93E00BE55D327A52A7D6E2A6B55EA6BC42F4B4758DF942A0FEE5527C0",
+    "metadata_key": "0911EE2B4CE448C904D7EA949BFE7924",
+    "section_mic_hmac_key": "AB82958BB658137045E64CAB0BF661E3E93D0CD7E9E09F8C5094832C3F324770",
+    "section_salt": "18C01A505928C235EC10AF668DB40FB3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "16F428987093EF4C71103F7DAAB954D7",
+    "aes_key": "B654E0BC4980FBAEB1A7BFF6016EEEE4",
+    "data_elements": [],
+    "encoded_section": "37901338DF36C24A081C8C465579F807AE0D719110003EEF9CADA88DB5EA3CC0A49B3594282F900164F64D69E7941A231ED4B5655C92A27D",
+    "identity_type": "private",
+    "iv": "A08E3CAD668107A8797F8679F356AF13",
+    "key_seed": "E2C7557906E3BC6E94E7CE260E8AA2C1381629F7BCDE83BF6EBD249FAC95E085",
+    "metadata_key": "8C974F54F1D47E4E6076477FB073244B",
+    "section_mic_hmac_key": "5C1D2E2FFB430890D90C0A9D98C3E39F8CCE5C0F7134AA5C01E83F876C1B6147",
+    "section_salt": "3EEF9CADA88DB5EA3CC0A49B3594282F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A6ABE19EA26BB9FE65BBC1F644681FBF",
+    "aes_key": "8DCCD08E61E8BF6B3E29907C8FC4A48A",
+    "data_elements": [],
+    "encoded_section": "3790132CEE5446EF5E2D00BFDAA9BB01F11E6791100081833175A7ABCE8DC548433B6ABFEAC99001C4782C58F1F77A879FDB53B0D7DA71BE",
+    "identity_type": "private",
+    "iv": "89DD6857CF308FF28B8F20AD6121D2FB",
+    "key_seed": "BC9EBF601245D8B4FFB331D0DEEAFF5EB2F4D255B27CA6F589FFE244D7F8BA61",
+    "metadata_key": "CE7B6849F29274DA2B5153DA263EB715",
+    "section_mic_hmac_key": "77EABC4A9722507E888315D75AFCEADDAAE374D29D8482C32B49E4DE797AD72B",
+    "section_salt": "81833175A7ABCE8DC548433B6ABFEAC9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "DBC312045F0B91D01D69B4C7D64CA84E",
+    "aes_key": "8AF7683D5C00432FF70F5C0F21B62ED0",
+    "data_elements": [
+      {
+        "contents": "8C33E56E140674BC4DE6B6E6503B665690A0A5",
+        "de_type": 962
+      },
+      {
+        "contents": "52A891F8F72BD3D53F300F6DF78386EEF406",
+        "de_type": 809
+      },
+      {
+        "contents": "E4B5E9A863195AEC5A1F58940287190C21F4EED5A114F9877D",
+        "de_type": 424
+      }
+    ],
+    "encoded_section": "7E9013AFEE4868B269521650E527FD6505254091100016B2164140F3A7D4D99588A1F07BB6829001627CA78389F5EB99D9DCF985143E7064B51264680CE657B458350306830F5330349B5943199B49D65CA4FAE46097C0FE5784578C7B937D17650DB5D7F9BB64518ECA0900F6537B0A1A9D9B09D72AAD18F927E8CE44B48B",
+    "identity_type": "private",
+    "iv": "EFFD6E65CE5969A045DC17F469C55D21",
+    "key_seed": "CF1BB3DCBDD1B4B1854312571D0D9E4CD3E51CB66886F8101DBA51454DAB3B43",
+    "metadata_key": "7712D6C6361462BB68F275E64847F92B",
+    "section_mic_hmac_key": "5976A38A5FC248E579FAA97C4AD81B01EDDB181D787DA79C55C6A5B2A3043320",
+    "section_salt": "16B2164140F3A7D4D99588A1F07BB682"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6EE5BA8B14844183D1C587D61EA65F06",
+    "aes_key": "8C770833C8746D89219288A5F1C77A29",
+    "data_elements": [
+      {
+        "contents": "4EE9017827E633A83A1F3DF3727636D33D68F25F096F",
+        "de_type": 70
+      },
+      {
+        "contents": "8E501147C6",
+        "de_type": 700
+      }
+    ],
+    "encoded_section": "5790134F8715DC2D2DD29001712938C4AC092A911000E5BE413F286D53CEB80C4C43A77C8F429001A090B0006FBA8B3AC2B4E6D8749565A555C2823BACBD6BEA07F06CD282865CDD8DFB9AA1EA9CAC5ECB512E94EAA509FF",
+    "identity_type": "private",
+    "iv": "8AC60B5B6C4BF4DA33864292D1A49040",
+    "key_seed": "256E590E325B44B0145FD955AA40CFE7AC01B57FBCEC373C94F17E1B9BBDFF20",
+    "metadata_key": "0B9043CF8075D46F3E0FC946A79A18D9",
+    "section_mic_hmac_key": "D3479310DD4C5AAB4263C51FA03D1F8593365098868C23A374211FCDE1908DC0",
+    "section_salt": "E5BE413F286D53CEB80C4C43A77C8F42"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D941C60088DD645313DFADB182C82558",
+    "aes_key": "E9919CDC3C08848B22D3C9AF7834E623",
+    "data_elements": [
+      {
+        "contents": "9BB7ED5BF7DC448BB3",
+        "de_type": 330
+      },
+      {
+        "contents": "D4539A5B30220667E3A4C193",
+        "de_type": 950
+      },
+      {
+        "contents": "57CB6A30E9BE0B44E14D42C6A9DF1F40F78E5A72CCAE8DCE6ED20E8B8D87",
+        "de_type": 94
+      },
+      {
+        "contents": "21EA5370D8F897F0C836F9C0D7D8D20D9031B6AE",
+        "de_type": 220
+      },
+      {
+        "contents": "1ADF486290D5EA500318FF",
+        "de_type": 121
+      }
+    ],
+    "encoded_section": "969013A9786ABE6D8971BD5514FDFA8CF2AC559110001142426FD9F8AC8E04980A76C8873DA1900263DC49F57C111C30ADA31DC772A46B34F87451042E48206D7BCEAA5D1C5511C413D77CEFEE13355DA1535D628BD04516B2983741CBB4266ECCC6252142347B8113956A28B3094390F7799F541BAB5FE11D7C3DE41C546B090467648933DAB1D5D4939B75B75C9BFA68FD0640EC3FD0",
+    "identity_type": "trusted",
+    "iv": "4C74A83C4F3D310530BC20A76606169A",
+    "key_seed": "6CFB25BD6F1AD54702025AA20976E8CC36E5125EFCF766339E9FF00608383FD5",
+    "metadata_key": "B6623EF31E56177E5E2FA2D34EF08217",
+    "section_mic_hmac_key": "1B6CE9263DCF22995C99D2E8328D6FACDC3B3729A0B2E8EEE4992C6231B5992D",
+    "section_salt": "1142426FD9F8AC8E04980A76C8873DA1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "AD17F621C4099C16E1364DF5EAAD46E9",
+    "aes_key": "4162A567DD3D59242D948EC4388D3BA0",
+    "data_elements": [
+      {
+        "contents": "D1AC9D",
+        "de_type": 319
+      },
+      {
+        "contents": "AF10369D76F126F65771B19AEBF8CB7063AFDDAF",
+        "de_type": 568
+      },
+      {
+        "contents": "8EEB01E953A7DBD9FAE4543BAF174901D9946C89422B007F22",
+        "de_type": 659
+      }
+    ],
+    "encoded_section": "709013BF382460F591A5AF35356E3138DE8BBE911000F008A0E0C87CEC6F7481FAEE41DE2972900492A0930FDADCC989A95DA24F2BECB1F0120086D7B4BCD531450DF307DB40F1B3B6E2A2BEFB0F2A158EDA479565E941CEF4DD226E05EA5A377DC6BAD5C4DF31346DB5887886E07D1F5A",
+    "identity_type": "provisioned",
+    "iv": "E2E2D8C0EAECB4E929DFDAC68E4A87CC",
+    "key_seed": "6A41B3A483120C6592A27A6DA224A2CE97A3630D7380BA9B492B7670C2DCA431",
+    "metadata_key": "84B633DF772A8582F240990C6505CFFC",
+    "section_mic_hmac_key": "6DD9ECC46CBBD6FFEB27625580412AA19C944BB3EE91E7BDC856B7DEE375FE6A",
+    "section_salt": "F008A0E0C87CEC6F7481FAEE41DE2972"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EBDFB8A3FA70511CED2FD2BAC79AEA0C",
+    "aes_key": "6A02B7B1B88FCF1141E10889BD473530",
+    "data_elements": [
+      {
+        "contents": "78071178",
+        "de_type": 776
+      },
+      {
+        "contents": "49A8B73C22BDABDBF1",
+        "de_type": 36
+      },
+      {
+        "contents": "E34B4BA2CF",
+        "de_type": 205
+      }
+    ],
+    "encoded_section": "51901367AA7D0CEB9619E38E3BC8FF5C259F59911000282ED516C9E632397B697EC6D5C023189001E888308F07AF62FEEC9F6AF1492CF04DE123DE408A607131F4454B1439A68F73D2FD5624B674550A37F3",
+    "identity_type": "private",
+    "iv": "FF4CC7BD41CE43FFD5B10FB55AC1C4E8",
+    "key_seed": "2860FE966BB48A14B70CC4D212BA76776EE122D2A3C58A45001060CDCFBEBC25",
+    "metadata_key": "A87D121E726F9D661E37F5829450D07F",
+    "section_mic_hmac_key": "EED14F69A5D27D0ACDB1A1FDFF1D5FED2FE02A60F0597F60376092286816EB42",
+    "section_salt": "282ED516C9E632397B697EC6D5C02318"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CF919F4B960D6466F6140686D0FA9252",
+    "aes_key": "E64125AAA9FDAC6241981F9DD418A55E",
+    "data_elements": [
+      {
+        "contents": "59C49F092732737FF5AEE11EEAA22EF01B0F8E8438D0BE8D8EFF99AF",
+        "de_type": 472
+      },
+      {
+        "contents": "",
+        "de_type": 38
+      },
+      {
+        "contents": "05F2391B9C27F2F93B4F90090D588DF3B94B1E",
+        "de_type": 920
+      },
+      {
+        "contents": "E088646F209D208B75C2",
+        "de_type": 573
+      }
+    ],
+    "encoded_section": "7B90137043A1380AAFA41C6CBE5A04DE25FF85911000C42674BE68576F2D75F9993288D240939004EB40F863F87FC7F36AAF85EB09F252C69D551F07DCACC4364B7D1470BD606DB9EB51F3EBF8721B9DF168910D7287029C237EDEDE9D4C07046349A46B7BB4ED83742649EC807874B64F3F34DD6F079C749D2C527A",
+    "identity_type": "provisioned",
+    "iv": "CB56304CEDF311EF61555C248ED67AFB",
+    "key_seed": "C7CA3CF04F910C2F618556A302B2AA4B21AD9C6D33B623B8D55D250468B92DD8",
+    "metadata_key": "70A8E9692001AAA64431EABDF02BCDA8",
+    "section_mic_hmac_key": "FD97007887547EE99A2BC7160E149E08A91C640BB285B5B80B3E18B3A87E7A60",
+    "section_salt": "C42674BE68576F2D75F9993288D24093"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B7D3C684246A638889A81C2A50D9CA69",
+    "aes_key": "3C90071725C2D7C73AF1A21FFC7DCE1D",
+    "data_elements": [
+      {
+        "contents": "8D580692F89B5EA1E3CA4154F0CDC018E0",
+        "de_type": 812
+      },
+      {
+        "contents": "C9E79F183FA7E85C6A93B992E99A10D3B9FC39",
+        "de_type": 160
+      },
+      {
+        "contents": "DB1462A10152",
+        "de_type": 248
+      },
+      {
+        "contents": "83067D1B116DE15914D21DAEEBBA563D9B11C7263399C97C91F267A9",
+        "de_type": 67
+      }
+    ],
+    "encoded_section": "889013120757F626EFF3FA706F5F7D9258F969911000C82A55BEE9331ADFEAF004B1F8411BEA9002269BFA035A00CFF999E7A24EEA0BDA41AF2435C3000FB78786E40EA307FF724CAF0E107ECC03677F508CFF053E269BEF7C643AE9FB379142A28C8B526720D5C02C616293082B34C65ED08F6D0A9B040A4A19907709AC21CF3C887546F6D4830DBE",
+    "identity_type": "trusted",
+    "iv": "8D1D26E68602B0801C1BA240B64AB2AC",
+    "key_seed": "0E7F40995A8CB111A533A7D3D37855140BE8A688302F897B91EE118209F89E0B",
+    "metadata_key": "44724015014CA24A6AD976E039AF5254",
+    "section_mic_hmac_key": "67861314F763C77B267EB38601ABC850E44635BB29A5E015A9BF97AD02B11887",
+    "section_salt": "C82A55BEE9331ADFEAF004B1F8411BEA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2275164A24418E8253458C856948175A",
+    "aes_key": "FCDA486D97B17E4B73B64FCB6AC2E512",
+    "data_elements": [
+      {
+        "contents": "62A5892D",
+        "de_type": 200
+      }
+    ],
+    "encoded_section": "3E90133D01BB959195FB48361985459C950BF1911000EE19D4FD43C4A26C45CCC2F73391D2B790018D15AE13971DFDBC5C660CE316817A9AE8DBD7388C7FD3",
+    "identity_type": "private",
+    "iv": "5F5F397CA6FE206A01324ECB021E3229",
+    "key_seed": "E62A5DFC2D220D5A60C44680C620B02EE4B967CA42C0662143C9301CE3647489",
+    "metadata_key": "69F403CDA27C235769E0B517D73371B2",
+    "section_mic_hmac_key": "336592D0479F0A275CE32751290E25373CCCC3DEF8A76D2E1E19EFEC29652BA6",
+    "section_salt": "EE19D4FD43C4A26C45CCC2F73391D2B7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D37D8224BCB2A88E8A32373B761C5ECE",
+    "aes_key": "299ECDF8023A36C8961C3847B7865F23",
+    "data_elements": [
+      {
+        "contents": "B2C987A7B7",
+        "de_type": 461
+      },
+      {
+        "contents": "5B5275A30550D0451989E8CCB707F4BB4E1FD7E4067559",
+        "de_type": 660
+      }
+    ],
+    "encoded_section": "59901351BC1AD8D62AD25E038519C98478075591100067A626FD764561B80156B43BBE18FE2290015BFCAA16FADD4E137A681CF88C1AFFE67981CA680202D1EFEF1539610538D8B2093E92A2C90B89CDA487E480ACA010EC5696",
+    "identity_type": "private",
+    "iv": "84E53FE82B267ECCA4C338365D976371",
+    "key_seed": "D054FA0157A869AB9D6ABB5966714E4699E3120582643226CCFD8172DFEDDBB3",
+    "metadata_key": "3BEB83127D47BFFBE32C9CB76F2F95BD",
+    "section_mic_hmac_key": "A41BBD631F9F0DAB81C18776F6877DEAD586AA8C2822E14910DAD1256FEF741E",
+    "section_salt": "67A626FD764561B80156B43BBE18FE22"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C7053AA74A4BA2AE0F70F44E089D29D1",
+    "aes_key": "65F1F9E585E540072E2DE478FE1AD76A",
+    "data_elements": [
+      {
+        "contents": "1A6312AB5101EC2B51494185A33F7F7CA3D3AA6A52F9BCA5",
+        "de_type": 27
+      },
+      {
+        "contents": "626A45FD",
+        "de_type": 163
+      },
+      {
+        "contents": "2AC1B1D049847CFEDD3EA121A0EF",
+        "de_type": 805
+      }
+    ],
+    "encoded_section": "69901379404B1053D12C1265E80377181C80079110001D9694EAFC36DEAD331B1AF01E6FAA569004F2611593ABA4DF715ABB0A60045DE939CCFF012A67BE7120EB8622F467C40A55A438E9FAC305C7F3DD3D7F1575561AF3B80071400A1E23474E4FE5A753060054AFC7",
+    "identity_type": "provisioned",
+    "iv": "BBED73E1526356DC7465518B78F1789A",
+    "key_seed": "4FF6F2ED889471ADE07505655C61FC55A296E2A781ED23D697FEC64C46F7BFE8",
+    "metadata_key": "02EB04450E5882DAD40B9C11E74ED571",
+    "section_mic_hmac_key": "BD2564C4DF163F2CFA403BB08891432ED59C1DAFAA05014FDD02DB19006E41F1",
+    "section_salt": "1D9694EAFC36DEAD331B1AF01E6FAA56"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2DDB3F10CE6908DE4064A6EADAA44CB1",
+    "aes_key": "D71B858543B064C2FA1C226CED9715D4",
+    "data_elements": [
+      {
+        "contents": "3C79B5CCA08F604A35179CF79E27EE4088EAF9284082C9B9C6E5A6E3",
+        "de_type": 98
+      },
+      {
+        "contents": "6147",
+        "de_type": 603
+      },
+      {
+        "contents": "A5327E05BDBCCBF609037A6A47ABC084",
+        "de_type": 684
+      },
+      {
+        "contents": "FDD029D869BC2792F863D0A330B26BA567F312",
+        "de_type": 660
+      }
+    ],
+    "encoded_section": "83901346D8A7AD53629FBFB4554D2893B59A3E911000193EF4A81E23010C50F7AB9D66E7B1F99001D4BBBA69FE1C5DA04ABF63E88F73FE4AEDA30C5D6AEF3F2E38F53427C49EE027B70FEAFD31011161C5F054CC6D4A916EE183785B7384149E601390215DFC3815E502695076125919A5D0A396C7769222A3E1CB02D660F4FF07F695F2",
+    "identity_type": "private",
+    "iv": "24B30EF97AD89F61F32199637B14D984",
+    "key_seed": "AFF8A5868B46113882EDCBAFFB25259BDB083CF55DDD4EE8CEA0BBF5A8E20783",
+    "metadata_key": "54ACE29DAB4432CA8456C3606A3A3285",
+    "section_mic_hmac_key": "F69C1B262B9E5E9E937CE8396D019326A61FA1598383147B8864197F7E1748D8",
+    "section_salt": "193EF4A81E23010C50F7AB9D66E7B1F9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3B652C1DFA6EA396CD6299D7C2F1FC99",
+    "aes_key": "C74B97594BAC6BCB81E06F3860424E34",
+    "data_elements": [
+      {
+        "contents": "29ABB0E895D880",
+        "de_type": 996
+      },
+      {
+        "contents": "68E69922B69FE5381A0B6FD2B3",
+        "de_type": 210
+      },
+      {
+        "contents": "1AA391EC93E13CB834A47EBB0D3C",
+        "de_type": 457
+      }
+    ],
+    "encoded_section": "629013C84639CCD7C09FB779FF9746B0D86675911000CDEC9DF81798E081266AA31A02A495F09002AEBB7F8E231C56ECEE3CFE99FBD91140E8BD6E472F819590F8C4407D808E44117A9E6450CEC6AEA3421C3CF6C3A17D76F4BED944670B334DF6ACF8",
+    "identity_type": "trusted",
+    "iv": "B202A0324BDF0E7D7D79A0FABD70C00B",
+    "key_seed": "8211EFA73C0465A1C10B9518F949E4A9E51D9844F8A714E96AF4020A7BDC03F3",
+    "metadata_key": "90634220E3FBAE89FFA4415C6717013B",
+    "section_mic_hmac_key": "AFC6C865E7CE529D7BA7137EA854E27BB97DC12411B15FC5D2CF5661705DF098",
+    "section_salt": "CDEC9DF81798E081266AA31A02A495F0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3A807B550B6F46E1AE79A6963B4EF980",
+    "aes_key": "B267961F7035BA20C9ACC38375A8B8BA",
+    "data_elements": [
+      {
+        "contents": "883DDF57",
+        "de_type": 378
+      },
+      {
+        "contents": "5D7C88A0669FB0",
+        "de_type": 65
+      },
+      {
+        "contents": "B735EF9C0366D2BD9A208B7DE02C2F6316739CDAE55A161AC5",
+        "de_type": 883
+      }
+    ],
+    "encoded_section": "639013EA03F4EEC56AB81C3840FE707CD0EFBB911000C7A6D417E567FF06D8580DEDB22B6AD790012869A0017974950F3D3AE671F0B17C46335580B531F54DFEFE20792D26A9CBC80E562100C19F01B6AB91652AE86A1DA3BAA1B1BAB6C6142806A518A6",
+    "identity_type": "private",
+    "iv": "0F1F6DEE9C4E6ABFCA411807FC543D4F",
+    "key_seed": "2AE4038986ABFB4F994675F74257DBA4D1421BB7FC26EBD550902478326516C1",
+    "metadata_key": "0442ABDF1AB578F04E9828DD59C89747",
+    "section_mic_hmac_key": "BDFCD117EF5E7BE2DE8DD21889827C98D3F04E1DF008171A7F780F364FEE870C",
+    "section_salt": "C7A6D417E567FF06D8580DEDB22B6AD7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "776476995C0D81CC3EB4BF74DA38DAE8",
+    "aes_key": "F7B37CECCCB3A565FE1CA8003E320EB1",
+    "data_elements": [
+      {
+        "contents": "BFE38787DFC2F2E3D6E3B3C87F815EEA76D65A215C71",
+        "de_type": 171
+      },
+      {
+        "contents": "FDEC8C66519082CD2A451946464B59",
+        "de_type": 236
+      },
+      {
+        "contents": "9E90",
+        "de_type": 49
+      },
+      {
+        "contents": "3572D5AC806B58595850066B1725445CB8",
+        "de_type": 327
+      },
+      {
+        "contents": "BF3ABE62A330",
+        "de_type": 696
+      }
+    ],
+    "encoded_section": "8390131C77D267901CBF78476EF0C05DDC63C591100044DD945128151D3723FEB2519B34EC1D9004652B4B46B0FE74A2B003FB8DE0B02E064E02544FBD3F094FA6D08F17BC432C0E33DC15EE29ECCEADAFA28E6D97942CEAACB9CA570F7C8E18EDF12CDAA49D314049FBEC0D3986BE84CC8D7E5D5D6F4375A5C24980753F106F6DCB2544",
+    "identity_type": "provisioned",
+    "iv": "15CD9E5FBF435001DF27D9AC024E5168",
+    "key_seed": "3F81DB1789AE3442A9D41D4E812CB79D5956A9AC3144B0915DFCE60F0F81FFC3",
+    "metadata_key": "4DBCE7E27EC36E0D440AB84EA5F8BB43",
+    "section_mic_hmac_key": "30DE6D9065BC10A08AA0E19A128FEDA88875C36F07B91F83B03E4224E8A74513",
+    "section_salt": "44DD945128151D3723FEB2519B34EC1D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "ECA254EFD9254459DBDBE5273EA5F20F",
+    "aes_key": "0BC0403DF4AF8576D78A3BB0D4FDCC07",
+    "data_elements": [
+      {
+        "contents": "2F00BEF93EA080BEEAA53211087262B08F",
+        "de_type": 387
+      },
+      {
+        "contents": "5A90C81267154FCE624E6CEA5DEA28F2680EF8513A",
+        "de_type": 446
+      }
+    ],
+    "encoded_section": "63901363C6D2E7FE3933E6E8C471788DF819C09110008B835CBB4228316A6BB5B90E18A8129490011E6DDE87751A08BDD4CE6EFD8793A3904FC0F36CC6BB1EF5EEA2E31100FE6E7E9A46F882E749F96E2C0661E5840221A3B8A51F54FAB65E9210C9FCB2",
+    "identity_type": "private",
+    "iv": "DB42DEB1413B50415B6A102990A829EB",
+    "key_seed": "D19CECB68227395C94499B9CC6894791C0E82E27127CD7682E7DBD8F9490F767",
+    "metadata_key": "7D38C494CC9126F3A5BD9628E79753E6",
+    "section_mic_hmac_key": "D3B48E774D5ACDB850D28528416D9082C05293E9D8D3D1899995BCA079813485",
+    "section_salt": "8B835CBB4228316A6BB5B90E18A81294"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D40604809AE5414A69F499F9A2084923",
+    "aes_key": "43DA76D20A53C5710A6C8F0F23BE369D",
+    "data_elements": [
+      {
+        "contents": "6870D2577C383B1AF270",
+        "de_type": 377
+      },
+      {
+        "contents": "807C81B75BE63B70659AE0BF8CF98D",
+        "de_type": 468
+      }
+    ],
+    "encoded_section": "569013339274CBE7D243DB20B292B6B966C0D291100030135510DBAFDA8C02CE0B4B744849CC9004EBA03D2B32850AC067301E495DAF062BB6A8F42DD991AC4DB31CAECA481B4EE1C2C26420AE65E5C90E732CFDD1DB56",
+    "identity_type": "provisioned",
+    "iv": "D2ED05465CCD69AF9831D0BCEE567D33",
+    "key_seed": "43F86EBB5F1440944C76F2C1EEC4EA165CD42A18E4DDEED0CA71F3B02545C5A0",
+    "metadata_key": "21E1FFA752F642FD002CF75F03582A03",
+    "section_mic_hmac_key": "8D6D65F4C2F58AC8158EF41A66B55AAA11748E33D0E7AA767650575CD25707A3",
+    "section_salt": "30135510DBAFDA8C02CE0B4B744849CC"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "926C1D3213E846D408D5CDE85933B335",
+    "aes_key": "9F95537E5023A014C7F72E7CEB7D4464",
+    "data_elements": [
+      {
+        "contents": "57CAAFB0DDACEEFAF44DBA2DED57871F9B515547",
+        "de_type": 928
+      }
+    ],
+    "encoded_section": "4E901348A78A9E475F21CCDD2623E5AE795ED6911000A053D3FD557046F3B2EFF163A286FFAD90044495EAA257D8CB317317797423C05C60FA98796BE873025FC53D7E00BBA1DEAFE8836981267613",
+    "identity_type": "provisioned",
+    "iv": "99D1B79A79B7F1E4847C100368EC5125",
+    "key_seed": "43D16F607338CC46B1C8FF4BE147FCB700E0B2511657B6F9FF01DDBC2D3A342A",
+    "metadata_key": "D68EA89AD98D6D24E8B7B82AB7536740",
+    "section_mic_hmac_key": "32F44768525E151F19138193CDB98D65A034F25E801F6C8F33A82B30FA4D0E73",
+    "section_salt": "A053D3FD557046F3B2EFF163A286FFAD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F864FB2EEE7E1ED4DF98C3467E48B8C3",
+    "aes_key": "CC29A730AAE43BD7F30415E1A051A488",
+    "data_elements": [
+      {
+        "contents": "C6DC7C08",
+        "de_type": 253
+      }
+    ],
+    "encoded_section": "3E90137833ACE50465F931877DB7D7AFB960D7911000D27E59EA9C470CA9F69FFAD69B551F6C90022F92AE5F85FDF07BD21B155FCB131B2E5E9CECEB47E6A4",
+    "identity_type": "trusted",
+    "iv": "275F908574FBD8A2275047C81C121CD7",
+    "key_seed": "D2B7827360775208AF3BB8E7490C3C6D5028FFB96EE975FC5734E38222B9ADDF",
+    "metadata_key": "234339063D81600FF7474FF6211ADEDD",
+    "section_mic_hmac_key": "7ADB9CA113BCD62008945F73FA7994733668E83A8AB7B9CA91070BBC7815437C",
+    "section_salt": "D27E59EA9C470CA9F69FFAD69B551F6C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "09CAA0D1CD15329ADC186D389540E0FB",
+    "aes_key": "7FBE39B5E000B0D4D4310F86C0C77257",
+    "data_elements": [
+      {
+        "contents": "CF5A0E6FC4323ED2962E29A32620F94D",
+        "de_type": 22
+      },
+      {
+        "contents": "5FA1",
+        "de_type": 475
+      },
+      {
+        "contents": "F925E11BAE8107FCA842E3FF3DEDA2B457492AFC00",
+        "de_type": 7
+      },
+      {
+        "contents": "2EF99B",
+        "de_type": 436
+      }
+    ],
+    "encoded_section": "6B90139ABB3280E93847008026A21A68DD8389911000410866079E5D5895F00BEF4E871EDB07900213C71635A353B960F1FFF8C887A29746EC545860C2F7A2C9E648FDCA182ED91B9898F8040A51988D57DE0072219221CD042F325A0D7F5E3729F2A57A7264137EDA44A505",
+    "identity_type": "trusted",
+    "iv": "068DAEEF03EA46D6FC6CD92C3380A259",
+    "key_seed": "D1FBE8A8B1F0A0CCADF811DA6E544082D29F06086D81D2292B8C6E74D9D5DF1E",
+    "metadata_key": "1AFE5CC550D16DE87D2B0FF7E6819703",
+    "section_mic_hmac_key": "F1C2416FE95371BDE2A956F01F87E4EE9846559BD49E595E7CF12B94B12112A8",
+    "section_salt": "410866079E5D5895F00BEF4E871EDB07"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B52500F5E788EC0D9F202750CAC085F2",
+    "aes_key": "AFC28DEB740608CEF6933F762B5DC760",
+    "data_elements": [
+      {
+        "contents": "CC71059E41408063",
+        "de_type": 815
+      }
+    ],
+    "encoded_section": "42901380AED3DA4C95EB79F4EE45542D6E0DE4911000E4028B093A498111783EB7DD8699C93D9001A6F9A9F7B35C4BD33BB58A778EE44DED05555AFCEF345B8D569079",
+    "identity_type": "private",
+    "iv": "23C6574F20E50D4F213492150AC24286",
+    "key_seed": "91D3A91830E1799A07EDB05207CEBA50D0028C33A90B491BEC4FDB2125865278",
+    "metadata_key": "92C66C8FE82E8DBD7E8BA7674E9C6D62",
+    "section_mic_hmac_key": "7CAA4DC585DA1048AA5D8C6E651593F69CE6271C01908D4029BE1AB88225223A",
+    "section_salt": "E4028B093A498111783EB7DD8699C93D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F0F4AD67EBA779F535AEDC38D65A50FA",
+    "aes_key": "C4D22667103D39080515F16B399C2B1E",
+    "data_elements": [
+      {
+        "contents": "BBCE",
+        "de_type": 736
+      }
+    ],
+    "encoded_section": "3C901312715A779B6C3D834913F48E32201929911000317B2985660C6467DEA5DF915C1B01EB9004472D6C62E2DA0443EC06282742414A522F6BB01D1E",
+    "identity_type": "provisioned",
+    "iv": "D603605B1B5BBC279CB53CB62864755E",
+    "key_seed": "72CEC520E533E54D5A1ABE67BE9EDB9D24467FA17223625EC4F9270492D4A112",
+    "metadata_key": "1CEA77C0C5AE8B84845B85C7B74019D3",
+    "section_mic_hmac_key": "653ADDF62F68AED4759E0C3502FC0DE4B2090880EF84863E28B682064F67C519",
+    "section_salt": "317B2985660C6467DEA5DF915C1B01EB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4B6F7D8078261461839557F775072AC7",
+    "aes_key": "D33613E0E705E3BAF1AB414E7B8B371A",
+    "data_elements": [
+      {
+        "contents": "4A570A844770D914B0535BCFEFD79151C420E51AA33CA9",
+        "de_type": 449
+      },
+      {
+        "contents": "DF",
+        "de_type": 488
+      },
+      {
+        "contents": "5AB21ECD1526FB43A2E6414C23C7",
+        "de_type": 597
+      }
+    ],
+    "encoded_section": "66901382C6BDC0EF1DBBAA998D10EBEC81B61D911000BEB184901DA4A24184AEE1C55976EF7790015B749B64DF8A580F02266F611E8C8C7D4BDC033D3CE18C4945CD0769FA01B9D6DD8FF07789C44510A075008C8C802ACF280233C71C1ABD3BE2599087F83A62",
+    "identity_type": "private",
+    "iv": "B9F7A23E2F58C8D71C60140FD2E3BBE7",
+    "key_seed": "BA82C25F8A56CAD3684A3F58D67C7A86B4945E30D802589ADEEBD5C3D511C0C4",
+    "metadata_key": "F2DCCC3A2933263D82ED2B297E474826",
+    "section_mic_hmac_key": "4EE3CFB20981FC63CB453B5E132E5F2288FB721FC1AB883F4E76E6BBBB80C836",
+    "section_salt": "BEB184901DA4A24184AEE1C55976EF77"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D8E5FDD20871FD58731256D0CB62C5A2",
+    "aes_key": "81F7ACCB7AC20D054E182DF743F2AB1D",
+    "data_elements": [
+      {
+        "contents": "A6E35C990A736F98F18D46BB8B45BF506CDA38175F",
+        "de_type": 563
+      },
+      {
+        "contents": "",
+        "de_type": 685
+      },
+      {
+        "contents": "874AB6FD2685235570223B8385",
+        "de_type": 470
+      },
+      {
+        "contents": "6108D0C9F1B5E5CB8FB07EB6416867AFB020BE19",
+        "de_type": 655
+      },
+      {
+        "contents": "6EA64895FF65D99FDB904123E5F27EC2F0E9A97AAEE6B538C49B26F8C473",
+        "de_type": 351
+      }
+    ],
+    "encoded_section": "9A90137ADF3C84DEBC92F97B49EA4834A4EBE4911000B1E4987063CEB1317DE77C59EB0EABD8900431D8888C02834CB45FE988BF006D1432BF8DB613C713F2F96ED4D664CFDDABEC4319489E16C0007A21759E65CB769F8C96B83998C249F827B6FD8556000D46CD64428BFB6866834ED512101F88D059230260245D767036C70C233D0AB7C08B551D85419007BDEB71A0B1E33189FACB8C9B9F65",
+    "identity_type": "provisioned",
+    "iv": "FAB7B8F8457C545C22003AC5688B99A6",
+    "key_seed": "D9066D7E1EC8750F01AA286D6C0EDFFED57F08E546D4BCBC37F11E1884D2737F",
+    "metadata_key": "2847567D7BB29F859D0A6BC885863F05",
+    "section_mic_hmac_key": "A2040734F9568DB02016A4F637352BA3E9170A92EC7320BE2806396ED4827FE9",
+    "section_salt": "B1E4987063CEB1317DE77C59EB0EABD8"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "AFDD41BE6280A05A4A182FDDBD8556BC",
+    "aes_key": "1DA3396BF0DDA834C815856E590D10B1",
+    "data_elements": [
+      {
+        "contents": "9B41A639FC2D04D26CC0D9EAEE9D214C127C481DED57FBEC2950852964",
+        "de_type": 261
+      },
+      {
+        "contents": "F3E90E9164C65F910F9AFC0D3D91107C46A0A18882A25C6B35",
+        "de_type": 797
+      },
+      {
+        "contents": "181DB352E5D07F6195FE073994C661459C171C9F109CBD715ABDEE7D",
+        "de_type": 733
+      },
+      {
+        "contents": "53161D8FB05C583C438417F60CD2C593088AE431304F3BEFF1E5B937",
+        "de_type": 26
+      }
+    ],
+    "encoded_section": "B0901306299081577F1C9415828166669B1282911000818F17425C86B46D19F4314DC23929F09004EE71DC1AA65D63AA0CD9DE7385172A9753FE6A42CB6EE3A75F4852C60B9081648278D22C0A2E6708BB2E4949086D1EFD6E4CFED85A6405F8B1CAA3C3DD14DF4160D4D590345D89AC83E27AFAB4C16238740466504647BCFEBD3B97DB4E0E94CAA14965A1C1F20C6589C7AA7E0F7B1B22678432254FEC8D79A0029DE579A4F35A1DD424468BD60E00F8",
+    "identity_type": "provisioned",
+    "iv": "D6C941E5267C2582F6BB2979EDB74CB3",
+    "key_seed": "EA39241FCDF3BD8D9C8F1D804A9C415F255924EA22EB3259B9EA106F84CA7A04",
+    "metadata_key": "1EB0839E25260819532489218DAF085D",
+    "section_mic_hmac_key": "724CC97DB96191B388126C7AD9192181B6DD813C09AC9101073C4189297D7450",
+    "section_salt": "818F17425C86B46D19F4314DC23929F0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "08EFA9C40E0A0036570392CD33DB1F45",
+    "aes_key": "56C7B28E8595C1A33D39AB4F8B140F29",
+    "data_elements": [
+      {
+        "contents": "C69770",
+        "de_type": 273
+      },
+      {
+        "contents": "ABE13AA30EC88530",
+        "de_type": 592
+      },
+      {
+        "contents": "D53E9C2881E7EEF2",
+        "de_type": 940
+      },
+      {
+        "contents": "A720A74DB9EDEC417C2C55A064353336D8EB0F3AA7B3",
+        "de_type": 443
+      }
+    ],
+    "encoded_section": "6C90135C7B1B79CD9BD45F21FB487249C913FE91100003081F0A5D56CC9F2C4A87EADDE0070C9004792D26E35675BF2F6FBC982F307C53936F49AF1AF5D87945942B78A15F8BBCC14021660FC4F8E4B00DAE05757A14C346EF08660F04A2F1BA65FD0E48190779C3C0689BAB3A",
+    "identity_type": "provisioned",
+    "iv": "61E889286F4D0CEEBBC96D05B3742610",
+    "key_seed": "A4AFF6856A7095C4B9DABDB1515C4407FAB5B905D0D58D798BD812842FED8CA8",
+    "metadata_key": "9FB8CC22E26477665685F51D727B2E09",
+    "section_mic_hmac_key": "1A637F0C06551F322E26314D9642C2DC7ACC72C9DD953A548B0B5F4E4EDB76CC",
+    "section_salt": "03081F0A5D56CC9F2C4A87EADDE0070C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "37AC5ACFB5D9A0305EA7BB5CDA443D11",
+    "aes_key": "E6D6BDD49482D54AE9C5AB69142256AB",
+    "data_elements": [],
+    "encoded_section": "37901372E83A536FE8DCE79BBB6DF0FC4095599110008E387F351A94036BFA085A8F6864730A9004464EEE74741C2C2629FE91C5502736DF",
+    "identity_type": "provisioned",
+    "iv": "B137733181B7AB2C833C606028FB6B22",
+    "key_seed": "F6D27F4E02DAC7253E0907998FF49D7A39391439377AB5EBE1F0137C336A85B8",
+    "metadata_key": "FA450266B083FBC3EB2C8692E7F5DBA6",
+    "section_mic_hmac_key": "DB503A7C3D87F83AA4C66220C24657F84518AF6140D55CCDC1EE611A3C20984C",
+    "section_salt": "8E387F351A94036BFA085A8F6864730A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F7E19D646D39679C29404EE3B6A34048",
+    "aes_key": "5E08BDDDBAC3331F8D8446C868788EF8",
+    "data_elements": [
+      {
+        "contents": "01F8CE76B237517269F2CDEA51F7B8",
+        "de_type": 445
+      },
+      {
+        "contents": "DA9EB0A51417DD89A87E69E1B3116DAB",
+        "de_type": 636
+      },
+      {
+        "contents": "9B6FBF25E22A186B2F1367BA94A80D880D647179BC392A4A68B4E4DB90",
+        "de_type": 635
+      }
+    ],
+    "encoded_section": "7C901342E89E1476F32CE4BDA127349115775C91100064F1AABAFC1A089A905BC9C5B4AE2854900149E174A599134E70CDACDFF18247C44F80F02090E0AF6DDAD80132F4843EC9FF8CB591D31FAA203E9AFE269A7F76A7E08AA0035AC8359CBC7D74DB6B6612CA9BBC657D9BD9B1F6615050A3D8A690C7AFFAFA67F7EA",
+    "identity_type": "private",
+    "iv": "1ABCBB904C64337AAB7BED61676CDE36",
+    "key_seed": "A004861A769F72CC50175CF18E439570E9ECEC2C784AF1B05B2EC10B40E05901",
+    "metadata_key": "8A5B72CB0CD76DFACC878DC16F43896B",
+    "section_mic_hmac_key": "6AB27792A42D0A05941D5D1431346BE6B5F245A6F137FF63E8C101CC545C9E0B",
+    "section_salt": "64F1AABAFC1A089A905BC9C5B4AE2854"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "034796B51E627F2138D8A4FB86959B34",
+    "aes_key": "036A24D477FEE94B8906821BFB6CF3BC",
+    "data_elements": [
+      {
+        "contents": "28DF05F4C663510E51CE9C01EC46117A1C",
+        "de_type": 524
+      }
+    ],
+    "encoded_section": "4B9013F9761369F75CFDCC25753E3962A266679110006E553201E38251B2EDC4E36504D7D7BD900185791665A709E7D80D9B1D7C4FF9C51E0A486C6AE1B9C63B0D233D845580067782694D81",
+    "identity_type": "private",
+    "iv": "2C13274C3949E9003F13C503E031E9B7",
+    "key_seed": "88C9ED0E90F51DCA3C12A6AD22F4639B8B8E7C276F98E94164837BD2C45C341C",
+    "metadata_key": "DE936A57C9D6BCAF001EC964B6C5EA04",
+    "section_mic_hmac_key": "70514EF46B1EE66FF24179E86CADE9551893991E76A99E8D10C70D2297F760E5",
+    "section_salt": "6E553201E38251B2EDC4E36504D7D7BD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "46184E36FEF285DC6E4F57A9C01538C2",
+    "aes_key": "A200BAF46DC86EE97B8FE5EEDB22CB4A",
+    "data_elements": [
+      {
+        "contents": "632D326CE5387E432410DE871CC167BB760657E21D",
+        "de_type": 421
+      },
+      {
+        "contents": "F36E9E2F130BC0254E4799F473D372C3486919",
+        "de_type": 130
+      },
+      {
+        "contents": "DEC218926E9C715196096355C86AE17311DC256F49",
+        "de_type": 172
+      },
+      {
+        "contents": "06DA3BDE65C616FC1F",
+        "de_type": 348
+      },
+      {
+        "contents": "50F9FD",
+        "de_type": 319
+      }
+    ],
+    "encoded_section": "8F9013FC2BEC7FB7E301EA360D6B3C0A0FAC6A911000DEF111A18B8FA9C6C326D4054421021090013023A39CD835BB827B0477272151FE970F97748FA2B575EF993BBF6175CAE761A96E3F9FB81C92A9AA6D9B06A19A5C3A88D601D1A67CC00C5E926A7CEB87EF0BAF0FC4F3B8A0925184D187CA130D900364D10122CA3CDBC30A6639B580198D459B88773B50F2EAB0",
+    "identity_type": "private",
+    "iv": "45EF8ACF1EA3FA8F1E19CBDE20594893",
+    "key_seed": "068098719BD63AAB986B7EA1D5881F6963A30AAA9C2E80E40059BAA15F0662FD",
+    "metadata_key": "B1D87DB284A2982EAA53C596995FCE88",
+    "section_mic_hmac_key": "258571568C4C153AE5597025CD6DC193B300B6A2FEB89A24682E7934414D5DFD",
+    "section_salt": "DEF111A18B8FA9C6C326D40544210210"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0DE15B10175F1DFF2628C70D0AED6B46",
+    "aes_key": "E90504071197BE226CD357D5E1AFBA84",
+    "data_elements": [
+      {
+        "contents": "A2531C952A42C417BB18C97ABEBF39505DBF6730C079B7D7",
+        "de_type": 497
+      },
+      {
+        "contents": "D0F28E7F9B6967A9199BC8B7D02399E87CD4C29995",
+        "de_type": 239
+      },
+      {
+        "contents": "",
+        "de_type": 210
+      },
+      {
+        "contents": "493816D45767C5A9",
+        "de_type": 684
+      }
+    ],
+    "encoded_section": "789013F48A6170B368DC90652516A11336D98F9110001F72FEC00A10F48A24F0BDC9E209A86090016DE45596DDD682BDB0CB6D432842C6653E61E074800DB1AD134A2D06A0F9EA32A67D3A000C3CCF76E2F12D59EC4C570A1796ED6DACA5428E45C9A071BB382DC283D4E67F77D5624D4F8DF9C8192ED8967C",
+    "identity_type": "private",
+    "iv": "628959806C6FD40FB815F90B8E383C92",
+    "key_seed": "38B809FA67BF591F2FC3ED5E89FF69196E8CEDBB2C70A5C4214FFDF0C6720A89",
+    "metadata_key": "683AAC0A90779BD7E8E6102C59C33CFF",
+    "section_mic_hmac_key": "9F76A1AFC8EC596D5C12E7B2703DAAB5C2147A3F152CEDD5569C004568545419",
+    "section_salt": "1F72FEC00A10F48A24F0BDC9E209A860"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A66D131470862B0A800CF36CCAF21F9B",
+    "aes_key": "A4E365EA6FC7E436B0803863A359E74F",
+    "data_elements": [
+      {
+        "contents": "37F6CB293369D0AE08C0CF498F725063BC941429D4748D88C1F5A8",
+        "de_type": 440
+      }
+    ],
+    "encoded_section": "559013340F4D1F8D98CCC159758FEFFCA24CB99110001549A78B42DC99D25E0FA7D7DAB336E0900461A9ADB4F53BC3EA94A61A8C9486F83C5A94D311D481D1E1C4B98FADD358CEF1E8C9E48997577EE881358BF6C720",
+    "identity_type": "provisioned",
+    "iv": "2E46CC58F90B1F259763DF87D28CFB5B",
+    "key_seed": "866216209CC3BA31A0CD00FE866C661906FD82FFFA1AF1FDDFE05CB3FE5D160E",
+    "metadata_key": "6E43E73A2F75C729FFC5EE5FFBD37BE0",
+    "section_mic_hmac_key": "386FC2463C51822E0D2E18CF7A0CBCA1A2259F0F97DBD49AF0CF76A070BDC5E1",
+    "section_salt": "1549A78B42DC99D25E0FA7D7DAB336E0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "DDDF41B6ADF98A34F574AD71850DE058",
+    "aes_key": "B737AA1DDDF85031F002DBE5C45F3E20",
+    "data_elements": [],
+    "encoded_section": "3790135EA759302F33AEF062217EBF5A4B65E99110009BFAE224D28BDDB0C9CC5D46415FC3A09001084F44EB87F5634E839BEE652E071D6C",
+    "identity_type": "private",
+    "iv": "10C16D86C9E0BE1F6347112C21D5FB8E",
+    "key_seed": "E6582A2C793283D86BE936BC765C9EB0512329DA8952DA2D43DC010F82ABDE73",
+    "metadata_key": "860157134E0A0D7293D61B43F2587D9B",
+    "section_mic_hmac_key": "2506BB15AF3D9F480145093EFCC12190B38AF4BF2645C2120B4BD2CDE4F40C28",
+    "section_salt": "9BFAE224D28BDDB0C9CC5D46415FC3A0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "628478EA2295D16F6B27D99F0A27D544",
+    "aes_key": "78D9C68A8B7E0EA68509955971559804",
+    "data_elements": [
+      {
+        "contents": "4933BDAFCB68075E6CC5A5423F4C",
+        "de_type": 795
+      }
+    ],
+    "encoded_section": "48901379A1BB27F73791D000D5228DF7C135D991100081BA33E21FE4ABED1A04C9D95BC2D6B49001FEFD2CC7172F6DA36547950D23EFD1F9B487B44DF40F4E3EC3F0DB2C10C86272AD",
+    "identity_type": "private",
+    "iv": "93505D7F5898E41D69F7EA457DE34D54",
+    "key_seed": "0C8434F9786244C9AC393011DF523CDCBF30DD322487316CA06424819AD2BC67",
+    "metadata_key": "2129E9F8F1D9A4599073E55B273AE84F",
+    "section_mic_hmac_key": "1F04FFA93D7247CD23DAD80C54D3A02C0F6805F05D593A7F1969729E2B66E149",
+    "section_salt": "81BA33E21FE4ABED1A04C9D95BC2D6B4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6636A8179A7539B6C145AB036ABC61DB",
+    "aes_key": "52871CCD3C531DB8ED5E0CD2B9408382",
+    "data_elements": [
+      {
+        "contents": "4AF0AB96E0D92C99E994BFCE92BE3294658B36",
+        "de_type": 653
+      },
+      {
+        "contents": "4950FA0E9C1DD840913D09DFC7801DD66057D63E42B231E7",
+        "de_type": 35
+      }
+    ],
+    "encoded_section": "6790138403EE19A982413945659E727142CBDA91100060ADDDBBA5581E0492927FEDA1839F849001858A8DB882908AB6E59B43DD60DD864E39280BADE1F2263C2BFDB26294F6DD996C7EC2DBB9966A9E022C78D8B31C8A94D77E708F405B40AD605E35EAA7AD2B6B",
+    "identity_type": "private",
+    "iv": "6FCFFA1DD673BD46A33DCAD5D78A0818",
+    "key_seed": "435D4CFBFD90B09EB4FCB8618F4F3126B3941B90CC7781365ACA74B7C2419339",
+    "metadata_key": "720D20F73E7ED7BD2CFA70320D90CB4E",
+    "section_mic_hmac_key": "22C29F385E3F714233A8934D6D44C0F3F1FF950C26AF4786B49A3EC81A71C98A",
+    "section_salt": "60ADDDBBA5581E0492927FEDA1839F84"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C19D8AFBE64F931379D7EBF939CC24A1",
+    "aes_key": "9EFA45E698A339160EA80DF0ECF36499",
+    "data_elements": [],
+    "encoded_section": "379013B9692752CF3F41AAC03CA730A6AFC85C91100061DD84CFC18E2CBBBAB60CEB86ABE6D690013AAD9F2BF775CB780D9D8E13858974E0",
+    "identity_type": "private",
+    "iv": "BEB8CB30E6ADB86DEA9E572D0583A578",
+    "key_seed": "27A648DE4BFFF66325913B794954218B87ED3D79662BE80BC4AA978B26878ECC",
+    "metadata_key": "5DBFC0AE842BFC1347055279953E9BC6",
+    "section_mic_hmac_key": "9DF3EB07A1D92235053FE039F478DD9CB6A554F79CCE713C5C813019099ACE9E",
+    "section_salt": "61DD84CFC18E2CBBBAB60CEB86ABE6D6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7466F38050B9EEB5A0B483CB30465DC9",
+    "aes_key": "EEB41F887877D842CC4EAAA67F83610E",
+    "data_elements": [
+      {
+        "contents": "5E96DC1DBC05740A894EDA",
+        "de_type": 560
+      }
+    ],
+    "encoded_section": "459013D0902F2AB5972B41BC0ACAD9B2261DB6911000E35AA601D5935057BFCF03242D9BBA329001F2F956F617516A1DAA125A88C54E29A596932F5579E7D6D834E3B879E6AE",
+    "identity_type": "private",
+    "iv": "77EEB2974146266D349B9088200A5905",
+    "key_seed": "92B2AE2BE975A24FDA5C81265161B32E9C3AB9766B0DC2D0B30A4FFF8B996572",
+    "metadata_key": "3A4EE38FEE87B6F7B68270402F9E3958",
+    "section_mic_hmac_key": "2E0ACBD90AA030C11B3784BC17D59DE09E11094317E45FFA4169516A3DBE7C49",
+    "section_salt": "E35AA601D5935057BFCF03242D9BBA32"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8122FF813F37EEFC5DDF551646A94693",
+    "aes_key": "788ADD1E00191939A9782119A5E2094B",
+    "data_elements": [
+      {
+        "contents": "710E0E6A6762C48EB92508787416BFCA6F",
+        "de_type": 714
+      },
+      {
+        "contents": "24C9CC8AA0E42CD275",
+        "de_type": 396
+      },
+      {
+        "contents": "29867AE4823526C2E11B419C62",
+        "de_type": 632
+      },
+      {
+        "contents": "6E5B1B035D83BA417C8ED1FFD0571C24F4C0E9EAB9342F852FDA",
+        "de_type": 596
+      },
+      {
+        "contents": "1A515A8766EF2E",
+        "de_type": 702
+      }
+    ],
+    "encoded_section": "8E90131E8C489B1336454D3128B130C4134236911000F46F979A1B7FD0A2A5C73E3243A8FAA6900483E4723D8227881FF2C1F5945F3C894A7772752A61B67F9B5735667C9C1B06665CDA3BAF634A498B9B5F401D0DE765E0C3C6A51755C948CC3C196A7B4C79CBC2F95A4D968B060E08FD8170F96B8C13E48FD125BB6080672950A8359D6F1CC7DDA17A3642F19C54",
+    "identity_type": "provisioned",
+    "iv": "D27F64127716122FCD1CAA9208F77EE9",
+    "key_seed": "BDB0A9567EBF4EA0C328570726D21525495553082AA9CDA9E5D64AF80F45E64E",
+    "metadata_key": "65504F6C8B7E976ACE5E952FC5FED4BD",
+    "section_mic_hmac_key": "B6593C39E6D71521EBC7CF3AFD16E1E6C949CCFE6C94139B93213D443C4A7A95",
+    "section_salt": "F46F979A1B7FD0A2A5C73E3243A8FAA6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "307E6BFCF6A782B991CC2A749B09636C",
+    "aes_key": "6DBEAF71EE0D2A9DA8AC1029F2DC4345",
+    "data_elements": [
+      {
+        "contents": "CEB40AC198172437DE1BB258C1FA08291A70B949500E30BF",
+        "de_type": 199
+      },
+      {
+        "contents": "7CEA871566BD69B35E3A775D9DD09AFD0B",
+        "de_type": 458
+      },
+      {
+        "contents": "FF2D5A9236A40ABEDA2FD0847FFA45532475",
+        "de_type": 957
+      }
+    ],
+    "encoded_section": "7B9013ADEE4B07E8BCBF39E2EE45BCB9936BA4911000866FF3E8F11D08BB28FC9A2164C3452490020D0C51AC4563D2DC3CB268190F86800DD0CE78B2F4F0133A4F91C1A4487E068364F8FE0F99246BCC25632D849D0FE3E736800381E2344F29D37AA35301B9F0BFD37E8C41DA3F53748103C55EBB0C4948C5EF306F",
+    "identity_type": "trusted",
+    "iv": "59BDFB301F008CC7E84C962512E1210A",
+    "key_seed": "F37001F68E3C17DA62CB445F3BC5FBBE1B0830EC43DD07D578A4E4AB93A97BF9",
+    "metadata_key": "B18E09134D29AC36E182306B8E741109",
+    "section_mic_hmac_key": "EEF9ED52B0AB9B2B9B98E4BC115730A79D864479BF14ECDF01F8A22AD23C4EE3",
+    "section_salt": "866FF3E8F11D08BB28FC9A2164C34524"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BFCF368DFA6337A5BA78CF4B60B08E3A",
+    "aes_key": "7B27B37D2C56F0B288D61271E9F697A5",
+    "data_elements": [
+      {
+        "contents": "AD849E",
+        "de_type": 717
+      },
+      {
+        "contents": "F58E9B4BF3EB58DC7F",
+        "de_type": 556
+      },
+      {
+        "contents": "34AB62E364A56D0517E902AF49",
+        "de_type": 839
+      },
+      {
+        "contents": "885B928824E57AD5D4FD8A70A59A78",
+        "de_type": 483
+      },
+      {
+        "contents": "03EA0136C4685295DA9A77EDE4A8C1E9EDF7871B",
+        "de_type": 671
+      }
+    ],
+    "encoded_section": "829013B346FEBBCF63B0EAB3803D13636BA71391100071DB218D918D828C92E0204CFF4B611E90019CFF0B8A1B3FE54FE239B42BC4796958C108B1C88A768B734BBE536CFC6610873D309DC76A67AC9E17767D6190361A3F6C2CF17B58FF16A9FDC2C500A183F07FBF578CE7A0308800E9B98EE9D42405320EEE6B6016B0B05C96E6C8",
+    "identity_type": "private",
+    "iv": "C53DB4F70A67DE7DF7307CA6171F3BD2",
+    "key_seed": "5E2B18C1833B41338025453418B8B8395C11EFE691C8EA7E763AD464DA64EB76",
+    "metadata_key": "B23210152FEECCD9598793E38B2CEDDB",
+    "section_mic_hmac_key": "EA04B6A0DC8DF1B4703A0F3C1B2CB76FE339295CBC5C34ED626D8CA9998EE78F",
+    "section_salt": "71DB218D918D828C92E0204CFF4B611E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "DED5FE514596D4F6FDC651F4401A1285",
+    "aes_key": "21350A13179CD8E8DE946AF344533A28",
+    "data_elements": [
+      {
+        "contents": "7D4DBE88BB3F4D56AD861F",
+        "de_type": 73
+      },
+      {
+        "contents": "F95B18F59E",
+        "de_type": 982
+      },
+      {
+        "contents": "02D2A88797C6763C73BE592A2AA8C4B9236F9D",
+        "de_type": 832
+      },
+      {
+        "contents": "6AF8E9C04E1C42",
+        "de_type": 91
+      },
+      {
+        "contents": "111046E7",
+        "de_type": 187
+      }
+    ],
+    "encoded_section": "729013E6D0C9F2B312B4FBC87905D44CD5E75A911000B55AD57B5E62C64382DF184E318BFE5690013F8096D9AA8FE721FED8E1732C0CA8A385307A136AEC083D2C1D73EA7113137B23A3B2B001EA0724492396E0282A267BE561B1528F994AEC04DA56119BD003808B010FD2F692A3801C03B1",
+    "identity_type": "private",
+    "iv": "D4C3B01CA68065A08589F17A43EF28F5",
+    "key_seed": "4FF752A463D1E2C0D678C24320449F18FCD0746909FCE6FDC1B516D72A7C1CC9",
+    "metadata_key": "7388750D8003EE00CC5F84E1409B12F4",
+    "section_mic_hmac_key": "939E08A95A08847810EE6BE0708474DCF4404FDE883B6378CAB938B76E8BD12D",
+    "section_salt": "B55AD57B5E62C64382DF184E318BFE56"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CD9E10B9F020174B29E5AD90E0E7084F",
+    "aes_key": "141D0AECF29D4ABE5B4D665284700976",
+    "data_elements": [],
+    "encoded_section": "37901351EBC383C07087BF0D7C785964C144CC911000E40E382B6E96BD40764C5F0D5415D0279002D1951D7B47B5F5853EC55EDA09251A97",
+    "identity_type": "trusted",
+    "iv": "6D1D36994AB7C4A0EDF441816A844237",
+    "key_seed": "247D236C67F1F56D1ACD8817170F45C500530BB9D122900272CC2E8A30A89359",
+    "metadata_key": "39B3703CC7908B83CF3B53A3238565EA",
+    "section_mic_hmac_key": "21EB0469854E8E7DB1904AA28BDAD5869B325E8E6B116E216B327A0DF9B70DF7",
+    "section_salt": "E40E382B6E96BD40764C5F0D5415D027"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "03A133AE87140BE18A3EB46B94941E52",
+    "aes_key": "9589F697EB5E5F3D2C1683B41215C4FA",
+    "data_elements": [
+      {
+        "contents": "FFA5C5",
+        "de_type": 787
+      },
+      {
+        "contents": "30EC973D18D69C314A4DB86B47B73786D996EE5BDD1EFD7056",
+        "de_type": 739
+      },
+      {
+        "contents": "97D8216B95BC62D8B6A24918CF8F0B6EF86BA3189A0D3A75CA4CE0EC8BFE",
+        "de_type": 704
+      }
+    ],
+    "encoded_section": "7A9013CA7679919FE47E62BD141812222962C9911000538B7CD44D330EDE7EB3810E2976BE3B9004B8F73A0634838BA4090A034F8AF96FF12A174C058DD82300D11D28D86109FD09F788CAB9E55D989073D594FAAFA7AE3D67456CB956D78996FEF9D0B9519D60BF25B383AA1559495B7EFD3D903BE11F816659DD",
+    "identity_type": "provisioned",
+    "iv": "2CF79EA2D302D0652647EE01347F48C9",
+    "key_seed": "C9BC1C391B0EFCFCD4B29D9C159DF75D040C4383251F2918B5675A149A6413B9",
+    "metadata_key": "74C107B8323774F37E4E2A54503915F6",
+    "section_mic_hmac_key": "E52B5B1FB65F064CAA5F7602FD57755AF4E2615FB78019B51541FB7EECF535BE",
+    "section_salt": "538B7CD44D330EDE7EB3810E2976BE3B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3AE4359592BF7F201084BB24660C771C",
+    "aes_key": "B8773C17826A4385B9284B3589766262",
+    "data_elements": [
+      {
+        "contents": "DC71AAC54ECB1B47647F31E69C394FC4AED39298C6",
+        "de_type": 62
+      },
+      {
+        "contents": "EC2D",
+        "de_type": 37
+      },
+      {
+        "contents": "C79A5EDAA0A03DBC18678509",
+        "de_type": 107
+      },
+      {
+        "contents": "74F8",
+        "de_type": 677
+      },
+      {
+        "contents": "1E3926BA0B",
+        "de_type": 957
+      }
+    ],
+    "encoded_section": "6D9013E5E33AAF3D46ECD6E7ACDC59462B6BD491100016C31481FBDA8F5298370904482F6B0D9002CECC579F805F85B4FDF7CD77CAAFFC9F702C00F4EAFDBDD6A7B88A6F41CC4D299135CE06E2A1F852818F6E08D69AF50CE298BE2F506FEBFBE601E97F17A324501BBBBEDEEAE8",
+    "identity_type": "trusted",
+    "iv": "6142669F10695320E11C7EA40B354D1F",
+    "key_seed": "32A9BAE8DE4585B275D88FB2E96D02B59BF865964276A9C6C3E847953AAE090F",
+    "metadata_key": "23347E850700388424B419DBDBCAC33C",
+    "section_mic_hmac_key": "3F2036BBAAE4896B8DD2D61A0F698D61613B4BE0B4F19660B6BEB71294B46817",
+    "section_salt": "16C31481FBDA8F5298370904482F6B0D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6D656A4E2FC03D80DC3B6513FA2F6F99",
+    "aes_key": "9E24A3900D6E56EACAF9A3F141FC042D",
+    "data_elements": [
+      {
+        "contents": "DA8064399B756E",
+        "de_type": 292
+      },
+      {
+        "contents": "ACA505B2F1",
+        "de_type": 97
+      },
+      {
+        "contents": "00E6055661B70886AD75E59AB2D35846",
+        "de_type": 461
+      }
+    ],
+    "encoded_section": "5B90137BA9E7F1BF772CEF94B3DDE2E8F230E7911000FE36015D37F6E2747DD1786609B9805790013F0F6B3758EA34EDDF61606E0A6FF7E98129DDFAC299DD07D45094A490496F3C4C479C0DDE225303DE62051B03CD6E59080B259C",
+    "identity_type": "private",
+    "iv": "F48F5053B7CBB0D2278CE266444D173A",
+    "key_seed": "3A0DDABFB9F1B1289651514C2F2BFA4E5907BFB05A34320064EF1D3DEC357CC2",
+    "metadata_key": "3A2FD2BE39A37010435F2EC8567BAA0B",
+    "section_mic_hmac_key": "9EF5C5CFFE0C3EEC958D358164165AFAF42350E0A7E930A8D6052C334BF4C3F2",
+    "section_salt": "FE36015D37F6E2747DD1786609B98057"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "980AFFFE379C22B79DE841EDCECEED5E",
+    "aes_key": "CA4B0DE90665264505C4CD89237FC2BF",
+    "data_elements": [
+      {
+        "contents": "C871A9B1",
+        "de_type": 695
+      },
+      {
+        "contents": "4F174A736E938697E7A4EE944DE19CD2921EFC1456CE9A5E48EDC9A058",
+        "de_type": 921
+      },
+      {
+        "contents": "8451A82242DCD1E5E990A47E2B710B",
+        "de_type": 792
+      },
+      {
+        "contents": "ED",
+        "de_type": 822
+      }
+    ],
+    "encoded_section": "749013335E6ED7B39E6DAC22789B547DE11CEB911000A11F350D23470D8D6714C4C5025E7ED690045992C6A6AB032F0743FB9C5C76DA9D27BE1B7896DA8473DA5305E1EDEBA7FF83B153DEE304349FBE73B34E47291F64350A2A8CF88250291CBEE24A62FEE68799E245C09AC54A1C01314CBE10AD",
+    "identity_type": "provisioned",
+    "iv": "FBF7F6587930B12B75185D427824D820",
+    "key_seed": "01AFED11D971E1477C49247EFA03A233971ED579A3D54BD6EA1F735E1DACFA69",
+    "metadata_key": "06878DE1EAF8F6CECDF30CFB61C4A20F",
+    "section_mic_hmac_key": "57B4D6F98948B6EADF732619716977F377438B038ED51BBBE9DEA245F660A799",
+    "section_salt": "A11F350D23470D8D6714C4C5025E7ED6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "142D92DF381FB02ADA5BFBBDB3194225",
+    "aes_key": "EF29932C9885D543FFEC36215E5C7D8C",
+    "data_elements": [],
+    "encoded_section": "37901306A47A102A3519418B25A673A5F52904911000297D7D672519392F14F37525A0A77E1E9002C478C7D3D651D54D047F7D8DA3EEA47F",
+    "identity_type": "trusted",
+    "iv": "753CC945341DCF47B1AC1615D664131E",
+    "key_seed": "C7F29427E4BDF07FFB51959101758A7034EA2A2E3441E719DFC10633AA1532E8",
+    "metadata_key": "F5CB77F80D986B392A01A036D807050E",
+    "section_mic_hmac_key": "39F6B1ADF27329472F39BCAEA60B1A75B68C8CF921FE68DE7A0CB5280A0A7565",
+    "section_salt": "297D7D672519392F14F37525A0A77E1E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9CED41C417A0C7A7D1A660CDAD238B3C",
+    "aes_key": "1B214359E8F6A0A67001E9763902678C",
+    "data_elements": [
+      {
+        "contents": "33",
+        "de_type": 916
+      },
+      {
+        "contents": "33D198321B338170A869F5085BB5C78B0551E2A5223599B1A684",
+        "de_type": 423
+      },
+      {
+        "contents": "46C92249B50D",
+        "de_type": 801
+      }
+    ],
+    "encoded_section": "619013CD128065A30C39221D969E1F403884AD91100045A40C690EB4CE8A31994874C36EE462900281E30F108565FFA512ED054F474331ADD12B4F12F9C772B5951C86183268ABC15B171D58A35B3491EF58AB10CAAB690F816686CC6EA03EA6BF55",
+    "identity_type": "trusted",
+    "iv": "9D7191BB69D4CFEFA0C02406AEE9DA24",
+    "key_seed": "2E54E9BEE7263BEDEF24DF26B14D0568D3122209AC5242CB266E7AC650B82FE5",
+    "metadata_key": "55A4DC9840046632FCF02F5A3D8A21FD",
+    "section_mic_hmac_key": "7AB0218829879A7518E725ADDC26869198DF9A790D6F59E1A813B8F0E0D83747",
+    "section_salt": "45A40C690EB4CE8A31994874C36EE462"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D9EA401291CA51C522CAB05537839268",
+    "aes_key": "2A29ABFD0A8B0B9DBBD433BC6FBF2694",
+    "data_elements": [
+      {
+        "contents": "D65B4F2CD54532FF49DCF70BAE60834255889E4C0B84EA00A597",
+        "de_type": 897
+      },
+      {
+        "contents": "",
+        "de_type": 672
+      },
+      {
+        "contents": "4381B746F456521012706DABA9E514",
+        "de_type": 247
+      }
+    ],
+    "encoded_section": "6990132DF63F223549475A6E9136749C83E4AA911000384273880FCA6E5CC28BEBDE3F02D7009001D4155F568EB768FDB8983007689B9F0BDC070243F3C1397F7DB5D70A2EDB97A39DFEE8D55A8AA282A599849FEC4AF90A61A54A01D407DA6CF9AA89C8492164483C13",
+    "identity_type": "private",
+    "iv": "9FCE9E12716169DABB86DDC631CEBBC5",
+    "key_seed": "D12E1DB0961229C72F7A1F9FD2E03A575B304EB3CBC77D6787D2A00D76348A29",
+    "metadata_key": "39437BD0EDF1F0AE69E6C168EC28910B",
+    "section_mic_hmac_key": "3FB5E39551A2434E164547A99C8572C213DEDAA602680E7573453FAF22C2D892",
+    "section_salt": "384273880FCA6E5CC28BEBDE3F02D700"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "52E5DC1D919E92A17EC425D120EE446B",
+    "aes_key": "1070D36A68639C052708BDD149C76B0D",
+    "data_elements": [
+      {
+        "contents": "0691E0D075CE0152FAA8BC5ECE77F1FD8715A0",
+        "de_type": 193
+      },
+      {
+        "contents": "6748926F6E2859A23BC42442C9A67286DE92581E8CB6C438C934522AC6D5",
+        "de_type": 452
+      },
+      {
+        "contents": "C05DC7EAE1890C046D11C3A09F",
+        "de_type": 18
+      },
+      {
+        "contents": "750A482F94219F642DAE0BB5731CBC8D429831078788BD23C97ABE9C",
+        "de_type": 410
+      },
+      {
+        "contents": "50C92B13EFB267255543274EF78B39E26E13C4B4F41CB9FC0C5132F1",
+        "de_type": 947
+      }
+    ],
+    "encoded_section": "BB901336682108499C15E3C9A3E960E1F0BA779110002BC1ED01E66270117CAA0CD05F05809890046D989D2205B8E302C5466A2316960D9A353C986CC3CEC221D254C1CF319898253B6EFEE1C58519F6DE75054473AD0B52AA87A8B589505B46AA814B222ECCBC43B52461DEF067D9A1D5BC34AFC835B04268E040DCCD08BDF7ED3B752D5CBB69C098DD782514EA0D4B085BFCFEC4A6DE1004304986AB4CCFA7ACE721070AAB913E3A1570A80638905137012669EDA49034BC143CA2",
+    "identity_type": "provisioned",
+    "iv": "638C93531115E6D017707DE649B22BFD",
+    "key_seed": "6114574A94E6D39027823764C6CEFFBC698CF543C7FFDD43E649CC447A84C1C4",
+    "metadata_key": "B27C10EBBE24E783576D83E48C9318EF",
+    "section_mic_hmac_key": "912A9018303053335B666556024E27E0DED70D189846A2FD0946DBCE9C5DF1B5",
+    "section_salt": "2BC1ED01E66270117CAA0CD05F058098"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8E7A8AD9FEB5AD035C6915F3978DCD52",
+    "aes_key": "4CD663AC711C40F5E58CCBBB5612D69F",
+    "data_elements": [
+      {
+        "contents": "1733D5DE",
+        "de_type": 202
+      },
+      {
+        "contents": "6F7CDC83033D",
+        "de_type": 849
+      },
+      {
+        "contents": "5CDC08111E0B1D094075ABCF883D89DA6E193CC7781A30",
+        "de_type": 291
+      },
+      {
+        "contents": "78",
+        "de_type": 295
+      }
+    ],
+    "encoded_section": "6590133E0D7409282A63D00B1043F3FDBC8962911000B9E781A89DC0DC26E307F2DB5AE84E859002079E2F53C842642D1766655B3CD0F95B8EEF98FBFEE2B6551EEDDD58AEFF4EEE8B1184BE4DD778D241C7D19A23F45F33B182D6F2E3D4B214189BDC3E07E9",
+    "identity_type": "trusted",
+    "iv": "AAFB4982D1299671CBA1E5169690CDCE",
+    "key_seed": "1C0AA7DE5CE402F06C25EBEBFA297A7B8CCD03AE2747C549ACD657BC10A6617B",
+    "metadata_key": "4F8EE08FF29009BACF5DF132DFD9FAC7",
+    "section_mic_hmac_key": "57457810563B685ED78C42BAA44DFA37C84037B6D733079E5BF408BF8DAA63F4",
+    "section_salt": "B9E781A89DC0DC26E307F2DB5AE84E85"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F368D766AD577D0FA2BA4EAD2AA71F16",
+    "aes_key": "1ACB9732F1E49D43B9F2F6DE5F9EA426",
+    "data_elements": [
+      {
+        "contents": "AED88C9593D7026A7E5FBD645A6CC0",
+        "de_type": 756
+      },
+      {
+        "contents": "29366161EA3148D44306A03FD2B1B9B64C9D54BE45AD",
+        "de_type": 966
+      }
+    ],
+    "encoded_section": "6290131DDD462C802488F8FCB53337F0E295B5911000F6FCA1B3F6B059B23F66D8C4EA051C6C9002C816881A036092A98D6E2C43B56997B3418206577AE5FBD2ED140513DB563765F8BC8F24373A34598CE965F612E6973213F68D8725BF8687E7C0E0",
+    "identity_type": "trusted",
+    "iv": "AA80F0C2853387D57352DA38D31DE2C6",
+    "key_seed": "F191675B85BE363A41115825E9F96AE944B1BB30A4F44B5BF264607F23ED1D03",
+    "metadata_key": "1463A91940AA85E20E4C102FB214B062",
+    "section_mic_hmac_key": "7448C6F70050A2F6807F37A50CE846D85570164633904F6988DBCDEE309BA469",
+    "section_salt": "F6FCA1B3F6B059B23F66D8C4EA051C6C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A8F73F308C8040F875068751AC07146F",
+    "aes_key": "4ACCA77F6443A997EC976E8DF29BF045",
+    "data_elements": [
+      {
+        "contents": "B4206451A977B5C7229B3706C7A9ADB5F1A2",
+        "de_type": 397
+      },
+      {
+        "contents": "56357AB9D8F59AC35C31B4A33719",
+        "de_type": 768
+      },
+      {
+        "contents": "E4E7555166",
+        "de_type": 650
+      }
+    ],
+    "encoded_section": "6590139B75C6E2F93374031891CB7F183D1DA5911000ACB22E5B30D0DBBAF07D77E81CF008949002CB361E9901B9D970AAF01C9C930078BB28E92B29E27979BCC204CC7E57B37D2A092B33A50FB2F58E104AF02590F8F81AD33F181D7E85F6CCD8E6D65D4414",
+    "identity_type": "trusted",
+    "iv": "784701EF2AE2B9C7B1656B6F24958EC8",
+    "key_seed": "A7FD06108A6EC755ACAEC565266DA3FEC76F5CF8AEC4F29279FA144BCA3FD6DA",
+    "metadata_key": "E09B7C55C7B8349092D91225F448EA53",
+    "section_mic_hmac_key": "6ED015FC8D0B189DC70E4BD1E8F88E688F25A796E6746035FF22D0554F821365",
+    "section_salt": "ACB22E5B30D0DBBAF07D77E81CF00894"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E576698436DEB6610A845CF01D163105",
+    "aes_key": "83226FF4A58EC6DD7E6662BBA5D73F52",
+    "data_elements": [
+      {
+        "contents": "BE5023",
+        "de_type": 476
+      },
+      {
+        "contents": "7EE00AC9BEBFC7C3C7D4CCE6F44E",
+        "de_type": 426
+      },
+      {
+        "contents": "71EF3EEFC6E87B1B92",
+        "de_type": 192
+      }
+    ],
+    "encoded_section": "5A9013F92DE8DEABABF71EDBEE8EB0BCDAADFA9110001D54B5EA6F822E53B05665A0162703EA9002AB621DAC7D9F5733D7BA7EE8934A3ED4C31CD45C0D582B0A5F7CAF5E87CF7CDE253F4CAF4DF1441BB1A46B43C45D688A870AB0",
+    "identity_type": "trusted",
+    "iv": "C2400D4299944D6C1488DCF1E22D6C06",
+    "key_seed": "79D29D153C585EA5E90C3B79529B16FFDAB71BC5A04AF937E790545AE9928DA0",
+    "metadata_key": "5D7452C2BA345F191BF6AE6FDF6C563E",
+    "section_mic_hmac_key": "79900D2FE4048CA7833B859F37FBDCC0B15F7171C80DBA0B1885285696975A1E",
+    "section_salt": "1D54B5EA6F822E53B05665A0162703EA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4768B89F8A7E384991F18A0495BFEA04",
+    "aes_key": "7547BC2888B8E5542CEE7A3F3C5222AF",
+    "data_elements": [
+      {
+        "contents": "E3A9",
+        "de_type": 870
+      },
+      {
+        "contents": "3BE13855A3139F39614D0FDD428930B89082B2432BC9446EA11C",
+        "de_type": 8
+      },
+      {
+        "contents": "93147F162D3D03E6B280D73646F2F2DE8550F029E4A0475EBEFC1D61",
+        "de_type": 47
+      },
+      {
+        "contents": "D4C4C08E4626E9C9938060448D2DF71E5923",
+        "de_type": 203
+      },
+      {
+        "contents": "2C955691391A",
+        "de_type": 984
+      }
+    ],
+    "encoded_section": "949013BED9D332000D6028E9BE7FF8D5D9662991100026BF874FD30958064B7FDE50DC5273249002EF9D3A6DB0E2E9F377CA7ADE125F20C814A7314F4DB049E59DFCF842AC9C3A0CDE83E86BE477EC0945CD68D713C355886BF6EBFD0B4ED3E1F130059F0D536690144269E0E575CD11ACBF81624828907DCDF86CA826D7CBF3311FE1201C677DBF3ADD1ABDBAF3F6B3435A5D6EAB",
+    "identity_type": "trusted",
+    "iv": "8A114B142A29B0A8FBEC8D802FCC9565",
+    "key_seed": "7D5D6E5B68DF9E882D754A65671ABD44CE108669284BD684CCF6CEF2C2EF0FB4",
+    "metadata_key": "9D8B48CDBE1FF6BB72F17A12043F41E5",
+    "section_mic_hmac_key": "8D6A740A35A73FE7F878D2921B3D960BAF0A3486AC0C9A8819E424B1F030AC3A",
+    "section_salt": "26BF874FD30958064B7FDE50DC527324"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F28906CA902C635D308F902E45DD2E48",
+    "aes_key": "8706D4875D9BEFE21A3804E22B9ED548",
+    "data_elements": [
+      {
+        "contents": "A84365F157E64CB62F",
+        "de_type": 509
+      },
+      {
+        "contents": "00B4A0D8FDB5521E004F7C38139C984657",
+        "de_type": 628
+      },
+      {
+        "contents": "8030144ED75B3228FDA5437A5B278EBEB81FEE8F9BFADD2D",
+        "de_type": 343
+      },
+      {
+        "contents": "F533F70043C57E4A829DDE726DAEF9DD7D19",
+        "de_type": 397
+      }
+    ],
+    "encoded_section": "879013829B3FB9CEEFC0DF72E63F15AEF50421911000F4F886D3942FF01D3363FADE908CBA20900179CCD98A4373FE7DFDD4B86DAB02F51D3B9E496075E671296CAFBC5F734874DCC4392FE89EB640208C8190D0BA0DC376190FBC329D495D4C8AFA2F6743C88947A5F618F7F5B938D389734CEAC2D74DE84FB58B2F1DC8557F53A0191F9C0F7767",
+    "identity_type": "private",
+    "iv": "D91919E5DA29C49D3A27EB7004C3A3A2",
+    "key_seed": "8EAF75EBA0A679B7FC0745B9A3A151467037141B8960B3CFD153873489ADE1D6",
+    "metadata_key": "F8B965AEF3130CB5B1EDF79BD3B380DD",
+    "section_mic_hmac_key": "CDDF228D36AB57418939E4B225AD5E940A66099B1673E9C72617C817EC65FD85",
+    "section_salt": "F4F886D3942FF01D3363FADE908CBA20"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F07F58FCDFDB03D86254EF18C7ED9F5A",
+    "aes_key": "212FBB8DB7A61540976A129092DDC6A3",
+    "data_elements": [
+      {
+        "contents": "507444EB19C5A2F5AB0408A7B1C9FB6B722485864B7FED",
+        "de_type": 517
+      },
+      {
+        "contents": "340127475FEF88C37C16738A27767280A60265E9ED7C00F7",
+        "de_type": 419
+      },
+      {
+        "contents": "459F7AB3EC821FF2FC5E3271D76CD4B927C7DE9283DA3D1F58B6",
+        "de_type": 907
+      }
+    ],
+    "encoded_section": "899013359EADDA79D6D36D643040E2F246FF5691100088BDA9DB826E3AF39A28BD3DA6D11DCE900162FB285CFC9832A941DA01960F1D23CF4C3B6B16D419D9128C57D4791005DB0CEB59681013CAFB837D214C1B0254DEC08CEEA521C4B63E0691E22197BFB77A63E5B404A6C59A5C8106C03C9E64555264AF6995235AFCB618796984136391294C9908",
+    "identity_type": "private",
+    "iv": "5AF941CA9794322BC9567FDCEA50EE5F",
+    "key_seed": "063078D957BA49F5766C90098FACE0A30FA35A51E25EDFAA85A718A10C3E7DEF",
+    "metadata_key": "C92F572CCC40BBDF3908F3E0463113FE",
+    "section_mic_hmac_key": "893438116FE775A831B08322B6A69563A8CCB89BF0D0E1B072F9938B2F1E53E6",
+    "section_salt": "88BDA9DB826E3AF39A28BD3DA6D11DCE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A3DEF8B9B61DEC75C9D78AD7D305A942",
+    "aes_key": "B88BB7EAAD96923279AD8895FDED98F3",
+    "data_elements": [
+      {
+        "contents": "2BF8EB8F1B59A8A6BA8411C989B45CE02489926496131DD2A1",
+        "de_type": 620
+      }
+    ],
+    "encoded_section": "5390137966542D2D7E1BB1B1CC4A69D4611B2B911000E895C370737AED915CE90F8886219DC490023E6EE711BADFC9627B0C800710236B909316CA48CC9975AAAB452A50852576114CA2040B2E46607C1453837E",
+    "identity_type": "trusted",
+    "iv": "31951BDF7F8295133ED6F0ACC391148A",
+    "key_seed": "8D101AA09D57A75F449D3E2FD7DEAE6BFE2732B8650057B906687BE5273267FE",
+    "metadata_key": "E360E68E7237460157062D59F02667AE",
+    "section_mic_hmac_key": "B0229F3856F27C706D246C0A9825CFB5A8A42F943213DD297DF6C9161B01537C",
+    "section_salt": "E895C370737AED915CE90F8886219DC4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D9FDC10E7DD4CEE9E6DDC58E32010C56",
+    "aes_key": "13BD95BDB3765C222D83F09E7709B4CC",
+    "data_elements": [
+      {
+        "contents": "C34DABECB5407708",
+        "de_type": 745
+      },
+      {
+        "contents": "B74FFA6EC993AFF7188E480EFAE2B5716CAC6D94BA01A6E295",
+        "de_type": 893
+      }
+    ],
+    "encoded_section": "5E9013C6528C5F67233A0621D667CDA9647C8B9110004FEBAAA8799785F0596398269E32B38D9004005AE0E84461B3A20D959FE3BEA15F943AA33F119D493B02089D7D3BA9441428B675702D1E218A838A546A4ECA06621081AF4A649467EC",
+    "identity_type": "provisioned",
+    "iv": "74BCB96F895B5DDC9846D24C91CA1ADA",
+    "key_seed": "8DB972FF69EDFE8ADA506F8F4EE6A594F5693A3702C8387D0B19FBA6285FD3E3",
+    "metadata_key": "99C123B1D364F1879AEED1E415AA2A73",
+    "section_mic_hmac_key": "FD1423E5F7DA04EA60CAE11C985935089218744423CC43B3097F1AAD90F197BA",
+    "section_salt": "4FEBAAA8799785F0596398269E32B38D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "86EFC69A56E5757AB62A058D5554CD89",
+    "aes_key": "159ACE5A180AC4E017D4451EA22FAE2B",
+    "data_elements": [
+      {
+        "contents": "CCC0D2FDE58D59143764A6F1805538AEACE1B9B4765D8AC26D0B96",
+        "de_type": 575
+      }
+    ],
+    "encoded_section": "559013C0A81EEC39B1B937912A6CE13ED810C79110000D4B9B8A8C4EED41C8621ABC440648CF900104798C555D077454425379DDE878641DCC3C7B6BDF25F1A1E6ED6D58D0CBA6BCDFB8069B6964894A6679C2A51D3D",
+    "identity_type": "private",
+    "iv": "24F1D1D3D8E4FFA7AB4B424DEFBCE37D",
+    "key_seed": "D637DB7EDCC17C5CE28A181364497144C75064BF385DAEC9ECBE88C4733DC522",
+    "metadata_key": "C8D76EBDD7E6D70B1368BAD74E63D830",
+    "section_mic_hmac_key": "A74FF6ED127426FB488F765F3D4FB28627F8430C15249C32719A4011A3C49929",
+    "section_salt": "0D4B9B8A8C4EED41C8621ABC440648CF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "54B49E29E6C813A6AB600E4FC5B37E1E",
+    "aes_key": "7F2AB782AEDECD14B491B2A8582AE47C",
+    "data_elements": [
+      {
+        "contents": "E372",
+        "de_type": 535
+      },
+      {
+        "contents": "59C944D70BEA1D61D2B148C437F0BD845A6DD9",
+        "de_type": 452
+      },
+      {
+        "contents": "028BA7012BDEC80C4408BB13B6",
+        "de_type": 60
+      },
+      {
+        "contents": "F239F4",
+        "de_type": 695
+      },
+      {
+        "contents": "AE8259558B908BAEA271AF1F6E7AA9AE2C8FBBC285B601AE7B",
+        "de_type": 383
+      }
+    ],
+    "encoded_section": "8390139CB02E72EB97CACCF9A78057EE5CBB309110006A4AE76AEE22009E704B7BD28FE8B2B1900279183874B6909CA5B47A0A86DD6182DAA730343CE2371932D34189949A26ED2DD187AC7575922178E8444DB225910D31030B992DCD92AEAF97563272CAA76CD1558DB0B684B62F740E85794CEF78EACEA7058B4831760BE43B970A2E",
+    "identity_type": "trusted",
+    "iv": "58DD2660273A4248EE13A8C1AD2C5184",
+    "key_seed": "C4634E111562A719DA2BB9EB976735028B2ECEDE1ABE15ADDA7CD3157B233D1D",
+    "metadata_key": "566DDB44E374E986BA026292C0EA365F",
+    "section_mic_hmac_key": "5EF675045878EFD2070A5A9798BD142A6C34978E9DF077E79BB8A68A4177FD35",
+    "section_salt": "6A4AE76AEE22009E704B7BD28FE8B2B1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "501218BE1988D66E80E7EF243937E186",
+    "aes_key": "6BE6B27C8417AAFBE97B75179DAFA7FB",
+    "data_elements": [
+      {
+        "contents": "8E3197168683F9454DE6DB69F69E94EA3F5A8F61695068C520781441C0",
+        "de_type": 229
+      },
+      {
+        "contents": "25D1",
+        "de_type": 764
+      },
+      {
+        "contents": "FAE449BA2F60AE991245DB",
+        "de_type": 519
+      },
+      {
+        "contents": "08976D80D1EF3AF9E7EBFA2C5FAE",
+        "de_type": 126
+      },
+      {
+        "contents": "3410",
+        "de_type": 40
+      }
+    ],
+    "encoded_section": "7E901311389A9F657FB9CDF7216FCC6FDCB5C1911000ADF1D2506EAC7BA9C0E2E598762A41E390018EF9292BFD0E3B84847F8B3AAC77E5C20E9F9C8B5DE8B0C389E7BDFA1847AC7EBC51267223EF07CFB0DDF9F6F11B9A7C346D5C081AD766F7330072EFE978E18ED4D7E22F5E724FF86504EA9C3B2F615ED7E6A73989C029",
+    "identity_type": "private",
+    "iv": "4334EDBE069FE9E747E594070B35865C",
+    "key_seed": "D8791426EFA31574B5323D3468CC282EBD37B522C10B0254B75900D545549C68",
+    "metadata_key": "EEA46B5BE346C68C6B9D2FF155B847B9",
+    "section_mic_hmac_key": "36586A0A4B1A9EFF83B9D2C27288B2EC000F5A729D845039CB4C4E2E25D050CD",
+    "section_salt": "ADF1D2506EAC7BA9C0E2E598762A41E3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6F7E74F849A9CA7DC6EFEB3C4E185CD2",
+    "aes_key": "3E0BD976A1EC7956BD5A218B15CA1B88",
+    "data_elements": [],
+    "encoded_section": "3790130111305FC43F978EFA9FA71298D70A3E911000482B018116837E1A30C802D1FDB1D5E1900434436C965FDF5AB2C0A9794A5F1E438F",
+    "identity_type": "provisioned",
+    "iv": "8CE2936C0F96EB822A07C82B25CA86E0",
+    "key_seed": "5CE432AAE1CA1837C7ED7EFB8ED5B8202DEE8F3D33404A2BD800691E60AC84DE",
+    "metadata_key": "60F06359C33E56E540F0D562F6D795E1",
+    "section_mic_hmac_key": "9756EC3F8B6D24028B7578FAEDAC3E00F01EC763B58705AFCD3C406CC8E2CB9E",
+    "section_salt": "482B018116837E1A30C802D1FDB1D5E1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B7D6F035E98A76528AC824E633BCF35E",
+    "aes_key": "855A405A9B896759D95909C8C01D85ED",
+    "data_elements": [
+      {
+        "contents": "A9AF7437A71199911EFBC7F467ACE00B3068C2",
+        "de_type": 54
+      },
+      {
+        "contents": "BB4F94CBBE7AE4",
+        "de_type": 206
+      },
+      {
+        "contents": "4D3A907AEA42D758A8A8F3469F106BE9",
+        "de_type": 34
+      },
+      {
+        "contents": "D65F6C8BA7CE3B27AC2B2719BA42575144",
+        "de_type": 639
+      }
+    ],
+    "encoded_section": "7C90134E69BAA34FCC557E20B36B17747D03369110003E74770F2C3BFC7824E73C395259941490022DC2535A7F643CDEA3AE4B0F0C6EF90B575E93CBBF59D9D6B71462FBA784B35C7C36060F51A0FE48AE363A6EC3CE8AB49D9C1C1313C173694407489A8B70CA26A3BD4C099C54AD65D7425835D44949728C287A2359",
+    "identity_type": "trusted",
+    "iv": "1A27663FC7C2377EF8D2C5186C1FC4A9",
+    "key_seed": "64AC1AF89078CCC339162EBD5DED72869833D1952CA107DB18AC60A825F1B53C",
+    "metadata_key": "9D5934F8E0592C5D89895210409C8A41",
+    "section_mic_hmac_key": "257F10EC7FFC7A37AE8002AC855DAEDB519FF790BB018AB37C07B3C95FA43B84",
+    "section_salt": "3E74770F2C3BFC7824E73C3952599414"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5F4055051684020E65946E512C943EEE",
+    "aes_key": "2E4C09B79D85D06810D3098DC1851254",
+    "data_elements": [],
+    "encoded_section": "3790135F9E24B4FFB9D55DC0C402783C77A352911000DC13DEBE3C218E84F7B6BF1A5EE5F99790011059D0BFCCD933671F56E42FE6EFFA15",
+    "identity_type": "private",
+    "iv": "EE7A0DEC1B5D713DF6F6FDEBBB2BFD96",
+    "key_seed": "AE002F1AE69DA6D9E55CE9698288B1A24649A79EC710AC0EA25FA2ACEEC513C7",
+    "metadata_key": "8102DD3A02B8CBC1139B5CAF2E1D73EC",
+    "section_mic_hmac_key": "0645A1FF34AFF1BA9649FA6289B1614F437149CD7D365604EC23650C4990BCFE",
+    "section_salt": "DC13DEBE3C218E84F7B6BF1A5EE5F997"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "65274318E96A5F3C8F853A0140948CA9",
+    "aes_key": "A2AB55C2875BC6E1A5C6524613D979F8",
+    "data_elements": [
+      {
+        "contents": "E1365D118F175446B5",
+        "de_type": 109
+      },
+      {
+        "contents": "6FD06861E3",
+        "de_type": 537
+      },
+      {
+        "contents": "75B17DA591EE83",
+        "de_type": 876
+      }
+    ],
+    "encoded_section": "54901395DF3F04E4A427202405C00CEB8517909110008555384C43C1617A30BCF72E5F4BDFB49004F86629CAAB13685CF011DEE82DF4F262F18C02E125C649BB23BD45920E75158EA9070F51274096B90CE869ACC3",
+    "identity_type": "provisioned",
+    "iv": "21A90C0A73430152D69C286DE55FE6CA",
+    "key_seed": "D544199BCE9630C3A38FA486B24337076B81862E1EF002CDCF3F47D2F4F01312",
+    "metadata_key": "5890FFFB39DC0CAEC2CD1DC14D8CB75D",
+    "section_mic_hmac_key": "6D897F4D0C20E588E90887DA70802A1D1AF3566423DB51B7D461A67F1C47FA59",
+    "section_salt": "8555384C43C1617A30BCF72E5F4BDFB4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1F4709A197E6740270684FAD01BB82D7",
+    "aes_key": "34574FCAB952B550B440E2640175B9E6",
+    "data_elements": [
+      {
+        "contents": "9186",
+        "de_type": 495
+      }
+    ],
+    "encoded_section": "3C901331255D9705F45F7E9517B88F8F638FC291100079F10183D40E8C82C058C764B953DA829004CB302F29874367F55323ECCAF05172CA35D7FC6D6D",
+    "identity_type": "provisioned",
+    "iv": "947390D6150675057CCEA6FD5718F0BE",
+    "key_seed": "7AF2D95F589FC38F0B6F85DF707C22EB88F763BB671E1CB970B193AC44D4BCE4",
+    "metadata_key": "4CCF453BB6EBE955C870535451F6C69A",
+    "section_mic_hmac_key": "4473C6534983305DE8102EA9118C4735929E70E0544A1EA512560B21FCB48F1F",
+    "section_salt": "79F10183D40E8C82C058C764B953DA82"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "96C04195E083ED70F192E617E1D76783",
+    "aes_key": "AEB96E57873EB15A971A619B5FE4EB80",
+    "data_elements": [
+      {
+        "contents": "6FC6CB1C012F258C24A6A57A7926E27F5A830A34A367",
+        "de_type": 382
+      }
+    ],
+    "encoded_section": "509013410BA26E4CACF5CF673D585B58D0F3FC911000446BA66C82AFB4E9C11CB66EEA6DEE009001F4E644F392CA55B8341671E0AAC030DF17CF0EA76EDF81F2EF4C0CB1336BE6CE9D27DC8D8A4A29E735",
+    "identity_type": "private",
+    "iv": "891CE2EDBC65C4B0D16DF9F624DBB82A",
+    "key_seed": "3D9AB03EC3F93120532D2E778D3C2BF4DA9315896076277F2873A31E4FD5F52C",
+    "metadata_key": "CFF78360D994C96E284EBEED93EA4BA2",
+    "section_mic_hmac_key": "21BBCAC3997CA4151E9A097276A550A0F483AB80B38134DC980C94B9A5271A6B",
+    "section_salt": "446BA66C82AFB4E9C11CB66EEA6DEE00"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CC96FC6587992A00059BF3E0DA2289DB",
+    "aes_key": "AF54E2E9237E76444AAAB77B58C5446C",
+    "data_elements": [],
+    "encoded_section": "379013D8315BBD994D5A670BA6F780F2F028BA911000C755346DFEC27ECCDA898324E69CFB4B9001A9B1E0D2CB309713FC58CB798396531B",
+    "identity_type": "private",
+    "iv": "B60129EA4D27D57E45CD421948D742C6",
+    "key_seed": "807DD8CF77569513B6ECBC68ED9B08E5B9475FF6607732141FAEC638A8DD28BB",
+    "metadata_key": "5481564D04DD0017AE4179A82AF221A9",
+    "section_mic_hmac_key": "73FFAAF7157A3AE517296592E0B8D13E506DEEC834FE1206ABAA050A9FEE92FC",
+    "section_salt": "C755346DFEC27ECCDA898324E69CFB4B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7963E5F18FA7E59600E6F25FA4930837",
+    "aes_key": "FCBEC40F3C80A09B60135334EE7DA35F",
+    "data_elements": [
+      {
+        "contents": "2EF5EFF372E4702B096C5B858328F410579E1E008EF2E275D6EA",
+        "de_type": 692
+      },
+      {
+        "contents": "BAFCA28BFF",
+        "de_type": 398
+      },
+      {
+        "contents": "7E468799B29D34E1914D34B97B4AFBBE",
+        "de_type": 966
+      }
+    ],
+    "encoded_section": "6F90134BF4B2FA7735A0143B1B24205E3408F8911000B1236CD7CBD12702AFECBE9635A14A48900263C48BBFAB388B046AADED238F69E1F9A7BE917E59BFBCA2CA3B2C191C787A8C3139DBAE0B72FCEE19B98E0D9C261DA6907D9561B53B735561603F687041709A1913BF7925139044",
+    "identity_type": "trusted",
+    "iv": "79447B6043F287557A38B57CB6D7279B",
+    "key_seed": "52895D125C5472A019409B363AF56DAAF368CA65B24E76E891500A8C3A324F81",
+    "metadata_key": "C3BD8D140D94E6945DC06DAAAA211DC4",
+    "section_mic_hmac_key": "C35368464E906272C5B9B8C782E9F88A8AE3AB9474742AD6F770FAE52BCB88D8",
+    "section_salt": "B1236CD7CBD12702AFECBE9635A14A48"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7A0C1DF60064EF2276AE5C8F6E773415",
+    "aes_key": "4AD58F3983D0B6326C71F9AAF86CD10B",
+    "data_elements": [
+      {
+        "contents": "205DD11E927B089869B334A9C59D75032B498C8B26270EE984AB",
+        "de_type": 916
+      }
+    ],
+    "encoded_section": "549013603FFB31E477AC33FCEC9446E9C1E230911000B4DDA6DCF6B60042BAF08C824B9C9F2990019D5D07E65857011663A028155D02FF6E932BB511C55C1E2730444597E2AAD904948C7BAF9CFD59D59973745C1D",
+    "identity_type": "private",
+    "iv": "AAEA80FB40CF47A6266A06730EC30156",
+    "key_seed": "90152000F437AF07947A71307DFC0618E116E9AA2AB8988722818AF41CDB59D1",
+    "metadata_key": "BDF2BDE3B7905DF7CF58590982B89E52",
+    "section_mic_hmac_key": "AB7A1DD69A86B1BEBC2DE6100FBE90AB1C943D5695633CFB48AAE2FC961EE093",
+    "section_salt": "B4DDA6DCF6B60042BAF08C824B9C9F29"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2F4226AAB45A2040B831D40B0EBA4407",
+    "aes_key": "1222E1C06D6E81FF2AE737DC583C0737",
+    "data_elements": [
+      {
+        "contents": "C02B48E3A60445D37BF70DF40C44CC320203B03EA1F04994",
+        "de_type": 866
+      },
+      {
+        "contents": "",
+        "de_type": 984
+      },
+      {
+        "contents": "D402CD4FD797FF62E8D7AE",
+        "de_type": 37
+      },
+      {
+        "contents": "AAA43BF1A7AA06F9B2F63D52787D1A7AC58D557F",
+        "de_type": 916
+      },
+      {
+        "contents": "77B0DE2AEDC7048163",
+        "de_type": 621
+      }
+    ],
+    "encoded_section": "85901322B04151D900C31B678DCA782E1E6323911000D57CCB532F3318CCB7BF62288C95AB1C9001D7E937561EC6F7FC16952EC2A7E0898E9976D0028A3A31B6BF858AF26AAB5A1E7A4F36A5588F8F28A4CA3CA8EA4404494575ABCE0A97E8360771F784C26226019DED4E8FB6EE3A96750B9B934A09E28668C6992E8F50D3B794DC6AF2513D",
+    "identity_type": "private",
+    "iv": "1ADEEB6BE822DDC74F93D2362A2B0441",
+    "key_seed": "82AFE392779367A6D4B3787AE009922456277EBC7FE04447BC2D1162778FAD11",
+    "metadata_key": "9BDDC51177CD3D9311F1D17661490B86",
+    "section_mic_hmac_key": "16342C46DF929343DB72EA520ED728F49F3E50BDFFCE1CF291C3697620133BC0",
+    "section_salt": "D57CCB532F3318CCB7BF62288C95AB1C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CAC0617E69DE77A280ABE6A5F3E624EB",
+    "aes_key": "77FE9A2730A3B80F387BBD0589358B33",
+    "data_elements": [
+      {
+        "contents": "A6A3C4AE4BDF8941",
+        "de_type": 417
+      }
+    ],
+    "encoded_section": "429013C0975C03854C80B4E07AE4CA3076AE42911000EA332A8D5BCA0D6314BDC58F1D09498290024FB2DCBD1FC2137DD2C4FAE1B9A76B2B307B72B1C97D8322DFE749",
+    "identity_type": "trusted",
+    "iv": "0CCD2727784E9E5B84D45D62A93E8957",
+    "key_seed": "EA3D228C2BEB0E89B3C9B28A17D2BEC7F763376D8455DC991C33FB3CD9CCCE7F",
+    "metadata_key": "528A7422DECDD593FD1ADC1755835C08",
+    "section_mic_hmac_key": "18216F8A0F08FC18F8694B2658CC0B1F391BFC3E82B6F8B24E321BD6371971C9",
+    "section_salt": "EA332A8D5BCA0D6314BDC58F1D094982"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "623AB1FBEEF5D3827676D5F2A39FED9C",
+    "aes_key": "AEFD0C18567BCB6348CB3A0B0D40567D",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 971
+      },
+      {
+        "contents": "DB43DA9E48BDF35056FB18CA10F46359BD1A30A20D5655482FC3976EB92A",
+        "de_type": 729
+      },
+      {
+        "contents": "97652C8CA93C33047BA67FBB",
+        "de_type": 766
+      },
+      {
+        "contents": "D6525FFF50D38FBEE9",
+        "de_type": 487
+      },
+      {
+        "contents": "1866ADC89365521D269D6FF6A1972629DCDC",
+        "de_type": 421
+      }
+    ],
+    "encoded_section": "8B9013137611183EB9AAA3F69202645FA0DCC09110000BE535680DC0F532EA22C2F75B8A066C9004BDDE3F2ACBAC8630F0A35CE5A424AF735799E14DADCA023F6200522E83069F8ADE4786A502D31EA079439238D5A9590B1227C5CAA9CE01579FEA21D1DBECDF0D95691CCA2FC601B27D5696CF25128DDFD16CCCAA5C96675488611E407310D067851CE7C6",
+    "identity_type": "provisioned",
+    "iv": "DA1292F56F9B309A57103588C56F0B86",
+    "key_seed": "20232B2934D61F4254E1B430C941D99408046EDA864CAE9CC1F30B003DA3F15C",
+    "metadata_key": "958125E98D4CCE39EB85BB7A1799EE11",
+    "section_mic_hmac_key": "B2AC01EDB57C1E96D629F9DF9B299A97C7A8078AE389FD3C4CD495C17E9C04D3",
+    "section_salt": "0BE535680DC0F532EA22C2F75B8A066C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "274851FCCE9C7A4AEF4AE64A5CDF1B35",
+    "aes_key": "096944332E1C31DBE39227572D5E4FA3",
+    "data_elements": [
+      {
+        "contents": "6E64A76F629EDE6983839536E6746048F9407203",
+        "de_type": 828
+      }
+    ],
+    "encoded_section": "4E9013B4E77EEA1D31017802F64F86FAEF7E31911000BED45389016B48EF6F638B053B3EAB3690021297C8C1D17FDD132207ADA56F2E1DB48EFCC6972936EC031E5A1C12EE25BC554477A6838C8273",
+    "identity_type": "trusted",
+    "iv": "1F4EACA3D2A66B67B8100E7FD56858A9",
+    "key_seed": "4B40631EA3307B8B03B324AE583A624B14A3846AD22A98AA8A6476CE18B72519",
+    "metadata_key": "856BA488B5E3073FE98F90EC7D43D9FD",
+    "section_mic_hmac_key": "89252A2B55F7FC94ED83D11D1901E8354EF6A832522A61E77DF2100FA5B40E85",
+    "section_salt": "BED45389016B48EF6F638B053B3EAB36"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0EC0CD8BC147F50646909D6EC4CC2134",
+    "aes_key": "D4342D083B5848972862E5244EFD574C",
+    "data_elements": [
+      {
+        "contents": "61538E97",
+        "de_type": 674
+      },
+      {
+        "contents": "142298DD27C29352869DBD73AE86918E77E0",
+        "de_type": 321
+      },
+      {
+        "contents": "B04E54",
+        "de_type": 64
+      },
+      {
+        "contents": "08BDEC39FBEB13292A5317B91CDC",
+        "de_type": 546
+      },
+      {
+        "contents": "AE3883A3D67D64CFA5B52195337D40B768695A28036AA392F25A9B302816",
+        "de_type": 255
+      }
+    ],
+    "encoded_section": "8A9013C70296B62647E222527D694A181E0B3C911000E66DDE309D386AED3A9E6F4F4E72AC2D900476583A491A2BB7D5B11ED5D5D40D40427D285AAA7C31BF39774FB2333DAD5E8428A8728BF4619A5F3E1F646C9C637412FCB7E60BD95712CDC6DBBCA7A64509C4CF24A63615566468376BCB88515DC32CBE4462ABF2A5B902AF44CCAA8034D1B98DA864",
+    "identity_type": "provisioned",
+    "iv": "C8A684AD4924F67F2BB34B665F767260",
+    "key_seed": "0B21B7F5AFA2FD60F417160706E110DAD08D558B7F873A7145E2F5846B30EE14",
+    "metadata_key": "9AFEEF6AC49A69F403F130619CA3C015",
+    "section_mic_hmac_key": "EBC37528F0E1D39DDFEB12F6229FF778D381BFD32C22EDF0A22AB350036560FF",
+    "section_salt": "E66DDE309D386AED3A9E6F4F4E72AC2D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "107DE67CF73BF73111A7D273F220324F",
+    "aes_key": "C909F88E99316114E33AA6727A466458",
+    "data_elements": [
+      {
+        "contents": "8EFDC86CCC6C78EB",
+        "de_type": 542
+      },
+      {
+        "contents": "AAA1E33F8F43B229EB8189E8",
+        "de_type": 551
+      },
+      {
+        "contents": "54E27639599792ED49",
+        "de_type": 92
+      },
+      {
+        "contents": "72C8",
+        "de_type": 187
+      }
+    ],
+    "encoded_section": "6190139BDEA29D9DC86B46F9D2BBCDA4366F1E91100088D8F556CD3AF2EA81FB25030F2C782B900230E146653F1669A7ACFDF87FCD45399FC47FED90B8920E5C85A2B5ED2E31FBA1EBABB429881EAAC9CDBAD9B7B529A7AE7756AF294C1F46800357",
+    "identity_type": "trusted",
+    "iv": "F42D4010A9B9750FA68C39E1E7293CAE",
+    "key_seed": "6433B38B99F099F8291F1AC0E46556F0110E50A48F622C7ADAE2F70FDDD13A00",
+    "metadata_key": "433F040898968971CD78BA25C93FAF72",
+    "section_mic_hmac_key": "2D3DAD9FC1AFD294EE70B0F00D78E57ED025932D5EAED1E85F5DA314C4372F8A",
+    "section_salt": "88D8F556CD3AF2EA81FB25030F2C782B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "23DB2534F86E837128D4B5867BE7B9D7",
+    "aes_key": "FF021E596C3FB19F91E10975989481D7",
+    "data_elements": [
+      {
+        "contents": "092500E2322279050831D86A9D0C412D262AF1",
+        "de_type": 889
+      }
+    ],
+    "encoded_section": "4D901361744616A9DF4D232AD6583E68EC94E491100045112DE3235917ABAE281CBB93473C8C9004A8CA160F322458CD3FFA1BE531D8FCD0009177A286DB8E8D4BDF1A77962A55FE3AE696EB057D",
+    "identity_type": "provisioned",
+    "iv": "EFFEF8C52517139FA621AC011CDAB4BE",
+    "key_seed": "9A62A13579CCEF2E7654D15F2A1BFAABB99E94396396BA14B5D488488BBC454B",
+    "metadata_key": "5CEC4B1BA12D44BB925EE396A95149B5",
+    "section_mic_hmac_key": "3C093A169750EEEF1645B87A283453DB15D44FA8FE8E6D36885E5E079736E0DF",
+    "section_salt": "45112DE3235917ABAE281CBB93473C8C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1FB79ABE6FB18715F8DDA68BD6B15373",
+    "aes_key": "0BAF583B5891233D33BA6B74D5E422B5",
+    "data_elements": [
+      {
+        "contents": "0D611B00EF235E26",
+        "de_type": 578
+      },
+      {
+        "contents": "6DE7D6C995",
+        "de_type": 500
+      },
+      {
+        "contents": "310C2C3FA8E0702122BA85A3427A256F065CE1EAEDC1B9F7D4F04F13F1",
+        "de_type": 579
+      },
+      {
+        "contents": "3F1A1AF9FB1A3B409C278ED4098EA6CF87E02457F525",
+        "de_type": 947
+      }
+    ],
+    "encoded_section": "8390138D06F7CEA300F4FAA9EAFF32BDDB833F911000911991BF08A3D1BBEA49C971CD66D43190049130C7E781DB24A1E2C7255DF0FF30DA65DCC1AEF1188EC72B1D6ACD5B6E42E904B513B03DEA16D250F9B146741427C0FE6E29624849A488542A956CEACBAE834CDB227CB06520F4453A08C795A729852015823C3F540167A6B9B6C6",
+    "identity_type": "provisioned",
+    "iv": "C0073097AE5243E3E6861876E66B6C42",
+    "key_seed": "04A20B7ED383D59B567CF62F30B25564D6509736B9141C273B638EB3A111EBE2",
+    "metadata_key": "E6B382E4B38BEC2DF51C9084B2A1484A",
+    "section_mic_hmac_key": "2DB0DCBCB00F8B684C3876EBC116C87B388F8E4EC2E4169536E5C34E2524DF60",
+    "section_salt": "911991BF08A3D1BBEA49C971CD66D431"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6E07E0694343C77F296426DD6E13D64E",
+    "aes_key": "1ABAD934592B2D7736D998BAC1194ECA",
+    "data_elements": [
+      {
+        "contents": "DB8A57783224CF9C",
+        "de_type": 267
+      }
+    ],
+    "encoded_section": "4290138A4D553E3BCB5789F1E01ACF4D8D7955911000D0E797023C8E23832AF2DE31413FECA59001B98036E2FAF383E70C58D8A5DCDCC5C7B528D95B9238054791D51C",
+    "identity_type": "private",
+    "iv": "57B0B15DF8CED13A80F93751E71DE9AC",
+    "key_seed": "B593545C0D736C1BFAB6E76CA49AB7DD942229C6E8B781B468ABD7C60ACBCB97",
+    "metadata_key": "90687B3B2AA61278792878E85A897B9A",
+    "section_mic_hmac_key": "FFA3F38A2550890AFF05E718065CC2A4AFE5EFC392122B4D0B12CA96AE3ABF58",
+    "section_salt": "D0E797023C8E23832AF2DE31413FECA5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "962353CB1C07FAF6686149577DCC75DB",
+    "aes_key": "E9007665D3AF271921E87A78F657A08D",
+    "data_elements": [
+      {
+        "contents": "DD845D55",
+        "de_type": 566
+      },
+      {
+        "contents": "00E752395426921A92C74AA1560976DA2AE78C9D33",
+        "de_type": 290
+      },
+      {
+        "contents": "CFE5A4F631D430593C281AF3371C862120623F7AC4",
+        "de_type": 179
+      }
+    ],
+    "encoded_section": "6E90138E7F8FE7DD8A3FBCF4B8077EF8542315911000F36F9FB7D32C243DF950E4B059E15F9190014A5AFF2BA024EEE91B2A86D089FB84084BF6D938B4B23C220B8C47E388A344199E965D14EB2524F47A4BB2ED0A2BECB01B63071D79034984E9A386C256902483D60EA4B5A1AB78",
+    "identity_type": "private",
+    "iv": "83B1FD00052754192029CB2F83E4297F",
+    "key_seed": "CCA7390D51E680A3B3072F1C9E70064FF16DD44C9D62A37B248C73FD833AC660",
+    "metadata_key": "523BB1997FAC71B83F2B60F42589EE95",
+    "section_mic_hmac_key": "0EE49B03E4B64FC2B250B0D2C4612D020494181E761B23ABFE594F97040CEF24",
+    "section_salt": "F36F9FB7D32C243DF950E4B059E15F91"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B67BF6F1252F5E0EF8816F15D301A39F",
+    "aes_key": "43407D6D91B96435811F30A50BE54FA0",
+    "data_elements": [
+      {
+        "contents": "0235ABB510F05341",
+        "de_type": 824
+      },
+      {
+        "contents": "CA9166B5",
+        "de_type": 12
+      },
+      {
+        "contents": "1FDEC6B16D164A545D8B64995C00",
+        "de_type": 38
+      }
+    ],
+    "encoded_section": "579013B31D8FF7387C6F88EA6FE4E1EF24DA329110004C349BCC1D0FA5EF838F76A707E05F8F9002ACFCF23B0B23FF24956B6407E513CB77D0D7B1884C904DF788AD961EC5FC1BADD31E34E027C38199C5476203E4CA0FAE",
+    "identity_type": "trusted",
+    "iv": "5AEBFCFFA3004CCAEE5DDFF854D820C0",
+    "key_seed": "E1B8FF062302C677E36789FCE15BF3CA6C1436D6A0B78E5D3B241F946678ABD7",
+    "metadata_key": "DD3F2168FAB2123B9450F54E86B66A11",
+    "section_mic_hmac_key": "BE20035F0C2A7E3BBCB38D949A8CBE3F3F1929D5658501B05BA0A14177EB1982",
+    "section_salt": "4C349BCC1D0FA5EF838F76A707E05F8F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "683691EE3E8A8E95F4787967AC569B94",
+    "aes_key": "4B42E071DEA02B52101DB6E24B78FA20",
+    "data_elements": [
+      {
+        "contents": "993E9EBC3173EA199AF4BDF4626FB2FF1AE7FFC46C5DEF",
+        "de_type": 21
+      },
+      {
+        "contents": "6D16",
+        "de_type": 274
+      }
+    ],
+    "encoded_section": "5590130DFDF1B79474D9F039992B840380FD319110000E05D59BD69C24AB85016E9CBF7513F39001E420DB5C31A3BDD1FE0E64CC581F32309E4F949318B591E46A84742D6E0AB75086EDFAD1D098CE4C78421F02775A",
+    "identity_type": "private",
+    "iv": "F35FF701EC37712BDC76295C2D1895F6",
+    "key_seed": "2496DFF7490AF44C61EF3D47167BA33E22B738B68C5D24EDEA6D9087BC4F0758",
+    "metadata_key": "CA1F7C7043728303F66ECE50ABA40834",
+    "section_mic_hmac_key": "00DED9280F77E5541D670B81449E4EEE65A2003D6933A1EB4F2C20BCC8453899",
+    "section_salt": "0E05D59BD69C24AB85016E9CBF7513F3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "196DC4CE0B019790D86640A73F7ABE96",
+    "aes_key": "8338D017A81A7041C6D4FF4F533046CB",
+    "data_elements": [
+      {
+        "contents": "445F36A981DE5A534274F1B8CBAD2954CF66016F275A3A",
+        "de_type": 500
+      },
+      {
+        "contents": "8A1215636ECAE1EFED9182A21900224066DCAFFAF0F9D42CA05D79",
+        "de_type": 608
+      },
+      {
+        "contents": "4B605D68943C67774567CB69957D827DDDCF7F2A280BE76CC6",
+        "de_type": 652
+      },
+      {
+        "contents": "EA46EDA7D7586C247F8101FEF4DDB2",
+        "de_type": 523
+      }
+    ],
+    "encoded_section": "9D90137836767DD16EB5D181B94393B7C9C4D49110005AA5A767B7C8F390E7B84598F1E6ECEA9001F907A884F970AA1379060520D3DC2C794766F852A608DED6EDA2BB11652C88B605D333829E95E4CDDA7F2EA77AEF23BD32B61F4DF8D2994458286871792C64F6D9BFB9DC6DB688719294349997D166BFC2CA7EF0C6ECB78C8E6ABE95404372904758CBEA1E5C7805E2DC10FA9FC6A28233C0569FD0A8",
+    "identity_type": "private",
+    "iv": "D977A2029F9F9599DD109B5F935234EE",
+    "key_seed": "DAF58A433FD1C92223C83A1D458C16A6D791C35B6D233A5B0802CD73481F6730",
+    "metadata_key": "A3611E071012852B91B390F2EAD716B0",
+    "section_mic_hmac_key": "1B677F76106044CF24E36F00B46DE7F48FC244D3CF907DECE2B2F39216579EDD",
+    "section_salt": "5AA5A767B7C8F390E7B84598F1E6ECEA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A6DF7A7591C801A5C966CA40B18C959D",
+    "aes_key": "7AAEB3A3D128791FEE4FD4872BE02E6D",
+    "data_elements": [],
+    "encoded_section": "379013F742C6E278A2ED6465DB07BEB12CFE50911000C7F758AF24AA696D1CB7D0A9D65C582E90043FA1230A35535BE33302A53CBA4418AC",
+    "identity_type": "provisioned",
+    "iv": "B445034001A0F499175F3C9EB0AE92DA",
+    "key_seed": "39C904DF3BEEA18AFEB7BE38D6B8E6069401DEAA759330C9DC25C4BE112CB5A3",
+    "metadata_key": "0ABF633959D782380E4E947D27A805AA",
+    "section_mic_hmac_key": "54AD001651F4FEE64341F38E740DBB8FF123F756D68FDEC00E8B7912B13CED89",
+    "section_salt": "C7F758AF24AA696D1CB7D0A9D65C582E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "88705DD1C65299C03EA7AA7496559581",
+    "aes_key": "5651F9236F827EFFC434AD9F005D28D5",
+    "data_elements": [
+      {
+        "contents": "45040FF6A5CDA9835F818B484CB70A07B9EF939F",
+        "de_type": 875
+      },
+      {
+        "contents": "908557DCC7A672E4559E4280BFE4B0DF7CBB9033D57420F140A2B585E2DE",
+        "de_type": 418
+      }
+    ],
+    "encoded_section": "6F90135B57ABF5DF4973307BAB1DB3C4AA6C80911000D91CE3FF1521638C0EBFB1C24543DA3B9004642281555CFA95167B0E6158D7F0EF0D5BD41FBE8A2DDC73B00B17998905773562C1BE381A66298FADDCF372204D30794F124C34FF7139623F41E957E4AF81A7379BE160E3B23135",
+    "identity_type": "provisioned",
+    "iv": "7FB08290F4083C8C63DD2DC495C1EB45",
+    "key_seed": "EC1290EF880DE14D1AE6D5B0F5A835DCB8DDEB83B7991C7FEA02F738A7C0C94C",
+    "metadata_key": "52C1C131236DC4C9DBEF317D1266471F",
+    "section_mic_hmac_key": "9695F74C29EA748DD4457C18285F53555A358F759EB1183889B4A15320A846F1",
+    "section_salt": "D91CE3FF1521638C0EBFB1C24543DA3B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F4DC0B55884950152C6F0C5C01475956",
+    "aes_key": "FAF30D19065FBD5D679D78E7C7EA0B92",
+    "data_elements": [
+      {
+        "contents": "5EBE58BB8F41ABFE605EFB39B48A4E7861EC80EC",
+        "de_type": 455
+      },
+      {
+        "contents": "FE52251B3CE9AD42F9A3ECC5A213D742F37415",
+        "de_type": 207
+      },
+      {
+        "contents": "85C6D2468DDC1B42286E73284C03C718DD3E1FC5FD3050",
+        "de_type": 556
+      }
+    ],
+    "encoded_section": "7E901315CF56AAA74A2A4F82F00092990E8814911000743CD7DAFB42FC38076A13E7E1F4177990044F324B65EF22A2272B929464CD7DC2C2D75872E649A1D7DEFE164D58E07B41F473505815C0BC34702A02C0E4F113866170FD1B15EB58D7994E0D33A206C0C44A2F092679874A1D1674EAEAAFD99E0FC19E6F744E0A7347",
+    "identity_type": "provisioned",
+    "iv": "FB564977E2D99426D140FD689871A2BC",
+    "key_seed": "A62634BC57E141BEFC2564C14B48325117363328C53CDA48F814D4807048B48B",
+    "metadata_key": "574603EF40BA6009E312223A51E8E2E0",
+    "section_mic_hmac_key": "86ABC6D41CEF55446F03A0952E90F664718C4822451D24A3FC27E2898C84EB40",
+    "section_salt": "743CD7DAFB42FC38076A13E7E1F41779"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "53234126DBD29BAF6097EC8D34317852",
+    "aes_key": "84425FEC4A06780FE396F9DD6040DEA0",
+    "data_elements": [
+      {
+        "contents": "6ACFE4B438C70672D7AB",
+        "de_type": 986
+      }
+    ],
+    "encoded_section": "44901360C0D9E68524187C1C25A4716FE61009911000B5E48CB9F2C2281E5195D2D12ABD09169002C39DB32F9F0C574E62CB199AFA336A185270C735884423B5B93B0DDFC7",
+    "identity_type": "trusted",
+    "iv": "D9119243F3D9CADDE86862B5ACEF8CD3",
+    "key_seed": "92A8C510E73A47699B0C22ABD2914EC022E9AC8B797E993DC4C6255EF66BE228",
+    "metadata_key": "39EA512E22B067754A318A3CCA5964C9",
+    "section_mic_hmac_key": "12BCBCEE50AD4DF7923CF35B1AB83583A1F4E502748556DF89A646200C3732FF",
+    "section_salt": "B5E48CB9F2C2281E5195D2D12ABD0916"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CEE234610E9993DC98C3D370D26F3DF7",
+    "aes_key": "51D4F92C953723A8BA9288131BEFFB59",
+    "data_elements": [
+      {
+        "contents": "3B1748685E7204CD0AC2500BB88742F69E53",
+        "de_type": 467
+      }
+    ],
+    "encoded_section": "4C901383131BCC9CB08EC986EEFF6504BA974D9110008FF0CEDF1640457BEF1F5CDA7D58BAF5900483D0B4BA6B8D9B80C5C9E12480C55424936562E3C68999DF6C4FC8256C9A0B17808194DB2A",
+    "identity_type": "provisioned",
+    "iv": "98603F701E96147E49F0A3F8C4174589",
+    "key_seed": "6532ABB7061C073E531A655B8F49D1D2311AEFF08E26F15B3CD5EF6AD3A960E2",
+    "metadata_key": "20F0584320BFF42FC597A41280E5BAC9",
+    "section_mic_hmac_key": "02101BA95A03412345F3552A5C163744CB1B4B1EAA3232E2CEABB4C862AF141E",
+    "section_salt": "8FF0CEDF1640457BEF1F5CDA7D58BAF5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "81A1175E23E1EC7240337AFAD6BC7EB7",
+    "aes_key": "FEDFAF2A6E7FC0E21A91E59BF8B332DA",
+    "data_elements": [],
+    "encoded_section": "379013A99129E69382B3F3FF02558A9A25CD15911000A7CF353E32FB509A39BF6698EAA646BC9001C2A2D18471E1D05CE78FB1967ED58068",
+    "identity_type": "private",
+    "iv": "3CB4F19740A089755A2925ABA96D2237",
+    "key_seed": "3B1D9789DE417E14DE7F5FF6AE8BE7DB5CB6617453BDD7FD1A216DEE5531D68B",
+    "metadata_key": "E5D8C1873FBC970ABDA794974C2FB35C",
+    "section_mic_hmac_key": "687C291B4FD7331659D26806502AE31343D972AE2E6E7AB83D647AA57C22FAA6",
+    "section_salt": "A7CF353E32FB509A39BF6698EAA646BC"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3002A18B6213325D185827101B8FEB1D",
+    "aes_key": "CA1C7AF04A4FD83E87A9E9E730289BF9",
+    "data_elements": [
+      {
+        "contents": "8699B5A78970A2427D55BD82D4",
+        "de_type": 656
+      },
+      {
+        "contents": "DCDAE8E9DF3EBFA2C6094F42E6C87791ED",
+        "de_type": 517
+      },
+      {
+        "contents": "F0B0161E1BE7ADBE7B8B72CB09CF4ECD8B7BA0859856F8FE24",
+        "de_type": 288
+      },
+      {
+        "contents": "B30B",
+        "de_type": 56
+      }
+    ],
+    "encoded_section": "7B90132C905FBB2C863EB4079E8B7BAD34C5839110003682E85568AAE0E82863BAD2FADA6FDD9002F9EA810B398843E60BB488546F7BE02E1B50043AD29711AACF37D90F6E1DF855915265AE4B2A4F8CB2253B76F8ED0E828288F2D47F06106F01A00C8F07333054F7EB00AC58C060BAF7F3BA9BCE4C6F031F9A93A9",
+    "identity_type": "trusted",
+    "iv": "B2B61B37788EAA1C5A3068450C9E7C63",
+    "key_seed": "EA552C43BFFF78260A603EE8B1C72EECA8297D7373D60BE107F83AB7C147D7D0",
+    "metadata_key": "E748E53B8B84D6D63DB643073B39ECB5",
+    "section_mic_hmac_key": "0E9B918DD78A73505AC657B398BB35861E5A69907965F1BF5D3306B59AB12A7C",
+    "section_salt": "3682E85568AAE0E82863BAD2FADA6FDD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F88AC9429FFC97BD5D9191F120126A01",
+    "aes_key": "1D105B146BD337AA7EFA523A71C9E1AB",
+    "data_elements": [
+      {
+        "contents": "00C5DF062D335BD726CACBC7A0B67B0B",
+        "de_type": 620
+      }
+    ],
+    "encoded_section": "4A9013DA781FD242A7193FCE5BD9F370AC8C309110008D1CDE6542BCF8E73879AC69688FF55990049CFE71AED546CA5745D7C06F4E689A5D8319E344654EC9495226DB8024DEE4182A8F08",
+    "identity_type": "provisioned",
+    "iv": "68DE89B24537AA1B093F7FA14AEA7D49",
+    "key_seed": "A6845D869AEDD2ED427829ADEB09807A8A5300A2675344EAECE93BEFEA0A6701",
+    "metadata_key": "2B83AEA0BE02DB20AAFD114A9C33D1C9",
+    "section_mic_hmac_key": "D5E0B90E46BBE6913978A5213BE51F2C9B9D9628FD986C96A5A82E1DEA8E073E",
+    "section_salt": "8D1CDE6542BCF8E73879AC69688FF559"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0DF16EC423548F3D0B47CD91150015E7",
+    "aes_key": "4C28452111DFF26A316FD05F3E3004A7",
+    "data_elements": [],
+    "encoded_section": "3790132CC5741EAB8595660B062128880D944291100091B18AAB56D0B536F1791EE8D2C9FC1C9002A188B363001A99AEF63B8F1E5E0CC9B0",
+    "identity_type": "trusted",
+    "iv": "5FE3E1280133A66360FEF6157D65A3E4",
+    "key_seed": "E030711E2C294C058D619E45659774C93E40067CE130DB3AD1B883FBC8E3B95F",
+    "metadata_key": "75FC79BC1F5F4A71F3919FD3A658B8E2",
+    "section_mic_hmac_key": "86756856EA5D1111E0D45443BC003A04D28D46FA3D9D06C19CF3BDD207CE17E3",
+    "section_salt": "91B18AAB56D0B536F1791EE8D2C9FC1C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D2CB7EFD8AC55A4B7782291095063735",
+    "aes_key": "E53A8922160B243CEBE1723E102DF96D",
+    "data_elements": [
+      {
+        "contents": "90E198FFA1A1771232A470B41C3618551F808B37619364450C82D0",
+        "de_type": 57
+      },
+      {
+        "contents": "AA3536B6255F1E330F33A40BFC23BF0BE08BFDE03B278FAB353B55BF",
+        "de_type": 475
+      },
+      {
+        "contents": "ABA930A2B7EA27DDAFF5",
+        "de_type": 520
+      },
+      {
+        "contents": "CB27A674F14A84E844A2DEE7CBFF32C1ED",
+        "de_type": 333
+      }
+    ],
+    "encoded_section": "9490135104FB10A397689EB08C2D4E9BBB0C1E911000979A8AFA25DB21F7EC13D146CFC1410F900460CB56ABE59BB2DC4C6C17EDB2CA9BA8D3214665237A16FE0A4124A3C5465CFCBCFAC32C1DE41A9D42B99C8D8D36EC9D3653CE7F286A0907AE9A8D270E3DEE03F7442D7DA18075C6620D6292861C1FD97902A798F643343DA5F9879B71FE88D1D6514F1B41E9A209748FD124F0",
+    "identity_type": "provisioned",
+    "iv": "4C1351CC073E7B86D90BF026FF0807FE",
+    "key_seed": "91980B5B07EF7D557FA8F5E60411D2A0F2F449E1F9FA2631250BD86E5C8B0142",
+    "metadata_key": "8104BB265F6A7B5B61C316DB48EF06E1",
+    "section_mic_hmac_key": "0DF5F3A00DB4D6AFCF99FB6826F9DC765C289B7937587D1461D825FE4D6FAF41",
+    "section_salt": "979A8AFA25DB21F7EC13D146CFC1410F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B184B09431BC6D20C3CBD8D108EC4E2C",
+    "aes_key": "4EF35CEA87B3BE66A3C3D72A64E4CA2A",
+    "data_elements": [
+      {
+        "contents": "F02092",
+        "de_type": 129
+      }
+    ],
+    "encoded_section": "3D9013AA922B9D3EEB866D6046657CC594A33D9110002A4E2A1E8DA81FEDF04B8250BA2383A89004B6DC8634A6410E0FD602D04433BC254A51A050D6419E",
+    "identity_type": "provisioned",
+    "iv": "5ECC70A88EB4E67063D4E0F57831F4F4",
+    "key_seed": "098C5CF53518E9D1F2F2D8D0AC948B9B8CCDEA905F999934824429C0426E34F5",
+    "metadata_key": "7D82E485F54A2C30295125C2A1984EE8",
+    "section_mic_hmac_key": "E8881B4E5CF4A053EEB38D0D8B18C7853E2001926A46471B75B864B23DECE677",
+    "section_salt": "2A4E2A1E8DA81FEDF04B8250BA2383A8"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "47452213CC5FDC391929EEE09F724D0C",
+    "aes_key": "24274A9E54725581BEA8C3AD99D6FB45",
+    "data_elements": [
+      {
+        "contents": "55",
+        "de_type": 280
+      },
+      {
+        "contents": "C5E7F5858DE92DDC1EF5A8",
+        "de_type": 403
+      },
+      {
+        "contents": "D111",
+        "de_type": 802
+      }
+    ],
+    "encoded_section": "4E90137CD48DFFAF75C3050516CB8439CE77D0911000C7E763251945F46C637602F94E61A62590029B749B79A1E7192F10EE205ABD363E48F834C31AACD41E39E7B104C201C6D805EF464DD0C5AD59",
+    "identity_type": "trusted",
+    "iv": "FC666787DA6880BF68AD87F281129436",
+    "key_seed": "16376750ABB42AAE45961441C9251B3006EB249781EBF712994AD8E297BFB3FB",
+    "metadata_key": "BC8BA065EBBFD5F28D57B63473F648DC",
+    "section_mic_hmac_key": "D050DE0A2C557BDF173F3820B540F059F4F902A963D23AB07A27E97341433925",
+    "section_salt": "C7E763251945F46C637602F94E61A625"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "397E5C2A10FEFD98E9764BB2850F9F70",
+    "aes_key": "B86A8C3BEBB410A7CA7937C27982E5A5",
+    "data_elements": [
+      {
+        "contents": "4C84393779DD47BB70185D28196CE896331EAB",
+        "de_type": 999
+      },
+      {
+        "contents": "2DAE45BCA9D994FA2F8642E698B26E",
+        "de_type": 224
+      },
+      {
+        "contents": "6CC6616B25874F1670FA2664C467A442CAF6DA681FFA8B",
+        "de_type": 588
+      }
+    ],
+    "encoded_section": "7990132E1215A7A422203DE07796127DB3749791100050120AFB3D493DB82A96A0EBAEDD595B9002290C00E97BAC5F0AE286B2F1B3EB9C9F65554CA39D2F0BEA8DC26C3C3FF3877C260EAB0C966B6D187F472E076B43ED87238C272FE87723A973DE2746FC47707E4646665461E0CCEF8D72E5AC6E410B53D4D4",
+    "identity_type": "trusted",
+    "iv": "671819F4C129CEA59570A45E40042DE8",
+    "key_seed": "42FAC575479AF4CF414FD25107A31CAEB82E876F63F2AE64F158B1193C1CE4C3",
+    "metadata_key": "75A7213D0E26DF12A237EA4969C2EA7A",
+    "section_mic_hmac_key": "0A42A390A90B39228144B934135AC7F799CF4FBB70BD8414F1687C8530F94931",
+    "section_salt": "50120AFB3D493DB82A96A0EBAEDD595B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BDDEC437FBD471B4309CEA1E0151736B",
+    "aes_key": "56B2E5280671CEBDB46B21FDEAFDA8EE",
+    "data_elements": [],
+    "encoded_section": "379013AF79FB24D9AEBD4EDB9BCC1B15E3A610911000AC735789ABF3C926FE9787D8124F26039004EB9FD655DDA7116ABF7A20E5D0BDA234",
+    "identity_type": "provisioned",
+    "iv": "BD94284A1DED0703E49EB2A616033C17",
+    "key_seed": "D972FC64B93F5C9942A0ABC8646EE78A152FBB8BC0704F52FDDC48B7FF56CBB8",
+    "metadata_key": "A392A526A7068B94B1E3E25A0429F56A",
+    "section_mic_hmac_key": "922DBDD6A4F8865AD9824AD8FC62B30AAD2F8BDB93D3BCDEAACC3305E32A19E2",
+    "section_salt": "AC735789ABF3C926FE9787D8124F2603"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3A9B77465966324AC9F3290D2369987F",
+    "aes_key": "7E5CBD3F2102129DB706C8EE75A333EF",
+    "data_elements": [
+      {
+        "contents": "847502E89C450B3FCE072D156090AD6C52B2D8",
+        "de_type": 645
+      },
+      {
+        "contents": "761BBA3496528070633DE149451D9AD4E3558F7476",
+        "de_type": 537
+      },
+      {
+        "contents": "AE9C840B555C",
+        "de_type": 582
+      },
+      {
+        "contents": "F4703CA172",
+        "de_type": 113
+      },
+      {
+        "contents": "DD2959D22A5E",
+        "de_type": 365
+      }
+    ],
+    "encoded_section": "7E9013F9BDA274AABFD8D976598D24C4DF68339110009D4C783A6ED077F63A108F3558B4FE919001677C1A3E9ECD221759776116DF4219E28E1D79E7A658B09286A4A54EABD817A44B57078452B9E6957E7B49D0D73FB94970474298DA5CB0C6C2908BF42578F79E5EC1992A89A39264D9B49F1B5F559DA0F6C6D9314E8516",
+    "identity_type": "private",
+    "iv": "CC837603730CF2CFC59BE454DBF623BA",
+    "key_seed": "282A075FC7CF3101EE966ACAC968FE4841AF6C4531A5F2655E301C611FA6F075",
+    "metadata_key": "2DB58866CCCD71AB219184D30AFB8ECE",
+    "section_mic_hmac_key": "1A735D24B9F9C6A3ED6D2C01C9D797EE696EFDE44D92D2E7AC9C01BE5E18C915",
+    "section_salt": "9D4C783A6ED077F63A108F3558B4FE91"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "62CCD10524DAC73729C1C47D671A9B35",
+    "aes_key": "6B3EA1B46FAD6834DDC93E9C98BF83DA",
+    "data_elements": [
+      {
+        "contents": "B29B0EA86E6A724DCCAD1FAF",
+        "de_type": 68
+      },
+      {
+        "contents": "FB4B7ED6",
+        "de_type": 380
+      },
+      {
+        "contents": "87E233EA396E891F9DD432C299",
+        "de_type": 36
+      },
+      {
+        "contents": "ADFB0CEED7C144A0C6EEA37805ADD5D906F9D24009",
+        "de_type": 584
+      },
+      {
+        "contents": "75167BC12CE8255FEC4FDABECD6C",
+        "de_type": 650
+      }
+    ],
+    "encoded_section": "84901321304B13B0CE78A9C654EA01BE27EC87911000356CC7D48B00218080567F86C8C226B59002B265CCC13ED42B84041556DD88578525CE07A7AC025EACA3F2F55D0F8A26C3F2A8B63D8B00173466BF45EE5F56CE1B3BA5A388238E532DBD0CE43823A12591752022676716BBBA2696C01A2E07367068170CEA04E4D675821C3AA19184",
+    "identity_type": "trusted",
+    "iv": "DE1A81AF6B53D4D1D4D50534FEE5254C",
+    "key_seed": "38A92224674C6F2BE57B36D8A191E576633DF9BA3D76DD32F70D72D415878DCB",
+    "metadata_key": "C140E14318193C8ADFEC1D2CBFA8213A",
+    "section_mic_hmac_key": "BE625934853E588137352DFC9C3574A129F96C993C4221C8990D91FB635B4F67",
+    "section_salt": "356CC7D48B00218080567F86C8C226B5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3E4E649CF35F5DD9CB2AC8E02E80445D",
+    "aes_key": "07A72FF7D07703E075A69D477BAF0177",
+    "data_elements": [
+      {
+        "contents": "9A68B1D0835C59498A7B483199",
+        "de_type": 698
+      },
+      {
+        "contents": "514E4A96E7057DD993624378D31FFA9CECF7E7B08BA9B4C73F",
+        "de_type": 405
+      },
+      {
+        "contents": "36364E971DCE98A7C23B164608BD1D4A410B79CFF32CACDD",
+        "de_type": 584
+      },
+      {
+        "contents": "6D6653D73680A3DF70FC0A0B098913CA93879CAFBC1845DA745E",
+        "de_type": 331
+      },
+      {
+        "contents": "15DD526DC963112361A3",
+        "de_type": 865
+      }
+    ],
+    "encoded_section": "A89013CC1FFAF0DB58D146DFD9B332AAE9C0F29110001730E6F86D0561262F4E315CBAFF7A9790025D2C78819ECA218C6938BAF148CB6A981A2D0884BE9EF00D8E5680E2636626FCA4B60503C6C524ACAD4306DCCCF2BB36DE37EED4B651E8C4992C87E3EEDF4E8E6C1BA2298791412E1275FF53DFE8C771C880D127D47815972F804EF4CB42CB7C8B73A89CFDFADF42BE03DB2F21F1D92EC5DCDF46E58C17A6A3FC5F92BCF001819E",
+    "identity_type": "trusted",
+    "iv": "F869FF07F98E32C0AD55CEF91658D60D",
+    "key_seed": "5D1E0AB8AF70BD4F1F5E7AC632B46F0D3976CD3409D96D6336FFC71E0D0B1A39",
+    "metadata_key": "4745EB0C29D3829EA920471E4CF7FA2B",
+    "section_mic_hmac_key": "A542C3B2AD831E3212C0A66B8F78C7F1D4AE757BCC53E59EB57677DCD3B2289A",
+    "section_salt": "1730E6F86D0561262F4E315CBAFF7A97"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0E7BD813499926A0801C92B1929A3591",
+    "aes_key": "CF5EAFF5A6CF1C2D8D38957F9E572031",
+    "data_elements": [],
+    "encoded_section": "37901304FF4DE46CD91B9856A4E7F1BBD4C17391100006366EBDDDB9BDC2F6571EB0EE6D56079002C75CC331866205C21DC58413AEA40526",
+    "identity_type": "trusted",
+    "iv": "04A19C41665D6BEB5815BFFC82D2F20F",
+    "key_seed": "A2C54EBB8A466BDCC870DC0F024B654CDF6065B7982FF161DB4309726E8A9FEA",
+    "metadata_key": "40D555232C844D0DB6AC3D8B67C2106C",
+    "section_mic_hmac_key": "1B5B2EA645019085A538706A3639AFB2EF7F9DCE0262A9D156DE539C5887A246",
+    "section_salt": "06366EBDDDB9BDC2F6571EB0EE6D5607"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A904A75B1FE8745F8A7487D6A1F266C4",
+    "aes_key": "299B6E8D83C5F4C5FA5D7191776D5B74",
+    "data_elements": [
+      {
+        "contents": "9D8ACA4EEE438F77F1ECF161C93E79C2",
+        "de_type": 25
+      }
+    ],
+    "encoded_section": "4990138B48C8DA765DA321BF9E7F74E018BCCD911000D5DCA899C05920FBA96B57FD6BC22BA29004E9045654EA86C9EFF8533142B7EF6AA31D947E6A37AA8BEAF9C4072DFDA603495A11",
+    "identity_type": "provisioned",
+    "iv": "F7C11436DE1634CB790BFEFAE15A83E7",
+    "key_seed": "C2DE50F20E7A123F3221A92B1BDAE0BCC707FC399081324F41A2CD10D6E9DB19",
+    "metadata_key": "2561C501E52AD7DDDD24E5578A2BD779",
+    "section_mic_hmac_key": "510E4C8F9ED86CCDF0EB2F6E1282A8AD8087431F380602848EFAD4FA30A46662",
+    "section_salt": "D5DCA899C05920FBA96B57FD6BC22BA2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3A9E993AA4BC248E9A7B18624A78A94D",
+    "aes_key": "0CF2C9FE3C3CD3B9A51293022090179F",
+    "data_elements": [],
+    "encoded_section": "37901393A3A8C7855ACB50AB3802D631C9C1F191100049DD85316190F271FC5BB2F620EEF235900225DD3667C9BD35154CD7B85A46923769",
+    "identity_type": "trusted",
+    "iv": "C3A5CDB16311D0A0FD03C473522159EF",
+    "key_seed": "213E324AD5D67474CB40E6F49657F14EE29D80CFEDC37794DEAE1485807056AB",
+    "metadata_key": "8B87195CD4A305E6383792D307FA7002",
+    "section_mic_hmac_key": "4826260A12292DE75684A3CC1020AC5F7D8F469BF7B7EFC3A9351FC22BAD1CC1",
+    "section_salt": "49DD85316190F271FC5BB2F620EEF235"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9B07AE29D7E24466EDAB0C5C73C14BDC",
+    "aes_key": "07C40F75E92319B0204F538597F215D2",
+    "data_elements": [
+      {
+        "contents": "F22339BFB847E90ED663BF729597FA326FA5F62AEF5F6C5A9FB3",
+        "de_type": 403
+      }
+    ],
+    "encoded_section": "549013564A1558904D7ECE81BCD9C42924A30591100005233215A686F5A39C58599759C1A43F900274A22947028C3BB7FAE0C8534773058C000D1C97B23B36A2670BDC8F618CEB1AFF283597F687C9112D84AA87A2",
+    "identity_type": "trusted",
+    "iv": "FA40033D2CD29E29AD8C494507B1612F",
+    "key_seed": "F9D1973B9579CAA560918B5AEBFF76FA48AD3DC1E0051569330F4D44F2998A0D",
+    "metadata_key": "AFB9AF8982A61787B90548314BAB69BA",
+    "section_mic_hmac_key": "AE7047E264D302914C648144850D03551C69C6F92EC92263B0942F4115DDD4E4",
+    "section_salt": "05233215A686F5A39C58599759C1A43F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "AA66A68B0A3E886BD9F44096E51B4D5E",
+    "aes_key": "316B88C5751E2FCD16B56AD488855D6F",
+    "data_elements": [
+      {
+        "contents": "3C10A90C59A5B3AB5B927DC7AE03D4A0EFC634808E12A7AD40465EBCB5",
+        "de_type": 483
+      },
+      {
+        "contents": "F8A58360070B908E24356B895258022AADEEE54B6ACA714AFCF7C349",
+        "de_type": 88
+      },
+      {
+        "contents": "A082",
+        "de_type": 230
+      },
+      {
+        "contents": "2E",
+        "de_type": 484
+      },
+      {
+        "contents": "67B2DDE6",
+        "de_type": 116
+      }
+    ],
+    "encoded_section": "849013BCCCC132898E376863C442E9D8411187911000FB535FD638820271787F1073F7886A1790020977D491E02CBE4C40A898A2B0132274D0213C6922DC3C44998456DEAD435761A0368FBC64137FFF54A12F6620BE0F06E71D2BBAF4317948F67907E841EEDE7DBEEC5EA81AF57D7A9C69390865382019406815C5CC1A747EC60A74FCDD",
+    "identity_type": "trusted",
+    "iv": "3D7C449B089A03FEC65839104E037743",
+    "key_seed": "6C82B15F2C059B5835E16ABFD28FEAF239E1A6E57AAD960CB852488196620D8D",
+    "metadata_key": "9955C2F5670EF9CB149A40EAC4A3A3E1",
+    "section_mic_hmac_key": "B19CA117C40072B06E08437F1DD8F48ED95C857460627636E99E04D3958F5E87",
+    "section_salt": "FB535FD638820271787F1073F7886A17"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8C90321F97287B8A091727E2083D892D",
+    "aes_key": "409C8416E73CDE13637F2E461F74A4BB",
+    "data_elements": [
+      {
+        "contents": "BF7419DB336DB433E3",
+        "de_type": 71
+      },
+      {
+        "contents": "C7437F5427AF382361526C55B748240F486BECD95871",
+        "de_type": 173
+      },
+      {
+        "contents": "FB6A6EDF9FDB3F",
+        "de_type": 778
+      }
+    ],
+    "encoded_section": "6590135BF61E4E7A9A3C8B73569D2C23DE591C9110009759D1DB407678D65A146AFD04322D7A9002915E8088FE74A7EA709194BB7E82B3CA9D4A67118CB3CEB441029EA23771ED3FB2B5F2077913AB93D66731AD972BA9B6DFBFE8420AC29D36AD7619E8741F",
+    "identity_type": "trusted",
+    "iv": "48F689048B5CA464B88E0C399ED506A0",
+    "key_seed": "FF7801A75633E88D16C9DA1732FDDD7662C9B1F484E904B53C1171069A0C25C5",
+    "metadata_key": "C34841270E8866200C48012EA3CAD332",
+    "section_mic_hmac_key": "B393831A2B040BDFC47CE74F8192998613BA5874343AEF5241B6914809AEA3AF",
+    "section_salt": "9759D1DB407678D65A146AFD04322D7A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4680C0AB3A162A977F1C57FD6ADD5D6F",
+    "aes_key": "ABD9FDE4027238879ACC0E31B1DC8A2F",
+    "data_elements": [
+      {
+        "contents": "2CAB91011DE905C17B63F3ADDAC747F301C0775F1B06256F0DEF",
+        "de_type": 580
+      },
+      {
+        "contents": "98C4592D01DE564D0360A35C983D16A9200FBD625394BCB770FE927F",
+        "de_type": 345
+      },
+      {
+        "contents": "AC22AE18E6DFF87F2441616A3CCFEA17DB0262E00C5A",
+        "de_type": 116
+      },
+      {
+        "contents": "5AF4697ECF2E9560DAC164049C4C39C08E8038E8C7C5111D096737FE12",
+        "de_type": 505
+      }
+    ],
+    "encoded_section": "AB9013A9E3A860FA238886DFF136BAC79FAE34911000D56769B70F704174E61314E11917885090011AAB5050921F7F0C7EA625DF749AD07909D6B5200976E5F635FA2BFDB181F4D0FA37891826DF9F37580457EB33017A35964559778C9EC2839033159CA8426821731FE0798DAD92825ADF33234AD09F3133A6DB08F90A87FAF7ADC7D149EC4F65D29E5E8C677DA82642B290E287C48D6DD8DC76B1EDB530DAAC4F1BED596F2FAE1C5800D2",
+    "identity_type": "private",
+    "iv": "D88E5CD358B6FDE88C0BDA86B4C07FA9",
+    "key_seed": "FBE039E8BE5927062F30F03F84D8C8F3EA8405E02AD071A5464764457B2CA67D",
+    "metadata_key": "8B6C89F2D5ACB0DD38EB8969A8AFCEA7",
+    "section_mic_hmac_key": "FB915D2EAC4E6D75ACA0FFF189B2B4CA9092970C105D455A9850B9D492DD8322",
+    "section_salt": "D56769B70F704174E61314E119178850"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "99EA2AB3143DE296D87275E3796EA726",
+    "aes_key": "B5369D466D6D66216E050B46C9626E9F",
+    "data_elements": [],
+    "encoded_section": "3790133258DA52075DC6CF650B3F7487D0991A9110002174376D9188577E3AD67895F40932219001E35CAFE972108A18170DCC16E8EC167A",
+    "identity_type": "private",
+    "iv": "620B7155C2DACCD4E172A0948B739392",
+    "key_seed": "4963C0F1DC3A169ED67E6D81873F3D8AB7C56776FEE18E8E24B227951D98F67B",
+    "metadata_key": "8AC856F31EDAD3C1D3B3ABFE13C69367",
+    "section_mic_hmac_key": "11EF3FB260DA29B8A761F75D3D1DD5258FF416466FEDEF1498754AD7B4F8F3FC",
+    "section_salt": "2174376D9188577E3AD67895F4093221"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6EFE58B2D4AFF119286E71653FFAFF55",
+    "aes_key": "1827305AC9AACA2A8BB69F7C721D9AEE",
+    "data_elements": [
+      {
+        "contents": "A51A7BFB530482EE1A59FC50F9A29741189B68A6AE939F",
+        "de_type": 549
+      },
+      {
+        "contents": "6B5F83744DDE1AA1C365C2480782B682866505D7549709",
+        "de_type": 717
+      }
+    ],
+    "encoded_section": "6B901339002EA6193FAD09FDF604C4E349E59E911000699CF720707E6FA5CE226F88AF8BAFED9001E27EA2E4CCD2461B944DCEB37E4B4B63B5F711F1A9C5DCF9A41A192CA9C5ADB735391DD0443C3C955489CF2AD75226E8EA1357595655BDB3E3601E7B33E5D8066B3F37A7",
+    "identity_type": "private",
+    "iv": "D364E25A638A624590BE1FA2F096594D",
+    "key_seed": "B5E64F3EEAB9749EBA831D592F1E9FC5AB925C3C5E0CEA6E129C6B8B8B4C342D",
+    "metadata_key": "5027B1E2C7F8CB8A2D11ED67C651EE3E",
+    "section_mic_hmac_key": "92BC5538046351A15ECC14E24E3982932E910A143E5D28F9DBB38340FA03DCF1",
+    "section_salt": "699CF720707E6FA5CE226F88AF8BAFED"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1BCD64B4EED1893C32BEF93DD9C971B3",
+    "aes_key": "DF5A125BB90A2D17FBEDF9B7C989D191",
+    "data_elements": [
+      {
+        "contents": "E8F6BC0AA73516D2AB139F6FB8C9E48BB6F580EB70D3AC91",
+        "de_type": 87
+      }
+    ],
+    "encoded_section": "519013835800D943EF3DC1B88575BC5477D0B5911000B7CFA8B2DB92728DA2812D9C0EDCD07590012BBEF78BFE3208F7DDF21AF44FF0DD82D580026F9F770A5E9F40C02C24C2E36456528561D0009C2B26E6",
+    "identity_type": "private",
+    "iv": "919E1A3794638BF621ECFA33E8A6DF57",
+    "key_seed": "03678FFD5CBA3537E25A891FAA50484AC0AB58A7D035D8DBBCB351D8643BB57A",
+    "metadata_key": "D2D13AC88CAB6E55984166209D685D96",
+    "section_mic_hmac_key": "2E0D2D30096D2F381F6C14F8393BC8DF670B3E975FA2BC937C10976F47BA5CFA",
+    "section_salt": "B7CFA8B2DB92728DA2812D9C0EDCD075"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "57CAA17E3435CEE5F8CDDD11F8C71927",
+    "aes_key": "FB555F776983D6EF70245A2A74330862",
+    "data_elements": [
+      {
+        "contents": "4D3378D9DAC41CEEB8BB45129747FCCCB813B17E1E046C319A6A",
+        "de_type": 687
+      }
+    ],
+    "encoded_section": "5490135808863DB438BC813BB23FF000567C7F91100040EB6E953C154ED8BA7B70AF72AA84D290048B21A3E3351576DD8C0DF85AA924B4F0CD3BE49C8844E49ED2F1F4852480C165BA80DEB502D0BBFDABB448FD07",
+    "identity_type": "provisioned",
+    "iv": "122941F68AA7A85356610AB70E8F7347",
+    "key_seed": "77BAB0D78ABC0316711301212D5429493421B2F32FD219C784512871C37891E1",
+    "metadata_key": "55E20264C236C78308649B3A717CDF5D",
+    "section_mic_hmac_key": "9299E65289E576D14465C3782E08EDFA71F7F0C4B96DF5D9A027A20C09D44F32",
+    "section_salt": "40EB6E953C154ED8BA7B70AF72AA84D2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "918EC773233875D9A8F95ECBAD0F1FDC",
+    "aes_key": "9C727238CA3610D54D119E718CD06BBF",
+    "data_elements": [
+      {
+        "contents": "62F33A8DC96064763369",
+        "de_type": 146
+      },
+      {
+        "contents": "692DB5463436975E424A40014D6B7453611B22431310",
+        "de_type": 87
+      },
+      {
+        "contents": "36EC94C156296D1A90",
+        "de_type": 121
+      },
+      {
+        "contents": "9F399BC4",
+        "de_type": 102
+      }
+    ],
+    "encoded_section": "6D9013C4073FE83CA7F9FEEDE4564CA14A7D3A9110008AA71BBFDDBD5BDFE769C6AA971E20F690020F902663091D7F10A3326C4D6B7AE0CE21D0C7958477125C301C53AA265F8A0B76B38BE77C63049ACD8FABDFE029010F95D25F182016A122C041FDCFD2A36878BD53F608C7C1",
+    "identity_type": "trusted",
+    "iv": "8161FE7F58DD7CB51C94E893C3E77E37",
+    "key_seed": "7689440ED67C78632C580EB736AD5409C5B70833835188FCFEF762CA0ABA64C7",
+    "metadata_key": "CEE36091D48B6A6933349BAAEDB06D3D",
+    "section_mic_hmac_key": "A6C8112D9A7DD48D4AF3531A38C820AC7FD247231F4F433E8B11238B7EA5156A",
+    "section_salt": "8AA71BBFDDBD5BDFE769C6AA971E20F6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "DB711D39B427852337FA71D91CF55BC5",
+    "aes_key": "A81B8FC02A525DCB4C2ED8CDDF285900",
+    "data_elements": [],
+    "encoded_section": "379013129BADABE83AB0218BA8A7AFA43684A19110009DE7738771FABFE6960860DEB9DBC4879004259342BAC650F527B4A5A74597FC93FE",
+    "identity_type": "provisioned",
+    "iv": "B504D33DE1BB8832C1EE8AC54297D743",
+    "key_seed": "ED24BBB04F28035C8765F7FCC5F1453E85D4781DD1640F498A9619D56ADFCA55",
+    "metadata_key": "16E55700FF5D1BD29430088C8A23C42F",
+    "section_mic_hmac_key": "10B0CAA2CE15EDEE6A19C905EEDBC6F8C082C77AE22A83DAE646614B1AED0493",
+    "section_salt": "9DE7738771FABFE6960860DEB9DBC487"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "15ABF702A2921EC4DA6280535C861765",
+    "aes_key": "22CAA40B3717F99A3FA4B2A1E7055588",
+    "data_elements": [
+      {
+        "contents": "6064E54E",
+        "de_type": 130
+      },
+      {
+        "contents": "B513C3896B41F8954528634301C2D8",
+        "de_type": 319
+      },
+      {
+        "contents": "1337431F91509A4888A9F8853595A5546D1256650020D6BF151A0763D534",
+        "de_type": 276
+      }
+    ],
+    "encoded_section": "7190136F47402C06F69E2F7BF935775D518D1191100026443E2A7BB7B32D564103572A0CAE959002A855F03507F04308929B2E733D645113B958A3DEB579A55DEF36E35F3B62FA005BB752019A3556269FB98D95644DDDD59CE945E8E9C5B9CEA3057392DFC1C1B818EE361431C2E0C6E3C8",
+    "identity_type": "trusted",
+    "iv": "253F2EF0C8214125C7A3E1D209E540E7",
+    "key_seed": "F82F3CE7CC922B30FE16EACE6B79D0BC9ECA63849C981B97FA704A23CF9AC8B7",
+    "metadata_key": "63DA0B806E8F3FDADACCFC2312159E4D",
+    "section_mic_hmac_key": "B3B26A8FD11B78B0AE02C2F6C0B7196539CB880B46059BADF89752BB504CB95A",
+    "section_salt": "26443E2A7BB7B32D564103572A0CAE95"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1CABC21DB1C0C240529AC3ADB636F5D1",
+    "aes_key": "2F97C4674DF327D354244B462E131D1E",
+    "data_elements": [
+      {
+        "contents": "3A8A8E0EA56B61160E614B6125C829",
+        "de_type": 828
+      },
+      {
+        "contents": "40A3AA30E70403F1B8CFD4D830",
+        "de_type": 267
+      },
+      {
+        "contents": "5D51B6",
+        "de_type": 335
+      },
+      {
+        "contents": "81D0363DE104",
+        "de_type": 110
+      }
+    ],
+    "encoded_section": "679013332ED64969A6D47284A3DEEDAFC7DAE19110009301091AC070334AF39D4CABBE2E483C90044E44E6E6C66C28D442F35A77230D9B10B07ED47776CC060B127913850E739C8FBEB68F9296788975DA87970ABB72936522DD38FA9093C98EF5E501B3D30D1658",
+    "identity_type": "provisioned",
+    "iv": "18685A3BE2ECB910DD222B30E86E51E6",
+    "key_seed": "DBFFECF4EF406EA2C2EBF09122890602CF3F8C1423E72694F437ABE9A82A33B6",
+    "metadata_key": "7AC9AC9E384723D87516CC941478E97F",
+    "section_mic_hmac_key": "C30AD5035C7291B24097C6E6E34CDE7922C49A0850A2BB51A902C9F8428DC220",
+    "section_salt": "9301091AC070334AF39D4CABBE2E483C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "18E66C02947BCD1286672E1283BDB6BC",
+    "aes_key": "1578A1F187076139B90136E77F5325B4",
+    "data_elements": [
+      {
+        "contents": "2C4D33C31E849376984F5DE450BE7BB9",
+        "de_type": 838
+      },
+      {
+        "contents": "73EED2D77B81D9148ACB2086BF5CA2076E8AB12A8E415E9063E3F7",
+        "de_type": 870
+      },
+      {
+        "contents": "4C5B",
+        "de_type": 222
+      },
+      {
+        "contents": "993987B210C00D832A84D6C2",
+        "de_type": 786
+      },
+      {
+        "contents": "0B292F6A1F2C4E7DA470",
+        "de_type": 158
+      }
+    ],
+    "encoded_section": "899013A4E785DB6CFC84659689C9721A0681C59110006A298D4CFE290BC52CE0399AEA97C85290042D4C1056B7D2A834275E94A129445B1D230D19CC4DFEB321DED2C89D5565F5D2F3FBE7296E0A8B1391D0C17CB73871CA9DEEE1E1856DED3B5E4944B5473963DF10C107D0260FB71335C4C6CA0132465C56393F7E2B317ED72CEFD4FD4E4C4EF7F025",
+    "identity_type": "provisioned",
+    "iv": "D00CCF4974F89E0EA8E4AEA7B8B6A4E4",
+    "key_seed": "3EEEC66412789D30B844E8BAB2DD02F80DA4B193058C1F094B7F00C1CAEBFE31",
+    "metadata_key": "D2BD10BCC3E0A1341A1E5CB881FC46CA",
+    "section_mic_hmac_key": "07783CFD28D58E0E7E7A58A427BD526F8A23CCDB6D476C893A6577BFC8ABB9D9",
+    "section_salt": "6A298D4CFE290BC52CE0399AEA97C852"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EEA784B50903BB1F3867A3309D3BB38A",
+    "aes_key": "F1584E98535678BA37B4B88C1A1DAD6B",
+    "data_elements": [
+      {
+        "contents": "B065975A23",
+        "de_type": 776
+      },
+      {
+        "contents": "97D0D8C01773B81CBB85D4654D48F679E3",
+        "de_type": 64
+      }
+    ],
+    "encoded_section": "529013FAB685D2A4E8D074AF6CC499253657A09110005BCF7C32DB1AB7213B08D65BEB96C64090043C30F732BA2C311688F57CCCEEBF13239AA81DFC7AB291C3C348B1FC0188CD137DC2199FED907A60AE4E89",
+    "identity_type": "provisioned",
+    "iv": "2417AC781347135F7C4AC5E3FF5610D3",
+    "key_seed": "A4C8D1AE27A88EE937949D1DDE2C4812AA80B3B1325E85057DBAB45B89890E92",
+    "metadata_key": "98A2EF99CDCF4366703D6CA384F606B4",
+    "section_mic_hmac_key": "818E8767FA4D512C0A422AAC5298D9E6C492AA82728538F3E8563D48113667D9",
+    "section_salt": "5BCF7C32DB1AB7213B08D65BEB96C640"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9FFCDC2887E86DD97B1CD7CC7C926E61",
+    "aes_key": "12C10DFCA2552603C1FDE479C2F70930",
+    "data_elements": [
+      {
+        "contents": "43D56D17A8F5E03D91BCF4E8C3701AAC",
+        "de_type": 233
+      },
+      {
+        "contents": "DD441A6FD3736A718759ADCECDE1",
+        "de_type": 388
+      },
+      {
+        "contents": "FE2437CBB6710097203765E501C075A7BB84D0DE6BD7",
+        "de_type": 319
+      }
+    ],
+    "encoded_section": "749013BD1B29276423429D5C32272760B00E74911000A69871C2D73E23EF30656C35210BC89190029822466D8A6CB94523F1F44D254C56B91C690540A37F233A1AE710FC4543D795BA11ECDC085FDB87B25BAE832933A76BFED60786C41FC80AB6303E572681F54EDF82F395336E6B5BB2F525D963",
+    "identity_type": "trusted",
+    "iv": "B7C4C6B5D46933E315576FB563020BF5",
+    "key_seed": "6F549E0C976D9C561F18C3B7E2A11E1DE9CDBB3F5D961C8D897C4D62D7237D5D",
+    "metadata_key": "3CE3E026CFBC07F235AE24EA5D5488C3",
+    "section_mic_hmac_key": "D669B98BC3C5408BCBDFCF32F721B5958F42F8D0121B4CF506D250F7E9193564",
+    "section_salt": "A69871C2D73E23EF30656C35210BC891"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "18FB5256D82A557D54A999C1A04077D5",
+    "aes_key": "BCB3BA61D328D7EFB9438222D888AF99",
+    "data_elements": [
+      {
+        "contents": "AF5BC7C723B9708DE8AE0F997685FFC56598015F233DBF1E",
+        "de_type": 978
+      }
+    ],
+    "encoded_section": "529013AFEA8B9B0A8FF8674527A31C8D5513D191100056E5750F6C377F9375156905EB02B0FA900403BC01343DA39F80CAB2AF188CC4D9EECFABE9CDBF75E32FA15F5BEC5AC24C1BF393C1C245415B38FA5C82",
+    "identity_type": "provisioned",
+    "iv": "C2337185C26056CE4441225DFE7060CE",
+    "key_seed": "3E54A3C0661B47A2B56B69385D57F404B59CDAF04806F5CD5E08C42AD1798316",
+    "metadata_key": "57D1F6D82B6598012DC38DF4102E9D49",
+    "section_mic_hmac_key": "02D21B6BAFC774F8225F653E3FA74CA072DEE643C20AF9AD115C0F656F0A8F7C",
+    "section_salt": "56E5750F6C377F9375156905EB02B0FA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3534341126EEDD02268A7CF907032A29",
+    "aes_key": "941672BC6294A5FC9E6AC03BAEE156A5",
+    "data_elements": [
+      {
+        "contents": "ECE25FB7FE3EDCEEE8",
+        "de_type": 642
+      },
+      {
+        "contents": "CAB4AF",
+        "de_type": 177
+      },
+      {
+        "contents": "FB38F904FB0A925E59AB186C824D1D121A",
+        "de_type": 81
+      },
+      {
+        "contents": "32E132145BF7683C7095FD150387",
+        "de_type": 990
+      },
+      {
+        "contents": "0C6369F4074A8980786BB4",
+        "de_type": 338
+      }
+    ],
+    "encoded_section": "7B901388065746E077EC8D797B0F0FF690A0F69110008B5B67D02A2EDE80F9E163D2BBC2C82E90049D2356AD8289D2ACBD6BDFD6AD70D136CA59E15E92B5D2D9AD3D1EA16E97828F9C722C6F32937EE2CFE7E3C922E9A969BFB73BD10F1F6E83AA574DF3B638EA680838FF779235BF394F6ADE59208709F6FCA13DA6",
+    "identity_type": "provisioned",
+    "iv": "17F834E108A1E530E9C6DC04CE6B4658",
+    "key_seed": "DC2133269CF982E3FA4D23A8A3D7ED820B8C708C44037FE6D84DDEC982B4C971",
+    "metadata_key": "F785519027C49D46E817F41766D90C39",
+    "section_mic_hmac_key": "DAC78E12E6374EAA18B9DAA80A771A75969D0C6C343200000C0C32281796A829",
+    "section_salt": "8B5B67D02A2EDE80F9E163D2BBC2C82E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9A85F942FCF43F69C7574D1CD2A0D0F2",
+    "aes_key": "0E0534CB941D842104C642B8A1F18A70",
+    "data_elements": [
+      {
+        "contents": "DBD9D02102C6ABFEE1E045959BD444",
+        "de_type": 556
+      },
+      {
+        "contents": "CF6DFA9CC175A07C269B84B190BCA7A1",
+        "de_type": 330
+      },
+      {
+        "contents": "319BE819",
+        "de_type": 775
+      },
+      {
+        "contents": "8F6E2B78FCAF4B5CE5D246F94621ABC50DB3B19C7B98D570C85818B8",
+        "de_type": 958
+      }
+    ],
+    "encoded_section": "829013E659F7589D9F22BF2F1E35BF3E6978F59110004BC4FDBDA1E0D06770F14BF61545244B900233E4203AAB4515AC6A71CC634449CFC1DFD064491ADD2C14E9E378C9E2098D434177D5549DA4D0EB463B520545ACD12D4805CEE4B52D218CEB5667F770833B5B64EDE4EFB737ABCBE830B68090E53965ACB5242A660E83CB82F558",
+    "identity_type": "trusted",
+    "iv": "DA6BF37D65F973CA1A00522E49BC32C9",
+    "key_seed": "54C796907B5F73DA86CF7C183276E8FB928EC324D625DD57859A986635668117",
+    "metadata_key": "ECD687DD1F9FF1CD096D76E6034F6F9A",
+    "section_mic_hmac_key": "6DADAB8D9E47EB85161A5159FE728B9F74842B24584FF530D98584C0F6B265B7",
+    "section_salt": "4BC4FDBDA1E0D06770F14BF61545244B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9A5D74B1191EDFD5C9FFB3693DED74D9",
+    "aes_key": "C86DB754655DE997EC3B092B814A9D08",
+    "data_elements": [
+      {
+        "contents": "B24E8C398A097EB6DB8070",
+        "de_type": 122
+      },
+      {
+        "contents": "FF8934664FEA786A",
+        "de_type": 959
+      },
+      {
+        "contents": "0496A8",
+        "de_type": 491
+      },
+      {
+        "contents": "290027D82CF848264ABC51B38B9F50301A2BE901B1865A",
+        "de_type": 917
+      },
+      {
+        "contents": "BB57846504B148C0D3D06CB420F09EDC69",
+        "de_type": 518
+      }
+    ],
+    "encoded_section": "8390130089ED0335A7EFC59F0CF825677AF8629110003BC66A7E83C34665E8148E8F405DD6B19004D3446E2F9CCA273520BEE5910B42717AC24D55486EF1D4496F38B97F29F7ABB26ACB299A32164F4FBBD64DBD128650D6C4487B681812C9B810D559F1DF7A2E619A9A2486EC27B55F48A49DB4D3A5EA3BC486BD5359EA31CC1E1E101B",
+    "identity_type": "provisioned",
+    "iv": "9FCCBD881DDFB881671D7C7F7F1FB16A",
+    "key_seed": "48C3FB983526200C3940D06E401D1E447353B058DD3C4A1F518B9CD8F045B31C",
+    "metadata_key": "449A2DCCC6E26F9AFBB91071ABE75193",
+    "section_mic_hmac_key": "F57B9C5889C41E7D404CA50D39992A03DDD9D7348FBF57C9A8B5867A01219571",
+    "section_salt": "3BC66A7E83C34665E8148E8F405DD6B1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B9B184BAC61B4F93DFC9C3067F371D17",
+    "aes_key": "CF403FA1E7BE86B53AF114A1B0D9C426",
+    "data_elements": [
+      {
+        "contents": "B051C4367A69BF4878",
+        "de_type": 528
+      }
+    ],
+    "encoded_section": "439013E664890A3457FCFD7EEA5AB752B14D2991100097E8397B9ED7E8E71313D8D606145444900402DC632F0AFED33FC49DCC6693C993BBF5040BCE4A4D0900C1076958",
+    "identity_type": "provisioned",
+    "iv": "F46A38E8A66A6D683FC6B94C6C04640E",
+    "key_seed": "BC6F5B315462737EC913FC8716950B18BDAC5D2D7CE7B62E987736D9C8A51D00",
+    "metadata_key": "4132EBD8503194CDFFA3DB4A9CF4E9F5",
+    "section_mic_hmac_key": "77646D5AFD46271C0B3E18910808CBAB5F5B196B0C7F4363A719C58FFDA9863C",
+    "section_salt": "97E8397B9ED7E8E71313D8D606145444"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E5934BA045805A7421A56BA0D4CB8F9B",
+    "aes_key": "888368B6CCCA3B33D5A6FA3CFDB8D12B",
+    "data_elements": [
+      {
+        "contents": "D6CA9F03DBF64CA2B9439E2AF8672702F81E82B4",
+        "de_type": 767
+      },
+      {
+        "contents": "6937CEC064BCA1095885872E",
+        "de_type": 993
+      },
+      {
+        "contents": "746A7794E1520BF389F1",
+        "de_type": 968
+      },
+      {
+        "contents": "DEEE6D20B58534F9C1BA4D746648CE",
+        "de_type": 645
+      },
+      {
+        "contents": "",
+        "de_type": 190
+      }
+    ],
+    "encoded_section": "7F9013ADC90DB7AB8EC54F721AC09BF0A8E89E9110001FFA28EE4F6B26C093F26CD48274E4749004CBC23042E5B3B7E471C006FF749F88E3212AD450377C64170A389DE0A1D02C4F37AF61AE5374AC0B38C772117A1AC53D6C19CE24488A51C292B903548563A6F09ADE9742B311215D27EA48C7EBFD970179AF4C509A7A528B",
+    "identity_type": "provisioned",
+    "iv": "C666D37611C02A62008EC134E0043096",
+    "key_seed": "065262498762C06838CB80F57356EF74A34649A8B256444C31D0EAB095B48038",
+    "metadata_key": "424141E8B96A7A3B35DF2F27CBE572AD",
+    "section_mic_hmac_key": "E4AC63DB35CBEB6526D701F511D6F93C0EAC5AAEEE8E15511F560952D60BE443",
+    "section_salt": "1FFA28EE4F6B26C093F26CD48274E474"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8B09B5CC8D452AED21A27051C4212C03",
+    "aes_key": "20CB5F8E502A5C231631433D3EA74C3A",
+    "data_elements": [
+      {
+        "contents": "FDFA36FDC1E841BE8CB8CF9F786927EB3C875ACA8782A40F64CF87",
+        "de_type": 994
+      },
+      {
+        "contents": "C217151453818FA83E",
+        "de_type": 302
+      },
+      {
+        "contents": "CEC2831E815B7741DA4AE1B430191A52A9AB542623796986904825A9F29F",
+        "de_type": 375
+      },
+      {
+        "contents": "61106F238FAC929705D579362ED8F0654FFBECB7B3",
+        "de_type": 882
+      }
+    ],
+    "encoded_section": "9A9013AD9DD460657404924554D5ABA137FCE1911000FC40CDC9F0268A4359DAAD8CC738FBAE9001B4A4E4F36C74E4630E303CF82CC7389673E052C09E190A6EE06D066956B4DE265F30D6BB6A1FFB90C7B0AB0E988DBCD6890AD54EDB925700587ED26438093EC7522F59C4D96DC3A05D57BED63FC0FDDE6921918B0401ADF02DE8A5015FD893589AD840C2D9A883970D73D4E78252E108E952CC",
+    "identity_type": "private",
+    "iv": "3AF0046E60E52B687DA9B405B04EE4C9",
+    "key_seed": "187A06076F56E434B68E0198E97AD9A3DEE2B8330921232770A7081304A5A197",
+    "metadata_key": "20D24EE641F15A53359F2173BF22D6E7",
+    "section_mic_hmac_key": "92281B4C5EF9136F18CE22F5B052F0782AC51DE3872A56AEA4BB5EA9BD6F02F4",
+    "section_salt": "FC40CDC9F0268A4359DAAD8CC738FBAE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1980BDCD7189D278FDCABE4B5A1606F0",
+    "aes_key": "E6AC160A241743BD2F26D4A0613D370B",
+    "data_elements": [],
+    "encoded_section": "379013EE631DD1C657D166AC8350CB989079D2911000452D2E63C89D362EE8D6B4C81675EF5D90012FE7D7BE11D828247000351610FCA587",
+    "identity_type": "private",
+    "iv": "F86E064E37573CE05667B8CF12753CB1",
+    "key_seed": "80BFAC30C797B1AD69B178398369D8DEE740D9020AAFE9AA25A7E30E82C6150F",
+    "metadata_key": "C4D4EEDFDA9C4A7F8A605B6AC7BE644E",
+    "section_mic_hmac_key": "60CA863FF6016A0BB84CA68A347B1E20B94CED09D9D0FF8F8AACD72CA9D5AA06",
+    "section_salt": "452D2E63C89D362EE8D6B4C81675EF5D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CE3637F7C9AD29DC4903BBCE71B3EDF7",
+    "aes_key": "283D03C921033734F5FC72BDBF2CC23B",
+    "data_elements": [
+      {
+        "contents": "B9D0AAEF",
+        "de_type": 758
+      },
+      {
+        "contents": "13E90EA2DE8A3B96E136541945E1D14A54D07038940ABB3FAD225AF3",
+        "de_type": 983
+      }
+    ],
+    "encoded_section": "5D9013F16575E13C3E78AFED9CD58FA081D9DB9110000ED633E1509B9C35BB340C85E69F20409002CE471E855E16C0CD3B96A38178D8ECDA75CF3128C160846194A450B3991578950E8CCD5021E3EF114EB46E4E412602DE3E762B0CE436",
+    "identity_type": "trusted",
+    "iv": "4A371511BC88F24D6FCADCE37088F34B",
+    "key_seed": "FE21995688DB34483CDE840FD00F9A96CC425AB8E6775500C108430EC0E823D8",
+    "metadata_key": "64C0230DC2C5593746B2B0CE14AF63E3",
+    "section_mic_hmac_key": "72108A75932EE23C133B987C0E818D81822E004E67F1B47DE6F9C1DB088264DA",
+    "section_salt": "0ED633E1509B9C35BB340C85E69F2040"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B162D1322B5D26249649CB969B4F8102",
+    "aes_key": "E92585DAC5D7F4662EEA29655E50A4CE",
+    "data_elements": [
+      {
+        "contents": "A9EFEEF17500ABA6053E234D49F9",
+        "de_type": 176
+      },
+      {
+        "contents": "29EF333A49CF43E20C253605AA083893D2",
+        "de_type": 459
+      },
+      {
+        "contents": "2FA4FB0EA60274A5CACFA47E4B",
+        "de_type": 504
+      },
+      {
+        "contents": "83A7CB21AA6B3A1923F7382E4FCBB313D3E7E61DAFAD3E7EEF32CB3EF93C",
+        "de_type": 313
+      }
+    ],
+    "encoded_section": "8D901309D5FE388C56BD4E5F6322943FC3A048911000F5C76DF48CEC6BD8CAE990AE8BE181C79001A92EE39ECD5870537FF134794D9F747F6DE78C4512B3F087F0637BCB1B7EE8A0539D82E806149FC2B0D7F76FE39D9C4D820F714CEA248E808605929CA89FDDFDAADFAF87CB1EB88690382E08185623C09585E5489C21B5941F607AEC56E2CC36DEF0244846A8",
+    "identity_type": "private",
+    "iv": "BB9EE514C99F0518104C87999D49A754",
+    "key_seed": "AC4EC8D356CF255D5AE8B9FA0B792CEAFE7947F8559AF2723AC8B966579FC0DC",
+    "metadata_key": "4576F651F9196F707DCE4E1F599D0783",
+    "section_mic_hmac_key": "8BFCAD24C2D370096D0E954E9A3363C8C0B239729D5B0A45E9B093A6A377B2A9",
+    "section_salt": "F5C76DF48CEC6BD8CAE990AE8BE181C7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5B297B4DEAA667E3D6FB370EC0BF95F3",
+    "aes_key": "99F1560561D5A887142C3C55D312DD52",
+    "data_elements": [
+      {
+        "contents": "5C2CE141B3E5A889599146",
+        "de_type": 37
+      },
+      {
+        "contents": "1848600B2D546BCFBBF6C7C8705D",
+        "de_type": 192
+      },
+      {
+        "contents": "57DC2206B48105B60FA3C8BBF187A500",
+        "de_type": 487
+      },
+      {
+        "contents": "7C3D131E2C31",
+        "de_type": 195
+      }
+    ],
+    "encoded_section": "7190131A58CC7F4415B7BF7472C0F89D5AC2E391100084075A84F9CB2D02F54F96F87F1A163E9004C6AEC8AE7B9D25088001CEC6C53AE2D4FC8FFA1615483B6AE2DE6FDA409B13F33028543707A88A02A2C462CB81AFFFC81B3655BD8D733A13F133BE4138D8DCBBFA21E7FD4B72CFB66E63",
+    "identity_type": "provisioned",
+    "iv": "8B28D0A8180C17783E7653EEBAC132BF",
+    "key_seed": "577AD6CFCFE8E1C3ACBE1993BFAA7FA05F81EAC8AC1E83C7E0198DAEBA7FD1F4",
+    "metadata_key": "73BB407DA49FC66BB9C315EA94EDF8BC",
+    "section_mic_hmac_key": "995E2E8ED0F4F4C1CDC5D13DF3C903B149EBD84F41E4D088A801A8B9396EE8F3",
+    "section_salt": "84075A84F9CB2D02F54F96F87F1A163E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EA6DED68CF0959239D11427F74FE997B",
+    "aes_key": "9FFFC08CB431531D60DBE654D099E048",
+    "data_elements": [
+      {
+        "contents": "539C2665DD42B55FB0E9",
+        "de_type": 658
+      }
+    ],
+    "encoded_section": "449013ECAADB35F533CF451CBF0B38EC937432911000D32DB501E334CAB82F79520F3C892DB79004E7750EE5BDC44BF9BF13543DF92F315E25D7E54780C7A2623492AA0175",
+    "identity_type": "provisioned",
+    "iv": "023DD3C725AE97C27DC0788CC095B6E7",
+    "key_seed": "9EE6A42100524DD1D112A596D5405581586D40BA87C77DD85F8A6AB92EB9E1FD",
+    "metadata_key": "AA74890853C6C5BF4EAB72B38C5E2C2A",
+    "section_mic_hmac_key": "3B6C00CF957CD21086DABBB8FE4042307ABFFDDECA6D3CEB512F81C1F133F6F1",
+    "section_salt": "D32DB501E334CAB82F79520F3C892DB7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "AAC3A533A7C2AB440C26A8183F71CE3F",
+    "aes_key": "8B68336A07D6283B517488B995AABE65",
+    "data_elements": [],
+    "encoded_section": "379013954DFB4D6B1382D53F3D36B4521E1647911000C6ADAE90AF6B99E17D60C8613C5BA3F490044466909ED06184090A9DBCF69FDFF46F",
+    "identity_type": "provisioned",
+    "iv": "42DF51FB3C37AC171470D60D4E2F04CF",
+    "key_seed": "7C3FB67838916AB0E4F7BF68FE8A28C509A2A15BB3240BC8AB6CC3F99F52705B",
+    "metadata_key": "393F240A2C6F9EC4AFA756425A9CC2AF",
+    "section_mic_hmac_key": "AFA33F6D9DACC54E13B4F5248468F614561745ED8A0F29CD0F2E430873D9CE2C",
+    "section_salt": "C6ADAE90AF6B99E17D60C8613C5BA3F4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "81C6585DC0B3B9D152F79A23DB1C8882",
+    "aes_key": "E97F5929B62C0A82220838B588728F26",
+    "data_elements": [
+      {
+        "contents": "72B7",
+        "de_type": 536
+      },
+      {
+        "contents": "1DC3",
+        "de_type": 937
+      },
+      {
+        "contents": "97CA765CF7E2E2C48B42330799F54489C934EB912308FA958DD04703",
+        "de_type": 387
+      }
+    ],
+    "encoded_section": "60901338E7ADD6C6548D813C99134BA15D9A5D91100022EB17486F7CD2CBA6E39434537B2F57900207BFB512D4879502860E54B41669139A48DD0E42BDC66FDDF265ACA9CAA359F1E4CB1482A3D506646B21698F37317D0564F842CD44919FD767",
+    "identity_type": "trusted",
+    "iv": "BB11AC5F4D37033EC99BCF8E6779C7B7",
+    "key_seed": "11F86BFFAA9B66C77616DD6B32C63A6C81C50541BE9EF6E04AF0F953895036B0",
+    "metadata_key": "AC3C67CAA7794A04DD94CF515419466F",
+    "section_mic_hmac_key": "60B2EB5CF45F6600ECEC676CD76A4604B744E166B5935BF4C5C750634AD081D5",
+    "section_salt": "22EB17486F7CD2CBA6E39434537B2F57"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "00511EF933CA6DC0EEDCB94B38987087",
+    "aes_key": "0ADAF776AF20958595ABCB87A10E984F",
+    "data_elements": [
+      {
+        "contents": "1A464229DF04C31CCC08944B21D55EEBE9C1BE489B1790",
+        "de_type": 339
+      },
+      {
+        "contents": "BD56E1750AB74F38437A7EDD986E21",
+        "de_type": 92
+      },
+      {
+        "contents": "B0668FAA2F6BFDF67FD9033B8D0675680BC452D2FBD29D4F288B93C2",
+        "de_type": 768
+      },
+      {
+        "contents": "9E5C09A349090B3CF9B575821F0CE393462D",
+        "de_type": 850
+      },
+      {
+        "contents": "655C5910AD15C62A126D2FAF109A26",
+        "de_type": 399
+      }
+    ],
+    "encoded_section": "A890132778CBA5093DE49E4CDF829C83BBC8B0911000FED627BBA15D95068F43ACFDF42D2426900157609145B639C9C92C2A81A0717C11219DFCBCE7DD6B6A80146CA785EC92DE677C43AB269672AFF27FBFE8A4A34EA6E4DBD5C1A53E8836BC8149E27A59A449E6752025DD324A5FBEFE17DC2EB8C0CEFA651F949CA334A0E3FBF9657C5B0C8C9CC819BF2C85EE8BE5813819372E1308CEF54567F70B8F6534A008CE0D407ECDA3D9",
+    "identity_type": "private",
+    "iv": "EFB9C48ADED0FBA9B2F10E7799B1BC11",
+    "key_seed": "05BA0D78A0AF7D0FC55A4B640C8573C74115E6BFB35CF849EC024CE0E5ABA91E",
+    "metadata_key": "4D0EDEF4A062C6A83A925F727C997C68",
+    "section_mic_hmac_key": "C3F3B8305FF694E5BE8EAAA0752CD8DA61D3E6BD544AE2DED8663F4B34ABF95E",
+    "section_salt": "FED627BBA15D95068F43ACFDF42D2426"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "95758969EAEFE0163C295B1733BEBDFD",
+    "aes_key": "08B89985AB9371EE8A7C749FA10D7965",
+    "data_elements": [
+      {
+        "contents": "42F3FAF94ED0FB40C070",
+        "de_type": 906
+      },
+      {
+        "contents": "2870FEE3B66905C1C865B578458847CAF0F8AF67",
+        "de_type": 827
+      },
+      {
+        "contents": "555387D04F9A2CCA92EE39E54408ED6F2E",
+        "de_type": 767
+      }
+    ],
+    "encoded_section": "6F901375D05E0E76CDDBB5ECC6637172CAA0FA911000A1939F4A327A3FE2596522A22DB6C5A59001E0EB6C5B53D04DC02C32041E4880E4D65D84151A34F27CA74E7005C9BB2CC12BA2B343395FE847997119EA78AB0C1AC5B3F643A538C4FDD3BDA97B1872BF596AF0B0A59832B2D648",
+    "identity_type": "private",
+    "iv": "2ECC3361C8C791708F4C7B8C39C15D79",
+    "key_seed": "DA612AD55892DC4C53B80590D940929D72984DFF5A5F6F03DC23DF8E8533B512",
+    "metadata_key": "B1CAB6C41D016206FB92AD7B4DDE8B4C",
+    "section_mic_hmac_key": "3D75FC10EA014EA03A511D12A3001062354C69FD19910D31F7931635417D9350",
+    "section_salt": "A1939F4A327A3FE2596522A22DB6C5A5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EA6000111B7177C842D94B678C834DDF",
+    "aes_key": "0FCEDA0332ACD49A195ABB867E6BAA1B",
+    "data_elements": [
+      {
+        "contents": "CEABACE7D381A232FC75805204E7270B700D5B4FC2D8BD",
+        "de_type": 672
+      },
+      {
+        "contents": "9AD36A4438B590412E41CAD870CC8BA2CA27315D",
+        "de_type": 178
+      },
+      {
+        "contents": "CE20C944EC92910AA9878C",
+        "de_type": 587
+      }
+    ],
+    "encoded_section": "7690133D110BD2D3C885F07437DDE3630C5D7E911000A4E404D0D8DFCC6F1EADFCCFF09E925E9001F6AA807E5AB71B59EC053660E13A15739A1BEABDFAA147D3285CD42CC0AD05CC1541D234FDE1FE6F5B0387CB7421B3212218FB7135516304295DF97339562FABAAB5D3D86107F5F7E8BABF6D23DAEF",
+    "identity_type": "private",
+    "iv": "A9DCBFC679102BB70F88C434A62BCB58",
+    "key_seed": "FB9B3394FA19B352B121F5176DC2BDE9DE6901F8A3C47AE297527EF13DF6061E",
+    "metadata_key": "1B044AFCC875CC44C5305B79FFD030BD",
+    "section_mic_hmac_key": "A9BEE21E360D0E27366461547D779FE698A82E16E40C2D20413DAC39E851C75A",
+    "section_salt": "A4E404D0D8DFCC6F1EADFCCFF09E925E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EFB53470C08C0623EB392B698DA54733",
+    "aes_key": "560C8CA057D94CF4EF794E192324F93D",
+    "data_elements": [
+      {
+        "contents": "668992",
+        "de_type": 643
+      },
+      {
+        "contents": "13DA",
+        "de_type": 684
+      },
+      {
+        "contents": "0644943798483CDE51287D117570D6B1879BE0B677D86D7FDA9E502E",
+        "de_type": 838
+      },
+      {
+        "contents": "8DE3050FB50AEAFE8825211569FD59526395E0FE71F9464EFD0032D945F8",
+        "de_type": 659
+      },
+      {
+        "contents": "8CC01BB0BB481C4C355440B4A65D3611345B036268B913",
+        "de_type": 578
+      }
+    ],
+    "encoded_section": "9C90131E6B368314CBA81922DF93F3FB58882391100028EBFFEF24B6C89067BB31A550C043319001A26FBBE8A1AD2304583A63C804B269F163BCE88B8D89377B7CD26A0DBF6D331A12C84759AE583C7F7FEA4194BDDD77154DF89BA4B4E024E13E9AED6FA0B7FB27D467EA2A568B5C3324354AAD300CEB8C987E98E31234178DFD263E04027E4B8F0BC0EF53E5D77F45CBBA26B95E88D1036BA7BFCE96",
+    "identity_type": "private",
+    "iv": "F9F2984CE55D17978DA1F074305C9C96",
+    "key_seed": "BF601538B31CFC67922FF6BF44150DF8DACE1485BC93284F4166B11EFAA5344F",
+    "metadata_key": "5DFD83B4E657AA2BCD8A0373490573C5",
+    "section_mic_hmac_key": "470CF61CF85A1249F42A5CB24EC08AAB431E1DF4EC0B0391751B313C36715ACF",
+    "section_salt": "28EBFFEF24B6C89067BB31A550C04331"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "AFAF84AACEF8881F848E7B85C7539880",
+    "aes_key": "CBD54146C955B6C8F00BA1D38269EA98",
+    "data_elements": [
+      {
+        "contents": "FECDB0E0EA56B7ACE68A83",
+        "de_type": 120
+      },
+      {
+        "contents": "0B733BA3",
+        "de_type": 781
+      }
+    ],
+    "encoded_section": "4B9013524EAED100DC3E32D41005234B543740911000EFBBAA34F6A5D2CCB39DFCF9C89714DF90025EDD541786FA33A58E7132F55209DBEF9242C353BB72CDD1550FF0026E18AC166956E6FF",
+    "identity_type": "trusted",
+    "iv": "413D670613BA8E8838386AA10F29C898",
+    "key_seed": "91165D9E35460BAE2E80856F736CA95A1CB0DDBDE92E6F55B2B0592E976A8030",
+    "metadata_key": "3999C8B72B85830A4F46CC24C0CEFEC0",
+    "section_mic_hmac_key": "3B4E66850E50DDB2376FD26E0B6506F2144DE3E4C9FF0F0ED3A2A95AA2B2CE4D",
+    "section_salt": "EFBBAA34F6A5D2CCB39DFCF9C89714DF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "437431D701ECBD564CE91F04AD002790",
+    "aes_key": "B7DBA314333C96D6E7420CC20C3BDB7D",
+    "data_elements": [
+      {
+        "contents": "08F45E72C77E4F763109",
+        "de_type": 522
+      },
+      {
+        "contents": "4BCFD9294127CEFA59C6E3B17F5F",
+        "de_type": 246
+      },
+      {
+        "contents": "A0AA932C07DC7D06E224D95EC31C4AEA2BEC4AD37A66DD",
+        "de_type": 459
+      }
+    ],
+    "encoded_section": "6F9013074F186DD7876DD0F5374206C65F523E91100050205EFE1CBB39FD3572899E4A9FAADB9004544DE8447ED37AB18AE43746E06D5331A4102428F2EE7CFF71482BC080EB01EFD1A42970BE9132663CF654846A92370CF909076D780976F02BCB93F4B739ABD92FC18DC1DBE28EDA",
+    "identity_type": "provisioned",
+    "iv": "F2DA6B13367A1D956592B937986DCADA",
+    "key_seed": "CC5669D6AB653BA0D76496518A8BEB80C904747724CF21ABFE711EF4E66C1717",
+    "metadata_key": "CD38133DCF3BE5E85AD5152614EBCC70",
+    "section_mic_hmac_key": "A5696785B14A4D7352246FFAA8926DA57C2D47B5E8FD9CAD3DEA52BE766122EE",
+    "section_salt": "50205EFE1CBB39FD3572899E4A9FAADB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C90A438A50E93F2464F0EE55291F2472",
+    "aes_key": "783982C76051896CF3879D01AD48E82B",
+    "data_elements": [
+      {
+        "contents": "DE3D9E2E05876097FA1D8C",
+        "de_type": 129
+      },
+      {
+        "contents": "D066B484718CB966E1F4BE4B3DD52C712077A3",
+        "de_type": 145
+      },
+      {
+        "contents": "1A8F96D8CFC568DE5FA81E2E25B21F",
+        "de_type": 162
+      },
+      {
+        "contents": "8E1B11FA0970BB66441B5D9EE43569EF92D9A93D9443F868",
+        "de_type": 296
+      }
+    ],
+    "encoded_section": "8890134276D816E4465BD410B3B16E1D9E7D5991100023F02B2A00F1E5E9A1ED089BC433715F90042013AD595A1742D2EED91B031F13E399FDF21F4B491120694D72ED8E822B87C7C13CC13019BB1672281428A2F2ABDA6FEEA9661AC3179C926B3A51A3C529040BBE048DCBAB14D4DCE8093CD66015BA0E77B61B922E20325F51799611608E694330",
+    "identity_type": "provisioned",
+    "iv": "213A6CA4A300251C8E06F982E3ABCE8B",
+    "key_seed": "E5C922600165DE89DE7441F0312C7B5F977D674631C91D6046227C6A56B1E21E",
+    "metadata_key": "3CA2053EF6F21F47E9FAFD974B23C5C6",
+    "section_mic_hmac_key": "5ECE1E81AFAFCE2FA416FC9DBBEAEBEB154F1C6A956CF2B32A0795E7438C7975",
+    "section_salt": "23F02B2A00F1E5E9A1ED089BC433715F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "DE17942EEA2F8A64B88FA1BF6DEC9995",
+    "aes_key": "17BCEBB9A4A9490F404AEF55D5729ECC",
+    "data_elements": [
+      {
+        "contents": "A039F67CF7F3",
+        "de_type": 399
+      },
+      {
+        "contents": "E9CE7BC13F8EC91D4A7B2DD9AA389F472F5090E17DF4FB99546AD8A73E85",
+        "de_type": 470
+      },
+      {
+        "contents": "71F962A82E4C980D",
+        "de_type": 494
+      }
+    ],
+    "encoded_section": "6C901356238CA02CB62DF82AAA695B9F99C76E91100067859E665050534B84E37961D658822790025D988421412F895E343CA8EEAADEE1CF2E12DE25EB2C2DD52B2368A7C2451CDF00DBA31B44801576BD6AF8B6D689EF232C4250C363ABEF30F39E6276FC9FCC28A33A83287B",
+    "identity_type": "trusted",
+    "iv": "842B1A1F3A3102058F7575310293CD3E",
+    "key_seed": "F5E1B94291A9CEDE059BD01045DAAE8E7BF8F9B4DCFD98C816F14D17E5AAAC3B",
+    "metadata_key": "9CFF8F87781CD2434DB335C063DA7EFB",
+    "section_mic_hmac_key": "96EA7A011BD46B42FED04395B7554816A3770C9627EA8140A954C834E6D95788",
+    "section_salt": "67859E665050534B84E37961D6588227"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EEC4ABA003D9CAA5E225EE938E59A88A",
+    "aes_key": "A3ECB264388150FF04523DE0CA4AF3FF",
+    "data_elements": [
+      {
+        "contents": "5844574BA986DBBC3FB734C6A0E1FA9D5117CF282C06C47E6CD568CBFB",
+        "de_type": 826
+      }
+    ],
+    "encoded_section": "57901396739698F47EEA126FA41FFEAF83526B911000A1C40F8D2851B55CE81385810F82C8999002889342B7DD12A80AE6337FDE0EE82E22533592B5E902E6763AAA274863B2CE7B4621AD059338821618D09ACC1481A060",
+    "identity_type": "trusted",
+    "iv": "6F7CE3865CC971472C29270AE628765F",
+    "key_seed": "FB21E795C55BD93DD87F63107ACC78ED61E9E17DE0EA81C9A6300BA63F1B369C",
+    "metadata_key": "35D70D76E387E1BCA4D02CC6BFBA51C2",
+    "section_mic_hmac_key": "3EDBCF936225088A78F30EFA4825982F6EE29398679AB1661C1F365D47538EC4",
+    "section_salt": "A1C40F8D2851B55CE81385810F82C899"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "40DD0AE6AE5E4181F03C8A77CD35D51B",
+    "aes_key": "016F45AB063A9098880BD35B56F93324",
+    "data_elements": [
+      {
+        "contents": "75192B40B7328370B88E0983A13901EB57AB1522A4646850D869CD",
+        "de_type": 851
+      },
+      {
+        "contents": "6A21620BDC9E",
+        "de_type": 810
+      },
+      {
+        "contents": "6F1BCC7D79A2C824CD4417A720A7C470C2EFA8E901E643E8B4",
+        "de_type": 502
+      }
+    ],
+    "encoded_section": "7A90139875296CA1A492DC5433EC0C158390D291100016C8B52E762259821BB72DDCA26B7B4B90022BA2F6C9F36284CA3BD06F8F1C7316988CE9C1461EFD1081A9C6F88C03039DF4C3798990FD9CB1B7535582A27E091340D56BBBCC6251D716F0F64208893548ABFB4B8CEC8273B1B9E188A528783672B31188C7",
+    "identity_type": "trusted",
+    "iv": "E4D5AB6C234F20EFBEFDB8D47694BBA8",
+    "key_seed": "604C1B551B481F1A897F85DEC2F35DDCDC7C5AF74CE2B45B8680F76EA13DC626",
+    "metadata_key": "CBE00FD5F6CAEE0428F8AC2EBBB876B0",
+    "section_mic_hmac_key": "DE57E2DBDD55226FA52611244EDF1FD974C633EE264AC51EC09AC1F9E192F60E",
+    "section_salt": "16C8B52E762259821BB72DDCA26B7B4B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "493740337B758DD54FEDCDBBAD59FDEF",
+    "aes_key": "2CC6A4D0D81ACF8B800C71D3883DB5AA",
+    "data_elements": [
+      {
+        "contents": "E05DA93367830FBFF2A5A06D84DA99A681101A994B5AB5CD",
+        "de_type": 299
+      }
+    ],
+    "encoded_section": "5290139E7281721A0C71BFE961E2BB6EE3EE169110002DAF1ED3BCCFA03A33C8A12EDD6A774090043E221E6BE16A640381C047CA79D446940E7159C2D63E49730A006BC0B71019200340F11B7BF4B6AA8F80F1",
+    "identity_type": "provisioned",
+    "iv": "CD540D1F885B93C6019EBC6B1AEC866F",
+    "key_seed": "DA6F8D036A011F4EF959EEEB64DD7DD7BDF1E30F0EAE672B49D8A68E6D175BED",
+    "metadata_key": "EBD30CAA381AFB2446A295F1E33A205C",
+    "section_mic_hmac_key": "8728D6EB04D094F213ED25E9DE0C797856C5CB6378061EA7A7E0DC5F801DCDFE",
+    "section_salt": "2DAF1ED3BCCFA03A33C8A12EDD6A7740"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6B6C93C92DCEA4FDFB0EE6F40BE8DA9C",
+    "aes_key": "19BAB81AAD722A2E0CB0E1FC5A14A854",
+    "data_elements": [
+      {
+        "contents": "7580DFFCE3D30EDD2DB5AC5F18C4AA8E8D",
+        "de_type": 370
+      },
+      {
+        "contents": "EF1E4F25CD5A8888CD41F0237A75EDDB9801E706578EA0619C",
+        "de_type": 207
+      },
+      {
+        "contents": "FD9E1EA36172D0F5EF",
+        "de_type": 761
+      },
+      {
+        "contents": "3FE5D2D5B86DC22E2BBC14612748CE40507CED56B0ABE2",
+        "de_type": 822
+      },
+      {
+        "contents": "8C7B1B818C82412946EC964A4AFCEC5D77F2E49AE42F247CA419",
+        "de_type": 628
+      }
+    ],
+    "encoded_section": "AA9013CA08132660CA46BEE4E55FFBF82D98F1911000EC8314769B664C86461B6EA9E12773969001D9853FBE75F68B42B3E95C7D5B3E08DAF0585FE8292777E631F36ED2E0E0A639C821F5AE2786DBE51893D9DF92C68EF63E01F735F69790B7847ED685E3D4851F53D672EA63164B84322A49DDA9BE84427590959F035A608D964F3C49D6BED8E446AF319FBAA9BCC749199BC14CC3B0F5D74E1E6BBF6517A41FEEE61B5112A968883EDD",
+    "identity_type": "private",
+    "iv": "147048CD988E7F8643E32E2449ECCA07",
+    "key_seed": "61D23B0B31E7D1C9A401378119A082952523D5A3ADD9D2C56EB29D695F8EDFBE",
+    "metadata_key": "40ACD53A2B51E6F0C26CBED7D58B2D0D",
+    "section_mic_hmac_key": "CBCD4D44B600248C33BD5BF177E470EED36A1295E9F2E7813D3BD827001A2EF8",
+    "section_salt": "EC8314769B664C86461B6EA9E1277396"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "80E94BB8F2BF0314AD27A08808A81E8E",
+    "aes_key": "D48A2B9E344DC5E13A29F40C4F4B0BAD",
+    "data_elements": [
+      {
+        "contents": "32DACC08BD9CAC4BEFF141E364D6D9B408EAAF",
+        "de_type": 840
+      },
+      {
+        "contents": "F2379E76F0E1972ABE60536A9B004F93F0F6229E",
+        "de_type": 693
+      },
+      {
+        "contents": "",
+        "de_type": 482
+      }
+    ],
+    "encoded_section": "6790138854BC068046A9DC6438D9AE0A6707A09110002FA6884A260B808CCEC3C12E058DE4219001B1313868C07F461355998AA9C33D1625542C04A413FC422FDD8BECE20E4EBD8157ABA83E0FE1EEF9D471266DC5EBB50B910DB51086D3AB261A0C64EAB6E1199B",
+    "identity_type": "private",
+    "iv": "09E7564C426DEC118EE479ACA32437E0",
+    "key_seed": "AF6DF5E99E86E3CD676BCECCA7295E1313B989E329F4540A9FAD643A0F1ABE51",
+    "metadata_key": "C064817D63652D0DD19F5A6ACD6BDE17",
+    "section_mic_hmac_key": "0E01561E7D972FC6EDE73397C102E4062644EEC472F6DC93FFA93AEAE66DCD6D",
+    "section_salt": "2FA6884A260B808CCEC3C12E058DE421"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0873B091BF980929D63B07E49841EA92",
+    "aes_key": "360F5E0D4F6F7F0D293B7C17B02629EA",
+    "data_elements": [
+      {
+        "contents": "13E936",
+        "de_type": 684
+      },
+      {
+        "contents": "151804DFB79EF7222A24A5701D87E68208480E",
+        "de_type": 606
+      },
+      {
+        "contents": "80D6BDDCFBD6B69BC93D93D53C",
+        "de_type": 492
+      }
+    ],
+    "encoded_section": "639013DDE68E24EE100BC81DE740B78E1CCF98911000AC07A89E68FF59661FE04EF27BAA690C9004A89E30884E4411C87AFCDF22A2AE9DFD4358D0990799ECD6D36A392C3C2F382C4056A2029A15D0C6812B5854F70C369A2F942262DE9729FBA65E79FE",
+    "identity_type": "provisioned",
+    "iv": "136FA42D9B2B99B94F546C2C7E449F74",
+    "key_seed": "F11C412BCBA4EC9352B8503D40CC8263F8910C07ABAF1BD91F7058EF6D8145EB",
+    "metadata_key": "64E6F3A83672ED26CB920D57705CE772",
+    "section_mic_hmac_key": "2C1630C0416F925EC56A27E00FD6824259447F4718C8100EBFCE6E2E592E1D9C",
+    "section_salt": "AC07A89E68FF59661FE04EF27BAA690C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2B72A7EE969EC60FDAEC5744A282CA4C",
+    "aes_key": "47A4A0C53E8BF557955DE007FBC442DD",
+    "data_elements": [
+      {
+        "contents": "C36CB8CC680B4B33EA02671DF361BEA7BF",
+        "de_type": 411
+      },
+      {
+        "contents": "6B97B27BDDDD6494FCAB9389B244",
+        "de_type": 429
+      },
+      {
+        "contents": "3024307E3A7DB9BFB1BAE994A324960889F4FBB9B147B6C0EA45ED9CB7A9",
+        "de_type": 370
+      },
+      {
+        "contents": "F9A393167AA68988D465C5D2CF1CAD56",
+        "de_type": 502
+      }
+    ],
+    "encoded_section": "9090136B6CD3A51BF4E8F1B05CE8EEA8A990F3911000F16B5FD28A6DA1856DDB813CBAEC800C900441E630201EC8BDBE9513A703235C64F1DCF0C6D9834310A132BB3BAFA165197DF0F0F1006AA34CF11BFD0186C9C20474029FF28E3F80BD3D4E28435AC1730F4F012AE7E12E4B260C114A645E60DF99E0E29F4C6CF94FF1712176DE6C55A9CB340354954A855D178664",
+    "identity_type": "provisioned",
+    "iv": "46B8EBE1F9E5813B4C1B6E0C2582AB6C",
+    "key_seed": "99324A5E7EAC85B893713A8A71B791F414AECEDA4718E972BAAF5C09C94B4E04",
+    "metadata_key": "540C5DD8EEF491F8E2DDC5D4277D32C2",
+    "section_mic_hmac_key": "8D660846F1432E8E440689560D543DD3533238ED0D71B70F5E7E61A509FC7604",
+    "section_salt": "F16B5FD28A6DA1856DDB813CBAEC800C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7D48E37E2858A787F24D7ADCDEC6B4F8",
+    "aes_key": "0A887E550738FEDE515876E254B32262",
+    "data_elements": [
+      {
+        "contents": "2479050EEB",
+        "de_type": 377
+      },
+      {
+        "contents": "819CE61E221A075010D5306CC7F29BB848A7DBDE1CF044",
+        "de_type": 438
+      },
+      {
+        "contents": "73FA1B3A7FF53255786C2C206501040278A66515021557CD",
+        "de_type": 906
+      }
+    ],
+    "encoded_section": "74901383D8F28210514557CD5238BD75B0004891100055505B97347C3937A4A25E8EF11E19C29001417D67B71ABDF30298BD1958110886A41360A6C45AA9D02B9F92DB44FA632CBF1437D182C83159AC936C13CC75403A5148A34CEC6AFDD77FDF6127A57C584C9715224B26F646038A21B02647AE",
+    "identity_type": "private",
+    "iv": "19F9D2CDE3659048AE4151D6175039BF",
+    "key_seed": "8DA828527A20965322074BA930562586E6463DEE6D45E788F18D66D42EB73AD2",
+    "metadata_key": "0011F0F2FC05ACA4E1251189DA36D627",
+    "section_mic_hmac_key": "B2F4D66EB2C40A21EED774F25B5E8B7C9B7A6BD4DFFDA446DBE766047D32AAFE",
+    "section_salt": "55505B97347C3937A4A25E8EF11E19C2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "31FB9D5AB71199BD3D5A5108CF837244",
+    "aes_key": "4A55292BFFA7C78A73FE80786C9ABEF0",
+    "data_elements": [
+      {
+        "contents": "9A",
+        "de_type": 692
+      },
+      {
+        "contents": "ED6453FA7D5A41DFFA12CA200D301C75661C",
+        "de_type": 772
+      }
+    ],
+    "encoded_section": "50901323EDF88A11D2105770DB1A1ABF5FEC3F9110009AF3A095E594F715D19B7D83511B49219004C7E360A866771654C1D7E3A58FF19045AF2BE397E964EBDD97C959F54316D0F91B61A2E508D5D4EEED",
+    "identity_type": "provisioned",
+    "iv": "1E787E4FAE77DE57752F91B18558A915",
+    "key_seed": "8C34BFAF25C9C03A5B69EFE1952B394E9ABE8326B25B51260094A712B34D004B",
+    "metadata_key": "FE52B2D64213A21002B8C7B956010B5A",
+    "section_mic_hmac_key": "D81C4340E189DD4964D0C19F4A57551233074991CD1AE1D48EFD8138B89C5BEF",
+    "section_salt": "9AF3A095E594F715D19B7D83511B4921"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CB2018262182E6D33BA5AEFB0CBBE143",
+    "aes_key": "10B52CC57509D02CE36E78220DD10359",
+    "data_elements": [
+      {
+        "contents": "308DE91BDEC2875E",
+        "de_type": 808
+      },
+      {
+        "contents": "85C2A96A3D4831F7BD91A8CE97F32ECA38602F5B7AAFCA8E56932F",
+        "de_type": 143
+      }
+    ],
+    "encoded_section": "60901348D690B04EFA3BDF4C3E8DD74A70B2C491100089BFA018D4593699A057C59303FDFE159001E8683BAAA53B40C1F61575F920F120AB62C9011FA9625A8AD44FF8014C65004A6AB6EED92C54C298AED9D6C5786557B2652923E4B162EDD974",
+    "identity_type": "private",
+    "iv": "15094DE55EF692E976BDB1EB2E745CB1",
+    "key_seed": "4D3212178C679CC76E36E4EFD849D100876E4C5C736EE0B01E151B5E35E587D0",
+    "metadata_key": "17DB670A98FF3B44602C3F65108464DD",
+    "section_mic_hmac_key": "447DA33BE77C14468DE40322000D3776B80F7C4C7B86FE52477BADD157B552EE",
+    "section_salt": "89BFA018D4593699A057C59303FDFE15"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "47861A7A891274B6D1655A79F98921A7",
+    "aes_key": "9FEB0CE8CF647F32689CFE9E28ADBCF5",
+    "data_elements": [
+      {
+        "contents": "9479B8564C4C861081E6D40EA07313E136A03B205A37292A9F",
+        "de_type": 767
+      },
+      {
+        "contents": "20FB6D81898875FB84B96904690ED4D15C3CD5C6F17B1B5BBB08",
+        "de_type": 958
+      },
+      {
+        "contents": "23880B754346286380FD62670369A54B",
+        "de_type": 970
+      },
+      {
+        "contents": "32891E939A61CA6F8CA86CFD4BC1B3F1629927",
+        "de_type": 871
+      },
+      {
+        "contents": "335F55B4E34382BF37EBC5A21CA9624E",
+        "de_type": 669
+      }
+    ],
+    "encoded_section": "AC9013204837C358B2A875405D09FBD7B3992B9110007BECADE8EA1435CDBEDBB18E469114CD90045863BDF633745EA129538D9B3BF1263E6B09ED55748179F0FBECA95B8AA38C87CF1DC3EA24AC9955EC83759B362C2A1DF7FA8D251A5F294D9BDF349819D535EE4C752BC42C555C0DED91CA4AF570787FB68A0702BAA497BFB342030E81B8816B76B8D79F380A80EF0B4F96CBB9194D5961198F675C06279040BE4523B520B17A323E342059",
+    "identity_type": "provisioned",
+    "iv": "C55BA6CDFD4A092E9D94E5A89F1AE2C0",
+    "key_seed": "28D860FDABC254A35234D5E56C8F072CCE1A5D1CCF76524FD9E9805DB350C23F",
+    "metadata_key": "B9D69EB1576E56E08FCDABB5FB775F60",
+    "section_mic_hmac_key": "949A61FE8DB02C341BC58D96B84585433522ED90E57D604684380A8A2FB46F9B",
+    "section_salt": "7BECADE8EA1435CDBEDBB18E469114CD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "242B4AC6DBBC48533D80BF1FF9A4BF08",
+    "aes_key": "1964275B07A2CDE782A915674B2C3B30",
+    "data_elements": [
+      {
+        "contents": "B0593CB5472B608EE74D7AAF4483E3BFBB6EC807D36B2D7C3FF2177F",
+        "de_type": 378
+      }
+    ],
+    "encoded_section": "569013168E3FBABE4BD7F9026CB85EFA63BDE8911000CAABF68BB9EA843F3160944F444553419002B2A9BC48B3ED25A01FFA491A2AF4EF727511880B33161D0EA013F792EE3C0E468C3F265030A1B29240F37A7538D111",
+    "identity_type": "trusted",
+    "iv": "98B3F79C48E45D75E4FC709E41D150A7",
+    "key_seed": "AB5F98D672AFA5DBEDD0E7805FC1B4ABE971B54CF02DC2E543267FAD43B35882",
+    "metadata_key": "448C2CAFA3490A9746664729BB8931F2",
+    "section_mic_hmac_key": "63938C028CFC2E53E88F94C2646B8CA4785423173A512051B50D02D2704751FB",
+    "section_salt": "CAABF68BB9EA843F3160944F44455341"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FD0B85F4098C82550A9EC6DA9D240983",
+    "aes_key": "89CF85C86296167F6F1CEFD3C5A4E4F1",
+    "data_elements": [],
+    "encoded_section": "379013540CC96A83E31A5086D355E221B7B4DC911000092281802DC11AD81D24A85EB69CFB689002BA7E7247677B83453C745F87E64F4474",
+    "identity_type": "trusted",
+    "iv": "6302C0AB71F4F52B8D7D57088A495AFB",
+    "key_seed": "B5DFAA6C34894DD3C1371C2D525CD1040228261883DF3C71C446EDA72203921D",
+    "metadata_key": "1B17E9776E56ECA0EF359DF062118638",
+    "section_mic_hmac_key": "5C681440F84C62B8A7342600E73987E8E883A629B0B9791B26F53673D830E072",
+    "section_salt": "092281802DC11AD81D24A85EB69CFB68"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4C2EBCD9668E6E1D431E059EDD16D0B7",
+    "aes_key": "EC3A1D6A13083AAFD8DEDAE93F24FE23",
+    "data_elements": [
+      {
+        "contents": "BD9F8933F20E3D83BAA4537CE0B99A8E21",
+        "de_type": 898
+      },
+      {
+        "contents": "A7F0B8AB76E1F886AF2F54B4C8EA991B",
+        "de_type": 433
+      },
+      {
+        "contents": "2C8F580D0FE48B",
+        "de_type": 265
+      },
+      {
+        "contents": "7FA7C5C31A427B669C3B923BF5E06A74586691",
+        "de_type": 780
+      }
+    ],
+    "encoded_section": "7E90137F75593A7313AEA3845F542E199694AF911000C229127841779C7A5C4295D5969988F0900400A4D8B0D35EDE45A79C0578B7F93A687E7BD4E8B16F53545FBE12C6A99CD768961DF08D544D978C5E2CF6352BD2E2332181D46C4196BC0CC9AAAAA01DC2E32DE9D7F41480769306C071113EDDED0EC4C1E56353E2DBE0",
+    "identity_type": "provisioned",
+    "iv": "DA2728120E5CD3EB3AB342BB30E97EB6",
+    "key_seed": "C644228C08EB7994A9A2F594C73B5A6C60D7D35D6DCB5CC02BD356CEAF43B0F3",
+    "metadata_key": "5DFE12C82CE8EC51C896FF3A05C99A8C",
+    "section_mic_hmac_key": "92C128F03A968B4E386393F1A92FD7D5330A1354BFCEAB5CC3546913D799B338",
+    "section_salt": "C229127841779C7A5C4295D5969988F0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1CAF5E2F6922816F4DFEEDD6EF50E3B0",
+    "aes_key": "05BCDFA12204C89B560461D8D0FE199F",
+    "data_elements": [],
+    "encoded_section": "3790135F8E313E539461B0909160F59361A52B9110001DFB04A1D36A2D1246395348A3DC32B690012EBBABD8762AF1563969C0A4C0944756",
+    "identity_type": "private",
+    "iv": "33953147560A0CE8D874DBE2E43ACE03",
+    "key_seed": "826FC403B24CD2C2C09615C7615519DF4F307F825FBFB6F9FED666C30009E00F",
+    "metadata_key": "27045092CED412FED90E2830E2885062",
+    "section_mic_hmac_key": "CCABF9B74F78DB6DD3D0D52AFA0A682CE02CD0A922BF6DB9C30FCF6AE0C32AA2",
+    "section_salt": "1DFB04A1D36A2D1246395348A3DC32B6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1EF0DF08D58298A0E357D58C46A37EB7",
+    "aes_key": "048A4B2AA3DDE111E4BA17205E03C662",
+    "data_elements": [
+      {
+        "contents": "010756998EB5D06CD09797872B98F792BED2FF8DFDC5",
+        "de_type": 314
+      },
+      {
+        "contents": "2D49F47794A626D6136EC1B131DFBEE037DA81FF",
+        "de_type": 805
+      },
+      {
+        "contents": "3233E2AD33C84C20EE5C873647FF2C973F33C2EE2F",
+        "de_type": 198
+      },
+      {
+        "contents": "F801D66076A8D735EC95383F07DE6E61",
+        "de_type": 151
+      },
+      {
+        "contents": "61FE63986EC6C8AE1DEC1D60",
+        "de_type": 74
+      }
+    ],
+    "encoded_section": "A090135F57C94D2A4431B25F9E82466B7F7F75911000135861848398D4D2D008FB8F23BA28609001597090AD434166B89B3C1D0E8C9D519026C80588D401F0FE4C1024A011246A8C34EFCB98FE65AF5E9143ED806F38AEC55CBEC4E5331527A788F61DBFDE946500BA9CAA2363F2652B11421D386DC1CDC7491DCD16544DE410447903729849F858AB6AC3A538E2C7A08A26DD39D4FEDEB03A89000214260E53DF",
+    "identity_type": "private",
+    "iv": "E824A7EB69FFBDDC98410CA5AB2B2ADC",
+    "key_seed": "7E5E71048A74C3408127CE6A9F9AE1E2C6BB9328824165310E7AB1F2C46268CF",
+    "metadata_key": "7F11E9659E1ABCE558A04E7072106314",
+    "section_mic_hmac_key": "9BD45B87E27D82FBF6C663E8D208F1C033A9751F7C6A1FA7AA9BD3DBAE9C920E",
+    "section_salt": "135861848398D4D2D008FB8F23BA2860"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "56745800DD04412A18EF2923C2C1E5C5",
+    "aes_key": "B9CCB0BD14721C95C4B8A82343B0DC69",
+    "data_elements": [
+      {
+        "contents": "3210F9990AE69BCE70A95FD0",
+        "de_type": 546
+      },
+      {
+        "contents": "4311BACC1959CB4110506351FC8282D2340D",
+        "de_type": 710
+      },
+      {
+        "contents": "ECB77BF5070098A9CA3B5476FA51289575431A",
+        "de_type": 699
+      },
+      {
+        "contents": "456E941BF4E877C7C0D3AE3194184576B38648",
+        "de_type": 943
+      }
+    ],
+    "encoded_section": "8790132B1F4D078DABBB8B2F7F1AA4B2CE000C91100043713488CD976125D5C9021673B54BD49002DFCA02F508566D9987015A4B9EA57B18348BB3BD0673AF96D26EC99CBD8F3710AD07925C202D19CEA07E2A3E174737A01A87BD7BB64E07668D0F73704A3B07D3AE1658C07351FD670EA94CF4F2255C2245B6776B348613C593373C419E33BF97",
+    "identity_type": "trusted",
+    "iv": "E9F160D212F5F23E6E0C7395A49A8E17",
+    "key_seed": "3FA2A3D35B24B6E8BD5CD626AA7B3BFA7C3B4BF09CDDE290728DCEC2F3C4D0FA",
+    "metadata_key": "5926F8FA508EBAF60496AFD11B60B167",
+    "section_mic_hmac_key": "936442541778732A30D1A91F94FC0F18AF5DFF9E328C37594578316656B47723",
+    "section_salt": "43713488CD976125D5C9021673B54BD4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A987A4F50BFD7B25C8A49901CF43A052",
+    "aes_key": "A5595C267A34F4870597DBBD4827DA38",
+    "data_elements": [
+      {
+        "contents": "33118B478C00918923C55B1DC54A31C5BF790066C778B7",
+        "de_type": 933
+      },
+      {
+        "contents": "3882AA0EBE9E8D",
+        "de_type": 402
+      },
+      {
+        "contents": "578FCB48E206B3D6C98EAC841DE9D1AC69D43023E62AD6",
+        "de_type": 610
+      },
+      {
+        "contents": "728D9B96470AE5B5ADF38A1A9A4215C031970DB045DCE4E2BF",
+        "de_type": 779
+      }
+    ],
+    "encoded_section": "9190131C0606B17B45C8BE9367B22C9B395B76911000EF7232F8A53316C10FB9B12BDBF874C290019BDC987EE78BE56EFB2B4DA056A45DE88D0B51BB0BCEA3D5D16437415CBB54912083E236626B501B8892CDD61FC154F5FDD5B6603E0AC315345B0B66C9ECF7A1C73735771D014ABB59AC6F08E89E47D78248067B5D01EB5D86227C029BCC2BB0E6BB44FF9BE8B4C9F6D3",
+    "identity_type": "private",
+    "iv": "CBCBD0C1CFF1E1A93AA4A851A0A412CE",
+    "key_seed": "26FEC8FD9564D289B5D8F52A5D92F3374D16F03EA56BE5F4D7598CE444605B3D",
+    "metadata_key": "7A37107DFD235BC0A8A94FD05AA69EF8",
+    "section_mic_hmac_key": "4AF863F5A51CA185E843E04C8ECBA614DE86D229BDE71D113E280FF688AD0A6A",
+    "section_salt": "EF7232F8A53316C10FB9B12BDBF874C2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B177C937AD0440B365E3C3CED0B4ECF5",
+    "aes_key": "7D40AF7575970745C5A0F7D70E3385A4",
+    "data_elements": [],
+    "encoded_section": "37901300CA2C36D77EEB66F56395B5F88615F1911000190E5E624C8AF7EE88442E6F45D52FDE9002379C9C52C7E36620BA82C76E9F9C833E",
+    "identity_type": "trusted",
+    "iv": "FA5F5B43D79163347C5CEBE72EB7D1A7",
+    "key_seed": "C26723C79C5316A9AD2DA3F33FEAE4A2E88A2A1135E1DE408ACC7EBBC97DA81D",
+    "metadata_key": "4917FB622BBA8489B507FEC52AB3E689",
+    "section_mic_hmac_key": "E0624BAD763E837D01A7DC8475A6D4BD032BF029DA06117674E1E46B41FD59E6",
+    "section_salt": "190E5E624C8AF7EE88442E6F45D52FDE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FA2D6DC34EE5F2448477514FA147A69D",
+    "aes_key": "0E1EE274831F71B301A6E8DD14D07B5D",
+    "data_elements": [],
+    "encoded_section": "379013409E9C337F0F080FA88218EDB7D662DA911000F54BBAAC999D3077F2358E0F5D6F6E189002CAF808A29DABEE53046F9E213AF03D3A",
+    "identity_type": "trusted",
+    "iv": "AFAA0446DB0D21D787121C963804CECB",
+    "key_seed": "26F4220C4937B3B3E8A07F53D536205F49A00890B97A10065CAFC190FC2D94B5",
+    "metadata_key": "E6D25ACEFE69AE468697686404908507",
+    "section_mic_hmac_key": "3772B9EE7DBFD9EAF93856E0ADAF7893EAE501B0AA4319634CC71396051E3D0B",
+    "section_salt": "F54BBAAC999D3077F2358E0F5D6F6E18"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A6280B06DBAACBF7D349965D5BC89A29",
+    "aes_key": "87E8362317FD13D66B3CBD2BA7945474",
+    "data_elements": [
+      {
+        "contents": "6F38BC6C3C51A12F811B2995",
+        "de_type": 995
+      }
+    ],
+    "encoded_section": "469013DF0934F5F3F9B6112BAFE9E4247E6E469110001714054198B85EB13501CCFB5238EDE09001516776B88AA711D867D8E555AB751386189FD0EA6AB0B46AE6FBE32F00BC32",
+    "identity_type": "private",
+    "iv": "14CAD16E8873456B63116AD8D44A1DDD",
+    "key_seed": "795C911C94D65CF52423B7FC80A1238AD2B368E9B63B84EE68B96C254BA9EBA1",
+    "metadata_key": "387D38DB6B421C87D9730E68378C6A66",
+    "section_mic_hmac_key": "527195983F0A34F82CC68E7CD179E0E76A715C42221BB028807E09633EBFA556",
+    "section_salt": "1714054198B85EB13501CCFB5238EDE0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B93D5B221DA6B6630432D05971BD097D",
+    "aes_key": "D145D00B76039023095EFCA293AE5C31",
+    "data_elements": [
+      {
+        "contents": "B85F85569E8BA916DBD401A29DA12D246B9CC1B8A5E1443FAB343099",
+        "de_type": 276
+      },
+      {
+        "contents": "2B31FE53220530EE7237618120",
+        "de_type": 912
+      },
+      {
+        "contents": "016008F70522603B5E4F6B76344F3D52C5A57B39E4038AF8A8F42A",
+        "de_type": 602
+      },
+      {
+        "contents": "B14882D90E5C4690F09CF3E945",
+        "de_type": 318
+      },
+      {
+        "contents": "FA4E574D4E2E615A3FFD2D185AEAF145B2D71925C152A6",
+        "de_type": 822
+      }
+    ],
+    "encoded_section": "AE901319824BDD1F5E974F6DCFDB43A2CF01E9911000B7B0B621D9724F0DF78391C91EA696C390013DF4B00F304BB7398762286C53648CFFC8255329F55930F1897E2C263298D50D3742A38F2FACCA2AD4DEC504F26B0807F402526FB44C656303A5B2C2FDDC0F66E986C1A4622D795D2F69FA1D7897BFD3C51B0C73B41A0FADD795C81A929126AF23142944F6B7D4E8555A23013398C47010884C0F528304A648B5CFCF48DF789BCBB9EF14D2A894",
+    "identity_type": "private",
+    "iv": "EDCD3E09ECC33CC0428B84B84A306290",
+    "key_seed": "F4DFBB6FEAF8AC93BAD4732CDB320B6E862122646F848E275919104C2D42A873",
+    "metadata_key": "BFE267A05480880B72716BE7339D871C",
+    "section_mic_hmac_key": "B8B176BDAFBE2009FAA4061560DECA5E315497E163390EF339DB071B15FB4B95",
+    "section_salt": "B7B0B621D9724F0DF78391C91EA696C3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E12D7AB4AD24788123EBE401FCFE0361",
+    "aes_key": "B9B30EA4622A6F9D8AD6F0E55BA4B942",
+    "data_elements": [
+      {
+        "contents": "3051CF22ED9D25",
+        "de_type": 618
+      }
+    ],
+    "encoded_section": "4190132465A472C19E1132D6920D85859C462D9110002A68F093B202AEE3BA5C5920E1CFD169900148079856121A9BD3EE0EE241012343707145363A5036B2FD221B",
+    "identity_type": "private",
+    "iv": "A8B13B39231EA9901D765FAA4D903CA9",
+    "key_seed": "F401092F0C5FE27E56C9A156F3758F00785479106A65D15BAE8A71EE0D74882A",
+    "metadata_key": "A13B7F9FC15F2BC3CE3DA2FE7A12B8F1",
+    "section_mic_hmac_key": "109B276D0832C380BEB445EE69833504C4C1C36336ED29FD5A968275539D06C4",
+    "section_salt": "2A68F093B202AEE3BA5C5920E1CFD169"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4A44E437E8CB79A4D9CD8B36C741598F",
+    "aes_key": "9DF76674041561AECBE242B96765159F",
+    "data_elements": [
+      {
+        "contents": "6DA30D675509E1A51259DEDA2F11E5B3BF23A8FD",
+        "de_type": 639
+      },
+      {
+        "contents": "87DCB0D2DC1A",
+        "de_type": 247
+      },
+      {
+        "contents": "7B59DEB0A3127B05BB534C71E77E35918E83DF59",
+        "de_type": 589
+      },
+      {
+        "contents": "",
+        "de_type": 101
+      }
+    ],
+    "encoded_section": "70901391E265F35A1E0577B27E896855A176F4911000BD2435F6F73228A37BC92F68AA6A147B90019E7DD0615640A2FE79D4239B6A943831D7C153CE9563FB645E396005A037F61F5F3F9D85A9F028D370A22BE88A7DEF734208CE97931054D7D6002432993830428EABA280091229CA39",
+    "identity_type": "private",
+    "iv": "4C0F11065C0D0A50281895D599B113E7",
+    "key_seed": "F3D388C12E7FACB9A9A10D71841128E5AA5B62203C4D9288CEF583FD0C973281",
+    "metadata_key": "36BE0AAEB9570FC44C86D948C112D2C9",
+    "section_mic_hmac_key": "6C082598D6635262737FDCD8CF2C84F0564A88B0619C46B1087BF10C19D3DF60",
+    "section_salt": "BD2435F6F73228A37BC92F68AA6A147B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "AEA8992BCF56D8C977B4F23CD035215E",
+    "aes_key": "FDBDC8FC03D9D4BD00E02D7E95BC806F",
+    "data_elements": [
+      {
+        "contents": "29FD64AA2AF020C8C1DA859D8F",
+        "de_type": 274
+      }
+    ],
+    "encoded_section": "479013F445F2D544BA05B19A3476E945DFE97D91100072C4FF46E7236884EA75F40693BFF42E90048B3C5601202F9764171E03FC75A45120BFE756EAFF35D3CE64EA5C749E93FA52",
+    "identity_type": "provisioned",
+    "iv": "48F82C64D3B561EC02F68C129E705F7C",
+    "key_seed": "3B1B53F1A643F064C11C5FC0289D3AC60314493366D5286899B4398A579F5D64",
+    "metadata_key": "B1CEED2817D2815495A72C8BBB856EA0",
+    "section_mic_hmac_key": "B4155D5CEBB91D838092A22CE031FC3A18C751BD1C93277781EBD05EFBEA5449",
+    "section_salt": "72C4FF46E7236884EA75F40693BFF42E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7844FD878C399C26ABC3F5898F1EEE7B",
+    "aes_key": "26EFB718B9B26B32C37DDBCEF467D023",
+    "data_elements": [
+      {
+        "contents": "F17E9BF1E3F0713D0F30F2D160",
+        "de_type": 538
+      },
+      {
+        "contents": "D18840BFB3F67A8CA354755541827C27BA67804B9379D966",
+        "de_type": 121
+      }
+    ],
+    "encoded_section": "619013AEF9942B3FCE71119B0158F3B5CEFFC19110002D3887C9CC4BF9B5678676E908D6B65390010ECA727C2BEB2D8BE03CF1AF18057D68A28F3C87E05EFB8C46FD8F70E81C44BEA67C5B744AC821302A345A2A078260A815FE69088127C8B377B8",
+    "identity_type": "private",
+    "iv": "849FBD20C4DEE438141A13D97554D787",
+    "key_seed": "5162B090AA207D037425C2D3A1627A01009FCBE33076984181B26E948630B08F",
+    "metadata_key": "792BAA366C23A2878F7D5376867E03A6",
+    "section_mic_hmac_key": "1235C37B0CA4D707242A8DC6CCD79F80AA9DA1462E6AE7729F3C2680F38C3D5C",
+    "section_salt": "2D3887C9CC4BF9B5678676E908D6B653"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F42DCC02D50640A2F658B83FB4E7CCC7",
+    "aes_key": "616EF3104C743DEF83DDB73A4054469A",
+    "data_elements": [
+      {
+        "contents": "03383E9297",
+        "de_type": 260
+      },
+      {
+        "contents": "9462914DA98DB75E09",
+        "de_type": 412
+      },
+      {
+        "contents": "1DE476",
+        "de_type": 421
+      }
+    ],
+    "encoded_section": "519013D4E125FE1E65626076AFFDAD82D5BF889110007F4552E79D984C742B9DADB5F74E95189004D3AC96826BB9BEFC0F1E79081B62A2FE3B1E9ADB08AB470AE6F93E8B7A809190D6312B28EC8D81AA0801",
+    "identity_type": "provisioned",
+    "iv": "D7A0BC0D7FE96922460BA73213646E9D",
+    "key_seed": "3ED27ED5664D454F921BCCD0869CE1CC7B3BB85E7585375DCB33FB0650EF779D",
+    "metadata_key": "EB3C8E526E6D9235391E827F2C6E231B",
+    "section_mic_hmac_key": "BC311E65AD6DD040501783F1664655BABE513E3B907292CAFF9BE29FFFF4A448",
+    "section_salt": "7F4552E79D984C742B9DADB5F74E9518"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "362715986AEF2115C1E99FB44EFA1C75",
+    "aes_key": "C59A28A212B4FCDAC1E16462C5B1D165",
+    "data_elements": [],
+    "encoded_section": "379013A2A1BA7A82B6F9CDA55E5FCCAD4257AE911000B55714FC13B8BD3C6B8C0A7C668F1BBB900270E9E6041661BF6F78C6AB5322EBEB23",
+    "identity_type": "trusted",
+    "iv": "0D644B9401404857EE408775BC5A52A4",
+    "key_seed": "1568B68A9D59E4C9482EB671122CACB6663B00DE1215CB0FDF68A5B32E186478",
+    "metadata_key": "54A22FF50922686A95E211D724463375",
+    "section_mic_hmac_key": "46281BECBD442DFB726A2AAF39230B5EFE5018E343BC551B2E48A5750E83D8F2",
+    "section_salt": "B55714FC13B8BD3C6B8C0A7C668F1BBB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "505CECCB0BBF804F3680A901A0A84A21",
+    "aes_key": "4CC11507027A2925184A972BDDED37ED",
+    "data_elements": [
+      {
+        "contents": "0F4726CABAA7A44D817F00",
+        "de_type": 319
+      }
+    ],
+    "encoded_section": "4590133CEA393A75D831272811392FAF4A3545911000D776BD1C0C14FEFD55DC62B967C2318190041F745F67713849A775058D883A469627A056A7C207EED34AB4CE3B710878",
+    "identity_type": "provisioned",
+    "iv": "BED30BD783D7571B1564D14C3759997E",
+    "key_seed": "BD9A88F8FA79FEA622C56138525FEA07EFBF53800B3AE4CDE7C6CA69B2A0D9A0",
+    "metadata_key": "2BE32D599D847EEF1023E437601655D7",
+    "section_mic_hmac_key": "01D5077099F1BB11915BF29E3CFA7DEB563386EC878CA136DD6F0D1813ECFC2A",
+    "section_salt": "D776BD1C0C14FEFD55DC62B967C23181"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6C295D404B8FC5E3737BDF1FD586EB54",
+    "aes_key": "333AC5989888D159B59BEE541183F1B4",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 376
+      },
+      {
+        "contents": "0EC58152447FB55294C763C5310B90C4B1BDBDBA",
+        "de_type": 897
+      }
+    ],
+    "encoded_section": "5190131DC5A94934AB3C124656E7E19C9D6D74911000D77197B01CECE72E38B7055E1B2A4E9190028EA817F765B15EFE6F9B1273E5164FAF6082E6F6CD317DC41D9C1DF860C7F17D7E205EE1D4ABBEA59EAD",
+    "identity_type": "trusted",
+    "iv": "380397FC7FC735D90D60C40DE97D64BE",
+    "key_seed": "58FE4D29790740442D5A1BD2ABB189DFC42B41E4507A0517E061063AA1BFF5E1",
+    "metadata_key": "E4FDCED3B8BA98A09E195E2521274AF2",
+    "section_mic_hmac_key": "22E7FBE87FE2B9FD4D24A0F8A6EF7603DA4AAFE314655DC486D46A197F95DABD",
+    "section_salt": "D77197B01CECE72E38B7055E1B2A4E91"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9B60494234512A3C9B6A5D72533BB7A2",
+    "aes_key": "8924A8A345E22836490AD4494DB516BF",
+    "data_elements": [
+      {
+        "contents": "FAB3FD79DE4BC47D2C14B8B99E",
+        "de_type": 615
+      },
+      {
+        "contents": "3479BDDCE860",
+        "de_type": 667
+      },
+      {
+        "contents": "18D959580DA781",
+        "de_type": 786
+      },
+      {
+        "contents": "615DB667E6E281BB9A3641",
+        "de_type": 610
+      }
+    ],
+    "encoded_section": "689013C05D97E98B3B8BB1E3DC27D55ED975259110008EE527EE8F974D8E0D0B5B3A665965A090027C5BF2D01D8AED7FA473E8B2DAFED89D2EED05E3D6065A114F2530D30AC5FEB37A439A32AF1D037C6C8EDD5B12505354D0FED97E72C125E079EAAEDCB44CC22355",
+    "identity_type": "trusted",
+    "iv": "8602AFBB2A34225261DC074174B8E670",
+    "key_seed": "CBAFC7E710BE96D3F94FF216AA7F2933E66B1F7C5A57DBAD6E79564DB908CF06",
+    "metadata_key": "0A8E7FD1F928402D5ECD50BD80D10A66",
+    "section_mic_hmac_key": "3099BF02D5FD168EC01E036738BFB8E30BC0FB4AD407AE3A08F8D8239F64F54A",
+    "section_salt": "8EE527EE8F974D8E0D0B5B3A665965A0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3FCD698F9489E37EBD7F6A4D3224C33A",
+    "aes_key": "F99653068BD2A63FB36578720F9F63C4",
+    "data_elements": [
+      {
+        "contents": "ADBD7E7559",
+        "de_type": 555
+      },
+      {
+        "contents": "48125DBEEC95494C0577757CBADE",
+        "de_type": 909
+      },
+      {
+        "contents": "E7AFB7E6690AA0FE3747EBE2F251B606A034A4D817B5",
+        "de_type": 14
+      }
+    ],
+    "encoded_section": "689013BB941D4C7CE5BC91FB3D4E6041E4AC9F911000ECBAF5C243C3B5BB209210D84B821A2A9002926509475302C3EC09089E68268572F1525C6382809682E9FF8EB06701D647A5AD7B8038E06C851B7A76FFE98403A5C7DB36893D5CF95FC349E98A177FE6C90CDD",
+    "identity_type": "trusted",
+    "iv": "D237427573873BBD2A6B372FB9284963",
+    "key_seed": "90D41DF3F409B5A2C6895CC449ED835C3C70E509551F8524DAE13F3F4E42A429",
+    "metadata_key": "86FCB812E49A140B17C7803C51121583",
+    "section_mic_hmac_key": "853B7A9AF337E2EBF2805550EE36447233D006CECB4E4BF7D4085C875F1497CD",
+    "section_salt": "ECBAF5C243C3B5BB209210D84B821A2A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0AD3C84FC7C58D3037142AF41852CD42",
+    "aes_key": "85571EBC9483AF47E86FBAEC31C8F2C5",
+    "data_elements": [
+      {
+        "contents": "D133239451",
+        "de_type": 901
+      },
+      {
+        "contents": "6C2762576EFDFB6F86A41D4FBFED",
+        "de_type": 422
+      },
+      {
+        "contents": "4510C7CEA7E09A03E0B7AE2EBACE9177BA7B1D46AD94256574",
+        "de_type": 922
+      },
+      {
+        "contents": "DFDAF2",
+        "de_type": 207
+      },
+      {
+        "contents": "C5335141F74C8E52E4F2230872366E83D2678B8C373D03987665C5528EAA",
+        "de_type": 844
+      }
+    ],
+    "encoded_section": "939013013988FEF35F4BCD059C3077FEB6E19791100091327AAC510808996400403A8CF444DC9002A0A7721297142DF288D8AF4E70874CBCFF74B11FA183925FE595C24F1E676AA8D158EA2605B283FC22951A389C097CF4DFEE6CAEB829CE8C387E3826C59499AA6FE04BAB5726249A4DB982986B1FDB3BAA5772D7EBDC16ACCBE061AB6914C61DA1F98B8ABFEE3360633E106A",
+    "identity_type": "trusted",
+    "iv": "82B513DD8F4CA0CE7C5E0E4889E860FA",
+    "key_seed": "5A29295C59212A429AB6EA78F278EAF3ED825F57AB0D2A129F52CC277B1B1CC8",
+    "metadata_key": "EC7EDC4ACB3143F6427A9519FDBA9416",
+    "section_mic_hmac_key": "80D950334DC3B27A0260AFE2ABAAB53C5E3C1EE022289A4A81D8933620814D90",
+    "section_salt": "91327AAC510808996400403A8CF444DC"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C6C90D3B1F749744590F016A23507912",
+    "aes_key": "5921AACC16814BC770EACE04A011DEDF",
+    "data_elements": [],
+    "encoded_section": "379013C51A5B8064CCC91CBF70A7BDDE6A35B1911000CB58CD4EF7644C8AAE7BCF0E9123BD119002B868633C18CF476A943747630391F0B4",
+    "identity_type": "trusted",
+    "iv": "7D48634F169987CC2E53CE148B93BFF1",
+    "key_seed": "77691B80B2C0CA3BAD73653F05B84C0C31704FE6BCDA1551B055B1286F805F86",
+    "metadata_key": "0820719A54E2A8D41FCCBE04F6A19116",
+    "section_mic_hmac_key": "A9AB5A8E48AFA1C80E86E9764088305C75F440B1CCFABFA9BBAB981966EDC225",
+    "section_salt": "CB58CD4EF7644C8AAE7BCF0E9123BD11"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "AA5AEF76D88EB7A98704D6F786978A79",
+    "aes_key": "D0B5E2F53665D4A49213F8E3CBD17238",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 130
+      },
+      {
+        "contents": "008A8A351B53EB339B92051ED484AF78D7",
+        "de_type": 212
+      },
+      {
+        "contents": "EA",
+        "de_type": 970
+      },
+      {
+        "contents": "61305021F575FEC5427EE4E5F007CC548C7D3DF098",
+        "de_type": 496
+      },
+      {
+        "contents": "819984253481F9F903BF58DA2CD7E426E11C681DB803",
+        "de_type": 526
+      }
+    ],
+    "encoded_section": "839013C5B60ED430A58C53A974CBA2B932B7DF9110002ADC62BC5A15E27A5D040BD13364457A90029A1C3316152852BF28F18AD8EA58D79CD5CD5460B1F6FDBF6A6DE7982068DBEF5A3F0DDCA5DC1AE558681667C1E896DED773B85E637CFD76AB97C02B7476D058AE259383001072DA55A825E8D9AD8B52640C2C17938D087A7C2C5376",
+    "identity_type": "trusted",
+    "iv": "F11001063B0781ACC0C9A56FD606E2DA",
+    "key_seed": "321B859773DD3BD05F2CA1B0EB5A8B2D50A2CF4800DABB6137B80E0B9E77C53B",
+    "metadata_key": "9F67F3ED285AA4A2065101F5170DC3F6",
+    "section_mic_hmac_key": "38CB19DA21A127986862AD06AE17603FAD6FFF450BEC8915C71765995E3C9E1A",
+    "section_salt": "2ADC62BC5A15E27A5D040BD13364457A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "85033540DAB893A56198E6C61D126215",
+    "aes_key": "FA3F91590A9FAE50C85DC060118F34BF",
+    "data_elements": [
+      {
+        "contents": "C1BD30E9571DFD4A46CE538674AEC77965",
+        "de_type": 302
+      },
+      {
+        "contents": "E0F4F75A38F47A611824C3C7C36D66EF4F66F7B386ED5055586875",
+        "de_type": 357
+      },
+      {
+        "contents": "45531A11802F333B",
+        "de_type": 496
+      },
+      {
+        "contents": "4884A8F995F73A415EA5AE2554B5",
+        "de_type": 935
+      }
+    ],
+    "encoded_section": "8590139CA7E3ED77C285D887178284CD648077911000D916BE31B39EB0B2C3C8627643F4064C9002352CC9CF57BCF7235F98A537B7DB5615B5DAB258536C24D51FFF0170A18125ECFA058FB63858701B8E98F1B8757F7A95194C86776C49C517F8D30868299BA3221D66BF197D6416A1CCE5044CBBA2EF9D42EA5DABCD618FB117B75E948A18",
+    "identity_type": "trusted",
+    "iv": "8B5180935197933E61C2A44911D15A10",
+    "key_seed": "8E6C7E27B061CB997479DE0B6369D0D06A74EA34B3CCE46E4C8E184D2F5670A9",
+    "metadata_key": "42018C7AC5101C0258523EF8C7F0A568",
+    "section_mic_hmac_key": "5583258D33DBCEBDD9E51458998869791B41A2F08F182F70B1E3291D42F82E25",
+    "section_salt": "D916BE31B39EB0B2C3C8627643F4064C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D3AA4C688EA0AD1918F1C9D71C75562A",
+    "aes_key": "580E68ACEADCF22076DFF033AE22E2C6",
+    "data_elements": [
+      {
+        "contents": "EBE2B615",
+        "de_type": 8
+      },
+      {
+        "contents": "CD5A0B2223F0E8D0F2C927261AA127",
+        "de_type": 597
+      },
+      {
+        "contents": "254D8F45F8E5265C7CA01CB5EBE36D2F5E",
+        "de_type": 980
+      },
+      {
+        "contents": "CB749F9F2474F2E1431C822E853FAD78854FF8D2D869E13E",
+        "de_type": 82
+      }
+    ],
+    "encoded_section": "7C9013EAD8F6468C5270D4F1F91C2FF6E4D795911000DB917CEFE3F87ABD3C6FE091FE7080169002CD415457D2264207614B3AD25C4684BD245F66E24FF1D32DAB7A5CF5E08EB4E4BFCD04485F639B90758CA40BFC86FB226273E95315E6640032AD8F42F5D6EAAB52D22E3067FF073AA6721FF5075A35E9892785157D",
+    "identity_type": "trusted",
+    "iv": "7CB9B3466AC81FA752E73027C9E7DC1E",
+    "key_seed": "F8649F5B5D4C6482A42BCA722751F19356663FCA5C79D85D635893696BF2ACA1",
+    "metadata_key": "DBF7DBD16D60B0AE863E8EAFEE60A8C9",
+    "section_mic_hmac_key": "A5D6A3FD29C470C7C27916035F632C5DCAD89CD7312132C6FF3941E8CDEAF515",
+    "section_salt": "DB917CEFE3F87ABD3C6FE091FE708016"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EB6BF655A2E80D1AF8D36AED56B6A486",
+    "aes_key": "17F445E7EA205A56027250C0346A2E71",
+    "data_elements": [
+      {
+        "contents": "014E6E7BB0D40BC7FCBF9BD3",
+        "de_type": 977
+      },
+      {
+        "contents": "A66F701F2B9A8451EB925DD5DFFB18273FD156",
+        "de_type": 400
+      },
+      {
+        "contents": "0B730FD3630237F45E3C6EA47F8EE72A69108C94BE72",
+        "de_type": 922
+      },
+      {
+        "contents": "AF35622DF4032B16BC69AA13859D54A3CE8A8EA0A637FD7B",
+        "de_type": 873
+      }
+    ],
+    "encoded_section": "90901303C3DADA1F1918061D9922E9F5508C449110006F4653653712F88848A16560CB9D4B289004814FF4D9FFA580804263DA2EADEAA12FEC181D131B19E561E2D3811571C796B15B584E6DF5C7B5809A3C61DAAEFBA0496D897583A8A8CF84CF5727911411A9B075C3F4F2ABF2565F7991C893638FD68729C425610B61FAAB5CFF4CDF3E4E7971C8C6DAF7BB92D08D30",
+    "identity_type": "provisioned",
+    "iv": "189A717116D2613604B3E642AE28A02C",
+    "key_seed": "706710F7D3107D9B7DE125A04EB20972E73151AB942360289B3BA4F23F7BB3A2",
+    "metadata_key": "9D3E61673F1406C976DB176EBE07B535",
+    "section_mic_hmac_key": "5907214C4AB21EEC7F1ADFF46C72E2F7D4141F5D7FA3D4A31B4E698530499066",
+    "section_salt": "6F4653653712F88848A16560CB9D4B28"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D78B7D217B2BAD5FABACC1946ABEBB4C",
+    "aes_key": "DDE0A6C66AC49FEA60647AAA0F51B3AD",
+    "data_elements": [
+      {
+        "contents": "7DE71497790F3C87A6B1",
+        "de_type": 591
+      },
+      {
+        "contents": "73168472EB83D78006B65795611C22B92E8C99",
+        "de_type": 797
+      },
+      {
+        "contents": "6FA0E9114BBD4F65224DE85910F489C4AE20BD64AB2184C32ACCAB",
+        "de_type": 266
+      },
+      {
+        "contents": "DC41AE5DE9B12057ADFCDA797B077BEFE31DD0352B",
+        "de_type": 666
+      },
+      {
+        "contents": "45E2BF06FD93AD81D32E391A18F6ED10939FB5D598925F060413E0C9",
+        "de_type": 864
+      }
+    ],
+    "encoded_section": "AF901361D877AB393135E03356064C028A5FE0911000573A6F5FB7DE8D281C473C3ADACA77FB9001EC4FEE7B442EBE106D892C85074695F12CFC7F7D03C692EB54BD467D8473F76D6C3F62AD849A82E3D4F0E2FC9B15AF8604C435C11880EC4690DED0BA67FD4D7ABD258E281C094F695843C59174BC5C59EC82C93D72BD9E9DACD4A8DCBF4B36DCE9F849A729A832325F85C097122E08CFA360CC073F8022F10C7B76E1FA8D67E0732A33DFE0259EA4",
+    "identity_type": "private",
+    "iv": "0BFF6C36B9AD3D46241C48C045404441",
+    "key_seed": "B595F2E119E405069858063A2D71A34C08CAEF8842CACFF2841103C33476B8BF",
+    "metadata_key": "81EFCD94E99E534D60F2189BAC02854B",
+    "section_mic_hmac_key": "F03A05B7EE67BF56BC9539D8102D174B556D970122EC292EA0AB6BFDB8E36A1B",
+    "section_salt": "573A6F5FB7DE8D281C473C3ADACA77FB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CBD7C88BB7E820DEA7629856F507C7AB",
+    "aes_key": "F7D24E7DF3FB39E4C01D50213CA4427E",
+    "data_elements": [
+      {
+        "contents": "B5427785105E6E551E41111DB9A5",
+        "de_type": 941
+      },
+      {
+        "contents": "27B605AB2C3FA4B3F91BCE5D3968A289",
+        "de_type": 241
+      }
+    ],
+    "encoded_section": "5B9013FF3841C3001F80A54E975483DB6C5D74911000F896663B53DF517B14CBF9A3A99BEB60900264CF1670CD3161CC7A9E07274C49BC76F0F30169FDE2C493E0E572AB011E1DFC60F52CA98E495C0F21BC81A5634B35D55B3A89E2",
+    "identity_type": "trusted",
+    "iv": "3F18203F323E679A3F665D4D7AB780CB",
+    "key_seed": "7C4425B244F0C63E398983EBACE4C33BE1DF8904348ADD1731379EDC614820F5",
+    "metadata_key": "CA10051ACA62C5408E9AD33AC0B6D62E",
+    "section_mic_hmac_key": "B923EC80759AA88B679B309AE389AD81B113BD3AD7ADFB1582575683E717CC35",
+    "section_salt": "F896663B53DF517B14CBF9A3A99BEB60"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BE0D6935B5CBCE532B644EBAEB0CB4DC",
+    "aes_key": "09F96BCC2EDE21309F12AF572473394B",
+    "data_elements": [
+      {
+        "contents": "76",
+        "de_type": 700
+      },
+      {
+        "contents": "83BFD32351F59A0C6C0886AFC296BD48C1E442AAA8CFEFCD1AFEBE91654D",
+        "de_type": 673
+      }
+    ],
+    "encoded_section": "5C90132605C5751F7E217A7E36D2C846C5DF8891100004FF20FC90A2D3B71931FA83687E046090045D73462C825BE89AACA4AD1EF3CDC4C5A6E3C257787693C51547CD927B09438CDECDC82610E04A0ECB445512CCD10A98ED7547A975",
+    "identity_type": "provisioned",
+    "iv": "0914932394906428A0D76EE9D518875D",
+    "key_seed": "67FDE8780AA1EEFA293EE8897234FE2C0D5DB854BF6A3215609DC44A601D448F",
+    "metadata_key": "E77492D379A619F8A40D54D91A5DBED5",
+    "section_mic_hmac_key": "F84CC8323ACBFA67420AB61721F4039EB2859FA694DD8C9FA15A9A5C5CE6365F",
+    "section_salt": "04FF20FC90A2D3B71931FA83687E0460"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0CE7F59C7D7A29C744084A1E346B308D",
+    "aes_key": "2740097F0EE9541B3FE75A1580500594",
+    "data_elements": [
+      {
+        "contents": "B3CC25",
+        "de_type": 323
+      },
+      {
+        "contents": "39E0F88DCD564592199E1D2F582BA79D054C292C6DBDAA0343",
+        "de_type": 501
+      }
+    ],
+    "encoded_section": "5990139E6B783FB0F70C3902C8A67B9019BBDD911000E3240073A3AB269A8AA57F0122D70EC490024E4CEAC73CE78AA7C17623FEA674A0F892D0DB5FD0DB28392CBDD7FE48F675E5946FC44FEAB8CD4683CAA251AA2084098657",
+    "identity_type": "trusted",
+    "iv": "3CDFAE3DA464D67F574AFDBBF69161B4",
+    "key_seed": "31F9C997DAE4B7C28566810532ED77A9BDA311E0357161B3933F6116C0E3AAD6",
+    "metadata_key": "DB75222950D33438C7D8BFC500EFE5CF",
+    "section_mic_hmac_key": "BAFA2EF3A4EC8A7EEF7B2E2EC74EB8C89D51D7589D5B316EE19388755639839B",
+    "section_salt": "E3240073A3AB269A8AA57F0122D70EC4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "73EB253EB94944B28A0929DB906F3965",
+    "aes_key": "B528A116686C84C53B6A71680E846ECD",
+    "data_elements": [
+      {
+        "contents": "F561F2FC",
+        "de_type": 347
+      },
+      {
+        "contents": "729617D310A7107E6B62763A15E8",
+        "de_type": 436
+      },
+      {
+        "contents": "26F23C2652A0978220A0CD",
+        "de_type": 679
+      },
+      {
+        "contents": "BA2CA34BF2F0FCCB4FE3C4FD0D8911F3E5E01837D810ADBB63F091B96D",
+        "de_type": 487
+      }
+    ],
+    "encoded_section": "7D9013FD4ED421EBA8A62819978D7E11C4292C911000880D39B609325E05472E3C5D8C6999AE9004358528DA38735AC35115FBCE268A37BF76F6FA4A2E2FB9C39F97E92EE39799487B4137A8D7EB669ABFCC1A46970CE5ABF8D0EF13085463535C4F871184E000260ACB47D637BE03A8FE21D3A302487A51DD89AAB1BCD9",
+    "identity_type": "provisioned",
+    "iv": "320152979988F1BEC69DBE6A55447602",
+    "key_seed": "492F19D4AEB5EA017282ADB13CF7BF4D5A271B78F75AD1BA202B5E3EADFDAAF4",
+    "metadata_key": "956FB218D86E0B1022B9D9EF9557E0DB",
+    "section_mic_hmac_key": "A1FE43F2B654C7609E652267C50E47E5006B9ADA95AA6FE9CE74C0A7688CE14F",
+    "section_salt": "880D39B609325E05472E3C5D8C6999AE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4DE153E88AE9F55EA216E8460C5B4AB3",
+    "aes_key": "437A29371741838743A218D22C151D97",
+    "data_elements": [],
+    "encoded_section": "379013EA44AEE04512C910A2DD265ADFA11056911000BBE190D2D9010D8B82EB6885F11888B8900494CB0BE562B2A7D547945AE25C11ACD0",
+    "identity_type": "provisioned",
+    "iv": "0D790B1F58DC583F71CC470CF2639578",
+    "key_seed": "E6A5B4A42797FD2443733A51FE08E0E20A97142163D82E17AED64395E2E25A1D",
+    "metadata_key": "EBE57E72E39DFF45F46CDC67406C79C0",
+    "section_mic_hmac_key": "2E2E7B8051FA5A344F74D36B3881951D476E291DA95F619AE54FDBA38F23E7B5",
+    "section_salt": "BBE190D2D9010D8B82EB6885F11888B8"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F6B8A28AA97515625D1BC8744ABF581C",
+    "aes_key": "F4FD755476BFB54A67D333FDE5F21D38",
+    "data_elements": [
+      {
+        "contents": "11E6C336306364DF2C6FFE3C44296C238FBE80A7C39660",
+        "de_type": 553
+      },
+      {
+        "contents": "F895D8637D37F08C2FBD63460CC66EC79D61DC7814A8317DD9",
+        "de_type": 142
+      },
+      {
+        "contents": "023536380CB2B465115601F0549C1E225ED0DDDCC1A5757CE504348EB006",
+        "de_type": 426
+      },
+      {
+        "contents": "90163807A994663D6BA798C051E17A4FFE136343F70CEC",
+        "de_type": 711
+      },
+      {
+        "contents": "34C1D3B746DBE55C999FE970A78892E4312154893D",
+        "de_type": 686
+      }
+    ],
+    "encoded_section": "C0901358E24D5D9BCCB5631A933692B53ACC60911000041BF71ED6F92D89A7437595D5870FC490025408C683AD58FA66667A80D6B9A16201FE80656CD7F160DAE3A0E5D6C56059E87075977DFF54C593082FCD681599A8BEF62A9152700490EAC32F0A230A4EE201096056827AFF77B0E691B83E0ACA71195C60C372A7063A662D750D1EAF2B97BF3B7BEA594B7E25A2C0449AC9001C4CD601E5329D30994932854A78B8678AABC7AE2CD0A40590EDF91F91C0CD4BC5658543887CA9CB9E36EB0D",
+    "identity_type": "trusted",
+    "iv": "A55C04DE4370A9539D0054FEB77CBB41",
+    "key_seed": "A0F4708912E13265DC407CB2E58EBA265C246741CFA5AC92C5F45003E9DC3D73",
+    "metadata_key": "0755F41DE31C1DA14183BCE6ED2A793E",
+    "section_mic_hmac_key": "45DD4376D86A64ACF88C521BEC32316AD023B10200514E6C1200E364FDBB1C89",
+    "section_salt": "041BF71ED6F92D89A7437595D5870FC4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "80B55AAFF717D29EE2150527E786FC22",
+    "aes_key": "89D2E5C6EF19C4798B18A5AC956BA8A8",
+    "data_elements": [
+      {
+        "contents": "C925910705C708716C2A2E2FB9B7",
+        "de_type": 746
+      },
+      {
+        "contents": "7441B7",
+        "de_type": 798
+      },
+      {
+        "contents": "5616AF27BC9705EA841EE82D8A8CE2A4E4F4BE51D4",
+        "de_type": 284
+      }
+    ],
+    "encoded_section": "6690131B198CEAE84F43E5333491064B8C72D19110005A8BC686BC40CFD016A6549C3E3220A79001E09548FC1B654C438A8B9949692224C81D87813B39830B110F4B5FE0F9D58BCEB7CCEDF442B77A17839F79F00A0AD51DAC75D63B7B137949665C55C8EEFDBF",
+    "identity_type": "private",
+    "iv": "C87B5050A21E0BEF4DF28C8E2E86B9E2",
+    "key_seed": "62127F82AA866333831B924405D6AD1B36112C39901CA63820FF8CAFD841184C",
+    "metadata_key": "863325C4DECDBF4CC7BBFFF32518528C",
+    "section_mic_hmac_key": "5E35357D5B711AE75EBEB698D5FD818E165687A6C941F545EA7A54486433D521",
+    "section_salt": "5A8BC686BC40CFD016A6549C3E3220A7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5CE67FEBA4AED76BB9C04DEA24F5121D",
+    "aes_key": "CD9B63EE81CCBC1A6FED8AB873DA6F9C",
+    "data_elements": [
+      {
+        "contents": "0E0FCD76BDCF900F512961B856A7A8177BD66FFBDB33F4F5F44459B009B9",
+        "de_type": 153
+      },
+      {
+        "contents": "C45B234AAC5688FC4196",
+        "de_type": 952
+      },
+      {
+        "contents": "CECEA9E54D144A541D",
+        "de_type": 299
+      },
+      {
+        "contents": "A5837AEB6B56F1C33168919FCCCA914D7668DA65107E",
+        "de_type": 583
+      }
+    ],
+    "encoded_section": "8A90130DF91C2EA62A4347A347AB4FFFAC68BB911000AABDF7BE435EF0A8DC2F5ECD0099C2169004FED4F8ABDB95DE277D5EA8CC2CDE85DA2089ECFD798827F8F757DEDB8EDEA4EE5A53A41316D8D3DB792007477A232506EDB88E6E15434D52978B671850915B0B4E91713CA3584FBC1E92581FEB81750D378A6E0D51835A8F3CA203DE4272FE41F2230F",
+    "identity_type": "provisioned",
+    "iv": "6AD1D35AF9DCFA8846CE08139586BE4D",
+    "key_seed": "3EB0A1FC103DE614F09A1A555E9F83A7B80B87712014B0CAD6C4ED25F52B9B33",
+    "metadata_key": "488C3EF28CAAB88A94CD82AE8EDFF615",
+    "section_mic_hmac_key": "2B44CC0286E9B946662DAFCA116AE8AC7464625D20BA4972F9CD5E09A226957D",
+    "section_salt": "AABDF7BE435EF0A8DC2F5ECD0099C216"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B9DEA2501303F34F7BAAF91B3FF6FDFB",
+    "aes_key": "6EF9C4550455F6B122A9842E4FF9563F",
+    "data_elements": [
+      {
+        "contents": "59E50862FE4633D3ECF91C3EDB72270FCBB5",
+        "de_type": 286
+      }
+    ],
+    "encoded_section": "4C9013D4619FC79CC7834813D1C2A27ABF790E9110000F0469848994E26F09CA0C6C440462749004F0A1A5CB662AE19B307355144B85F4EAF30056D216F9D2C0DE09D233F4C85B3A39BDB355E7",
+    "identity_type": "provisioned",
+    "iv": "EFBEDF6DCF3B97786CABF592BAF9F5D6",
+    "key_seed": "F0EE8773F58564994D1F3BA077E7A3990228BBEA25A527ECEC620A62279F0319",
+    "metadata_key": "FD3B6FF7375FFFF1CC29FFEAF9A4C2EB",
+    "section_mic_hmac_key": "7123A128F2D15A893EB34A5114774DE3D49285942274ED8F5F3FE198D58F3110",
+    "section_salt": "0F0469848994E26F09CA0C6C44046274"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8D8E8645D7B0FD0E9E36ECE388CC4F6B",
+    "aes_key": "CE9FFE75B22C96DA0FA83BC6AE435B4A",
+    "data_elements": [
+      {
+        "contents": "4C84EA9E7ABBE9805FDA1AE32592092F414A",
+        "de_type": 446
+      },
+      {
+        "contents": "E2013312F6",
+        "de_type": 100
+      },
+      {
+        "contents": "7647A9C883BD",
+        "de_type": 427
+      },
+      {
+        "contents": "",
+        "de_type": 434
+      },
+      {
+        "contents": "9A48A6A9C9FCACC1E8BC284FCF5A368125",
+        "de_type": 953
+      }
+    ],
+    "encoded_section": "739013765C4523E0C5459C2573E009ADD07AEE911000B52AEE3E5778873503DB2A7374157D499002C6032636BCCE82535DE0210C953C742AD0E29C1E270461E7C0D27DD7C81E402CBE795FA9F76971E0138E2533D0D47ADE1F673E73FB92A528A0BA6557AAEAB58AC529D3568B70625AEEB89E06",
+    "identity_type": "trusted",
+    "iv": "26E8F98BEE4A9526EA91AA37D9290E4A",
+    "key_seed": "C3F16DFE3A2C64284BF2ECC6CE660B8245B60CAF9C6BB378EC85AB0D2FBE70EE",
+    "metadata_key": "653436D31BEBCBB3B1A13D9118541883",
+    "section_mic_hmac_key": "2B3BD1A84191B22159C5FB85BD543C3673357A0F35AE67C6850E59CBE30AA17A",
+    "section_salt": "B52AEE3E5778873503DB2A7374157D49"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "034097967DC080A36D23F899968F81FC",
+    "aes_key": "FC52BBC65CB4A29005CDBC12244BB6EE",
+    "data_elements": [
+      {
+        "contents": "E911676F5B4E9F61",
+        "de_type": 566
+      },
+      {
+        "contents": "",
+        "de_type": 455
+      }
+    ],
+    "encoded_section": "459013C48F03E367BD6F91F0B051FB2D8791F3911000C713EC5C07873E7CD62C20B0DBCC23AD900203A6EDBA4B5584A004D3241D12A40A7D6249D1D9530358F146EC5843C68E",
+    "identity_type": "trusted",
+    "iv": "D2564B7B324F39EC38CA5B83BF40FE80",
+    "key_seed": "B0F6316F4E5AF9E14F4D2E0D83FF526A2FC1C243058E6388BC5DF379438AF84A",
+    "metadata_key": "2E0E3C928A480081465B77B49A94DD56",
+    "section_mic_hmac_key": "556C7EC0D6D6B7039D48F792BA144CBEACFCC0DBADFA48216F164BAEC8D63590",
+    "section_salt": "C713EC5C07873E7CD62C20B0DBCC23AD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0BC6ED4E4FAD31DE8B82828233A12365",
+    "aes_key": "3FEF727B599B4459455003A24642403F",
+    "data_elements": [],
+    "encoded_section": "3790134EF72ABDD3AFCBE1EE92620E4DA93B7291100041A9598B504C6C06A001007085FA9E0190018DDABDE4D015767D58FC48D349221A74",
+    "identity_type": "private",
+    "iv": "ECABC8AC7BA091020DC32E9ABD83EA8D",
+    "key_seed": "EC81188441C84DC2ABDB353BD825AFEE28068F397BD3E69DD9A1F51E5968CE7E",
+    "metadata_key": "D22BD70DD5645FD54109C0EF7BD0230C",
+    "section_mic_hmac_key": "B5B3BD02791CF9B92F1C14CCD4DEBEAC2DA75B7B1E09F9621358BAFDFA90BC66",
+    "section_salt": "41A9598B504C6C06A001007085FA9E01"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BF047090110BE62932CD9AEEA0A52C48",
+    "aes_key": "074D26AD25D20FB1036B4249E2E65B8F",
+    "data_elements": [
+      {
+        "contents": "C6A2397CF77000BBD2EBE6823B067AB8DBCA0B286C5CCFE016F1C4DD",
+        "de_type": 268
+      }
+    ],
+    "encoded_section": "569013EC3001BC38635A32132EA9F28B7384A59110001C583A0044B9A78DB388334F9CC28A6990047EE274D8D6CD6FF1A0C80003FEE139C37C699B106C421F4B6A2CC6519D742A54C5858A398EF3F71D3F41EE45CD0B66",
+    "identity_type": "provisioned",
+    "iv": "5FE0E2D415A4FAA3BCB05F7916A8DE70",
+    "key_seed": "D963624712D4A0EF3595BB91D3AD2544BDB5CEEE55BCD98BDFD6338616138018",
+    "metadata_key": "8DC8B52AFCC6441510745EBD7B64088D",
+    "section_mic_hmac_key": "0086E6595B16AE4D2DF1F4F0392D7454659FE056469DCC4A77F97CF03FA64580",
+    "section_salt": "1C583A0044B9A78DB388334F9CC28A69"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "70F216A7594C3FF0E50939B5F220FE79",
+    "aes_key": "F01E3A52411A7B1FED0BD6E66293A36D",
+    "data_elements": [
+      {
+        "contents": "7405920409",
+        "de_type": 27
+      }
+    ],
+    "encoded_section": "3E9013725A39A695F3E9F46AD197C21A99C2D7911000470C1930342C821B79454E20E5AB565B9001CC0690B842E78B7D6B78BEBD4211D467553DC5EDDBA2AB",
+    "identity_type": "private",
+    "iv": "0FAF61AA59E9CBFEDF4980C75B398AA9",
+    "key_seed": "179D0580612390420788D334FD020577FE02C7BD687DC505D187D79F08043268",
+    "metadata_key": "50780E0D785234C8EBF3AD1DB5C75B78",
+    "section_mic_hmac_key": "4B1B5D53E4470367C14FBFE4F7125B93600BB28C06C92793E1C64EA61627D5C1",
+    "section_salt": "470C1930342C821B79454E20E5AB565B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B3BFD568BC29834E2E7F3464E5C51A4B",
+    "aes_key": "FB487D058A744D7651D78F35E65719B7",
+    "data_elements": [
+      {
+        "contents": "DF9EF9CB0BFB15675BBB5538BEAD105177B941FC3D686B",
+        "de_type": 797
+      },
+      {
+        "contents": "7D24B6A84E",
+        "de_type": 884
+      }
+    ],
+    "encoded_section": "5990139FC1B788D94802986DBAEDA37EDBA2AF9110006BEF387F51D62868738ADD58FDE218249002E262DBF23D1632384B901434E093C6998AB986226C99C8F7F6B3F9380322ECFD251D8B8BCBC6F9D2F197CD856C2BFCA6799B",
+    "identity_type": "trusted",
+    "iv": "D1646EED1BE182D8F658BBA68FF28CD0",
+    "key_seed": "0DD1FE126C5BAFC3E252D7DA0594D99F343A912E0621148915369B386348172F",
+    "metadata_key": "12E52DC79FFF5748E238F667C4CCCFE1",
+    "section_mic_hmac_key": "B5B5BE70DA1B6E67300A257C9568D1D777263CCE944001D4571F86966237C266",
+    "section_salt": "6BEF387F51D62868738ADD58FDE21824"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "043890F126BF8FD56249E2C73E59800E",
+    "aes_key": "F372FC7CB4D3900FBB9C6B41921ECC89",
+    "data_elements": [
+      {
+        "contents": "14BB8E9B7B",
+        "de_type": 389
+      },
+      {
+        "contents": "0988FF91EFBA62AE84619FE5A71978B457EC739AE265D455856CFE",
+        "de_type": 392
+      },
+      {
+        "contents": "EFB5AA412C20472C54F22CA84AFA",
+        "de_type": 369
+      },
+      {
+        "contents": "2A6E32C24C3CD0AB1CABD0010F49A94664BE81399CF39DE9C8D225DFC67E",
+        "de_type": 408
+      }
+    ],
+    "encoded_section": "8F901394A25D3684C8351BA133D7935CF78FCE911000E97B66077075042EEFEDE4ED8B42744F9004BD060A6FE04F67326A3316058E3A354F32195D06920642A21D1F38DB9DAC8BFAEC958C457F0B5DE19626033705374CF5BBF3A4E2AB1C1197A411DAC42B636511827FB43F9BB83D28E1FB5F3F359DEAC8E6D4EEDCFE8496C6A27EC348C2778E1BD004BCFC5A154FAF",
+    "identity_type": "provisioned",
+    "iv": "16339A85CD833FB55944A135968EA806",
+    "key_seed": "E7C4E1D06521AAD6962A498287BAE9EE92361BE1FC7DF062564D0107649F6FFD",
+    "metadata_key": "B23F3EF58B4E7CCBC098C105B9D50E01",
+    "section_mic_hmac_key": "C37C26624B9F567661B253E21D89336D23C21ECC122FB83359DFE86203685E45",
+    "section_salt": "E97B66077075042EEFEDE4ED8B42744F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C063C2D07532B482BFDEBD663EDC8265",
+    "aes_key": "78886059E7F87F6478A15B1CCEB129C3",
+    "data_elements": [],
+    "encoded_section": "3790135199391E9E94DE46457DEFA2423C3BA6911000DD4628D624F0B29D1B9E298F42873FAA9004F3675D66D5129706C9DF1FF21F4ECBC7",
+    "identity_type": "provisioned",
+    "iv": "25A3BF84A38B4DC18D6DC400D33D85C9",
+    "key_seed": "6465DFE7C9EA8D4F1BAC260D41067AFE04D5F1417A8A2BE49FC8498C98675331",
+    "metadata_key": "D786EC2AF4CEAD98F381671FB41224B6",
+    "section_mic_hmac_key": "8131F5C4D353A851B8763D5A92396040F06246EAA72F1F6DE549E2D35A35B57A",
+    "section_salt": "DD4628D624F0B29D1B9E298F42873FAA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C94BA491AB602859E1F82F97DC7E31E0",
+    "aes_key": "F61ABA231C3721C2BD49328F3D090AB3",
+    "data_elements": [
+      {
+        "contents": "6C1BAB85BB39D714EE",
+        "de_type": 738
+      },
+      {
+        "contents": "28CE85B2A00672F37691D02111DFD1BFC21D",
+        "de_type": 105
+      },
+      {
+        "contents": "16A72D416A0D6851BB0CA8CDC2B07848B6A06A",
+        "de_type": 225
+      }
+    ],
+    "encoded_section": "6D9013C6D572F4EC76769832B2F2F3AC584A599110002556D8F2392B4790EA6FA9B70B18D3AC9001E64E58B31B1F9DA5DEED6593631E650F2B9C4FFF9C5105ABA3332D06A64436DD5B2DD2F3ED517E533889DE660536562FC3A0546FCEFBA559E85DEE0684134A3DC15C472539A7",
+    "identity_type": "private",
+    "iv": "EF82962F49EA98E5C08EB77194A2DD03",
+    "key_seed": "ABCB15E7264D97216AC3352B5BE3DB9678F9DFF1C5C9F62F8C911BB7D83DCC04",
+    "metadata_key": "6EC93C5286500B4D7E15754A4125AC6C",
+    "section_mic_hmac_key": "55B357AF96262F52A3F2DADF540144862D66F19D734277102308554E4A803C63",
+    "section_salt": "2556D8F2392B4790EA6FA9B70B18D3AC"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "845E8EC3A0A25B2298E6431A91E189BD",
+    "aes_key": "54D20D731E4FF2CA206D66C95313ED43",
+    "data_elements": [
+      {
+        "contents": "C6CC76056F0FAB3CEB159B6C76EA0A",
+        "de_type": 781
+      }
+    ],
+    "encoded_section": "499013628E1C5A4B6BEEF1429B72C20D781CED9110009C067D1D8A1AABCCEACAE28F4441548B9004B8409502A72B1873614B1D9C3EF45B1610D462314B0FC36CDA1CAD8BB9EA670B76F3",
+    "identity_type": "provisioned",
+    "iv": "1AF8A3DB82F8E98F43EFD67273112AD3",
+    "key_seed": "723EB47D34E9D5F54CD657EA4B91BEDEC4508F5423940653B13CA3F9C0E5D0F1",
+    "metadata_key": "399A68C6D9EBD1C7136879DFFB4BB661",
+    "section_mic_hmac_key": "E42B114BDACD69D449050F295B9F8E1989927928C3DEFFC2C4B1B712156EC7CA",
+    "section_salt": "9C067D1D8A1AABCCEACAE28F4441548B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "23240D3B2662A867CAC09B37002EC151",
+    "aes_key": "7A6059F6D0A60CAADE7FADADF8A6DC28",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 946
+      },
+      {
+        "contents": "7C190D653583EE",
+        "de_type": 324
+      }
+    ],
+    "encoded_section": "4490131EEB5DA191A2CFBF9FE477A71C5B16AC91100023AAF945414E18B7B2DFA5CD8F56E1889004C3139ACE2449BBFBF8A129F85AB3959B7BADCD320FD0F0E5D14981B986",
+    "identity_type": "provisioned",
+    "iv": "AA2A519687C28CCF377AFC1E31A5CD8B",
+    "key_seed": "532906986C81E3D60E295AC315B7C414C3CE4CD64654AA7940223E5B0366A38A",
+    "metadata_key": "6B3994E58566DC0822C91AD7A9233DE9",
+    "section_mic_hmac_key": "2621946D28448B0FE1D49F42F14DBB771D036981A8BF60D68183E48F1370CE68",
+    "section_salt": "23AAF945414E18B7B2DFA5CD8F56E188"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1BF5D55B85DFE348E916009BFD94E23E",
+    "aes_key": "BBDCE9CD6AC6B4D05A30F0FFD12FCA85",
+    "data_elements": [],
+    "encoded_section": "379013C80B6B02142DDD201B73820ADF0B2E34911000A321FFAC8CD880B256A741A077BD1C4F9004894461CD30CFCB9D823BA848BB442098",
+    "identity_type": "provisioned",
+    "iv": "1125CA91BCA3D2C39E84F864736D3243",
+    "key_seed": "C06F738CE619A69F7C35F0853EE53BE4567F1AB96CF2DE1D42271BBD4A3FBE25",
+    "metadata_key": "9BBD434403D6B68CA9D0B2ECBE1391D6",
+    "section_mic_hmac_key": "072FCC113795FD057E811E3573E219B3F4F01C886808E060B2D8CBFFD05E2A39",
+    "section_salt": "A321FFAC8CD880B256A741A077BD1C4F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8FFF31D9E05C67B63EFE52C70B562B2D",
+    "aes_key": "69C6A32CEE99AC1D008C633D0322AFA7",
+    "data_elements": [
+      {
+        "contents": "775E02A1DD5313C05333CA56BF884A55C3C4A9",
+        "de_type": 997
+      },
+      {
+        "contents": "EE659244BCC7E04720E5D5C3633793B3A2F1801127960F4E846C800B17",
+        "de_type": 303
+      }
+    ],
+    "encoded_section": "6D9013167EBF9EFA9F7450FC14B8B4755652999110005A21C2E9033C4D92E3D0E343265854A99002617AC1869E187111E631A2E97C28F8179C94488578C3798499A6D1FCE3CF60D4A0265F81DC3CA0F43C49B70E8E00F7AAB6BE5E28175C99E4E868BEA0239098E94DFE43C3D830",
+    "identity_type": "trusted",
+    "iv": "EC1631F0E9992D01661973E10CAA0598",
+    "key_seed": "D304FF6EFEF40CB4745AD0C2112348A40F5BC04D3D91EBC2A55783A2F8869F82",
+    "metadata_key": "9EB2E5F2B16FE3803E28A17ACB2E9A56",
+    "section_mic_hmac_key": "64449AD305C717B9BC1C186F0BA4B8415CB93C34EC52608A7173EB512FD55EF0",
+    "section_salt": "5A21C2E9033C4D92E3D0E343265854A9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B9D3A1A05CBF5F5E1F69C7E362BFF3D3",
+    "aes_key": "7A609D1D39BAE76BA999840CD3FDA233",
+    "data_elements": [
+      {
+        "contents": "64A1E6D6457FADD30243A34640CB96D018D8",
+        "de_type": 759
+      },
+      {
+        "contents": "8E7893F12DDF3CAE263C8231E284580D78",
+        "de_type": 433
+      },
+      {
+        "contents": "8EA89C3191D3",
+        "de_type": 979
+      },
+      {
+        "contents": "726840E37DBCC2F0D910874214C21C",
+        "de_type": 516
+      },
+      {
+        "contents": "72F6BC7F5BB01EDDFC7892",
+        "de_type": 165
+      }
+    ],
+    "encoded_section": "899013B1B9AD2D96FD2C5F6C56A2AB23C6549A911000B4CFAF758BA05C70F0086695B8654E719001E317BFEE6A2A6D5DAE263832DC0A0357E3346EAFA060BEF5A39ABA906872C947DEBCAD36F176043900199327F70F11104B1E80438127A3EFAA37B2FC3B8E800ECA8FEB295316C6D3276F428119CD6BD748E5DAAF5774D51FCA31E5193AE9BC5BE3BC",
+    "identity_type": "private",
+    "iv": "F786B13173BD39A7BD5DEDECB2C6F86B",
+    "key_seed": "FC09B7FB045850F61BAF9F55BF5BD22944884C77EF5ABCDB29C98E9957760AD8",
+    "metadata_key": "F7F75BB418B3BDE041DB96A09A16B777",
+    "section_mic_hmac_key": "F08A8BF5C5B1E23F20301843ADBC149B886BCB75F017886AF29F123D686818AB",
+    "section_salt": "B4CFAF758BA05C70F0086695B8654E71"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "020BC589FF43EBC8F13AE2E43BBD7658",
+    "aes_key": "8F3E597366BF11B9B9AF34C266085D81",
+    "data_elements": [
+      {
+        "contents": "A08381B564B135F3322D33E64262AF5A6FD68A085B6908B5602602084C5E",
+        "de_type": 89
+      },
+      {
+        "contents": "9A76EAC96F1758FED565E92354C68AF267536BE3522D8D932EE5",
+        "de_type": 303
+      },
+      {
+        "contents": "FE73D94D1454A2BDA8F978490437A2BF36C2E72BF6487D5733B2E29F67",
+        "de_type": 907
+      }
+    ],
+    "encoded_section": "949013E74B20DEE21DBA2ED1608245C1510777911000A0EF20B9AB805B7746172E5C1CB9A42D9002C03E4EFEB9EBA55E204FEC5F7DC17B6021EE9C652A15486FD70278DE23455D858971C649F749BD2B072A3B573F12F841087ED3516549ACC27BBA69A8C39C36A33739760829F1815F782C784294E64BBE2A3B42EF1752F177BAEB5871E6F913B958F8E11E23DC292A20BADD025E",
+    "identity_type": "trusted",
+    "iv": "F9282C23FE33849259D66A40165A895F",
+    "key_seed": "88EAA2A88210FCD0A7C7A5B5F55583BEEA33324FCBD8F2530F7E8EF3D499A823",
+    "metadata_key": "81FD9DE2086417EE30A0A49B89CED2A4",
+    "section_mic_hmac_key": "E6954F5FBAFD6C29F2387CFE59C53D49B355501FF14351445F3685BDBB85C64E",
+    "section_salt": "A0EF20B9AB805B7746172E5C1CB9A42D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A022D2A91854E61C50C482B8CE339FEF",
+    "aes_key": "84109A4F76D0C313388D16CBE43CC8DA",
+    "data_elements": [
+      {
+        "contents": "E4E2A0D0943301F980E26F",
+        "de_type": 718
+      },
+      {
+        "contents": "AD9C95407E",
+        "de_type": 733
+      },
+      {
+        "contents": "E8",
+        "de_type": 49
+      }
+    ],
+    "encoded_section": "509013F3745670932BBB42D2C70A6D17C94DFE911000B39AD48FE7075F779F82D4E60C333F029001D708D6C505181C687C84F36F2A3169DFBD020DF19D5BB72AC8741EF60610A7B174A2FEBDDD22C9C7F3",
+    "identity_type": "private",
+    "iv": "D1E556A9A5AA49009D49E19983DBA615",
+    "key_seed": "7727741471C2E6CCEFE4EC70253B8788D228A3FE618117C6E76EF5E3309D2231",
+    "metadata_key": "E1569AA98E6BDB4D6DC9A5BD46195ABA",
+    "section_mic_hmac_key": "D461D7A01671D7F83124856867DC04B96F62EC0E4DFBF70CE9CAB556972531D9",
+    "section_salt": "B39AD48FE7075F779F82D4E60C333F02"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A7C810623229157F1FAB904377B695CF",
+    "aes_key": "5EB951C2968A33F2E7903255731EA4D9",
+    "data_elements": [
+      {
+        "contents": "39973FEFF2D8D62FE6C27BE3AF9B227662461635BB",
+        "de_type": 97
+      }
+    ],
+    "encoded_section": "4E90137D2063093EB07801E876E8716FE29D95911000CCD6600A1D0FAAAE97C25B5140102A33900435DC34F63BE56B05BC152597764EF8048746085FD4D12E96EE6A3BC13BF1A4E3BA669EBC3F8EC6",
+    "identity_type": "provisioned",
+    "iv": "9D738D7B215640FC45EA0AD04FDA685C",
+    "key_seed": "98BF712F93903FFFEC4E0EDC656D07CFC78D0ACDBE0607EF19A2A1ADBF4173A9",
+    "metadata_key": "9D83C372D120920E197FE972404E1C5D",
+    "section_mic_hmac_key": "A65DC4805D1B2611ED71FF80FC7D40384E3ABC352C533422DCD5299228179FB5",
+    "section_salt": "CCD6600A1D0FAAAE97C25B5140102A33"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "70BC4889A9135FEF8558DC85DA869313",
+    "aes_key": "2F78A0C2E0A662A6AFB80C6170329DD5",
+    "data_elements": [
+      {
+        "contents": "4FDBB2F43A4B80C48905A081D73F0AD23407A50A96FB872ECD365C654A",
+        "de_type": 5
+      },
+      {
+        "contents": "238F48BB7F230CA3231C0B8800F7",
+        "de_type": 463
+      },
+      {
+        "contents": "7D77BB7E5EE7DF8D11DEDABAF5",
+        "de_type": 493
+      }
+    ],
+    "encoded_section": "779013CD09FA4E2906A1B0497103C8B958A4B19110003848C27BB68D7751BD109AA798A5A1FF900111FFDEB247F0705D5D6FD0CD158A38EF11B40163ACEC63E1279BABC6736F3F940CACCDB6600BCBD5652625ED21844D854F0BF2467E5EBE5DF2FC8BE2CA6D6A18A5B60337D94F0E57EAF8B2E3EF417901",
+    "identity_type": "private",
+    "iv": "177479EC161C64F5B9015DCB22DEDDD2",
+    "key_seed": "067F5D95027B2A7BFF1C653CAC3040EA4DCA805369AA6EDEA735899CD2BCA30F",
+    "metadata_key": "67E79ACFB7EF2C6FA6357C154450DEC2",
+    "section_mic_hmac_key": "63F5C63B2306E218536A099BA9EBFD0EB16FDE66D04E8B917608F0CB39BFECE6",
+    "section_salt": "3848C27BB68D7751BD109AA798A5A1FF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0B62C9D1874CB2A9361CD266ACFE0943",
+    "aes_key": "3D59EBB776EFA1803E495CAA387DB727",
+    "data_elements": [],
+    "encoded_section": "3790131F6A24505B1F4420A388289F7F2BC22D9110008C40367DF7D629BC40F5D01CC680C53F900181FB9E16124D32FC426C1C4E4B2ECFE5",
+    "identity_type": "private",
+    "iv": "D7A366700B7C0223230E9E9677361443",
+    "key_seed": "3A4856049F6612A949BCC3647B5BAF36F9D71D0FDE813B824D5BCE2182B5FDF6",
+    "metadata_key": "9BAD67AA712DF9C5639C1D2398125C40",
+    "section_mic_hmac_key": "9D2C92937531075FD9D09129497BEF9111C0375C6302A80BBA61F0BA5CFC81D8",
+    "section_salt": "8C40367DF7D629BC40F5D01CC680C53F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7DDCD2740B158A2EDB7842390C73B169",
+    "aes_key": "BE02546B3D28D0CAFFA8600033802837",
+    "data_elements": [
+      {
+        "contents": "D095D2747F4A2EDE1623963AB0B48A2649E60C0255A11200044BBE",
+        "de_type": 885
+      }
+    ],
+    "encoded_section": "559013245407838E530FF4CA8D651DE3F4EBB79110003D4B11380D6AF601B651492FACECEA0B9002434F17846C767176E501E462F1E88F6256AE42BAA69F62FF748B1F10704C5ED834105F6CC1374C2A53C200BF8EA5",
+    "identity_type": "trusted",
+    "iv": "C6247D6BD8C642673B8FA1C533A9263F",
+    "key_seed": "35CBFBDEFA43F8AD872C6EAF8C743076EFA7F938EC2B3D02FD034A6045536605",
+    "metadata_key": "0359B617E2D475D366F7B2046DCB7383",
+    "section_mic_hmac_key": "99DE9888F8AD547E181420DFE74D8412E13836BEA0DED59264102E68033BD0B3",
+    "section_salt": "3D4B11380D6AF601B651492FACECEA0B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E644DE907183C18EB11F7B4A9C5D0725",
+    "aes_key": "4CFECD89D5D364E176F67F127F1FB0D8",
+    "data_elements": [
+      {
+        "contents": "A630BDB220762910",
+        "de_type": 443
+      },
+      {
+        "contents": "E10F32B0",
+        "de_type": 298
+      },
+      {
+        "contents": "6482387D8BBAD195CD",
+        "de_type": 918
+      },
+      {
+        "contents": "1BE384D2FE8053FE99",
+        "de_type": 555
+      }
+    ],
+    "encoded_section": "6190136FB3B3D8620CB4D3928F608BFBCC069D911000D48208F2E81A395B338FAB5BAE6C760A900459356113E165F119D38778927C6790DC5146415F4F254995E2EB98BD322DD85C4AE24D1F0CF4B0C26C46A06E5B72851A6ABD1D3EAA170A13F5A0",
+    "identity_type": "provisioned",
+    "iv": "8F553BBD4CBFF05A75898D3D39462728",
+    "key_seed": "64ECEB1A3107369944DFFD3FFB9BB33D5177269BD7EDC99034888AAB415CF7B3",
+    "metadata_key": "A6327CBE37966B45B0047F3B6D2387EF",
+    "section_mic_hmac_key": "D3BB8A8AA1510F67E77EAFE45F79E4685F26D90E5044AF2EC02FE104CB06C0BF",
+    "section_salt": "D48208F2E81A395B338FAB5BAE6C760A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F3BF8CE4146FEB417CCBEFF0575B6816",
+    "aes_key": "F7298D234884DBB39C5326BE9CE58BC5",
+    "data_elements": [
+      {
+        "contents": "1BEC46DF0FFE5BE99BBED7306A",
+        "de_type": 533
+      },
+      {
+        "contents": "",
+        "de_type": 224
+      },
+      {
+        "contents": "EEEC",
+        "de_type": 899
+      },
+      {
+        "contents": "82BB76BD6A80BF3A737E72086E8E992490971CA48C9A8B7220FF90",
+        "de_type": 458
+      },
+      {
+        "contents": "55E08CD9F499CF88B5778CD24C71C22B8933750C89",
+        "de_type": 940
+      }
+    ],
+    "encoded_section": "85901373651DA9F5520F901CB346E81A93BD0B911000536258509CB9BA353DABBFE54FA4826B9001485BDE12ABF28AEFAC16677B0520D2E545CB2237FF8822E97EDBEEE819385C1B09F12B982B0B2E2C0FB579F5294CAAD96D2DFBAA0DA210D867665F12A1F0576520BE4B11929C4FCA001D5AD95ED181FB8CF17BE130AC553C59F8E688AEF6",
+    "identity_type": "private",
+    "iv": "17FBACA04AE79C76C41CD2B82CD59C11",
+    "key_seed": "A5BCB398B80D10B1FD2423DA6F342D113AEB13C34668E640A968A8733EFC942A",
+    "metadata_key": "70E737B2D129BD7E2DF862F71B2E369E",
+    "section_mic_hmac_key": "6E3223166BF4E3A185BECDDD34CEB6D8C9D3A9E698AC5B8864B83423E825F10A",
+    "section_salt": "536258509CB9BA353DABBFE54FA4826B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "61013AED46837E354AA29735E8CE2453",
+    "aes_key": "DE2D317CB7AA56B32B262326965F8A9D",
+    "data_elements": [
+      {
+        "contents": "E8AB270D18C57B0ADC1CB3DC4C7449DA",
+        "de_type": 335
+      }
+    ],
+    "encoded_section": "4A9013192B45282D4FA290760B781F1613535591100075C506260F5D61EE14504C42FA5FAE13900479BCB215EE244D3C5BEA6A61E13FBFF3B3D49A9573819FD6929BECB1D8BE0DE085D6FF",
+    "identity_type": "provisioned",
+    "iv": "D8B19C28725DB25449B16530FBDECE2A",
+    "key_seed": "A2D7FA151A0EE90ECEBA6D4F4BF7E85A2C1CDCE93D705CF59AC6A10D2C098240",
+    "metadata_key": "8E9063E9449722E3852DE6C07E799974",
+    "section_mic_hmac_key": "1F9DE18CC2C895DB4D880DE858CE05A5708B2FA9B8D3C69D208A966D5B066D4A",
+    "section_salt": "75C506260F5D61EE14504C42FA5FAE13"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "05690CCA9ABE110947D18BB479062B32",
+    "aes_key": "DA0D102B8953A994B76B1719C0041647",
+    "data_elements": [
+      {
+        "contents": "161AE3D8B65862FE5AFC2D03CDD680F5",
+        "de_type": 268
+      }
+    ],
+    "encoded_section": "4A901385B1AC6803247FC7614C67F32266B3D591100079AECBDFB7F3F4301BFC7D23602E11329001FB8EC97CD186A2D2ED230FFE2A5288D7C82FF3C0E7317BE06C93C0453756B23A423135",
+    "identity_type": "private",
+    "iv": "83DDD162BE71C736E65BDE8181DF7A81",
+    "key_seed": "75BCE8199AE92DC7A3DE9EA798E10186ADCE6473ECB78562F185CA6F3E8E98F1",
+    "metadata_key": "A455F115BA43C061EED4320B1C4498FB",
+    "section_mic_hmac_key": "BD92C0272C1D2CB10BB6506C8C721BCB0B54EA71EC83C8213698C7228CE3AD1F",
+    "section_salt": "79AECBDFB7F3F4301BFC7D23602E1132"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E23B4C0D7BFB6FD8E6E0DA3261F9A3D6",
+    "aes_key": "1768A8ACB8EC354B0FCD2ABAAEC64760",
+    "data_elements": [
+      {
+        "contents": "23004D740BE1EE3B4B5A8DA3426480",
+        "de_type": 756
+      },
+      {
+        "contents": "EA0303D125",
+        "de_type": 669
+      },
+      {
+        "contents": "7541304A",
+        "de_type": 83
+      }
+    ],
+    "encoded_section": "579013390C93D780F8096F0D413AF90C632988911000814D8033C76A6E1B6B008F2E3D460D2C9001E94C0EAE1E10ED82B94C0A7ACE66BBE7BDB943A9BA6C1F2EEEB493A823DCDDEAD974FD717F8490E9B48EA52393E343CB",
+    "identity_type": "private",
+    "iv": "B5FB42C3108C8AE313ED69685648CAB8",
+    "key_seed": "29A23FD4ED5E66BCAC1ABFBA0E9FB6FC0059A6354C42936C4599A355AE3AC76D",
+    "metadata_key": "5A814D128ADA2D20663F759F0232DF46",
+    "section_mic_hmac_key": "2C69B4EED4E52D3EFBBAF37E9749E2C1660B73A951A75198191F82AFCEA2191E",
+    "section_salt": "814D8033C76A6E1B6B008F2E3D460D2C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1839D2C3BA13C005F5C45F0BDA96ACB2",
+    "aes_key": "A030D853E042AF8055935DF441217CED",
+    "data_elements": [
+      {
+        "contents": "2376F195FB1505C80FDE28394E2E398E2902A3CC84F9AD09FD221D10F0",
+        "de_type": 53
+      },
+      {
+        "contents": "99",
+        "de_type": 181
+      },
+      {
+        "contents": "4A4C47C2A18D15F2E4D1A89C1D4EF686C9CC40C1BC057C2CD1",
+        "de_type": 45
+      },
+      {
+        "contents": "C7BCADDBC0EAB47E6D22F5A11B59398E7354B1448FE9CCFD229A",
+        "de_type": 814
+      },
+      {
+        "contents": "FB62CE7C1BC06EB95602F99308D0393E10C833",
+        "de_type": 433
+      }
+    ],
+    "encoded_section": "A8901383E429525E34D29E92BD41227C23F2259110008265D5A57D3486212EF93FBE297FA43F90014E2A55BD81FAE9BD3FD32E7D6CA34D0840ABB8E12CF3BBD435270889D2E9B4286DB13CBCD73441D3433DDB05265FB5C691D77CFDC464121E194262F852EBF42CB2150CCAB45F4080AB5CD824BD0AED6EBB82EA5A26B26FD7B03B7F6E2459F48B6FABFFBAD719787564A505FBAAA90C5BFEE1FFCD39EF97847DB321CA2198E722B9",
+    "identity_type": "private",
+    "iv": "AEA7A390C40F8095ACEA1D8ACEDF3D12",
+    "key_seed": "C1C16A9F6FE7E6C00A780ED9A2BC1C487F9268805B474D3A1FFDC74FAC8B4E11",
+    "metadata_key": "6B2A826AF6C92F037F6FD7B91BCE34F4",
+    "section_mic_hmac_key": "39FBA69424E69CC24A79B0F09FA447BD5165511FD98631380A8B261F683A3C6C",
+    "section_salt": "8265D5A57D3486212EF93FBE297FA43F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BAD2528C1B7CB990D7AD3DCDCE3A23DE",
+    "aes_key": "DAEB2E5F4394BE918AF351E93D7A77D1",
+    "data_elements": [
+      {
+        "contents": "1597B826140F36A5953776AFA20014CA8CFBDE245C91A34D92C1",
+        "de_type": 53
+      },
+      {
+        "contents": "06D2005AEE6B77C800743724DF",
+        "de_type": 439
+      }
+    ],
+    "encoded_section": "639013E912574072B31B6DAECF1F281DB12A539110009BCEC0F8CE3CA49BCB70A4A232293DD99001DC051CFFD8482B3B4ADA0075EB65E1E16DF2E1136C057CD58A1045527F080A6F16497C198E95951DF5C4D854E167E80A1E5D0D2E62C1B3996095CB63",
+    "identity_type": "private",
+    "iv": "876E6DB1FAE9D6AC1498605E2D69D5B8",
+    "key_seed": "33A85E4AB836104AA7F44CA998500558FCAFC256B2977A1F1C8511785DA10B08",
+    "metadata_key": "49E5B24F9AB621DA9F7F7F2884A1C25F",
+    "section_mic_hmac_key": "C3F6790A2B82BA0B17EA93FAF612E4CD3D11451A4D28765F843B73D7EF7B4293",
+    "section_salt": "9BCEC0F8CE3CA49BCB70A4A232293DD9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2A6447AA427EE701C9AA690F9984AEF6",
+    "aes_key": "8873AABC9EA3D48F6EEA776A7E15A0EB",
+    "data_elements": [
+      {
+        "contents": "D9B0253A3E1BE351",
+        "de_type": 903
+      },
+      {
+        "contents": "BEA6C715E6A06EC584526533",
+        "de_type": 5
+      }
+    ],
+    "encoded_section": "509013165A35A8BC76B529EEDE11257C4C929E91100040F88999F3934B36602BB79919F5EEB59001A6E1A6C4527EA8EE03C10B0E2FA65C0836BA3E179E5A8122A0C01CC4D63FB3BE89FB9E47C75EEDF481",
+    "identity_type": "private",
+    "iv": "0B977324602019C876020687AC0FD0F2",
+    "key_seed": "EBD257397FD934222D84245BC1EA73A7D14BC02B82D2AD05E789FA92FB021796",
+    "metadata_key": "4366982F4848A99069342C098FA0D5E1",
+    "section_mic_hmac_key": "CE5958CD6416383EA202CA5AF15B0E810BFCD99488AB311A17A895A5AD3C105A",
+    "section_salt": "40F88999F3934B36602BB79919F5EEB5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1AA084C1AF2A39928A561D1E9013CDD1",
+    "aes_key": "9278ABB20D9C47298A0BB81C3BAA05C3",
+    "data_elements": [
+      {
+        "contents": "A1042FF05E80458B9F79",
+        "de_type": 926
+      },
+      {
+        "contents": "4EB0D1BB7E711C9DB588F1ED5AFE54AE46A361B0547FA3C0",
+        "de_type": 299
+      },
+      {
+        "contents": "F382",
+        "de_type": 220
+      },
+      {
+        "contents": "DCECB4FA5BC7E7D72AA132127D27D43370480F1AB952E654ECD08ED5B28B",
+        "de_type": 911
+      }
+    ],
+    "encoded_section": "859013225389037B2722F8D27F2226F1449ACB911000AE062EE145A8CF45329EC95736762C939001BF95DC4B5B20BC1696BFF79264BF8CE88760D1BA0834E103C9C3DD35111224F93A46DDA193BCE22C3FFF0DEABD66C91933B5EA8B9D9DA8B8C8430FD8C4C9ADED4FBF843A3206D0CD4C2CF4258CC4C47FBFBB68C7A6D3E463C3D3BC2045F2",
+    "identity_type": "private",
+    "iv": "C789264887CAAAC20C0A84CAE6C16A6D",
+    "key_seed": "9C0E8A9E88EBAABFC8620322B4DC189D17AFB01B7FDE0BEB5027AB67B36D58F8",
+    "metadata_key": "602E08A242159621ECCBCF62A1BB77B2",
+    "section_mic_hmac_key": "B9DA231118DFFE6E168A4561180D096196D7460CE3E39ADF400958A411E91F11",
+    "section_salt": "AE062EE145A8CF45329EC95736762C93"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "618DAAB745E83D398987853966EB8D73",
+    "aes_key": "60BEC13C1D8742EA4711CCE37F8AFA57",
+    "data_elements": [
+      {
+        "contents": "A01201A2AAED58EBB95DA45C",
+        "de_type": 941
+      }
+    ],
+    "encoded_section": "469013F52ED257572229C484BEDA18270EA33A91100030A663A6FFE15F76DD3F29F84018F96A9002DBD150672794658EEE0B4D1324CAD3D9937518A48F7722287A7C4F15B16363",
+    "identity_type": "trusted",
+    "iv": "3D850D530781D998CFF408E7EDC5BA43",
+    "key_seed": "48F03D01564000EFB7BC8EECF1328FC6489327A7C79AE7CD4C190B5C41ABB61F",
+    "metadata_key": "1CED23D2582A5320DDC1C9A75F79535A",
+    "section_mic_hmac_key": "4D96D070171E81DABA26D6F55BC91CB938B694AB4D6AFF7AC324BCE2A36BAD7D",
+    "section_salt": "30A663A6FFE15F76DD3F29F84018F96A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F24BF18270E7EFC7882FD7300BCCC0CE",
+    "aes_key": "6237B593C1E95DA0E71B42F390B79E3A",
+    "data_elements": [
+      {
+        "contents": "5A0FB6BC7788",
+        "de_type": 347
+      }
+    ],
+    "encoded_section": "4090130BCE2E9C111E02B7CB33EAEFA76C1F189110009AE61B57A56E074D46354A6C28A6600B900291D225FD9D6DED94B1AE1A8DE03F95D14DBE075885CC06AD4B",
+    "identity_type": "trusted",
+    "iv": "9EEF6EB4A585A899C07623A06B6EDE18",
+    "key_seed": "053E32D215D9706EB8BA952E5C2D520754349EB64BA594780F1D04883FC20B69",
+    "metadata_key": "2E3EC7648FC3F6C1B64FE4BC64363DF2",
+    "section_mic_hmac_key": "709572F18493C4CFA68B26676369A9A17FF660AADEAF01A6D3C9FEF62BA7B65B",
+    "section_salt": "9AE61B57A56E074D46354A6C28A6600B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "141C71DBCD57779A9010CD756A76E381",
+    "aes_key": "7EC0F06C9555C817D80506D742CAE986",
+    "data_elements": [
+      {
+        "contents": "A3DA78C3A46A6465AAC28A7180F4AF3CED356195F59C354442",
+        "de_type": 848
+      },
+      {
+        "contents": "6FB0",
+        "de_type": 612
+      },
+      {
+        "contents": "5E86B240E0DA2EDD9FF1EEE13D08BF747F",
+        "de_type": 593
+      },
+      {
+        "contents": "3D5E1FFA8D17363A09EA3419E74ACAF8E530BEBFD2E5383435BA96E5E93D",
+        "de_type": 602
+      },
+      {
+        "contents": "629C",
+        "de_type": 535
+      }
+    ],
+    "encoded_section": "929013AED254BBC1126C996810D72CF962DE3F911000CC9DD44EEF9A16CCA9A5A353EB3F6C099004F512A3DF26EB3A448559BC668546BBC5E39939B408595D81DB2C9BCB22BF44105D4FC74069E211F76B1B5947632BAC38E032303C1E0BC15115DE5BFE6C5C64BBF75D7527DF0C1FDC42186D3B4E8A0B11F444E74E8455A8F32A792603FF5D06BDFBF4095FC8C3F19F2DC148",
+    "identity_type": "provisioned",
+    "iv": "1F3348A80250E67C0439DB33713640D3",
+    "key_seed": "B8F2BB87A76D6B19C9666E5AF7DD06F0965DAC56CD5E18D500660D621B6806C0",
+    "metadata_key": "791697B259A389A16454F472C26B07B9",
+    "section_mic_hmac_key": "5F025042B03F8AF6FEFB3F0ED5D572D80D15189DC8ECCD27CF4EEF05F4A57F00",
+    "section_salt": "CC9DD44EEF9A16CCA9A5A353EB3F6C09"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0DC36EABCD58AD31FD3414A5A79D856D",
+    "aes_key": "B7FCF0EFA53B3230297545213C0524B5",
+    "data_elements": [
+      {
+        "contents": "64BE90FC09B580EE",
+        "de_type": 299
+      },
+      {
+        "contents": "D9CE2C829CD03EA10E4EBE3ED32CF9F03848E2ECE7CAC2B5F062FAE306",
+        "de_type": 637
+      }
+    ],
+    "encoded_section": "629013586179ED9F640B114F3A74EAAFDA169E9110004F5F28DE93C71BD513CEAF1317690AC59002FD14A70AF3805F6DDA65F7309408708224077D83A630F4A6A28ED8F14F1E32072981D91CCC3AF19A091791B44927EA10A30EE18F261D3A902A5608",
+    "identity_type": "trusted",
+    "iv": "B841EB2BAAE284E872A3A2423601F00F",
+    "key_seed": "131324FEF7EAB54FCBA0F40F92167DD7334863AB7DFFA93D1B2E05FDBF7F30B2",
+    "metadata_key": "C39F84EF9D0EB94DDC0F35B032CFE945",
+    "section_mic_hmac_key": "3FBB040970723C36D6DAEBCC475E95F100D5CA410C938B7C7552FAC69DDB7E13",
+    "section_salt": "4F5F28DE93C71BD513CEAF1317690AC5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2F7A899B44F390B8C32AC3FFBA8536CA",
+    "aes_key": "C757CD4202E253D64F6ADD70D6802F76",
+    "data_elements": [
+      {
+        "contents": "E13B9414F8E4DC48F9E41F1ECEDE",
+        "de_type": 873
+      }
+    ],
+    "encoded_section": "489013F3E95BAC1CAFF7A986116C838955CA039110001F2D1152B9AC95ECDAD02511DC5ECC8790046AAC45B087398FC2276B1D1015032072B5AA69854873AF49A2F9D24711D6759A4F",
+    "identity_type": "provisioned",
+    "iv": "C697367BA74524CAB1168BFBF2922854",
+    "key_seed": "2730B32C6DCBEE3DAA66CBDAE3BF9E42890B4E0B46C57D0700D58081814CA0D5",
+    "metadata_key": "24AE50DE045D1238B2E0AF3EDE2E5C9F",
+    "section_mic_hmac_key": "052A829770EC3DE369B2A4504D75DAAF28577A7F4638B0356EC924B23C91C5E7",
+    "section_salt": "1F2D1152B9AC95ECDAD02511DC5ECC87"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A229253DEE5642D1A341465C48F81501",
+    "aes_key": "954B9BC25FA0947752A02707A1D72848",
+    "data_elements": [
+      {
+        "contents": "8F35A5BBDC9C1C",
+        "de_type": 193
+      },
+      {
+        "contents": "8894D592508CD3611F906F8AC44F706B1517F0B5980E268B99A0",
+        "de_type": 124
+      },
+      {
+        "contents": "",
+        "de_type": 795
+      },
+      {
+        "contents": "55DA51",
+        "de_type": 902
+      }
+    ],
+    "encoded_section": "669013C3BC7FE06F86785FEC6BB8D3EC2DF618911000DB52438878F9EADE488682807B3F9A009004BD9E07EDF91224F3EB734D17F3999A99C8262B2C91BBA94505C3DD67852AA19C7A748D56165A5399846D368009F6BA3131ED227A75A7D0BEDEC8FCB729FF26",
+    "identity_type": "provisioned",
+    "iv": "1C797DF15F0945FD31FB2CDE94CE2F44",
+    "key_seed": "B965BEC0EFAB1BF93ACBEC55D5FEDD7A9E4E35D68ED782E805445792B8FC8630",
+    "metadata_key": "0A51D7C3CBB8920ECE2C18C16103FF5A",
+    "section_mic_hmac_key": "1B403F3B1542CCC670E677988496CAC0EC233748D4D488BE8C64D6DAD9E97DA5",
+    "section_salt": "DB52438878F9EADE488682807B3F9A00"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0214D0382281CA031DCC305A1170C4A4",
+    "aes_key": "3AAF3FAF8B3ADE10CBECDAD2C0F9D9DD",
+    "data_elements": [],
+    "encoded_section": "3790137A79252A76378480754C9935BEEAC40E911000E697F979481D94C83D143D416EF15B0B90023C2D0EA174FE7B0F748EB3A897F86CBA",
+    "identity_type": "trusted",
+    "iv": "08AB0C2EF3B3DCEEFE63E345EDE819B8",
+    "key_seed": "236811C3C81857B831C028B6828F2E28AB948405B391377895BCC1011A82D87B",
+    "metadata_key": "8F3FB1BBD7CC2596188C022C816BEEEF",
+    "section_mic_hmac_key": "AAB0A17B5A667805AC94E43D775FFEBCF4832CF67F7839D8B60FC6C739C2A9AE",
+    "section_salt": "E697F979481D94C83D143D416EF15B0B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F6579933CDF9D9BDA0ACE32E7EF5718D",
+    "aes_key": "C939D6AA33F9BB4FE73AFABA9DB89CC7",
+    "data_elements": [
+      {
+        "contents": "51C2163162B4A1ED861DE57103CFB2C8CB4DEC24B75710563AF3C0",
+        "de_type": 969
+      },
+      {
+        "contents": "BC465AB618F9A89C2D6DCCE131DC68B3CFD45ABFE9B3A898F5B21EC3",
+        "de_type": 386
+      },
+      {
+        "contents": "99",
+        "de_type": 51
+      }
+    ],
+    "encoded_section": "77901388ED01CF901FB3C6740072CAE51AF8BE9110003A898F8BE6FC92035BAEC946D5CA2141900175BE48A38808002A983A169C804D96B80CDDE4849FA6CFF66B6955B8F60194B29566F29DC113B5A7DAC4EDEB369BE2B93C9CC3D605AE3FFE7CA863B9F9089B4477A1E591DAEC0F1FBBB2ABB65445E71B",
+    "identity_type": "private",
+    "iv": "D07741F4556EDB80F156377E05D86AC7",
+    "key_seed": "6EF6407596F397D8752C31399ECFD94165EEFAB886385098A7D2E62A0D322D65",
+    "metadata_key": "7005FC4F95DD57D7CBBA8286480EC221",
+    "section_mic_hmac_key": "D68F4EEA77F4A3A812BED734FBC151E6B564984E5BA51BE94F018B0F0E0A40A4",
+    "section_salt": "3A898F8BE6FC92035BAEC946D5CA2141"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "93A2A5408CB92C828DC2706D184B93B5",
+    "aes_key": "483CE8FA0C97190150C89044D0A3B562",
+    "data_elements": [
+      {
+        "contents": "B74426C4B81CD14DDC66B5D81F5048F35645CC49D784BF1901DB",
+        "de_type": 540
+      },
+      {
+        "contents": "ECFD9C9D59E8B557A961482F3CD9CAE1EC82445E",
+        "de_type": 684
+      },
+      {
+        "contents": "16CE37BBB3AB",
+        "de_type": 907
+      }
+    ],
+    "encoded_section": "749013EB2EC9939D0B5AD346C488C81AB2B7A59110003FB7A780A3D390141179A24BA5E348749004D79AE3EAA467DCDB6924035AA6B730BA38A3BA0DBAB8FADCAEBC40EE87FB03DAAE8D04D7F09A98C5DD245BF1993145D63CE6F39A2F2A954850DB8CA9B9927F3B8B7A0FB3D7F2FDF967C4A77C1E",
+    "identity_type": "provisioned",
+    "iv": "1B2672F3752153E4719D4D50F75B32EF",
+    "key_seed": "809959218AEE024135CF2F9D03A1BCAE95334C91241679F27D0E4BD6AE2D7A9A",
+    "metadata_key": "AB90DAB8B389AAB3B96925579A583559",
+    "section_mic_hmac_key": "F324525CD2C3407588B22B71BF7B879ECAF343FFA9860876D584BFF14594E621",
+    "section_salt": "3FB7A780A3D390141179A24BA5E34874"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4CF830D5D5BD08C26F4BE1EA5B97A4C0",
+    "aes_key": "F66E71F797BEEBFB0150F2C7F4C4ACD7",
+    "data_elements": [
+      {
+        "contents": "F16C3CEE603F93",
+        "de_type": 538
+      },
+      {
+        "contents": "F65E08453918E6910CAFBF87155D9B7D8E020B816BE6F064A76C2FFA3BEA",
+        "de_type": 728
+      }
+    ],
+    "encoded_section": "6290139D6BDADE8B80272A9C4DFA705CC8CD38911000FE1EC77402715D1928D59BC1A69DA35D9001E45533C131CE90457E1433650E9993DF71D74E3B90D98B1B2B7AFBECB6EBFB479C58E7AEC3EE3F689AFAA7515CDA6C06546883365168066BAD9371",
+    "identity_type": "private",
+    "iv": "7C7BE58937B2383F8EA9C91B1D8ACD8E",
+    "key_seed": "1E368F539AADA86EB50185328B05D9D859ACCB951D70AE6BCEFCDED587598484",
+    "metadata_key": "9BF76E47E18DEC4135F95D65CCC5AD5D",
+    "section_mic_hmac_key": "1A7880A4B012784166BB7BE7AD91425AEB6E10DA105FDE534824B10FB1F01B3F",
+    "section_salt": "FE1EC77402715D1928D59BC1A69DA35D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "42BCF8C051CF5BC8D61B1C61865A3D0E",
+    "aes_key": "7A7B9705EA9E3E6BD24E89A8B5EC5629",
+    "data_elements": [],
+    "encoded_section": "3790131EEB4FFCF3E322EC21209253D804E5F2911000EA5BCAD5F2FF77DB2C44939BEB5D1DF590045CC1115031BBEF4F64F4D7200CD7EFED",
+    "identity_type": "provisioned",
+    "iv": "48345860EA2F626260C6BB20B166B245",
+    "key_seed": "C61CA661BE7F95C09DEDD5E5B3AD5EEB7C83D5023B95CE53F5AC471FD7A88817",
+    "metadata_key": "2D8F7FD76DBFD36FC69923CB084C2ACC",
+    "section_mic_hmac_key": "DAD99FBEBCD2787C70637F3163FE6D98B3F12DBC5D3D68ABCFD48D7AC7FDF563",
+    "section_salt": "EA5BCAD5F2FF77DB2C44939BEB5D1DF5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A8C7424675FA2E7091A36C6E61AFDA42",
+    "aes_key": "6B31245D4D06FA075F0FE3B368DE594F",
+    "data_elements": [
+      {
+        "contents": "7527234E872383C3816F",
+        "de_type": 48
+      },
+      {
+        "contents": "31CDE714BFDB05AEACB81C2ACE",
+        "de_type": 272
+      },
+      {
+        "contents": "AD37A2754F3B9B",
+        "de_type": 772
+      },
+      {
+        "contents": "1DDCF4",
+        "de_type": 461
+      }
+    ],
+    "encoded_section": "6390136E1F6E5E79E07AAABFC71A1ADDC6855E911000B729ACD6ACEE902D62B36C16CA11B8F69001B5E54164389AD739445D291F8BB668F7D5F486336BE306D2E7537088CB34FF31793C482E1AA770D33E0EBCA3FA909F635EE801E8804D85EAB562B0A4",
+    "identity_type": "private",
+    "iv": "667E4FF1F49AB32EC02271C50F00BBCB",
+    "key_seed": "11E0919824E99AFA212ED1EE264C0CEE2079394A139A2A4E4E0480390224AA2C",
+    "metadata_key": "AE5E4C5CBF11AB13A15F2ABB45C3AA28",
+    "section_mic_hmac_key": "900B1BA0E694FDBC069672601E3FB6A7E1ABF57DCA900F43D366A2D433BE694B",
+    "section_salt": "B729ACD6ACEE902D62B36C16CA11B8F6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9561280F565350C87CFC48E0E922D70A",
+    "aes_key": "0FBDD950CB6A77E49DE3DA873E05BB4D",
+    "data_elements": [
+      {
+        "contents": "57EB419A6FDA6E141E64C96DA56184",
+        "de_type": 157
+      },
+      {
+        "contents": "B7F29895592845FD1F68F04F50E21FFAC6E0745B495D4D33",
+        "de_type": 725
+      },
+      {
+        "contents": "96CFCA71DD4AE920DB33",
+        "de_type": 63
+      },
+      {
+        "contents": "9A186713837F3023FDA2ADFCA7ADBA5F",
+        "de_type": 802
+      },
+      {
+        "contents": "8295CE8455A32E12E72A1A3EE445F3A7ABB33F552E28E8AF3B49",
+        "de_type": 650
+      }
+    ],
+    "encoded_section": "A0901301554DEAA33ECF529285855175B4075F911000F1B7A762DD991286560F50C190AEE84C900410A344196A44F2872D97E4A52C86D4705A0154AA77B0B6A8CBC8BE5707D232C64F3A58123494FD117DCA5F66289BAA6C1342A3C0139362180E4BC01D739BD9AA658244621615B70C03A47B547C3AD84D84AFFA59633EDC39CF23B84A40AEFAAA1F4EF584BC9F8C62E177641EAF8D2D3B5B72E70F5610EDDD66",
+    "identity_type": "provisioned",
+    "iv": "233ABC3B5240F3277A8A3D9B77736EB8",
+    "key_seed": "B3903A0B6F65A51C04C61F33DEAF2E4E2F8D9593C0418A08B5DEAE1B4B5083CD",
+    "metadata_key": "C20215BF9D23940621D1243DAF4EC38F",
+    "section_mic_hmac_key": "2189BED3EEB1C7F254F0148D32B6977850DC2393C6D569DC58F32AF838DA075B",
+    "section_salt": "F1B7A762DD991286560F50C190AEE84C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EBC1A6EFA2ED8CDA77BAF544E4D904A4",
+    "aes_key": "65E3A98AF7B85AC0781A211CC6FC72E5",
+    "data_elements": [
+      {
+        "contents": "3945EAF5EF2E084E1F",
+        "de_type": 46
+      },
+      {
+        "contents": "12E6F96050FACED899537AE8A6",
+        "de_type": 997
+      }
+    ],
+    "encoded_section": "529013BAD0AC44AFA4063EB49BA6CF34A8C03F911000774CFDF9430D5C16D57FEDCC76C727E29004BCB33E582FD7A3C616E6701A38DF24A61E13FC2680162A038B6419348DC7639F9DDA362DDF9A6545387A1A",
+    "identity_type": "provisioned",
+    "iv": "AAE212B6EAA3AA96187816E6FA3B50B2",
+    "key_seed": "310998B2C7F6D69281748342083D74ED44885D73C8873E97C0A00C866332A49D",
+    "metadata_key": "8897F642A09797D2D710391CE3F9A679",
+    "section_mic_hmac_key": "74D664F756163C18681A9CBE553DEF5E0B17C040E3E3B265CBD3DBB3A931FA18",
+    "section_salt": "774CFDF9430D5C16D57FEDCC76C727E2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "540624C3D336F7667597EEA1FD0CC48B",
+    "aes_key": "CA3CC08E1C4FB3974D9DE0A9FAD09077",
+    "data_elements": [
+      {
+        "contents": "5467F818B3EEB029B82D47A14A4E6451DD58EAA0030EF12E14",
+        "de_type": 565
+      }
+    ],
+    "encoded_section": "53901331A52875544D7A7D299A2D6BD3EB0D86911000EDC8ABEC4C7FE7D3A91094D9727CA4D690019C8DA9BEA8B990C4BC1F6F464675F74AD38BFB28C419904C514A9A1E22BFA28285D757D66DF54C47B115E01F",
+    "identity_type": "private",
+    "iv": "60998CDF9DD4FC9271DDC24FD00BF4E5",
+    "key_seed": "563B6F117F7191C693688B2C98794AA4B1219C581D2932A7636338E4CA8D995B",
+    "metadata_key": "E6ACE435015C0967BEEBC7525C84A68B",
+    "section_mic_hmac_key": "568C17091F1FA841D94361047719BAF85ADDF57B13C190BF3D2801A5B229CB5A",
+    "section_salt": "EDC8ABEC4C7FE7D3A91094D9727CA4D6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1BC71DB7C830793A62D4A1D64A194DC3",
+    "aes_key": "F00505EF81341DD41628D319A51CB9AE",
+    "data_elements": [
+      {
+        "contents": "72FC3313D216E421D5283686FA",
+        "de_type": 166
+      },
+      {
+        "contents": "835C0734",
+        "de_type": 332
+      },
+      {
+        "contents": "",
+        "de_type": 236
+      },
+      {
+        "contents": "6076F43AF0A453CB8D740CF39EC6",
+        "de_type": 789
+      },
+      {
+        "contents": "195A1FBE7A2D24A4C51D6796BCFEF82C298B3EE3F8B6B96FA53CF83D",
+        "de_type": 102
+      }
+    ],
+    "encoded_section": "809013BBFC5FEA8BAD0095718AD322503E917E91100061E7C6ED035A4567FFE6C83A52560A759001DA6B1C2FE7F73DAC214C4074DAD30A2099CFC96A89754C6643189C43AD82BC5999F79228BE9B2812A94F38A569194DB4AD2F0867CFE968BA6B993F8AC07E026C21B57D8AA2B4CC0CE6CF0C940191842F5D4F7E1FE9EC9194B3",
+    "identity_type": "private",
+    "iv": "C49795F17B8BA9676DBB69DEE5608FA6",
+    "key_seed": "9E55B64D97D55AD785A2D5CFF54FC31D8C2A10423F03AA4F41CA007BF5774179",
+    "metadata_key": "96332ABC07154AAD77CB7C037C364D8F",
+    "section_mic_hmac_key": "32C65336074D2DA5CB55280E59DBE181987F1631936DFE783CAB584B52276517",
+    "section_salt": "61E7C6ED035A4567FFE6C83A52560A75"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "173A13ABE2FF18D2F7109239F401FB21",
+    "aes_key": "333CD8634CB7451F95519C052CBDF152",
+    "data_elements": [],
+    "encoded_section": "379013096CBC2B8A796E245980C1862ACC387091100082E5BA46988B576F8618B5B352BB5AC990028EC4EB4825905EECE11DD62509238E2C",
+    "identity_type": "trusted",
+    "iv": "54E19448030FCEFB036FA3A918EECD42",
+    "key_seed": "F677983EE2A9987F61F7DA6B886866362469221DC726518FDDA105CEC41563BA",
+    "metadata_key": "D468CD1134E0BE76ABC05A5526F18EE5",
+    "section_mic_hmac_key": "42A1576B2B917F654B6230579B98D0BA1B999EBAE10F99EA920878A3C15DD211",
+    "section_salt": "82E5BA46988B576F8618B5B352BB5AC9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0600099A02ECCCDA983A853EA87B40CE",
+    "aes_key": "F8361A483C7259A77A4B9F7BCC18CF4E",
+    "data_elements": [
+      {
+        "contents": "0B1D4CD6D6D51CAC90BC02A63137AA3DC785E9ACDC08297B54AB0456",
+        "de_type": 152
+      },
+      {
+        "contents": "EA8FCBA28B2CA1FFAC4B2C880398B79C7D6CD79AD24EAB3A9F0C01",
+        "de_type": 789
+      },
+      {
+        "contents": "2B18E586B9BF45BACE62A8B8EDA7",
+        "de_type": 913
+      }
+    ],
+    "encoded_section": "85901302F968F6E1833E28F19F63391E02600E91100006F9E19728E0AAF75BE4634A1F8D7C679001DD5679B2068AF5DC2837E39A3B7140DED6261AAA8A19A8FD604F9B3C50805488C86DF7FA5C7A42443B73C78696A212057B7A6B2E3CFE277B29A3A5A5CC6C441F78C4E2644F4DBB5A6214820B3D184477CDB3F54442D0045C5C81953FB6C3",
+    "identity_type": "private",
+    "iv": "4ED9F6DDCCA5759F3290615269114852",
+    "key_seed": "A82F0B67DA493625BE38FAD39EA6116A78505439EB85294438EC967E0BB92974",
+    "metadata_key": "7EBAC6AB7C2E3EFE20C185415935BA36",
+    "section_mic_hmac_key": "93689F1002288DC64C2CA81A3ABCE1CF4CBA0AA1F2F1DABC39277D57E9C9199C",
+    "section_salt": "06F9E19728E0AAF75BE4634A1F8D7C67"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FEE965C5BD73B49EFD8B3D0AD98D823A",
+    "aes_key": "F3085A213CC43098896781968F34CF93",
+    "data_elements": [
+      {
+        "contents": "C9E41D4978E8",
+        "de_type": 328
+      },
+      {
+        "contents": "7A984B285B2F5D5DFC1CBA0B0C23CBF62C",
+        "de_type": 950
+      },
+      {
+        "contents": "D5BD48E7EA000500FB4D",
+        "de_type": 325
+      }
+    ],
+    "encoded_section": "619013B68441665A2CD396B8174905412BAF759110006EB5F5B21043BE04D6972AFBB86D172490014D74B48E16FD27458628305F62BB5EEDBFF77533E1C8263FAD5376C7D167245435D48B7D1EBB91E89A39D7D5061EAA1150E40B73D7542B2C5109",
+    "identity_type": "private",
+    "iv": "B4A43F5693F7467CB19116D40367BD3C",
+    "key_seed": "12FEE160551F2297D799E1571A8046AE738C4916ADF58AB6E8BC5283B9DF5A9A",
+    "metadata_key": "C42AE1BD877C17986AA1A9F062866318",
+    "section_mic_hmac_key": "208087A638859B6A21F491E525C97D8AF2C1C19945DC8C84227DD2330F89812F",
+    "section_salt": "6EB5F5B21043BE04D6972AFBB86D1724"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E6AF288C6E7479E495EB7FD64E6A311C",
+    "aes_key": "3BBB312D4C50E6220418CA88645FD3C3",
+    "data_elements": [],
+    "encoded_section": "3790135ADB592FC4E3261881C033CA13B722039110005CFCC4E76959DE69A46A26110CE5F5DF9004717A64A5F01E52B35C3229F3EAF20B46",
+    "identity_type": "provisioned",
+    "iv": "D93C814B4EB98D9D9A65D00AC707FEEB",
+    "key_seed": "67C74FD2F407B1F2168B9AF4072CAE89C5CE31E5CABE1AF1C318652C16234309",
+    "metadata_key": "C4AFF7489F452F80EFF17D0C1ECB7591",
+    "section_mic_hmac_key": "8F5EDB51B470611B53995F6D852A38302EA98584053DF49D5283CD62FA873885",
+    "section_salt": "5CFCC4E76959DE69A46A26110CE5F5DF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "49BFBD2B9DA62843694633F892D4AF90",
+    "aes_key": "DF226FD90BD7B42958EAE9B73D9F3107",
+    "data_elements": [
+      {
+        "contents": "F0A7E8D6B009594814B97DFB5C3052AC0255ADE9B6AEED6BFB25A670A4F1",
+        "de_type": 525
+      },
+      {
+        "contents": "984EA937",
+        "de_type": 72
+      },
+      {
+        "contents": "537A4993C8A09B85C312",
+        "de_type": 6
+      },
+      {
+        "contents": "F2B65846498D58ED36F7",
+        "de_type": 56
+      }
+    ],
+    "encoded_section": "76901353D6074DF5E26C64A67DCEA4B54F4FE591100089522D3D4E82B879A6E227EABB6F5BF490021152819FE7C31E3AD6BFF55EA31B88B904DAC0687D0ACB304C7120D4ECE40AA347B7CC2FAEA00536233297D2976D13BDB1349CE159477020DC0541FC247FAB7E675E6746872058906C27EE206830B1",
+    "identity_type": "trusted",
+    "iv": "363DE09F4423704E05DA5D1A603F88EF",
+    "key_seed": "F7E644C0B35E3639F0759DD3459A4E81A7B5B1467D9E27782C9D58473F7D2303",
+    "metadata_key": "20B6032091C7B497C9C715B44A680055",
+    "section_mic_hmac_key": "AC7F9AEAC350B2BC7835A6953CBF050FAD9B1C761CFF5BDB1E766AF51DC97E6C",
+    "section_salt": "89522D3D4E82B879A6E227EABB6F5BF4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9AC61514FCC5ABD76F8B6A60FFF0CB23",
+    "aes_key": "65A5B1C977CE2B71E137FBB66464E4C6",
+    "data_elements": [
+      {
+        "contents": "AC018897D3B2098C96B4B2D04B18356AFDBE76873E902686",
+        "de_type": 433
+      },
+      {
+        "contents": "E6268BD9E23FBD9F54E89A33A9B953387C0875D16FAE",
+        "de_type": 859
+      },
+      {
+        "contents": "CAA87F4364C08B57BBD4",
+        "de_type": 524
+      },
+      {
+        "contents": "14300A4595500DEB37",
+        "de_type": 734
+      },
+      {
+        "contents": "54C2A5437292",
+        "de_type": 606
+      }
+    ],
+    "encoded_section": "8D9013578908536364B9F6141A96126731958C9110008FB91F1844A5A3601A18CA350436446F9002F172ECEAAFD2E24578444D8CA68C014E1BF6722524A2750B1A9E5F4CA3340EB3D4647E45E35F69C330C0918FE002C922F30018934D9CA78F81A41FE035CADF61D135281371ED2B022E532D29D9853BAAF17D7A66AE0EB5DFFF9E66799D98C36DA0EC17BF7971",
+    "identity_type": "trusted",
+    "iv": "E4F6D7F01E683F03820110FE9B9070C2",
+    "key_seed": "471763E7BB628F2107F6AF8F71DD0429FF9012C7BE7EC58C72F5C6CDE1C3C880",
+    "metadata_key": "949F830445560E2C7E0E156F2044EAAC",
+    "section_mic_hmac_key": "03D47D91A1AF8EC0141E699BAD459E2EE7F86F9B91A5386DB8D0D2218BA13E8B",
+    "section_salt": "8FB91F1844A5A3601A18CA350436446F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B796C0B874B37A965A635AACB0305B1F",
+    "aes_key": "E000F49E7E5F8307D27A471E27875CE8",
+    "data_elements": [
+      {
+        "contents": "211B11FE2C7B3F8A8907468866B92695234B9C06C56ACA1E7EF5118061",
+        "de_type": 336
+      },
+      {
+        "contents": "2CE435BB39131E9603EA734E8FEE299F26BF598EA5C2F0FFA518DB2C92E0",
+        "de_type": 228
+      },
+      {
+        "contents": "DAE3FC39546D53AD1A3A",
+        "de_type": 470
+      },
+      {
+        "contents": "9A2A563675DD8BFA71C9BE13C479DB4DE2544FB97004",
+        "de_type": 266
+      }
+    ],
+    "encoded_section": "9E9013F0451460F5EC18035FDFCC9B233FDCA29110003DD4F4235AB965B797DEE44EF0A0360B9001BEC49A84632B991E0A5501A56ED3D9709C189FAEEF2445DC131AEC2343D7071A578293B76D3F849B80C372268123838CA9FC2B0E14A41992CF2AC92DAD1299FA67225BE71F479FFA312946AE18774AF353C3C14C346A04F24747E6582F7C528AA1E49E9E03370D053B2D95178AD336A42367AB578EA993",
+    "identity_type": "private",
+    "iv": "0778412CA588FD3D607A36B1BBA305FA",
+    "key_seed": "63212ABDE0EA4E8542FD2403A0091CF53460C2CBD7BBFE6A434D24D6B871BEEE",
+    "metadata_key": "F61E19A50DE9B1E486865A0498D4ED59",
+    "section_mic_hmac_key": "5E754AED53501C62B51B214B3E21E8C1A39D0B8F1EF47FADCEE9C7391A437F36",
+    "section_salt": "3DD4F4235AB965B797DEE44EF0A0360B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "08F6F482433E821BF057DA969070B210",
+    "aes_key": "E17992E3DDE2E17996BF2D26B284BF2B",
+    "data_elements": [
+      {
+        "contents": "E01D05404D",
+        "de_type": 656
+      },
+      {
+        "contents": "DBB677B7AD69380E50712C",
+        "de_type": 651
+      },
+      {
+        "contents": "2983A0843D5DAB0CC087BD5572E983CE13C3F059",
+        "de_type": 515
+      },
+      {
+        "contents": "DB40E040A436133BE734C5855B",
+        "de_type": 515
+      }
+    ],
+    "encoded_section": "7490131512D60F63CD579B350AE46C619240C59110006CB2D3074DA5611D18E7200EA58D4D2A90010804A23809C9E79F68830337C1561EF95B58C35AF60D256BF58BC367C7C3CC923AE044959E8766170ECF6E24971DB1FFEAC71D76C7592C53B40B5D594BEEB51423C72512C50124951928ED0B15",
+    "identity_type": "private",
+    "iv": "E51C069184919CB5C41DF3A1973A12EF",
+    "key_seed": "3AFF0BDBA428B3E7A75CACF64B960384ED52F6055B53DDC869411C00CE3DFB33",
+    "metadata_key": "C7FF94EFD6BA7F4D49753C9C51F24C32",
+    "section_mic_hmac_key": "23FFEB85772F286F363ED40589D9069BB0CFBAD80C0F4709F2D7EA4D53AFD56C",
+    "section_salt": "6CB2D3074DA5611D18E7200EA58D4D2A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E01A36923644F0AD58157CDDEE3D6E57",
+    "aes_key": "28A7CB11218C9DD608B4C8A3BAE62AA5",
+    "data_elements": [
+      {
+        "contents": "4713D017ECA392781333",
+        "de_type": 890
+      },
+      {
+        "contents": "FAE2DEA46755BE0C6E0BC28C8587",
+        "de_type": 406
+      },
+      {
+        "contents": "CCDFAEAF820F69BE029967700E8D4EFA20",
+        "de_type": 192
+      }
+    ],
+    "encoded_section": "699013B733E709907E9B73EEECE403065285699110005A8F6B53799B2B96F01116C7EA43B24D9004C0CCEF4A0B0ECBE91A422DD0ED9680D23781E95311D3C78E5C154F71BC726E679AC9BB60314D4DE9B19994A6831286FA0A22B438098A7D10FDC1060F7354D0B4D6F3",
+    "identity_type": "provisioned",
+    "iv": "304D96C4F8C3E724140E327EB02BE4FA",
+    "key_seed": "4D76E8957C3244719D51B9433DF83AAB034452817E76DE43F5428B948592F061",
+    "metadata_key": "E158F1E40D3224565939655BC879DB05",
+    "section_mic_hmac_key": "1CBFDF042B635283167190A9E19DBA9D5EB04492AFDC9D4AECF9FD3DEA2FE78C",
+    "section_salt": "5A8F6B53799B2B96F01116C7EA43B24D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "093EA5DB990DD969FA4C4EAC9FD04300",
+    "aes_key": "C42479C9A8EF89FE3A3A83C323E39075",
+    "data_elements": [
+      {
+        "contents": "C5CEE03E05232CEB2706FCC52D8582E15D6E0309E39BEB1049",
+        "de_type": 376
+      }
+    ],
+    "encoded_section": "539013CAA95A7BBAE1DACC4C1493F1631714F39110007D6EAD457D2F7C96C246A361CE6D51F890029BFF6C5561F0D23FA684E8B3C5B67190B0E869847A48A703596DEE74C063E03C3796B437DF451F2E580E070D",
+    "identity_type": "trusted",
+    "iv": "3C508F99B78AB555A8FCCB86D451C384",
+    "key_seed": "9CC130089BC7A521C459F6951588707D1C39464D4FC5F83DE02A388DD9B9CFF6",
+    "metadata_key": "8E22B372F7843A39842E9C99A095222B",
+    "section_mic_hmac_key": "BB1185F021C79BA0B12496AB407BAC3B925D6C0D3E0FFB3D2489F110436C3725",
+    "section_salt": "7D6EAD457D2F7C96C246A361CE6D51F8"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0D3999FA6D616562631A00DFA536DA4B",
+    "aes_key": "106EDF096A5A90718645B2350FB47A8B",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 913
+      },
+      {
+        "contents": "0439E4BC4E416859331F994B7A7967E242692162F0A90DC74A",
+        "de_type": 572
+      },
+      {
+        "contents": "3E46E2",
+        "de_type": 133
+      },
+      {
+        "contents": "C4D2B7F9B3404DAFC46AC58BC4F69525FC63290AB1C752B04B19349E",
+        "de_type": 248
+      },
+      {
+        "contents": "70D3E5634D",
+        "de_type": 544
+      }
+    ],
+    "encoded_section": "8390132CCE2783ADBF25B7605743CC2B5D735491100048186B398DF4CAD231B9A47C00BD02E29004AB47CF0C18763A5271A3CB987B200905499C2BB25ED2F511D33457321E221A4996DE183BD314F1EFAE36BC4AFAC00E3FE61E822D6A0C90E4964E39F50E0584ACD334757BCB7B150E9569E2F9B9E66ED9F09E1DACDC4B9300D8FD0D7B",
+    "identity_type": "provisioned",
+    "iv": "727C01C9645EE10F343B1F653FA8A03C",
+    "key_seed": "4CDA79980B1DF514C24C2A80C54C97B1DD2ACE9146FFE02B8D02317D7DC7FD33",
+    "metadata_key": "A4BBF9DDA5775F84FFC6E7A700B85F40",
+    "section_mic_hmac_key": "09863C0F71491893C00F06B6A38F5605951379845B88997B4C2FD7AE03BEEE05",
+    "section_salt": "48186B398DF4CAD231B9A47C00BD02E2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5F0DB8BAB212C01A15D1276C8111EB75",
+    "aes_key": "FD0804A8059A889D6462E272E40736DD",
+    "data_elements": [
+      {
+        "contents": "3AE626A64BCE",
+        "de_type": 913
+      },
+      {
+        "contents": "081BA24B63DB458284FBD02292F412DF67C22EA5",
+        "de_type": 664
+      },
+      {
+        "contents": "4EDD5AE85FBAD3B50947",
+        "de_type": 414
+      },
+      {
+        "contents": "FE5636FE49CC9B62F3F6F7F3D234D1C2814CD2",
+        "de_type": 252
+      }
+    ],
+    "encoded_section": "7A9013E2817D9D32C943EA7A07C69CB39C1F13911000CBCD80EA37EF7103BD971F1769362A6D9004B5D90F3F4B85363C35BFB1C5F2D33A6C32211C91023263539D31E4101561FA16843E7099B3ACE21CC285A818E5B121A53B8DC0C12AE39B07A1312A3E8DAB1854D32A11BF3AD661BD02FB69107D00509D5ABE30",
+    "identity_type": "provisioned",
+    "iv": "C85ED610C5284B60E85EE2EB65D824CA",
+    "key_seed": "50CC7E8BB70A560801376BE9507637A2E0DABB2C27C57ABBD4C6655996B310FC",
+    "metadata_key": "8AFB53C6D5AB8A8E040D6C43925ED79C",
+    "section_mic_hmac_key": "5EDBF3A1B90AC15F795203F2B7A62B8202C365C8DDD12125CA04492C666D5029",
+    "section_salt": "CBCD80EA37EF7103BD971F1769362A6D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4ABE96318E942D913EFEF38CE35EACA8",
+    "aes_key": "00CF98EE0A1B419B7F940F74FF10EE6E",
+    "data_elements": [],
+    "encoded_section": "379013F61D7E6303A40196D23DFCD2FD4AF8B19110003BD8AA188D8F355F6611B84C94D418BA9004FFB8BBB535C1A7E1DBF8A12938BCE857",
+    "identity_type": "provisioned",
+    "iv": "7251E4AE74A6EB8322818F09A004A0BF",
+    "key_seed": "0D13BBE27EBFE4514ACD491F0E66FC7BB7A115D79B73296EA83036EA681EE1C3",
+    "metadata_key": "238B7E260087E6974BF1001BD92CE7FE",
+    "section_mic_hmac_key": "4D70D13E0DB450B18F9B90584E9089EF8D8B0B21C1F28017AC0D542EE0201DEE",
+    "section_salt": "3BD8AA188D8F355F6611B84C94D418BA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "72037D0250C97CC1C26E0E715934B7F4",
+    "aes_key": "C96ADC6223409E5BDEB7AF3262EFB102",
+    "data_elements": [],
+    "encoded_section": "3790132EF73EEECCE1F32344D242781918B3D6911000D508D8EE1CB7B5B4457C34EAA1408D619002BA08D2ED7C5853A1C7D3661639BFFF3C",
+    "identity_type": "trusted",
+    "iv": "372B94248EC23F30A455DF27F397EE0B",
+    "key_seed": "C1DE01E9F5C668EED6E11935D5306F7610CD174CB883353086456D5D9689C611",
+    "metadata_key": "FCC9F9A491F6763794895FC2E8F5DA13",
+    "section_mic_hmac_key": "C62A4103BDAB300378CC50CE8F28DAE28D78D3C1F07219B2E1DE73FDCF606332",
+    "section_salt": "D508D8EE1CB7B5B4457C34EAA1408D61"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4F0B46BD474614611D7A9D1BA9DE0C03",
+    "aes_key": "C5DDEC1F35F8B6974302D062297B6792",
+    "data_elements": [
+      {
+        "contents": "E772DE467CD7896B78A062401310DF60A12164085D31EA7B",
+        "de_type": 783
+      }
+    ],
+    "encoded_section": "529013276DFA6BA513BEBCAB169691B61FD79191100093F60AA548031530136472E90FA8B2989001B948AFF95F6998BA8C8D95BC5B75710DE26D6A391A649AE60DBF82DA9AF2F8B01CDEF8018F226FE575B342",
+    "identity_type": "private",
+    "iv": "68F95B82D9FD1727831B1A18ECBC0F07",
+    "key_seed": "16120AD8398950406E4A12D5133D3C8F71D961E051B0970CAA8F8FAEEC187F83",
+    "metadata_key": "035A86F026FE0A595C1955FB1ACE685B",
+    "section_mic_hmac_key": "842116F8CB1EE997C7FECC683959AB4CD8EE3EC9C61152DE56F2BD2446A8F5E4",
+    "section_salt": "93F60AA548031530136472E90FA8B298"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CD771B262EC5CA3A5C0D0FB4B4D0A9F1",
+    "aes_key": "073C363B4DFA35C507EBBE01F75D4ACD",
+    "data_elements": [
+      {
+        "contents": "A510D052E5CDFE9B7F96A7076213D0D996D24E4D99",
+        "de_type": 220
+      },
+      {
+        "contents": "B0C476C075412AB26C51E6C0B8A01DB179F42A",
+        "de_type": 651
+      },
+      {
+        "contents": "A382A1DC37",
+        "de_type": 961
+      },
+      {
+        "contents": "BBA6CD7F93C8F950C7E3",
+        "de_type": 630
+      },
+      {
+        "contents": "EA45D2338F1A82639512EFD7A3DAF1716FD9279B32EED2",
+        "de_type": 448
+      }
+    ],
+    "encoded_section": "9490137FDA79A6A4413EF091B89DF894715D0F911000207A4ACED9DD7DF5469BA445D82C4A509004574B862AF8A5F1ABE9B7160D138C98870F4424CA9370D51712D0396D87644A2EDA5077AD5174F0FA4FA9F10B9B9E303D5CCEF3A36BA46D97F655644F44B747ADC2EC2164AB66CCE1502BDFA2FF38CF44D9B059DA0CC220246444E388020982B1267420374E3CF50BCF15FEA821",
+    "identity_type": "provisioned",
+    "iv": "8CE19168A15D76869969155EC24DB3F2",
+    "key_seed": "2B685F1252FBFB847B415DA3AC973CCB495EE32463325C507A28319AF15FEFDE",
+    "metadata_key": "7D65245E7BE0CB380D42E4D080C4B30E",
+    "section_mic_hmac_key": "3B54D8A9281273639E19E939070E13E81625D2C1FD16186BA429D58CA37205F7",
+    "section_salt": "207A4ACED9DD7DF5469BA445D82C4A50"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "55893FCB8F8DF622FD6A289A05C4148C",
+    "aes_key": "BF693BE1C25DBBEE6008755AE5E49920",
+    "data_elements": [
+      {
+        "contents": "33FD1BA6021EBCA4E5C7495D8E91578CC469D1E17551FF",
+        "de_type": 155
+      },
+      {
+        "contents": "0C14A55F473712E28050FD40E3CEE43A070CE813FA4C8F5C6C77CBF0",
+        "de_type": 997
+      }
+    ],
+    "encoded_section": "7090132ED1930BFB257B03FA14ADAE1B5C1D729110008C160E1D28A6D285D1DF356D50D4F79F9004769BA4CAE9955FDCF71B8BF9846D197E1959FFD62CAC6EC095FB709B140711B403EABDAFA3310E083886EBFA539F176EC7629D0A1B1EBC066CE5BE3244EB27542291E3E807F607F93B",
+    "identity_type": "provisioned",
+    "iv": "925B767E05ACDB3C182AF1B7052AD119",
+    "key_seed": "6043699A67E42BBFE23654CCA2ABCA973462107F14A3D255C6CE66FDED3BA8E6",
+    "metadata_key": "B182B23DF37C3FAB1127F1EC02EFC99F",
+    "section_mic_hmac_key": "47632D7EC5E8F44736F91AA12B9C6B57D099B9F23CBC3EF022C49F17DCD31BB0",
+    "section_salt": "8C160E1D28A6D285D1DF356D50D4F79F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B9A1E1F915254078F13383BEDA83CE1B",
+    "aes_key": "B2A38645ED7EB5C3CE73102FF9D2CF97",
+    "data_elements": [
+      {
+        "contents": "87818B3613A5D1AC040D",
+        "de_type": 304
+      },
+      {
+        "contents": "0CBF84397369C1",
+        "de_type": 98
+      },
+      {
+        "contents": "FE3972",
+        "de_type": 286
+      },
+      {
+        "contents": "4B",
+        "de_type": 269
+      }
+    ],
+    "encoded_section": "57901317514DDE22C7FA254E649536313E839B911000511A20E6594D496C588FEBBB9AAD242190017E66D43A84690796346F8436D0D8E8DE6F146D44C4AA622E9D739903FE39010B1BB3D07923199CFE45AF3E75ABD549B6",
+    "identity_type": "private",
+    "iv": "8FC1F2CC1AA763E1A5AE5B1A46BE72D2",
+    "key_seed": "8952E7BC0784A56739DFDFED452B9AEA99AF09D12A28E38DC923AB85A02F7AB6",
+    "metadata_key": "D9AF7A2E6CD1AA70B9689C5FBCD4D7B1",
+    "section_mic_hmac_key": "8A6D496379762DAFBF4409AA7526B7970A137210934D1F1419AF9B05283535E8",
+    "section_salt": "511A20E6594D496C588FEBBB9AAD2421"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "64B1CC633B622BA54618467268F0BCF5",
+    "aes_key": "57BC65DF5020C32CFF6B29055E11CC62",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 492
+      },
+      {
+        "contents": "370234107E41CF0DB00FC2DB6F95D5FE6F2669B8",
+        "de_type": 979
+      },
+      {
+        "contents": "0E7AA3067932410963858A7A0C03095826A2C1CFF616DD0A30",
+        "de_type": 484
+      },
+      {
+        "contents": "EDE7BB01C66E6AC77A372C5E0E99402D55BD",
+        "de_type": 909
+      }
+    ],
+    "encoded_section": "8290130FAB943DD3C3FFEBDF9EDBB19642A59E9110002FEE3F3C4DD0B38D2E90140654CF7555900497853980DAD64238E6974BB2DAE98D4DCFBCA0E2AFC6AD543A33EF8EE42F6DE0506A9B186A1FE02C409568362512C59DC04280B396E9FF8D4C4C2A3897412B290DB2076E1AA52580A11CB7463BE3FF3F0419A9D8E36079EE2CC38A",
+    "identity_type": "provisioned",
+    "iv": "8F5ABC9AA8000BE5F0185BBD0CB40B2E",
+    "key_seed": "FADBB185CBB88DE7D922282131A346D72869243A50911622E2EF1D5BD9F1015B",
+    "metadata_key": "5A7E3BABCFE50EF8B3CCBE8BB9741768",
+    "section_mic_hmac_key": "1D5E78BBAC91A6AA8738425112A23966439DCAE1D69161476501A605F4AFBC94",
+    "section_salt": "2FEE3F3C4DD0B38D2E90140654CF7555"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E5E46A2DA8C6DC22A69B3779CB44B1B6",
+    "aes_key": "D93ECA4F58BE626EE2B2584024D567ED",
+    "data_elements": [
+      {
+        "contents": "57186FD96B3B2A1B5099984E316AF34AD8F827A941AB",
+        "de_type": 289
+      },
+      {
+        "contents": "4F8EE606B8EE6567D40A3591485AB09B",
+        "de_type": 761
+      }
+    ],
+    "encoded_section": "639013F8605F4B7039EC7A0A92AE8839FEB15C91100073134AE922D5968E2AF8A54EEEE2E96E90019135A873371D039ED8BCF8D0E559F20B5A023516DB58A0FDA54F3B0AF0C3CB066277978EFBD3053F406ED380348DA8E0F365349D03349178A4CA5902",
+    "identity_type": "private",
+    "iv": "3ED5CCF399311A8CE0A94E9498F32454",
+    "key_seed": "C141FD581082AE08005BE0FE63B430D320CB1E6816E508CCE92D9E4487D97A88",
+    "metadata_key": "11EA53BA87F3632C176F7B6B7AFA42FC",
+    "section_mic_hmac_key": "3B60B3FCD92A91A83030C1F33B54242AD1A55699E6721016C8B3E9B95CBA7158",
+    "section_salt": "73134AE922D5968E2AF8A54EEEE2E96E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1AC4700BBC34FFCF56FE27722FDDAF8C",
+    "aes_key": "06FEC5659E272340991B55911FC8CEB8",
+    "data_elements": [
+      {
+        "contents": "8013EED9499B4FB30FE42FA2D25F73C62E30E0C13E4C1756629C87",
+        "de_type": 276
+      },
+      {
+        "contents": "D5F7EA0C7C5C2D3EFEAD2DA54C8854019E8508188CBAC37A1255",
+        "de_type": 254
+      },
+      {
+        "contents": "319793E7DCFBE4",
+        "de_type": 95
+      }
+    ],
+    "encoded_section": "7B90139E98AEFF088AAF2045661ED346D04613911000822C36C3F54743E8CCBB518C3E8A392D9002AEA2EEE26E1B161066AD737160B1815C36AF220A2BA8D8286A710BBAA1851A390F83083CDD47F4485A0D27D1ECCE811C16B614DE6AAE0854FC3C3F1DF2C1918D810CA3C926BED1062B00942B19759C4825C14085",
+    "identity_type": "trusted",
+    "iv": "B0238742AD552F78DC3F34B588EB1DAB",
+    "key_seed": "EE1B60A84CAAAC77DD6FD1B0A5770D58F2D65EF0D7284B0077E6AE18EEDDC910",
+    "metadata_key": "384A5B50211EF272A2A5C2DD917D9E4A",
+    "section_mic_hmac_key": "EB2659D6BC3B0E72645864BE08C039AD8E9BA70B6D26C5C49939BE6D4D007D86",
+    "section_salt": "822C36C3F54743E8CCBB518C3E8A392D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "688AB25983A9C40466E16ADC513ABAE3",
+    "aes_key": "709696F50854B468C9BBE0D3DDA9E26E",
+    "data_elements": [],
+    "encoded_section": "3790130D25512946BAE13F6E96DC89DFF0BB789110000322EC17288B60620CD9539AA9CD6B99900209B744C0B195BEDFB06D3DED5103CF0D",
+    "identity_type": "trusted",
+    "iv": "5C3D8F194A93E04EB34E7E59B3767F2E",
+    "key_seed": "8033F31A3FB892D45877E3398B8DD3444CB2E251EBC6B0D50C9C218384BCB792",
+    "metadata_key": "E0DB32B9221DD82283C29EEC5F782E0F",
+    "section_mic_hmac_key": "DC156CF79131E25E00AAAEA3BCFCB044C4E1066F84D7E07CCCA5E846E2E44156",
+    "section_salt": "0322EC17288B60620CD9539AA9CD6B99"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "ECCEBEA1B1C11B3D5888C3E163EABDE1",
+    "aes_key": "1CCECFEEDCA3385145ED977B3AE8AEA7",
+    "data_elements": [],
+    "encoded_section": "379013FFB104D3791419F3C3E265B1C0A0FC56911000804E5C3901A32B9C8EEF076790D48E329004BA0FE90EBFB6C81ECA3D0551E6CE469B",
+    "identity_type": "provisioned",
+    "iv": "95D7DAB8C760196851972252AAC93D75",
+    "key_seed": "FA8D1357B505B8CD83B94B9D11A1D1EC33A1964F2D95D4F6BEF9D958921D58F7",
+    "metadata_key": "4018D81F725B848799F4B2682A494819",
+    "section_mic_hmac_key": "AFB505B132A0B25DEE858DA00379D267045E19BA3739311A01569BFB24662A1A",
+    "section_salt": "804E5C3901A32B9C8EEF076790D48E32"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "61CDB5B59D3DAF922471F816010577B5",
+    "aes_key": "05F8C6D879D6F0CD30C79C10892E5509",
+    "data_elements": [
+      {
+        "contents": "0B36121960993A4FF30D3F84CD32B8CABF",
+        "de_type": 765
+      },
+      {
+        "contents": "4FC94B",
+        "de_type": 122
+      },
+      {
+        "contents": "0345E7",
+        "de_type": 331
+      },
+      {
+        "contents": "BD882C86",
+        "de_type": 64
+      }
+    ],
+    "encoded_section": "5C901310D1179AE506FFBD55FB2F356E2F8B7B9110001437F875D102645621739E078680E1B390020CA5C46CEA1767F34848E4E702E94FC9607CAFF41AEE7253BA7976724E461327BF2CC028BA1709C0DF368CD08D8DA6B4BB9F48D0AC",
+    "identity_type": "trusted",
+    "iv": "97681895B3DBB45117F05275011522EA",
+    "key_seed": "8AC64ED6DE2150104B510FE6DD2A49C744CBC4733D5DEA36BEE78170375701FA",
+    "metadata_key": "D7A9DFF5ECB1F4F785F929BBB097CE42",
+    "section_mic_hmac_key": "D05EF6C19FBEC3DAC6AA35992FDDAF2D69DBF56CD43D6E406597F01CFA212C23",
+    "section_salt": "1437F875D102645621739E078680E1B3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6B659D0B21836653EFDDD806AF70C39B",
+    "aes_key": "1399E5BD319D9D09DE5CDEB4C62E52C7",
+    "data_elements": [],
+    "encoded_section": "3790133A73A266945AB5E75E37AA0E4712B7F0911000AE4C670CDA23AF45ED828FAE7E41843F900281FE9EEE78132A0A54E5434BDBAE9062",
+    "identity_type": "trusted",
+    "iv": "F46E135C5AAE51FD7DAF53E6CCCB1113",
+    "key_seed": "36CCC67956A6F1364CAA0B7DDE0CE6CFCB53118C140A74A05A76B2A4C13369DD",
+    "metadata_key": "1A4D878971F8F57335B5A002C861F202",
+    "section_mic_hmac_key": "A0DD0937541A8ED002593C07BDA8351A9450073F748DB427FD57517FF1AFDA05",
+    "section_salt": "AE4C670CDA23AF45ED828FAE7E41843F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FADB2D052C1C1C27CB44E1A944104714",
+    "aes_key": "6B0C0385579C8A4EA0D91C928907B6F2",
+    "data_elements": [
+      {
+        "contents": "2F556D2609FB6A2053A998A91A",
+        "de_type": 577
+      }
+    ],
+    "encoded_section": "479013AC0A1D0434D93670BA9C9E2CA4B5091D9110001CAF1A47003F980443B9E56B4980731D9004AB942B3607465541F191028EDEEC77069FF9D15D5F2DCE9FB8CB930F2BE41723",
+    "identity_type": "provisioned",
+    "iv": "70ADD8C102E04C438C17F623252033F5",
+    "key_seed": "5CA287810D59C030C8CC8E9AE4FA3B446FC363D0E09E229194FAD91781A7F196",
+    "metadata_key": "9716BAD8F56242A3925CED10C4583901",
+    "section_mic_hmac_key": "F82A3B7F6B516694C1AC37DE73BFA8E170C6C23B759C1BEA0616710350AE641D",
+    "section_salt": "1CAF1A47003F980443B9E56B4980731D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6DB6728F2572B9138DF53B200CD8E30B",
+    "aes_key": "9986ED53BA3786C54562944C5633D59A",
+    "data_elements": [
+      {
+        "contents": "A094756B831AC0F2309FE373E4952C5899ED54DFEFB5",
+        "de_type": 295
+      },
+      {
+        "contents": "A3AFF2F5E05A0DB339CD73AD20AF8E3F34E0D4E9D5",
+        "de_type": 457
+      }
+    ],
+    "encoded_section": "68901398BF6715F57B6BE9A1449634DDFBD298911000D70B75C90790F143E006F97C963933769004FBC0E23ECF8951689315A48912CF86B7D85E7919A42C8AF123F862374840F2A94A89054731060F3336C723FFE54CE1366BED63741EFF3209FB1C8CC66A5F45EAAE",
+    "identity_type": "provisioned",
+    "iv": "6F05B19E3297E8DE48A6B8ED9597469E",
+    "key_seed": "21D64EA0D529E3C695348D2130CE0D970FF226D913AD85D544BD8BEA7BF7C3A0",
+    "metadata_key": "24F2B33454E620FEA4DC86EE10C90693",
+    "section_mic_hmac_key": "1EA011BF9B8063BDE3E95256E1A30994F9959AD3A80815E54801FE1A278AF1DD",
+    "section_salt": "D70B75C90790F143E006F97C96393376"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E7ACA2839BC4C6A7ECA4351B5B4F4D83",
+    "aes_key": "6E674BDEE405F4DE0EF583E2F7649A37",
+    "data_elements": [
+      {
+        "contents": "08AC57735F3F1316",
+        "de_type": 580
+      },
+      {
+        "contents": "185169B0BD105E2CE86FA692CA800858C23770F6A16CD57851FC361DFA",
+        "de_type": 351
+      },
+      {
+        "contents": "20E1D14615FDCFB630EB3293D3",
+        "de_type": 692
+      },
+      {
+        "contents": "09290387F31B81C684B8D92C5B",
+        "de_type": 209
+      }
+    ],
+    "encoded_section": "82901317F1B6491210D57AC3ABF4A33C2E4E43911000327D3D22CEE3A22CA4EEE65584907D619001BE43CD470A29DB32BFFACF5DBE8F63E501FA2FB82107C7D69B26348FF76A96644DB1E9A41592348404289395A150FDE6E76E7EF186E35EAF0E4572E07F1A4A093EDC149AB0C7022CBFCD84625A56EEFE9F3091E5263B23D051A28E",
+    "identity_type": "private",
+    "iv": "F2E05B8E1B5D670B361A240EA8CE4C17",
+    "key_seed": "5BCD7AF92667A3FE3B5C1F6F60372ECB5D1DF8E564E880FE523E3EA878C34ECB",
+    "metadata_key": "DF80721C303A49EFF2EA2AAC271F7CDE",
+    "section_mic_hmac_key": "2AEFC8097B0182AECE54F5CCA2FA741652BCDA820D0465CE573017E950CBD89F",
+    "section_salt": "327D3D22CEE3A22CA4EEE65584907D61"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "99A12E831E51DDCEF24924B1975C0589",
+    "aes_key": "594BCE537928BBC2259C658BA8294F79",
+    "data_elements": [
+      {
+        "contents": "6D1735B3D6221CEF5727CCD86EB799FE9EF05A",
+        "de_type": 6
+      },
+      {
+        "contents": "",
+        "de_type": 289
+      },
+      {
+        "contents": "10B7B4667BA4EF81315DB3D16127A4F0D9A63457",
+        "de_type": 99
+      }
+    ],
+    "encoded_section": "659013FEDFB8B589D781F1EBA87BAF95B8FCB79110004EABCD4E5E6C9A575FC314EA1F9165AE9004C06AEB6AC5B16BD435D7E69748BA6977DBAAB9A6E1A7B0CDBF4975CF2DC4A48C154726F5214A4D3A78D750BD49C97C0493042074ADE2BE34E86EBE25C1ED",
+    "identity_type": "provisioned",
+    "iv": "C9339EF9AE4B3F518B1BD4313FA73C79",
+    "key_seed": "2456DB0645CFFB37C50F85C1A0E4B3B3D62592B305DA2409D29222993FBD8DD6",
+    "metadata_key": "6C65E9861EA62C009260583C667568F7",
+    "section_mic_hmac_key": "52400F51B5CF34C2FBD9281AFDB2964EE49ABFFF2AAC1AD9FFBF931DA7B2D362",
+    "section_salt": "4EABCD4E5E6C9A575FC314EA1F9165AE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "878AACD95530B43C7913E501C8C4ACEE",
+    "aes_key": "341A08C911C28E10C9938C1CB0DF998F",
+    "data_elements": [
+      {
+        "contents": "79AD383E5AC871E91A471ACC",
+        "de_type": 343
+      },
+      {
+        "contents": "C77A72121DB14B812CF89D5D",
+        "de_type": 218
+      }
+    ],
+    "encoded_section": "559013C3FA6A34319D21F0113A710161E774CB911000132290FAEFE4EB99C181B96B5076979990010E92F2BF8F3565A81C24082EB66420FD2D32F18669221F3EE9C5B23722845ECE0C11FC261180613DCE38D704EB91",
+    "identity_type": "private",
+    "iv": "92AEEEF801E75B6C451EBA001AFEF5FF",
+    "key_seed": "DB24DC46E2C2864BA42A405F8C19F782A9B4A8AFC8F69F7F7025A1CBE2BB968E",
+    "metadata_key": "18BF8290AB02AAD2100F28455E585FB3",
+    "section_mic_hmac_key": "7707AF050E3902074823EBF13FD3D36B64E2435BF116C00ACE0BB85A7CE59AE9",
+    "section_salt": "132290FAEFE4EB99C181B96B50769799"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "DF0A3C777D4847C4EE6956A868840BC4",
+    "aes_key": "B09A907BD200E651C42C517BB92A38F2",
+    "data_elements": [
+      {
+        "contents": "7C30A6D0913132E43E6303A90005DB",
+        "de_type": 346
+      }
+    ],
+    "encoded_section": "4990136D86B8E26F22B175A2AEBDF6A520BF00911000C3CFBE28CE663F1BAACBAE369DCA6F7D9004B31F7A82993A384A7246B91E008B10DF5AE74B2E10809F089F3B0894C5B958D6ECA6",
+    "identity_type": "provisioned",
+    "iv": "00140D6DC0C9AE914E6EE880792BE76F",
+    "key_seed": "28C7233E1CABC3F5473F5B0F839133288FD4ACFB12C57CAFA92A6E56E9019822",
+    "metadata_key": "4A3A0B294F19898858F13AAFEFDDEE15",
+    "section_mic_hmac_key": "565E24A4C9C335FF6A36E420C84A2F4EA1E85610D246DAC5D0A0F2C8D40DCF98",
+    "section_salt": "C3CFBE28CE663F1BAACBAE369DCA6F7D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "48FB067349EA60A5548283F90D3FC74E",
+    "aes_key": "2D0054A2730B07075A868BA34305C0CA",
+    "data_elements": [
+      {
+        "contents": "4FB6BDA26FA11EB8EDFE6C6A",
+        "de_type": 155
+      },
+      {
+        "contents": "7870B1EE4FBD",
+        "de_type": 79
+      },
+      {
+        "contents": "F398B6D9B6328776C81B4FBD",
+        "de_type": 914
+      }
+    ],
+    "encoded_section": "5D90136AF14091CA00746306320474998A13DA9110003A9ABD9A4070DDAB398E95FB7F0E109A9004A8C4C17761B322D5EA37EF8E74F5497FD847156677DA00782677C144630049AFCB9CCBCC4C080548925A4926EBC9D13AD07F5E49962C",
+    "identity_type": "provisioned",
+    "iv": "8FF9284343646DA8172A83EFCCD1C15F",
+    "key_seed": "970E15EBA91441149A67E61DCE78BE67F995B606D2E76B02E9158E47E5142D72",
+    "metadata_key": "63862AAA507FF1AC7AB3E2F1B7597AFD",
+    "section_mic_hmac_key": "6BFEF95375643FFF9AAAA64B2FFB240E69A282B489FA6F23A0EAF8EE6C85747B",
+    "section_salt": "3A9ABD9A4070DDAB398E95FB7F0E109A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "833CB4935E9649B7AED0AF5AD62D9B6A",
+    "aes_key": "34867395BC36729AFA0E9651E17C16A9",
+    "data_elements": [],
+    "encoded_section": "3790131F3EAC01B28C1C974B040BCFEF38D838911000FE231478D02A9EC3AEAFB5EEAFD225459004252827D70ADAAC287267DD67A23ED9A6",
+    "identity_type": "provisioned",
+    "iv": "35902BD9F63C59083E5F15E541D6C89B",
+    "key_seed": "DE13251FC20C24143C5D1A3C1616030CBA3517EE9CB63416E169F86E5623C028",
+    "metadata_key": "A160EC6E23F3FA1C5155A3A8E982C28E",
+    "section_mic_hmac_key": "DA0632A39F94B40803FE3F706E0B7B5DBAED011230ACE7C4A00B90117B90F2F6",
+    "section_salt": "FE231478D02A9EC3AEAFB5EEAFD22545"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "271CBA3E2DE6311E84785053F08F6A34",
+    "aes_key": "48CFF76E51AC2C0956D41E9AD2D6B013",
+    "data_elements": [
+      {
+        "contents": "193684EB59862957D04183996B",
+        "de_type": 157
+      },
+      {
+        "contents": "3AB0E211CEE972C99EFE4022E1074C41663269",
+        "de_type": 56
+      },
+      {
+        "contents": "",
+        "de_type": 411
+      }
+    ],
+    "encoded_section": "5F9013B3D962B848554F750E23CE1DC503E29491100091AE51980C7684B16CA8C6D9F720C04790012581715CE9199E34170E21325A55D058820D62926B2671BA7CC37F6F90CD346310ED13CDA9003482DCC640C6516B93809FA6FE07218C6328",
+    "identity_type": "private",
+    "iv": "680126038E0D0C959C6F92CADF2B4DB7",
+    "key_seed": "70B633AFC7B05E5B54E499BD8F4556AAF5DECCD7A86DE04C45B4C3001EB24F80",
+    "metadata_key": "F8DF70B871DE7BB917ECFB0704A62685",
+    "section_mic_hmac_key": "D183ACB6D00F733F06179CAEFBECE5F4E0E5D690BBEF15A69904C143E4AB610B",
+    "section_salt": "91AE51980C7684B16CA8C6D9F720C047"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "52748CCA266DA944279BC16D0482E73C",
+    "aes_key": "44FF93170DA4A5EF9E35B21C2AC6E228",
+    "data_elements": [
+      {
+        "contents": "C3C03A02A3035C52D2BD8DB044",
+        "de_type": 952
+      },
+      {
+        "contents": "A8B3082EAD2495",
+        "de_type": 459
+      },
+      {
+        "contents": "D8F8770CD2FD961BE8F25B9B289B624E0D5EB550C558947A",
+        "de_type": 200
+      },
+      {
+        "contents": "BEE10F2031F41820F1B544709A29ED49E54809B3",
+        "de_type": 831
+      }
+    ],
+    "encoded_section": "839013100E58C7B0532D0ADFB41365B1A17827911000C755590B2F4894B1A5E48B0EBBF85A609004F74B503EF23735022525F4B920D6062FD791FB022FD24E687230D9864BEA2BB77119A3E96A5300B6A0703DC38A9F994E33ECDA1AFBDD0661930046C2F71D4CDECB25AE9D0FDBDA76D940119A557F4D1F552749690B30FDEB83F47108",
+    "identity_type": "provisioned",
+    "iv": "B386766CF3AECCE511F55D365BA53040",
+    "key_seed": "A4C01D2CEC164CD21C90FE0F05A6416F08A336DFFA5915EBBE3399F375E4E726",
+    "metadata_key": "A94A8413AF4BBB6A7F208BA3728CF664",
+    "section_mic_hmac_key": "A8AA56603BAF8162878DAF90AAAE3F2284AF34411328502FBF9BD05942239EBE",
+    "section_salt": "C755590B2F4894B1A5E48B0EBBF85A60"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5E4896E304E68E96A3B6EDD820E5F206",
+    "aes_key": "0573815A1D7E41DD84EFFE7BBB0A414B",
+    "data_elements": [
+      {
+        "contents": "CD459496304C08D118AD",
+        "de_type": 758
+      }
+    ],
+    "encoded_section": "449013FFD6666622A2DA34A2C275880506157F9110009874A69F2464B9DE4FF74F919CAC9D3890020A50F225CD2764D259A371F025387AECD2E84F2064417D98B96411449A",
+    "identity_type": "trusted",
+    "iv": "4F7C4F082F3718D52BA2A3222293DD19",
+    "key_seed": "4F2E1F3AD51A20DC3918600AD08D4D0BAF6B64E429F68D125AAF667BC17A725A",
+    "metadata_key": "CD1CB9AAD1597C77759AAD87938A9C36",
+    "section_mic_hmac_key": "DFCF245574F4751BB2A5DF4A84EE02D3E3D70ABD8FE987092B0F59ACCF2552AF",
+    "section_salt": "9874A69F2464B9DE4FF74F919CAC9D38"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F270C1808AE8861C06BE51C246839671",
+    "aes_key": "6711054A1EC414B5715B8AD33EC563BB",
+    "data_elements": [
+      {
+        "contents": "BB1EE72B358621",
+        "de_type": 690
+      },
+      {
+        "contents": "6CE1D344EB4F1641AE8AC5F9E2EAACC01E7C8FDC3D81AD77B2CCA371",
+        "de_type": 983
+      }
+    ],
+    "encoded_section": "609013E5F1F076FA559ED8A4CB17EC6D61EC6A911000EB93F9F5A15960A048CD6F8B8B6B58649001AD39CBA67C832FF3B377139EAD4E352D5BCF8E71974E4951DED2DB9918398D6AABF0DECCBE8E37224FE601F5CFFC705C5F227BCD511411796B",
+    "identity_type": "private",
+    "iv": "6723B26C84532019D6265FB1D9219387",
+    "key_seed": "5827EDF50C9C538E05C59270334EA25A707BAA6AECF563A6228C9A645DB95259",
+    "metadata_key": "E5034530CD6FE12AE1B8D9FA2BD772D4",
+    "section_mic_hmac_key": "D6EF9EE9456896020F182EE408581EF01B10CAF8A534693586E7F6A9A23A28BB",
+    "section_salt": "EB93F9F5A15960A048CD6F8B8B6B5864"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8389121A80436B19156632AC51695A13",
+    "aes_key": "6A5E04C19CC54841180722029D13F7C5",
+    "data_elements": [],
+    "encoded_section": "3790139684BDB26A1EB70A15B98EFB09D5111B911000FB98AABA968E22288FA299ACB4E405749002AAD65BA2AA0A63AB971C5722229B9C47",
+    "identity_type": "trusted",
+    "iv": "BEC2A53243D6F2707722FA034A317A68",
+    "key_seed": "1E700C710D7280FA6AC7439E403EDD5DE0257782DFD687BD323B57111DB15EEA",
+    "metadata_key": "8EF84C05AD7E87AA76F2D3F57FD231B5",
+    "section_mic_hmac_key": "AE770F2EBE85476AB97BAC70CAAF7F0B2D411DD01211E4F13855583E16EF211D",
+    "section_salt": "FB98AABA968E22288FA299ACB4E40574"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EAAEF0F0BD203FF07EE43BE082FFE487",
+    "aes_key": "5A8F6E1A06CF11AD9966D7DE70680E78",
+    "data_elements": [
+      {
+        "contents": "8D985C3C5BD7",
+        "de_type": 335
+      },
+      {
+        "contents": "ED8D6C68F03FA51B2F79759A78E8",
+        "de_type": 158
+      },
+      {
+        "contents": "15010A88EF1368AF73",
+        "de_type": 634
+      },
+      {
+        "contents": "04BBDC82881BC0AE",
+        "de_type": 964
+      },
+      {
+        "contents": "8FD5",
+        "de_type": 526
+      }
+    ],
+    "encoded_section": "6D90131F37122E6A01D9C8138CE142E9DE94FC9110006828E400EA55AC14C4AE3747AA7050FA900149BAB83CE2166727ABACAFBA637FAC4DE8F17FAB063D51BE286E68116796A8DECA3BFEBC98014CDEC2FB60D7E712C84057360216D6B9C222EBB6A6F1602D6AD41557BF75B28D",
+    "identity_type": "private",
+    "iv": "8A4C13A101DE46A8E1A4B39A7D458400",
+    "key_seed": "F4CA2D5D0F233F02D75BF99566E87F46887F3B57BC224D44B5C6CE2CA0B8F1F7",
+    "metadata_key": "673471840A043D3029819713668DFAE9",
+    "section_mic_hmac_key": "B1FB222C74B0ABDD529D06926D60C8685B5304B8FBE8491C38FB8A3DABAC9B2F",
+    "section_salt": "6828E400EA55AC14C4AE3747AA7050FA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9BC7CFB71D191BECC444808364D813C4",
+    "aes_key": "51518AE5E163D9D8D5416A193537ED76",
+    "data_elements": [
+      {
+        "contents": "4E18846D",
+        "de_type": 712
+      },
+      {
+        "contents": "4820CB3C92CAD5B8542AAE9A36",
+        "de_type": 832
+      },
+      {
+        "contents": "B5D2F1B6CD8A17DE1B03FC670CC9808FBCB4020B7BAE8FDCCD922961",
+        "de_type": 739
+      }
+    ],
+    "encoded_section": "6D90137D76CF1A4074CDE63F8C6C0329155D58911000F27909C892E859590581882380B7F73B9002FA6E25428FF322E54F5CBF0BA057B844E3391F0F719F4ABD296FCF239D824E940EF2B31760698498E6579D200686A63E33C766C109BAE6C2C7171305EF8D7D05B56A4E628771",
+    "identity_type": "trusted",
+    "iv": "CFED21D898A59168C5FB57F3A86AB6FC",
+    "key_seed": "5189E43E665A66541461FCB1DD460196AE5F64EFB70F344E5B00E6533566AB35",
+    "metadata_key": "C3C0CFA6645E1AF45DDEF7B3D1F74751",
+    "section_mic_hmac_key": "7F4EFFC52343AB47D1EC9C234841BED7BA67A772CC238A9AC005847361718BEB",
+    "section_salt": "F27909C892E859590581882380B7F73B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EFC325741A620CDF60ACE605C3356BE1",
+    "aes_key": "BB076A02A36F6D81B206B1C9C8236EE9",
+    "data_elements": [
+      {
+        "contents": "EE2C53A7B84776BCBE",
+        "de_type": 322
+      },
+      {
+        "contents": "3D831323FF7DD1D925C629564D92C87D7ACC5FF526BB2A0B5FAC9132",
+        "de_type": 610
+      },
+      {
+        "contents": "B38D897E0829B179A5FD66CDE9D5B5B0D574E04008",
+        "de_type": 240
+      }
+    ],
+    "encoded_section": "7A9013444AA5DE765AF1E12CF47CE2C37B6227911000249EB7CE39639EDB7AA5680B7445ACCD9004D0230E8B8D679112F9F650A8E4779C93FDF8F26AD5B381729C15F83A07808F094528BD326047036689E5DD4A92DE1B57DB883720D93E4CCA65058635AE9612A8E48DF6A8BD372262E06328D5FC5456FA168186",
+    "identity_type": "provisioned",
+    "iv": "BDC3752E0380EF0CCC465A207B36AC33",
+    "key_seed": "C855E8921027426AAFE3C38593C328834BC1DEB79007F68455F336A0AA2E6979",
+    "metadata_key": "249DAC8BD2E0A6D705BF4D5729A6B9E0",
+    "section_mic_hmac_key": "848CCE3F38671B20F910FB919492E1E80051AA4C9AE7FED49B71D4E60C8EDBD7",
+    "section_salt": "249EB7CE39639EDB7AA5680B7445ACCD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6C45308E14C984650D43BCF505BC65F5",
+    "aes_key": "D1A76910387CF7AAB6CE4A0EF807FE49",
+    "data_elements": [
+      {
+        "contents": "AEADF60EEF2311B4FE8111065D40435AB79809469B08FC5FEE",
+        "de_type": 674
+      }
+    ],
+    "encoded_section": "53901393F3F5E4C94F10F460E9B79E4A8488F191100020F961FC32DAAFA88DBDD328319AEB7F90019FB4153E082B763922CEF5EFE91F357D2E83421DB3CD2AB47308C127A33A7079611224B3763E863656848939",
+    "identity_type": "private",
+    "iv": "C0E2E91FB0D154BF04CE881789D11166",
+    "key_seed": "7D4DAB11FB6FC7BE19BC0D9A56936874E83966C5F58686C9AB533FB3A6F3F2B3",
+    "metadata_key": "7682862834A4910F038FC5CDE1A7BB7A",
+    "section_mic_hmac_key": "244E6405668A612CC41EF88DB5D046256AD61698DB7E5D9CC632BDAEC18351C0",
+    "section_salt": "20F961FC32DAAFA88DBDD328319AEB7F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "49716F792B5B2446878F04B9B080DF27",
+    "aes_key": "3FF2428CC19EB164069991144389B867",
+    "data_elements": [
+      {
+        "contents": "953F0048B02C14E8BA62C721240D68D90001B4DD0E897705",
+        "de_type": 401
+      },
+      {
+        "contents": "0775542388275325E3FA4DD2FFBBCFB429BA51CA4775F8A342B67030A3",
+        "de_type": 395
+      },
+      {
+        "contents": "E0246D98751CEEC87A2A86866D06EF",
+        "de_type": 165
+      }
+    ],
+    "encoded_section": "84901324809B6938CB9ABF43A1A28BE74FF373911000C05F2D1681AE6F6689FF8989B0CFBAEF900160F98F0EDFCB8E41846F503B92280E0BE2FC3E1D261CD9A2204AFBC3276A639296B87C27C143969FD3FFE020918D8FB9CA5846E095566F27EF8F45442B3BD2ACB637C8360D82172A970BE0574ABABD5D34F0EF773D4FA68982B24F8A8D",
+    "identity_type": "private",
+    "iv": "CA0256A71F1F8248F4E5804C5C80C42B",
+    "key_seed": "32F7B3C74E59251702FAE6CA0DDBC4D4DCCE002F82F064A92093EF0E0DFD96CA",
+    "metadata_key": "5AAA3B579A426D773E975C442A0D24DD",
+    "section_mic_hmac_key": "B3F114BA4764A3CDA2A0DE54E53F0747324DB0DAC3EE19C338FD5898948E7121",
+    "section_salt": "C05F2D1681AE6F6689FF8989B0CFBAEF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8F3ACF2B400ED33574CCB9AC82B7FF80",
+    "aes_key": "CCC54BB5C42A61F4F50820F1D64C601A",
+    "data_elements": [
+      {
+        "contents": "C4878BE538",
+        "de_type": 696
+      },
+      {
+        "contents": "5081C9BA7B0F06",
+        "de_type": 10
+      },
+      {
+        "contents": "E009C8169E51A37B7544A8EC8A1E6085C345D3350D7ADF",
+        "de_type": 400
+      }
+    ],
+    "encoded_section": "61901380D74E5F857F77C6324B0DEB8271F2F5911000535996FE591823883E8F94C9528142FB90029EFAF31276DE796DF3843E4C08FE5DA982EB047A4E932F1C689DB334E0DF51EC92622CFFE9AC50711E45207EA4493A88A6A2EA36741D6BE76801",
+    "identity_type": "trusted",
+    "iv": "6BA59F3930B610C64F9A97F9254130CA",
+    "key_seed": "A9F58DCCA97743D648C98BF39AEEC09D1042794054924AA10B601CDBAAFDA1F7",
+    "metadata_key": "E18C1EB3D52ADD20D13E6F5CD7253F36",
+    "section_mic_hmac_key": "B9336123B29683DCAF5421E6A934369E3D587749147C3D3A9C65DAA2FCA4FD5F",
+    "section_salt": "535996FE591823883E8F94C9528142FB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D906139BD4F5F0D43588F1E463870ED7",
+    "aes_key": "659E7E26B7350532979241C71A794A47",
+    "data_elements": [],
+    "encoded_section": "3790133051C1E0D286C009937A41FBEF966F4A911000E9B18B58534EBE29990D03A38305EEED9001A3F393753D761A490BD4204C22B88D18",
+    "identity_type": "private",
+    "iv": "652B4283066AAFDED606DF9F74BD40A2",
+    "key_seed": "92F464D53AC339F4CCABEDEA6C123D36319ADD612EDBE6674D1CD8673AB4B591",
+    "metadata_key": "6AF8037879F253615782CD0A041EB12C",
+    "section_mic_hmac_key": "AA4229BA575F5800F32326FE1981C126F79755D1F6B07BA91670B3E2C4178B55",
+    "section_salt": "E9B18B58534EBE29990D03A38305EEED"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D1DDA0E7AA3E69AE2F3370D6E15F4062",
+    "aes_key": "600F6D5E91AF5302CE554A57A7EBCA42",
+    "data_elements": [
+      {
+        "contents": "769BC18B3624C9C3F9538B96F668E73E7E53D36B16",
+        "de_type": 199
+      }
+    ],
+    "encoded_section": "4F90139FEEE459BE5B388C727B8A576E4C93619110004892C57DF0FF7BAEABC88477F349C4A79004AE6E76B72576ABD71FD6EFCA914797AC69C80AAC2283EFFEE9DB9A784D7518FD45A71BE14AEFCFD9",
+    "identity_type": "provisioned",
+    "iv": "1E805BEA0FDA0095E961BE043176F24B",
+    "key_seed": "1B19E9B42F8262E9ECB505D43A949363ED484EAD3D8B802C19B826C40C293778",
+    "metadata_key": "E6BC1FF04AAC597D5116A868BF0107A2",
+    "section_mic_hmac_key": "3B15004ADC3A4F59DFFC423D292165746C76969A40F763043F5F009EB38E5B6F",
+    "section_salt": "4892C57DF0FF7BAEABC88477F349C4A7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F02914E89D274DECC66DF2B3C188328A",
+    "aes_key": "8E89A5C199B8E077FF0C020C9E5FD1D8",
+    "data_elements": [
+      {
+        "contents": "087FFF3F2F",
+        "de_type": 934
+      },
+      {
+        "contents": "447FF6BE8D5D86F7C59001FBFC19E00E",
+        "de_type": 163
+      },
+      {
+        "contents": "AD33",
+        "de_type": 695
+      },
+      {
+        "contents": "",
+        "de_type": 114
+      }
+    ],
+    "encoded_section": "59901386E81CDE1667FBFDD7799D04920C706F911000279EE983242C291A41DA61962A3C6E229004E3973DC6CC11CB4B4853FE0A72D9DFA304E37D1D01517B31771AEE26680F9AB271BE747FB639A5F5BFDB4C701534F7C7E083",
+    "identity_type": "provisioned",
+    "iv": "B1B0129B8F410981FF08A1E07765FE25",
+    "key_seed": "37C6B00660E3E82EF5176F7164828F5501D19B08EE50FA8B5426BC87EFC6BEA7",
+    "metadata_key": "60C8892135BE25252CB238940AC460A4",
+    "section_mic_hmac_key": "8491D901EBD1B5E3C23828A7B8C830FE557F6D238CE41296A14A97C0A26BE21E",
+    "section_salt": "279EE983242C291A41DA61962A3C6E22"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4F655495958DA3AC2438FADC76CAA469",
+    "aes_key": "48017698AA818DF52A218956255D1184",
+    "data_elements": [
+      {
+        "contents": "D21415A59D61C37A431C94CA3D1B12",
+        "de_type": 223
+      }
+    ],
+    "encoded_section": "499013BD809616651CB4C0FA14C3FED9EEA8199110008F1695AE141F457D323BFE9FBDB4A646900164E3DB751CD22313B6EFC2BB28D064CE99C04F4377CFBB39666CE7F6B35822CEAF23",
+    "identity_type": "private",
+    "iv": "2279F7D60A8ACFC3400EAB7D479DB51A",
+    "key_seed": "971782B7DFE1FA2F6D6F2C76AC4C6CBCC2BF05AC1CFBD19882E484D07D90A467",
+    "metadata_key": "658C560090654FE1648E9939A51BA9A6",
+    "section_mic_hmac_key": "AB9431C41C87442A332416CCE3074BAC1C330F923AA07E57CEED68592C0208E4",
+    "section_salt": "8F1695AE141F457D323BFE9FBDB4A646"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "ED33675F04F139BE2E7BE9417679089B",
+    "aes_key": "D169E3E3EF2ACCAE3CEEB84523649232",
+    "data_elements": [
+      {
+        "contents": "138081B628B974A24C1CA904B706ECFC64ED8B256833B9F3",
+        "de_type": 487
+      },
+      {
+        "contents": "2BA4C7",
+        "de_type": 311
+      }
+    ],
+    "encoded_section": "58901346E74CA333752A4F091A53F7BB6A1E6391100017C25D290070B12CA99F7B188DBA2C009004462896554342784C49B6A736DBB42FA93EA55CA27E9BECF238D8D76E39AFEF0EF3809225ACD1338A7C3802DEADBBC38303",
+    "identity_type": "provisioned",
+    "iv": "5CA7E4BB4CB64ACC75FE3D7ECA59B5F1",
+    "key_seed": "BC53A14CA7C5A41C1459A17DE84DA7EA69C9B4B3BF412CD1B7F735C86FD026FB",
+    "metadata_key": "6B2D533F3E784395DA8EA4D104A9A5A6",
+    "section_mic_hmac_key": "D6831E0EB880B6EBB5EC3B5A6178589CCD4CFE42C1D2C0982039674966809A1E",
+    "section_salt": "17C25D290070B12CA99F7B188DBA2C00"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EEE3952D89F58C16D86CF2A0D676264F",
+    "aes_key": "EE4D226F72FAD340CB5969026B5009F1",
+    "data_elements": [],
+    "encoded_section": "3790135CBA17D59F867DD8152D6A15D42C059E9110005F9D9CF54AF1C87EA73CF0539B878E559001DDF4CB6AD10039706AC555E84E731BB6",
+    "identity_type": "private",
+    "iv": "960DD7B569F6084D311B14EA5EABA4AF",
+    "key_seed": "CA471364CBACA719FD0FFBBB46AF040A9B77BADC1C5DD45671DAD16658908CCA",
+    "metadata_key": "BC7545E167CE62D60E04709FE54A0EFE",
+    "section_mic_hmac_key": "AD60A30FD4927631B4BE521BB0BF8EF4805993AE122CB68B749D39A6051D2156",
+    "section_salt": "5F9D9CF54AF1C87EA73CF0539B878E55"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "DF5649D8C88520FA5B4C48C0D156FC6F",
+    "aes_key": "83B0F91866C953759BA6C220B17BBF79",
+    "data_elements": [
+      {
+        "contents": "E712F3058923F793652BD04D42D44A38371F7A29027D4E6AF3F2",
+        "de_type": 184
+      },
+      {
+        "contents": "8EEEC3B2BCFAC213A2A95EA3EC5596DC8BB30D52B3D095CA",
+        "de_type": 546
+      },
+      {
+        "contents": "2C4B5138B3D520FD9D3799CEE77A57CE28",
+        "de_type": 125
+      },
+      {
+        "contents": "4F039D61E7908BC515E127542C4F69393593BF9015E8821E52FF",
+        "de_type": 550
+      },
+      {
+        "contents": "12159E47",
+        "de_type": 107
+      }
+    ],
+    "encoded_section": "A59013C0DA8CF829FDFEC39AF1136EB83F1930911000F16D6B2A76966AE53ACF6792DFBC41C5900139D1D9C42A158ABA72D040B5B379308734C4AA5345EC3FBE04EBD2543A38E50551C82BADC8BC9A8150450F68E3DC4DDC1F7EDFC9A48BFA00985F334AC8B072423E38BEA3C91A1C7E59DDFF1D74948A17DF9FC3B25DD3E61B3882CFB3734646FEE24D60A03D329BCA50BF5E6EB8AC4C377DE637D0971CEE502419683DADBD",
+    "identity_type": "private",
+    "iv": "C56E5DC162716C9EF3CEAC49C0F115B8",
+    "key_seed": "CA4F0FCDE67D6A691236FE32B43802AAA785519E4108415A4B9384FAE6220F25",
+    "metadata_key": "5DCE8108DB324CDEAF9C4DA6C5652CE5",
+    "section_mic_hmac_key": "435152983E08E498549369CBB3845599399E0C3BAE7A6AEB530CF9BF74F94F43",
+    "section_salt": "F16D6B2A76966AE53ACF6792DFBC41C5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F6C8A813A71E37E62E7B4A383DE9CE03",
+    "aes_key": "28F700FF1E657FA5B93060B77CF3F673",
+    "data_elements": [
+      {
+        "contents": "7B25F39E00B7B165",
+        "de_type": 588
+      },
+      {
+        "contents": "4407E542845E25D8C5F651C54A6325DB08D31CD01C0A39CE68F6A63521",
+        "de_type": 397
+      }
+    ],
+    "encoded_section": "62901319919D6F5709324CD2F3E6C38393AE8C9110001A35A3E9A1EF41933CE4934C5576B4AA90028C72D7952DBA1254D1A6F28B061A89EB461FBB771E1291C35270DBDB7F4F344E527F4F419D80D9D8F37ADDBCB0300061DCEE9DC4A49295C9CAEBC9",
+    "identity_type": "trusted",
+    "iv": "E9C4F94C776EA7100BF8FCF029EAC9A5",
+    "key_seed": "691BB699B3A533E919AC8F2592FBF465ADFA3232A7102CDAB4A2BFAF18D39216",
+    "metadata_key": "D19E7F2C3EDD021E38F7EB3668A30D21",
+    "section_mic_hmac_key": "9166DE19913527B22E2D285A5623FBE27843DEDA9BF75CA21AAC1D7A925BAE71",
+    "section_salt": "1A35A3E9A1EF41933CE4934C5576B4AA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E03BD15C47BE63457ADA2CAA38F8C01D",
+    "aes_key": "E57DD2A12514B1A31EE3031299B69BAC",
+    "data_elements": [
+      {
+        "contents": "E1DACD22961D862FE8B7A8DBF8DF3014ABDBB06525C3",
+        "de_type": 408
+      },
+      {
+        "contents": "00982ADF65DCAC4218EAF676347CA52607D55CA9334F",
+        "de_type": 600
+      }
+    ],
+    "encoded_section": "699013EBFB56D27710D376E2F78AE5314B6EE99110002E9A05B98DC81FA726BBE0B25ED6616E9004943E813F9E1C01E8C8987A3C7C2A612A27C011AB3BD5134E60593FE73B0950C777D4FD02A1220ECA13213A10769B4456DB92139D8A06AE5A33CD1EB07D629BAD3581",
+    "identity_type": "provisioned",
+    "iv": "18A7EE60B7F063FC35EC9A051432A276",
+    "key_seed": "854812FA5DD5336B82417C854DE3C21D55EB81CC503D395D36160429743EFA17",
+    "metadata_key": "FBBA049407A1FB50BD32B42FD1FC5227",
+    "section_mic_hmac_key": "2B1B6926BC2FE1A4789F6FF28C1B1E208BBB7B9A831B7665FDF07FE5CC932974",
+    "section_salt": "2E9A05B98DC81FA726BBE0B25ED6616E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C565D587CAB49EFA12AC6F0A2DD13227",
+    "aes_key": "432B9F04E0F4F71190D9CCB3DA261AE1",
+    "data_elements": [],
+    "encoded_section": "379013DEC89828681CFEB999004464A2DAEA7A911000533B00CF247DD1C3271AC6EBBA2DEFBD9004309005A18C6BB3D59BB078853CC5A98C",
+    "identity_type": "provisioned",
+    "iv": "46696325A36A170F95E6D3258A08B04F",
+    "key_seed": "15740DD5FCD0FF3547B15163C6041E1D8DD9DE508BDFF02042B0BA37F11C10B7",
+    "metadata_key": "C6D054B984ECCE9241E8F5C7F95A788B",
+    "section_mic_hmac_key": "52EFEE44663018C3D495F0726D8AFF9BF451607C491D8982E709AC57C9253A8C",
+    "section_salt": "533B00CF247DD1C3271AC6EBBA2DEFBD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A2F7DFEEE2E3E735EF73F8E75D9CE4F6",
+    "aes_key": "14A2DC3915F43E95AE53A541DB6A20A5",
+    "data_elements": [
+      {
+        "contents": "1F819F1441E9818AD0AAC4B083840D81AC",
+        "de_type": 743
+      },
+      {
+        "contents": "FF547347B5FC33DEE1BC21109492E5B254231ED5CEA88445ED5F7892A2",
+        "de_type": 822
+      }
+    ],
+    "encoded_section": "6B9013659512ED18290B6C5F4DE46EAB3E54AA91100043B1749F94745222204B1E9AFF8C086890017EA654267AA0447CFE19880DEC1916CAA03546DAF407913D33465D78F90FE9C982F101EDB98C030024372AC65278A26D644A99BBC06860B81E8E46F97280A7A9496919AF",
+    "identity_type": "private",
+    "iv": "0B79362274A4ED6B0A2DDC9B3A3D0C4B",
+    "key_seed": "EE2EF449A38CE4C5AC6F70F3592DAF53E0EFFDC3FAD5A8D35914A301123C65C7",
+    "metadata_key": "18D9E6C0B7CC34DAA3FBF27255ED25CA",
+    "section_mic_hmac_key": "99F5025A9BEF0E77912BE3A814A87DB26C75A86092AE4DFC0409F2E7CE1A61BC",
+    "section_salt": "43B1749F94745222204B1E9AFF8C0868"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9250734FC0AC255D11341B94703240A6",
+    "aes_key": "14E0C14BFE51E3E2D9C17E46617A7254",
+    "data_elements": [
+      {
+        "contents": "7AD8D89A3BAFE604CE90BA870FBAE5061E596406D3492A",
+        "de_type": 773
+      }
+    ],
+    "encoded_section": "519013F3F99B6429EF43A25C3096E54A7A6AE191100097B2C056D43F50DBD56CE2F57636E93F9002025D4212219F661181F68D105E0567675318418C08858F7F9ADBFDC9EC2525CA987B754CA7B7E20541AE",
+    "identity_type": "trusted",
+    "iv": "CF58402F5FE4255D36AC71B32A7E53DD",
+    "key_seed": "0737014DACB915DA41FCDABFAE3A1612CEA784C26E728B92A515D17AC9880BBA",
+    "metadata_key": "488DFBB55E10A9C4115ABE9EA510E685",
+    "section_mic_hmac_key": "2A83F033AD0948FA29DD234D02124C1BF07BB0A914E008CD5A32A794FAFD594E",
+    "section_salt": "97B2C056D43F50DBD56CE2F57636E93F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "742306D9A50A5F57414C636DAD6758AE",
+    "aes_key": "843800EB6901EC65E32BCDD8C42DDBB0",
+    "data_elements": [],
+    "encoded_section": "379013A910AB5E2636F86BC67DE65AA6BF508691100046DD825A5E29527818B48BB6B12D52D1900141FC36E88D10ACBEF867C69D0F07DAE2",
+    "identity_type": "private",
+    "iv": "C622A5E21BB8C2A60B610C1523013FD9",
+    "key_seed": "6A455B03C96F4CE85832223DDB4B84AB1A2C98356B00F09F5855F5D1DF296400",
+    "metadata_key": "B7BBC5E06529761651EA6817D5434679",
+    "section_mic_hmac_key": "7BFCEE3D3465311604F1BFEF4746CF63D2433806F5720F4B8DC4876CD398E276",
+    "section_salt": "46DD825A5E29527818B48BB6B12D52D1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "970ABD5B5C3196B424CF4D3BB360A3A2",
+    "aes_key": "505ED35ABFD6327336834E0A3B8A1168",
+    "data_elements": [
+      {
+        "contents": "3BAED92467687DDCCB55D80114188395B55B82",
+        "de_type": 249
+      },
+      {
+        "contents": "7D8988A293E7FD36AC2C6A9DF2",
+        "de_type": 103
+      },
+      {
+        "contents": "0186E7C12684315D411D523F67C43FFA8A1CD75A",
+        "de_type": 1000
+      },
+      {
+        "contents": "390049E7B31C2689FD0E6A78AB8165E724F1F70DE1A2C93C615B19",
+        "de_type": 234
+      }
+    ],
+    "encoded_section": "9190136E43BD77DD71A1178B3A9D6E81F6218D9110006F5E89B4DD9C9E840C769C2D9CCE5889900294BF8F6B35C8A0A1ADEA4EAD45B4969D29EB245D277B98EA35316E32FD2CDCF61464007AF3EC71697AB7C81845C03493206C236D076D094471DC5E7DAA4D822EF947A2E6446B6630F8605DEF9C467CEABC0AEFDB73BC7ACE0EB4352B06881F71FC480F14E153FA4DBF52",
+    "identity_type": "trusted",
+    "iv": "4C9ED54A1DF5B2930A75F6117A853CC5",
+    "key_seed": "7F47276F24CE6BB646B1CEFEF060FBFE235AEC3DCDCCF4CC2385EA943EE690DA",
+    "metadata_key": "346F80C5C67A4EDAE1818D56393D3B82",
+    "section_mic_hmac_key": "AB43E9A5ED9D2DD9535153F4338CDBBE77046191ADF5940A2769B2F919A911E3",
+    "section_salt": "6F5E89B4DD9C9E840C769C2D9CCE5889"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "228D8BFE431F88F73A132DD2E756DE94",
+    "aes_key": "AB278D4D71D4DFA69690315EAC610D6F",
+    "data_elements": [
+      {
+        "contents": "170117845E",
+        "de_type": 913
+      },
+      {
+        "contents": "FCFAEB51A97F49110B14325B51364275",
+        "de_type": 100
+      },
+      {
+        "contents": "82",
+        "de_type": 510
+      },
+      {
+        "contents": "D62D60EFF7C12231328DE62E",
+        "de_type": 779
+      }
+    ],
+    "encoded_section": "6490135A2E477C18D8A5D04E1138CDBBBD2BEF911000B39BE49E8FCC53C0C821C9BBBC0C024D90027F72C6072B8172256C2194121844B4EDB6C2154044FE30EF19BA68E2C1A7F7FBE0387F5764D69AAE52B0E2FC46B0A52CD08728E375B042B0F3E8CBDE3F",
+    "identity_type": "trusted",
+    "iv": "31A4BF684280A37A8030426577EB7B9C",
+    "key_seed": "912586C615BE6DD6F4F6ED12C85D9189B85E1D2FFA06AE1763BB32713ACA1F95",
+    "metadata_key": "C16D146B28A8C32B7DCB66EAB90C30EA",
+    "section_mic_hmac_key": "ADA2821A572B4B3ED9298257C200A5B73A39634117024404EC3011E7DA17D24D",
+    "section_salt": "B39BE49E8FCC53C0C821C9BBBC0C024D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BA26ABDD5164F306449CFF633AFA7806",
+    "aes_key": "328428A223099585C9ABC9ACD7911FD8",
+    "data_elements": [
+      {
+        "contents": "33222D5C84507A2B0130501E",
+        "de_type": 413
+      },
+      {
+        "contents": "1ED1B4E58C",
+        "de_type": 41
+      },
+      {
+        "contents": "E2079D383308B60A86988F3B36F491127E",
+        "de_type": 812
+      },
+      {
+        "contents": "D5DE2EFCEAD465719916DA22BF3FE9",
+        "de_type": 855
+      },
+      {
+        "contents": "84D04B14ACEC49162E4705C4DFBADC5EE6161B8D323A",
+        "de_type": 185
+      }
+    ],
+    "encoded_section": "8C90131AFAB491598665D824C89C5398CC85B9911000633957E0C51915A10852DC7A8F09400890019069C7C9CFBEA948E3DB9A4DBD040F8E776D4F3721EACE87669A8CA6FF04E51B02D67207B82BC9E6E33D65B0F33DF6D878F0E06560FA8EB638C80117FD6DFAA2B902732BAE4E8CED79420FE93D9B57C724CBB06369FE960269B80BAA1FB8020BDB2D00D72C",
+    "identity_type": "private",
+    "iv": "E0B0D025435FF6F9FAAF4B42044DE4C9",
+    "key_seed": "E75FCCB24B1405672AE7A48F64DBDFF890783DDCC42B9928E74B591D387ADF86",
+    "metadata_key": "26B8D6CA92011D8C16EA62D6C62781E1",
+    "section_mic_hmac_key": "5665CD729F01A5933E5AEEB2B38EF153D71A19E3A7A603723E2AD564CEB83D99",
+    "section_salt": "633957E0C51915A10852DC7A8F094008"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "DC49AEC367EA0121D5FB188143092866",
+    "aes_key": "B42D7A6A8D1776BADA8E21C226605833",
+    "data_elements": [
+      {
+        "contents": "B3BE9AB518C82B73A3C0FB57D56C6F2A335F",
+        "de_type": 423
+      },
+      {
+        "contents": "4D96F55DA0342CE760A1832CB0A53B2A74CB529FF65EB532",
+        "de_type": 945
+      },
+      {
+        "contents": "20ACF6ACC51DAA65AEFDEBDA0D8697476D0E",
+        "de_type": 423
+      },
+      {
+        "contents": "2C3F7B88FE5F07C99978BCF68B3F5E7198724FEDDE",
+        "de_type": 465
+      },
+      {
+        "contents": "06BF37158C17DDD27C8F8DFB3EAD50096EFC8CC085D65AB195A7D0",
+        "de_type": 368
+      }
+    ],
+    "encoded_section": "B29013658EAAAEDD464C9AE3EAD5F4D5EC48FB911000739370CE2574699DE19C1289E6F976A390040B3321DA88445526B10812DB7DCB8E5FA5C3FE2602991884CF5444623FE87FC4E63086F9039CFC7B871E08F88FEE69B1BAD6730C2C4C959FBD0AD2DE89020F46CDA552DB50C50939DD58C4D7AEAC8DE212D03F3D47A13990CDA58D276DBD6BA9A8F90A623CEEB931FFA530DF6DD7F57BC1CAD71D242778783C92F855D6E90D509976F8563C9B9370849CA7",
+    "identity_type": "provisioned",
+    "iv": "FF2AC24716EF0EEBFF2CF92A02049CD2",
+    "key_seed": "DD843B0B46AD2B8D137CF22A2517E961A79EB1AEB2882986DE825056D2FC52BD",
+    "metadata_key": "F64D69CD52EE04FF9E8324E751FAF1FB",
+    "section_mic_hmac_key": "78F4F673BB14B5F7F6C4563F4D9636355C91CCB01BC021C2FC1567446A944A52",
+    "section_salt": "739370CE2574699DE19C1289E6F976A3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CF7D481AA8590423266AE9663FF6F7BF",
+    "aes_key": "E47403E811D992FF13BDD5156EF15C03",
+    "data_elements": [
+      {
+        "contents": "CE99E4F9ACD8CBF8D99295AF",
+        "de_type": 110
+      },
+      {
+        "contents": "BDF065E66145184B54FE0C0CEED6CD6741404BDA57CFFB2B73102F542EBE",
+        "de_type": 369
+      },
+      {
+        "contents": "EAC4BC7CE2",
+        "de_type": 971
+      }
+    ],
+    "encoded_section": "6E90131C80766FCE663175DF597C00BD95B39B9110001568D698479F825D5637D908F813F4DF900154739ED1447C96CEB428C6C2E98F9F6C544970AA9EBE7DB216197F20B6F4B3A573F461E2025808BDDED29278410B1AE18942699647D71252759992BFFBC9F5B7A923965972E820",
+    "identity_type": "private",
+    "iv": "11B6F13C8903EE0D12233F0FB5DA1C6D",
+    "key_seed": "BFDCC2ACAA9E80AE659F652CB2FBFDA4990B805A9D4AA898D350CCCBA3CC9CA8",
+    "metadata_key": "9AB08AE1CB6AF2A4745439770718B2CE",
+    "section_mic_hmac_key": "0580E1B433054DF31F38E72764FE5849FDC54D54416CD139F34D4D444402263D",
+    "section_salt": "1568D698479F825D5637D908F813F4DF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "85B1D40513E6CAE086C28552C12FB350",
+    "aes_key": "CC37B97B5B92FB9F9D6E00EDCA6AF45A",
+    "data_elements": [
+      {
+        "contents": "14EA6D3FEAC9844D84E540D0AE1033C435F130AB1BEF75B7760E6AB9AD",
+        "de_type": 341
+      },
+      {
+        "contents": "",
+        "de_type": 550
+      }
+    ],
+    "encoded_section": "5A901328BA159A1D698C86962BBE2358C362709110008D6FDFC90CA3D1A3AAA1C766B72B5EA490022F5AAFBD03AC4ED441B9EEFFEFFEA020A82B9EBFBD20648A4CE8BF57BF728D9FAD388AD1EEFBD957EF312CB9FDFB7ECF68AA06",
+    "identity_type": "trusted",
+    "iv": "25ADEFF36CE0A5B0A09953648F7EF334",
+    "key_seed": "0454B57060C890C86592212E9A3EC7926D43BA17D4CECE8BCFE7637484D83802",
+    "metadata_key": "21D66A2461F62F2D1C0B9F66D9739287",
+    "section_mic_hmac_key": "A61711DB75D7A424E6E806F1F43CFEAE962A7F6C499622A0793A170F4EB9CBBC",
+    "section_salt": "8D6FDFC90CA3D1A3AAA1C766B72B5EA4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "02D5D750D664E288EFE7A964A02A927D",
+    "aes_key": "A3A5A8A7E672AC04CC383C0F95DCE6A0",
+    "data_elements": [],
+    "encoded_section": "37901361A89D3B7C790776967C6501726806BE9110000EB05C6B0F96C24634A63A667709215D9001255CCF12AC41FEAC1EB155D864DCA570",
+    "identity_type": "private",
+    "iv": "27A2765AE71E5B83F0480E32BE173DFD",
+    "key_seed": "2EAFB7F93967A4C45F5DDFF41E13410591E3419E65A7DB92762697DE216FC967",
+    "metadata_key": "283DD374AA19C66FDB250A312166E6EA",
+    "section_mic_hmac_key": "D4BD0787505004AC108AC3DA06C1A450057D551AE7DA43BCEBE14C2D975A8E78",
+    "section_salt": "0EB05C6B0F96C24634A63A667709215D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "125D63CB7190B478236C3747A149366D",
+    "aes_key": "0BE97B73FF512505354DAB5D6B29FCBA",
+    "data_elements": [
+      {
+        "contents": "14EF62BF82F80FB085A310A1435223ACDB920B97DDCED1",
+        "de_type": 871
+      },
+      {
+        "contents": "2CAF9EF90EAD8F6298060839624769DE",
+        "de_type": 964
+      },
+      {
+        "contents": "768E7C5B73E36F162BF105E085899DA027D9",
+        "de_type": 721
+      },
+      {
+        "contents": "A178D1480EB66B5551EC948ABD91F0C049D33B8D29360DB2EF",
+        "de_type": 198
+      }
+    ],
+    "encoded_section": "959013997F971BF31BE7F59A55046ECDE81BCB9110001F657CA6FA909CCA6C1681FC6DD0928B90043DBF611BE7A90F0905DA13400AA1A1866644AC3671290548F39EEBC9B5BD3CC18AB804DA5C77D714181A605BE5C884A5EE6081FF4591D2AF96BDFAB2546D12602EB44A3FEBAAA3E4C66F444F55A6FBFAC75DDD71D57E6A719C739492CBA1C0E73711D2A105A3B3FB2AD3237E9ECC",
+    "identity_type": "provisioned",
+    "iv": "5404FADA1301DDEEE830D6119A3846BA",
+    "key_seed": "246A732C0A2F892B057A253141C26E21F7B0ECEBEF3AEA051118FC0E1BD8D36C",
+    "metadata_key": "4B47D6D3B10A385845DF425AA1C38431",
+    "section_mic_hmac_key": "CBE07A55700BC8C0BF94EB36BB907882CB50CB667FC240FBA6AC1830DC14F3FD",
+    "section_salt": "1F657CA6FA909CCA6C1681FC6DD0928B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6C5994B3FDEFF488147D2225A5AD3289",
+    "aes_key": "EEEB9A1765F85001AAB7C718544D5853",
+    "data_elements": [
+      {
+        "contents": "CF41A589C639780D91A23D762B7871",
+        "de_type": 400
+      }
+    ],
+    "encoded_section": "499013089985A0087D6F5ACE5AB3B11DC8EE0D911000DD64F5C39C94FF038BFAA44A1B009C139002D5EB61BABCC1E0AF9080528B6261FD81C25644B912DBEA20EC659DDE6F0778CDDC85",
+    "identity_type": "trusted",
+    "iv": "43C6A352609BF3D07C23F7457F7BFBED",
+    "key_seed": "FE781376ED435B876E0E7FA261BE9A2E4D7362EBE61D5C015F6694019D4246BF",
+    "metadata_key": "670F87F10099A52B7714DC7B088A9AB7",
+    "section_mic_hmac_key": "94912114FD584C0BA0F6C1C462117D516F0619F216BDB8099BEF422FA50EA315",
+    "section_salt": "DD64F5C39C94FF038BFAA44A1B009C13"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "86890C122BA74C502FAAA2B246EBFFB1",
+    "aes_key": "1A42B8762AA6E9320C32FDDC669DC405",
+    "data_elements": [],
+    "encoded_section": "37901367745F1F321A28509A1FD382E5576965911000D788AFA3591BF1E13252441A7D280B2B9001C13C4CD9EB22629AE6ACB4648000FA2F",
+    "identity_type": "private",
+    "iv": "8A763DF0DC6548AFBF6EC1526711F13C",
+    "key_seed": "660D035C9A48405AB89BF25E4F71494AC76286D993B2E8CA213BEBB6C00BB604",
+    "metadata_key": "A0E42B6646670B54D13D012B2AC9D610",
+    "section_mic_hmac_key": "3419FAD3032B38259FB4447FEAAC776F5E64DAF919AB24EAC7904709BF60BD61",
+    "section_salt": "D788AFA3591BF1E13252441A7D280B2B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A507D673235683A679F00AFF69858E78",
+    "aes_key": "74F54D0AC51AF56BE4CC75ABD624AF34",
+    "data_elements": [
+      {
+        "contents": "9E4AFE615138D74E",
+        "de_type": 758
+      },
+      {
+        "contents": "2E7BD8416782398BF01F53CD4611DC26DDD158965C2C6D55D3",
+        "de_type": 583
+      }
+    ],
+    "encoded_section": "5E9013FE192C6106C46626A96469BBC51CF37B91100060EA0FE905728A9E01B9891E5731F91590010026C008E139C9EF930ADE42C20B09FB19D70EBDA109AC5CE58F35A7F05F329D2A7F8823281DCCE0C246DF43A752DF1B571ADE24671464",
+    "identity_type": "private",
+    "iv": "371E3734A83E864FE7434D06799565A8",
+    "key_seed": "5FADFF2AFE58072B5C59C59B5114C5FE544638917F0EAA8B73B2FFBCB93C5ABA",
+    "metadata_key": "138F084E2B8D250604A01F2AE51AE287",
+    "section_mic_hmac_key": "F10F17E2EF9E66F261398CAACC64F069301D59F4C674C583941F959716435E1C",
+    "section_salt": "60EA0FE905728A9E01B9891E5731F915"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BC4A32514B46C03C366AB566227DCABB",
+    "aes_key": "319D7CB155D521DC9F2017535BE3809F",
+    "data_elements": [
+      {
+        "contents": "663DFF01222160CB8B4AF0",
+        "de_type": 611
+      },
+      {
+        "contents": "74A119294F8C71D64DEC46282D88B43F3B896420A0A2",
+        "de_type": 410
+      },
+      {
+        "contents": "89A9338136",
+        "de_type": 756
+      },
+      {
+        "contents": "671D",
+        "de_type": 830
+      },
+      {
+        "contents": "745FEA8DAADEA15F08",
+        "de_type": 294
+      }
+    ],
+    "encoded_section": "779013FC8A3C4941128517FBF0C9DD73CDD5D1911000E70075B4DB3AE7073A33D45EB9A683D29004A2BF89757731C8381C0555234E298E9786845CD199883ED9444B434A4A0C9033DA1DB45E377719B2A7A9B5DBC9A999A43DFA606028DCB57E6FC55D6F1371AC9F0E45DCF3CF2477D87B39902B34758F7F",
+    "identity_type": "provisioned",
+    "iv": "C757A65A68F3EBD6A716AF192FF956EB",
+    "key_seed": "B19A2C4A8869522DA56A328B502C3C5B54C7E272A6E77861225624038C9D9B2E",
+    "metadata_key": "86AECBDC0B76BA224B501EC73B8E6BA9",
+    "section_mic_hmac_key": "421CC07318D2A08C383681AE93B61845FA8E952FFB670340E6860D2BC29B3979",
+    "section_salt": "E70075B4DB3AE7073A33D45EB9A683D2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C54051A886B449242FE691EFBFB9B8CE",
+    "aes_key": "B913FEC648BB9E3D942E6A8683F07BAC",
+    "data_elements": [
+      {
+        "contents": "1F6DE79DD0F5CEE21D5D485A",
+        "de_type": 980
+      },
+      {
+        "contents": "9B",
+        "de_type": 756
+      },
+      {
+        "contents": "560487517D8A50F671F4ADDD8827D2ADE2",
+        "de_type": 697
+      }
+    ],
+    "encoded_section": "5E901348E76A5E52F4D62ECAE0CCE82DED2876911000BFA9F58BF2E56725C08161B4F81BB459900161AF730F1FC29BFA27F62252D430C72BEC351333D47129987FB00291F43B8343585C8B48863E042F6EC34D500743C95362EA6C97213BDE",
+    "identity_type": "private",
+    "iv": "F09F6C29C92034AB81F55EE06D133577",
+    "key_seed": "9EA688C752FFAEE37FCB91894708CA03FBCFD9AB3798F0D3B1E1578972861CEB",
+    "metadata_key": "00106D80565F791BDF1612CD3E290EFC",
+    "section_mic_hmac_key": "72B11A271AAD73820E785D6C56578AB0847DD744A8E6ABD72790BDDA339F1223",
+    "section_salt": "BFA9F58BF2E56725C08161B4F81BB459"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1E40D6365164CA659D4B50F39E3F85A6",
+    "aes_key": "9B3859BC7836621D944C23864F6F3550",
+    "data_elements": [
+      {
+        "contents": "8E3058E4062EAAC88D165AA151D44DF6AF58D634245F10FD71FE3F613275",
+        "de_type": 90
+      },
+      {
+        "contents": "B2FEBB35A264B7537903B8",
+        "de_type": 712
+      },
+      {
+        "contents": "29A0D1104C283E273DD5A3895D0A3D4FB996D96F4C482487E02F09C0",
+        "de_type": 712
+      },
+      {
+        "contents": "25BA53B6E20672A6C53F19FC35388A45EEE09CFD",
+        "de_type": 819
+      }
+    ],
+    "encoded_section": "9B90130505D9ECE86F5E3EDC6FC0229F02EC68911000964CF0FBD200823DA6AE76EDC4F2C1449001298E94F4601B7165AA782D1DA74A9E274AF98F92CEFC7AAF15075BBDF016D2FA06F09167A305BADA6B4FA6B2B17AA2A3F73B85C67DBCFA1F565C07C85281C3182C301FC3B810EDD4FF195EBF4D50C1ECCF51705ACB38966B2D61E496425E6B33D2017A5692589D573F1226C182862F31C1B06BF4",
+    "identity_type": "private",
+    "iv": "64FE3459449A905E996A5730ADAC500B",
+    "key_seed": "791CBF19EAE82635964320BF77F90CDC6A40B25A714A47E2E696A03FE466C75F",
+    "metadata_key": "35402883705B38294EB2D93FF46112E3",
+    "section_mic_hmac_key": "EF49867605FEC8C35D229722B9DD3AEBEB0B434C4F4925AA3D34F706EFD87D21",
+    "section_salt": "964CF0FBD200823DA6AE76EDC4F2C144"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B8071EC0685F84D18F37D305200EE4FA",
+    "aes_key": "964869E0D50271B6944FE957380DBF8C",
+    "data_elements": [
+      {
+        "contents": "24945148BCB09A73",
+        "de_type": 483
+      },
+      {
+        "contents": "79DD087059250E029F",
+        "de_type": 440
+      },
+      {
+        "contents": "9D82CC",
+        "de_type": 812
+      },
+      {
+        "contents": "775F99E59CCE70FCA9D050DD11",
+        "de_type": 305
+      }
+    ],
+    "encoded_section": "6490130CE57E93E2E8A432D77023CB6590E0B6911000F746162C91A850D8DCE3BD3A9090C0429002AFE864CCB7884BB9D8AF1C927C847FF0DFF33898E5AC6DDBA9A741956A4B488D5BB52C343B6FF4D9BB888D1D4366E357CDC20BCCBE05392091D18F8961",
+    "identity_type": "trusted",
+    "iv": "1CE7729EB320E531F4C3C60EE4C59AA8",
+    "key_seed": "0D0FF621E557488CE9920E1DE78CEAC7B0D9666B21443FDC57EBB108FC1DDA86",
+    "metadata_key": "9E53DDBB1F1FDF5E5899E62210663BE9",
+    "section_mic_hmac_key": "E656B56AA9B2A4A91571D7C6F593AC20AFE90E83E0C13EFA883E20488E37B487",
+    "section_salt": "F746162C91A850D8DCE3BD3A9090C042"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9C13345061898B01207C68614DDA532B",
+    "aes_key": "AA5B840D4BFDC99B8AF79B584CE12E84",
+    "data_elements": [
+      {
+        "contents": "A1F81F14E46B",
+        "de_type": 390
+      },
+      {
+        "contents": "A42D01AA6C08",
+        "de_type": 160
+      },
+      {
+        "contents": "9AE6B3E298",
+        "de_type": 937
+      }
+    ],
+    "encoded_section": "51901310EAEAFA6AC17122CDCA2573D355D0CD911000CCF8CC3D63587712B4E731FD35EAA3669004B915C781CC1ED7331474C7BC423AFEAD113D1B25C0E94E69E3EB59894678D87BEEBE96355C09DDD32C4E",
+    "identity_type": "provisioned",
+    "iv": "95A37DC09AB387CE11030FEB6B1C9DFA",
+    "key_seed": "B570342527343884EF1CB5BAE4228CC72A19C439402FC11E449A4CBCF50F7E3B",
+    "metadata_key": "46EC49AFA765AE05F70C74DCA5715DBC",
+    "section_mic_hmac_key": "0388A70B3DB58C158BEB9A21198BD81FDA14300D6FD4527C80B33E7929C21021",
+    "section_salt": "CCF8CC3D63587712B4E731FD35EAA366"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "DCF9E3CE0572EA0DF42D4A555A23592E",
+    "aes_key": "ECB0F2C8BC9E75FA10F8EA4B4D8629D5",
+    "data_elements": [
+      {
+        "contents": "8920EC9E22CEE0DD1C8ED84CD007DABD37160FC8AF0AE95923",
+        "de_type": 728
+      }
+    ],
+    "encoded_section": "53901313FB99AE0E6BABC8B4849186D87DB4A89110002EBCF33E80A1C8FEF0FEA18D38F4B6FF90028EFBD0ACAE3981D4191B91BD4A7931FBB7AB9587A17D735034B8B94B2E0B5E4B99E1074CA04F4D136AE760D6",
+    "identity_type": "trusted",
+    "iv": "4EA1AB449CE1ECCF1D975F94E111F508",
+    "key_seed": "8817390FE2DDA73E10454028375DF6167C737A41591E2F8BAF9E6EFE8185669B",
+    "metadata_key": "EA92B90A39ED2CEC3D5D61B74B07A356",
+    "section_mic_hmac_key": "ECE846A0D0C013B82CFB53C18F7D044FCD7E53B027F2B562CD43EA2AA881C343",
+    "section_salt": "2EBCF33E80A1C8FEF0FEA18D38F4B6FF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "295C4F693C6ED0E9B8E92727C5F4A7B4",
+    "aes_key": "A45CD64E2DC93AB7FC688850CD3B3FB5",
+    "data_elements": [
+      {
+        "contents": "65CF460752C1B9676A2049D19BDA1CD3F2",
+        "de_type": 43
+      },
+      {
+        "contents": "7BDB1C4245F476F0E1CFB5F1491C5C0318416011AA69",
+        "de_type": 45
+      },
+      {
+        "contents": "22756DE6303A1311BABFA22E170E9D1F",
+        "de_type": 762
+      },
+      {
+        "contents": "6F23",
+        "de_type": 329
+      },
+      {
+        "contents": "480AEB8EE08170C1D5FE904B5BE9DA2AD094376598DE0F70548B705A25",
+        "de_type": 828
+      }
+    ],
+    "encoded_section": "9A9013BC95851D486FAA4EF13F6D7A5AD6E6CE911000749C9EEA6B4A6792229D9E531152124890015B7124853389DBD3B5CC2524AD1C434B2C10214716D89D585E8FA0F55E1CA11B4BC8C262D1BAED2019E61C815CAB00036B15424E1DEA61A93DEE90FE4663F3EC04B1010BB7A178F47B6BDB61847DD9B9A88D35CE2D9A247968F93549D09CF01A98F33B87F038EF995137DADC3D9E2C908D61E7",
+    "identity_type": "private",
+    "iv": "CCA81A30F3887FAC55CC619C978C0B45",
+    "key_seed": "BC9DF6FAE9C35B873DE0FE4AD8CF11245105B7AC518D80498A5205BFB35074E9",
+    "metadata_key": "32A45452147E1B0A64313C39EFA855AD",
+    "section_mic_hmac_key": "B25364C8CBF115BF9A46287B759768B611CACEC692152D0DBE125FDBB3A8829F",
+    "section_salt": "749C9EEA6B4A6792229D9E5311521248"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "12571F71243CD373229D0C7BB8D30710",
+    "aes_key": "49B6E023B58BB34C272F807D5DA0A938",
+    "data_elements": [],
+    "encoded_section": "379013715C03AC7E1419D8D44694F5A4CB6266911000D55A403C5DEAB9883326E5B111C522049002CED99F5612149B9FDB72B03FADF057D9",
+    "identity_type": "trusted",
+    "iv": "B0B763E4D08FC218A318A378EBF75E8C",
+    "key_seed": "16003DE1916A0820BE43D32BFA1629E67FA83CA01723D4FDFD95746BC16BC7A2",
+    "metadata_key": "A3605E523D0C4E8CA3787B141CABDF32",
+    "section_mic_hmac_key": "13E544ABD5FD671F496322D77A4446C3B77ACB007F746A4B948129500045FAA7",
+    "section_salt": "D55A403C5DEAB9883326E5B111C52204"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7856ACD18EF6930C9EE065073F685E8A",
+    "aes_key": "F6A6945E6C274AF90CF773F8D4FC6FF0",
+    "data_elements": [
+      {
+        "contents": "DBDF1692FB5E018F0C49A7",
+        "de_type": 908
+      },
+      {
+        "contents": "028A7815CFF85F0AC6D5",
+        "de_type": 291
+      }
+    ],
+    "encoded_section": "529013CA6D31C6A12CAE2D2636712A77C22F51911000884B1C54E519FC35F64802BFE939E6929004B056A9831532176B1AB6F17B7577C994EAE50667C44842ACB793918F39962150F1EB4AA0E520277691063A",
+    "identity_type": "provisioned",
+    "iv": "6F79E25D027B6E4186761C47E6E1EE0A",
+    "key_seed": "A891081463E0C9FE931B23F137879FF4B344F2BCB31D5FAEA2A8BFDDF5F13781",
+    "metadata_key": "07210356E3A7C4AF1B88209799127A55",
+    "section_mic_hmac_key": "9DCD53D49928551A914A807FFB85660F307480AF464ED3691142DA591D79C951",
+    "section_salt": "884B1C54E519FC35F64802BFE939E692"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2A45B0515F2A249BF7B1387CB70901AE",
+    "aes_key": "021CF92CE743805B8DF93B88E6AEF0D0",
+    "data_elements": [
+      {
+        "contents": "08D11FED65701B3A3F5402894F1165",
+        "de_type": 677
+      },
+      {
+        "contents": "F49808BB6625467F86",
+        "de_type": 810
+      },
+      {
+        "contents": "CC13627179B6B8AD3F84",
+        "de_type": 889
+      },
+      {
+        "contents": "2C2EBC4E0F92D24D03A867AD8B07300E1F81BFEF9AE4C2B3F980",
+        "de_type": 950
+      },
+      {
+        "contents": "E55E101A8EF67E80A3AE5F8A0D1A5C1F37B627870B9D586FACB5A718EAE7",
+        "de_type": 760
+      }
+    ],
+    "encoded_section": "A090132E71DE6700AA3E0C1C842F31A135B2D5911000562D7ED3A3EA4D2620E92FA7DD128BDD9004035EE5E4CC870B7B1B812CF79D4719E2676E5E2AF7CED20BB42F45CD7F9B8ADC660E976D664DB7B10D049EDBEE2B60E69700410951E62CEBEB4EE089730CF9B259A2B651223902FF17B6FF7C025109F7AF444DB9C2DF564E676B720C0B99C0A9B84DE4D6FF084AEB943B95728F94BB1C65E44CE6C5A97A8847",
+    "identity_type": "provisioned",
+    "iv": "6AE6067877803C9B82D5B30A6792FFC7",
+    "key_seed": "1FF1D25A12210940D973C467FD115BB4B7C906C3FB38D21F16BE63744E016B5A",
+    "metadata_key": "CFF931305B876F2DBF5BA261EE9E8D17",
+    "section_mic_hmac_key": "467241B19A991B7AE839D5AA1DA92038F7389ECB55796C6C6B5B181070E23EC8",
+    "section_salt": "562D7ED3A3EA4D2620E92FA7DD128BDD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "485599A65B35D21A40658A9E2766B597",
+    "aes_key": "8663ED345FECBB713029DC829D74543B",
+    "data_elements": [
+      {
+        "contents": "E9",
+        "de_type": 810
+      },
+      {
+        "contents": "6E6E09DB0F2355AC2B3C",
+        "de_type": 404
+      }
+    ],
+    "encoded_section": "4890138E055A46A940DFF96DF637A5EFD7B93C911000E0A1D051D8D533CF3E77E10A5F8B6C0E9004E4E7C9C6EC8AFC814102DF0DBCEB09A00938F75F24DE48ACA96EB524B708D6D545",
+    "identity_type": "provisioned",
+    "iv": "8561B433E308C0D1CA6C9C91BCF0FF81",
+    "key_seed": "F3F4C98BCEED47C4E562B406D4BD793926B20945745F48D0EB78D5F31F9F2BCD",
+    "metadata_key": "308BB628E7DECE141A7C5309ADBD6A62",
+    "section_mic_hmac_key": "0CB4466330332C9FCD21DF8388B1A82C1384D041924657423091BF61A5199BF4",
+    "section_salt": "E0A1D051D8D533CF3E77E10A5F8B6C0E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0483C23ED6D77A8D0C278940BBD177ED",
+    "aes_key": "0621EC75B3278510C3093EC0603EDCF4",
+    "data_elements": [
+      {
+        "contents": "417A9B78",
+        "de_type": 640
+      }
+    ],
+    "encoded_section": "3E9013B8E0A03E4AE2E7C1B9F25ED66EA06746911000B48692BE5AFEED1AFBD1184172C7C7969004C1B7DBD5F3B1FD26360B730588E7A5D9AF6677656E2307",
+    "identity_type": "provisioned",
+    "iv": "14AE44FB4E180AF23246ED81C4286150",
+    "key_seed": "A0C7A5E03E6FEA711AAAEEA331CF2B1FC7FF1E9B11D45910ECD2C5B9DB4393AD",
+    "metadata_key": "F190DAF1401184759B968F030ADC4C41",
+    "section_mic_hmac_key": "969F571D76ABDBECCFAD193C906C94295C28257C8B6595A08FA511ED4107B32E",
+    "section_salt": "B48692BE5AFEED1AFBD1184172C7C796"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "22663881121C84CC788A4F6922C843DE",
+    "aes_key": "0F81827BB3D0C01DCF64D7E758984BF3",
+    "data_elements": [
+      {
+        "contents": "68C7FA8F642F7EA1691EA458690F29479E21B04CBB109FEF",
+        "de_type": 811
+      },
+      {
+        "contents": "8A0F88051FD567DE679BFB29095332F265EB034173FB9CCFA5",
+        "de_type": 435
+      },
+      {
+        "contents": "7248F229F7C3561570",
+        "de_type": 431
+      }
+    ],
+    "encoded_section": "7A901340369C7D4FCB569C613A49C8DBD0329B91100018EA0774B5EAACC943949E550BE9BB3F90027ECAEE8A6F71B9D7FB08EFE2E3703DAFAB895EAAEB766E0553D865D90BE25DFEFA27648AB16D8B9C9A6D9D516DA6C8D98A3B0347742CA933963AD32B77090A10B631362604FCD808CE3CFDCD1F55501CF6F591",
+    "identity_type": "trusted",
+    "iv": "619245F3980B3B070388B0E858E58611",
+    "key_seed": "3F58BFCB2F818DFCCF2B1A1DC6EF4CC4C30B798F65DBFD6CEF0FBEB2DD78D6D6",
+    "metadata_key": "19C7DFBC68C5918D20EEC53476B394CC",
+    "section_mic_hmac_key": "C7434DB05FC2B8286FB317867A78B34C7344CFF20EC1C4C7AF58D2DF66FDFE67",
+    "section_salt": "18EA0774B5EAACC943949E550BE9BB3F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7F398DEAADE4F63E3321618AC28B0A8E",
+    "aes_key": "0218AA8671D3E2E3B9EFE1B5C4C11581",
+    "data_elements": [
+      {
+        "contents": "9323424FE556B495790619DF9DACC116",
+        "de_type": 37
+      },
+      {
+        "contents": "128970C823632AEF313503B1",
+        "de_type": 782
+      }
+    ],
+    "encoded_section": "589013F189A6CB59AA3A5558AF3E6A708542E29110008454882DDD820F52035C40B1D5312A4C900428991BD1031F9679D03ED9FC6B252EB552937EEEB002F5948495D55B8C19BDA0EF0975100A8CCE558ED14FB7CA41783BA6",
+    "identity_type": "provisioned",
+    "iv": "548A8956100DE08A0305C789B52833CD",
+    "key_seed": "5B76B5CB1E81CC93E525AF117B8251E0F61C5DA57E4FA328E61A5BFAB48718C4",
+    "metadata_key": "CE0A85F582B746AF57AF0349E3258079",
+    "section_mic_hmac_key": "67A13CACBAB11819E8EB4E22F9F81693557DE288C42AB3731983D0C1B3C4FF76",
+    "section_salt": "8454882DDD820F52035C40B1D5312A4C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E86E43C49AD176E39A0AA9821C78602D",
+    "aes_key": "BCD5E866510A0A5B815385B383B22AE7",
+    "data_elements": [
+      {
+        "contents": "EC",
+        "de_type": 581
+      },
+      {
+        "contents": "59789A920867697109C3740D0B8029F1CC7000FF04EC0940",
+        "de_type": 978
+      },
+      {
+        "contents": "940D7B076B6CBA0B73872A012345F3BA97410D8709501262839D3DE137",
+        "de_type": 135
+      },
+      {
+        "contents": "E261435EBE",
+        "de_type": 88
+      }
+    ],
+    "encoded_section": "7D9013EFC8FC9DAE00AF80415337DE30A6E31A9110006E869407F2E81551F812020C3433D0E1900254214E6EE97EEF7619C5FB9880E26357ADA5681E80DA9C8E367034D066375C0E8B834CE14A1AB864C7EC310AB35FDCC21167922D8192D0C782DB32A745BFC329176791D090CEE07B7C2E292EDD1DFEE41623C9555EF7",
+    "identity_type": "trusted",
+    "iv": "65C99C5FA0A0746E69C46E0C4A857592",
+    "key_seed": "BEA6260AB3A2F619ADB859391F6A6CA28177B84CD449C728F6189F0467F525E1",
+    "metadata_key": "7DD064AA32B3E04C57BF54B824641E1E",
+    "section_mic_hmac_key": "6660174157DC50F6D1C82D1C8D416C0E6EDCA0874333C3D94B46926CFCB12495",
+    "section_salt": "6E869407F2E81551F812020C3433D0E1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B040969C351F81AE34697DC725DEAC92",
+    "aes_key": "3AF9FD8F0D0707DA73D7688D0CA0D2A4",
+    "data_elements": [
+      {
+        "contents": "131A8175D19006DB8D9021",
+        "de_type": 125
+      }
+    ],
+    "encoded_section": "449013A902FC6AA6817E9CA34B810932FCB9FD9110008681C5D8FBCC1970B3C6D9F7083FF9E9900475EF1E2E01C84DD0353766ACDE314778BA6ECAEAB9D9A63A60B5578C96",
+    "identity_type": "provisioned",
+    "iv": "8C96BB516E8363C0CD2BEFF0AC4CC486",
+    "key_seed": "637D181D26E0CF8BC0CE45DFE20610F6EAA306196A0C22BF51DEEC49E1A33DAE",
+    "metadata_key": "FAA1CBAF42E95200D71F3BEC89C79671",
+    "section_mic_hmac_key": "CC1FBEF9A592EB51101E67FCBA18B5FC3DC62CA157CC01ECC68B9BCD643FBF0F",
+    "section_salt": "8681C5D8FBCC1970B3C6D9F7083FF9E9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "259B5127DF0CD589480E4C1AC87A2186",
+    "aes_key": "4188F8C94E54114D83CCDBA4A51A1BDB",
+    "data_elements": [
+      {
+        "contents": "A0382BA41C0E9E669742CCC8830D5573AD19",
+        "de_type": 851
+      },
+      {
+        "contents": "624153",
+        "de_type": 573
+      }
+    ],
+    "encoded_section": "5290138B66DB3AD592825ABCAA7F300DBAD488911000D13AB39D6F0C08DE53F3B616CD929F529004A5838FA715D57CE71AF1A64E317091B45E3310331738129691565D4839D38D4D6127F0235BA458A90A2766",
+    "identity_type": "provisioned",
+    "iv": "0235DBFEC90AFAEB878738BB174A8EC4",
+    "key_seed": "E8E501A2579003EDB979B9C5B4C806B4A428D23DA93761D2C8031169BFF83A49",
+    "metadata_key": "236C4FDA97FD30586D9FC950F334367F",
+    "section_mic_hmac_key": "D28C28C41D9CD5B0481A62C0CEA0BF13E4910DD423C1D93C37B507D32D33DB8D",
+    "section_salt": "D13AB39D6F0C08DE53F3B616CD929F52"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C4C5AB029E86C38CBFC138696992D680",
+    "aes_key": "82DDE2E32703369FFF54C2119F64CAE8",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 580
+      },
+      {
+        "contents": "FB89815745BC95",
+        "de_type": 244
+      },
+      {
+        "contents": "2C17D2FC866D81525A7E8595D271C871B96942BE",
+        "de_type": 376
+      },
+      {
+        "contents": "4F42923EFBCF460A8D860BD405DDCA46F7C9DA0F9232E0EE23BE8B97",
+        "de_type": 778
+      },
+      {
+        "contents": "75924E160C",
+        "de_type": 857
+      }
+    ],
+    "encoded_section": "829013DC35D4DE7558FE79F6AA7C452F808B9E9110008F239DDC995DF4C680B358A8799066669001C201BDE177845AA6604EB7B7AF789F5B7502B5F6B6E546EA0ACDC9715CAC6D0250188744CDC08F61E13BF0C177E9052B3866BBEE1939A20D19BCCAEC81F6B365164759EB3016EDFDB09B0064C21C15EFAF9A9E51EE666D2B8D5174",
+    "identity_type": "private",
+    "iv": "090B960514A2ED05926303EBB8DFE844",
+    "key_seed": "117205E1E7B6CBE3FA0DCD6A5654D6D4441C86E3F1D2CD8D14E9A00A50F44A79",
+    "metadata_key": "E29007F32F7ABC691ADB2154678D5033",
+    "section_mic_hmac_key": "06B6CFE233713E34981D8C0B59B6BE1471986D027521B7DD6A9690E3E74C735B",
+    "section_salt": "8F239DDC995DF4C680B358A879906666"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BE9ED7A60A893A866CDD037770626A2F",
+    "aes_key": "7DCBF0B035A5999D3B459BDDB37B9396",
+    "data_elements": [
+      {
+        "contents": "2EBE52B4DC1044C8",
+        "de_type": 760
+      },
+      {
+        "contents": "C061BDBA02F6C0E30E0DCBC8299DABEC493B",
+        "de_type": 472
+      },
+      {
+        "contents": "21",
+        "de_type": 20
+      }
+    ],
+    "encoded_section": "5A9013411A3B5ACD35928ACAD6914239129E329110003099AE6FC3D8669851B51D620A42D12490021B9AE05BD61343867C3C240280327F3246B377D7395B554EB49E6A77370AA68674ABB2B6A256306A1F6719625FB54CC895CD4D",
+    "identity_type": "trusted",
+    "iv": "9D72BBFEA0497D1DA4ACC45BB2A90377",
+    "key_seed": "94F97F6C1E46E30EDC42E6CF6D4B8A1BAC6ECC27853F85B2C8812020CEE49433",
+    "metadata_key": "4796CE9A597223DD3B0FA429601A6835",
+    "section_mic_hmac_key": "E480E1D001AF6DEAB85E05569F89C554C91B4C10782D524BB531C0923E5250A8",
+    "section_salt": "3099AE6FC3D8669851B51D620A42D124"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A9CB9CBD617009C6886517BDCE283660",
+    "aes_key": "33CAB010C3BE276797895D0CBB60AF4A",
+    "data_elements": [
+      {
+        "contents": "D5D03D064D9C1B5E9A5C4843B275C3CD",
+        "de_type": 202
+      }
+    ],
+    "encoded_section": "4A9013A93E5B9A890CC11B51885D93E342F9389110005A3E86C86385ACDEC0F67A0F951409459001AC946618BCDE275AB4E5C0B22C054AF7D38CA4BDD5EFACC2BF163FF305CC85E79B26FF",
+    "identity_type": "private",
+    "iv": "4C11908D956A1BE7E5F376D7A95379DF",
+    "key_seed": "26EA70FB5958B3D30BE5A4B674BF26C35B1165F1167D4D26C2D4FE89A95C444E",
+    "metadata_key": "450130FDC1E9E917412A844B0B6965F4",
+    "section_mic_hmac_key": "17D847BC251573C504C4A10D3C9D76CBCC4D8D59C70AF2FDEB8BBAB809195D5A",
+    "section_salt": "5A3E86C86385ACDEC0F67A0F95140945"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8DA30D413D04342787231D2F4703060E",
+    "aes_key": "73D393348C0CE43988E36C73C2801695",
+    "data_elements": [
+      {
+        "contents": "5AAE629F32372A1DAD4D4214BE001D6004297951F2BF14A958",
+        "de_type": 250
+      },
+      {
+        "contents": "71EED7E50F377AE422EE9A62664C63B6E8FE7414A9972E",
+        "de_type": 997
+      }
+    ],
+    "encoded_section": "6D90138CE8BA256E0D3CE40503F1380555F4F7911000BB2EB1934C4103EE116FCD3227F2E7069001753ED1826BB108753950EE7BA87DAFBC1B893DA6A95349D954690CD30E420AA407E8E7C19B7EEF39A868DA4EDD7F4D94E30A775DE0C1853EFD8376B7E913D57B9B22BD228340",
+    "identity_type": "private",
+    "iv": "B1A2C2E8EACB2DAE589BFBCBE73936CD",
+    "key_seed": "444A7A142BCEC48DECD9BD96B469078C247A46A276589BC49278B46DA1E66898",
+    "metadata_key": "CDF23D34FD5AE8DCFA43439FA8C1DC83",
+    "section_mic_hmac_key": "EEACF4F747FAF85850228F313592C4A866FF0203423AFE73AD8A784C68194679",
+    "section_salt": "BB2EB1934C4103EE116FCD3227F2E706"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4E79E2C2CE7D1E7F2B4C0E1B4C6FFC4E",
+    "aes_key": "686366F14F36F2790F49961D570E31DE",
+    "data_elements": [
+      {
+        "contents": "79A5FCD4C4",
+        "de_type": 275
+      }
+    ],
+    "encoded_section": "3F90137BCB86F08C9E2472B4D7865E8BD67102911000979F2DF1B430F042258DB96F09AAD2DF9001DE6026894781DF90B574283521D90A8717B44B9B83E93441",
+    "identity_type": "private",
+    "iv": "CE4D3E400223D202DF6364CA96D7E81E",
+    "key_seed": "2228A838E4A0FFEAC5045A52ECD38BEA130DEAE56F87E848D347EB39DE7A04D9",
+    "metadata_key": "28D3DD52B97F54DE9D11725E5BF0DC77",
+    "section_mic_hmac_key": "A08E5F1CADE33CEAF811625E4F2431704021BD148A11C14E628A98F81F266BAB",
+    "section_salt": "979F2DF1B430F042258DB96F09AAD2DF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5E29E2EB2092471CED1528AFADDC750D",
+    "aes_key": "737BBD18F03E6F059B322E4984AC52AD",
+    "data_elements": [
+      {
+        "contents": "7EB2",
+        "de_type": 976
+      },
+      {
+        "contents": "BDBC400C6F43C492E5BC65B89C6A4F7F",
+        "de_type": 716
+      },
+      {
+        "contents": "4C",
+        "de_type": 151
+      }
+    ],
+    "encoded_section": "5390132D49C0DF41955CA5679606D637200C9A9110001AE616ACFE4F0F208FAB57B1798342BB90020334CFDDB0B6CE4BC468F665A6D3E9848C4EDBF35A9F75066415684A86653A4C961ADD30DA100FA9D45AB391",
+    "identity_type": "trusted",
+    "iv": "5D03AFC4DBB2F4EE8754B67BFC78BFA9",
+    "key_seed": "9DB1FF1FB929DAB1AE43C57DA23E8F85253E8FEE48A2BB00C3F6034DEF843692",
+    "metadata_key": "242B7758F74E2B36DF8E7D81150606AD",
+    "section_mic_hmac_key": "4C0D23B47C5E9382FA9885B053CB40936954A90B59F2401BA4C0EDBE229A513A",
+    "section_salt": "1AE616ACFE4F0F208FAB57B1798342BB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "242CC33270FB75C2FF4AD84277688FF7",
+    "aes_key": "EFDE819D904C83619D2D30E4D70B8CC8",
+    "data_elements": [
+      {
+        "contents": "12529277C5D50C8A4F095B89345B",
+        "de_type": 507
+      },
+      {
+        "contents": "63BA0A52CF5AD99CB9195FEC1DAE109ACF988B7BB17282BD",
+        "de_type": 1
+      }
+    ],
+    "encoded_section": "62901383DE207E70B383FC58B678E7BF4C5F419110008C5E1F088294820FA32847D46AD64CD99001E9A0818C660D4C99844859DCF57F3D97D58E724BB646F119976FABA1133442628E2C0B2F46D86BBFA1853D6C5ACCCE677175CC9426CFE14B8AE6A3",
+    "identity_type": "private",
+    "iv": "496EC166AF60125F0446D500C3C3819C",
+    "key_seed": "4D7CCAB2C94F07DB0EBAB82519938066F522CECB330EBC69EAD51162FA850B5F",
+    "metadata_key": "C2F07402322F9CE5371684278F3E2135",
+    "section_mic_hmac_key": "C706AB65E845183DBDB246542F2DC17AD0B9F185BD72631BFD48648E84B2C19E",
+    "section_salt": "8C5E1F088294820FA32847D46AD64CD9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "838C29BC8D62B7D297AA86FD6243397B",
+    "aes_key": "A72506C80E6101E8215D5ECD7CC6676F",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 831
+      },
+      {
+        "contents": "11ABEE",
+        "de_type": 750
+      },
+      {
+        "contents": "A99BBE1C3491A3F8E9FF3275512D74FBA0E11A098F279BF2AAD24A8E",
+        "de_type": 180
+      }
+    ],
+    "encoded_section": "5F9013B302168E039F6DF5F2FF279877BC1B6D9110005825ACEEA13D43300CEC795C9B920143900121D5C02870290006416E2234FBF50EB66BE0FB78C922B7C5066877C09952128FAB2AA8C264716E1FFAAAC4BC1428DC23A61546EFA39DE256",
+    "identity_type": "private",
+    "iv": "F1B9213795CF50E84E407BD7183C35AE",
+    "key_seed": "0900BCFAC049F0F0D650C4FCDC0D6F2E1D92A5F60B1E8BB145ABB628AE5E58ED",
+    "metadata_key": "FD4E55647EC444ABF650341BE49BD761",
+    "section_mic_hmac_key": "940BDD8441E16C1D3664C7A47FD3453C7DD9090535D53E84609CF8CE3410CE71",
+    "section_salt": "5825ACEEA13D43300CEC795C9B920143"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "608E20905F4D098AD75DE34EBA3CDB0F",
+    "aes_key": "12C7CDA60ACECF2B3D80CA63FB0CE287",
+    "data_elements": [
+      {
+        "contents": "15F7D3848623835A",
+        "de_type": 717
+      },
+      {
+        "contents": "5A745E",
+        "de_type": 3
+      }
+    ],
+    "encoded_section": "46901316E172E08886A7FBEBCC5B3AA0B17832911000F09EAABD05333528D512C8754644B8AD900467F1A59A78636BADDCEA44E2893670AF125640CBE4AD92E0C2660E6B8FEA55",
+    "identity_type": "provisioned",
+    "iv": "B23BF0D8170F7217B2D653298DDD2F85",
+    "key_seed": "EF6FA69F6234C814FE90CEACF8312CD80CFFE80D89B2F4D95E7B8D3E2CEE31C7",
+    "metadata_key": "1F0CFD60026CF03DE3CA79B50FFFB3CD",
+    "section_mic_hmac_key": "3C3E1B060458BACA20D16BDCB96BD91B5FAE8216ED5EBC29943EF8C6B02C3C86",
+    "section_salt": "F09EAABD05333528D512C8754644B8AD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6C10B4E56E4683A24D3909A366D30B66",
+    "aes_key": "1F64C99EEDE773095F8E5189F3F9A7DB",
+    "data_elements": [],
+    "encoded_section": "379013AD9EE886E64FB47387AFA86F92431ACC911000F0A95F8B37A126FAA7403D8A3AEC350D9004F4D183272101D5C8C109012B210A5C67",
+    "identity_type": "provisioned",
+    "iv": "342C3BAD447104821279EC85291B0475",
+    "key_seed": "B2101BE6844AE38B5AC0D33C747729B1F09E4C8900EAA870412268A94852B40D",
+    "metadata_key": "91F63DC00A30570F6205FDB025AA95A4",
+    "section_mic_hmac_key": "3065A710A4107F326F25360F6E498B7375AFFE566A86DEFB62D254C67EF089BF",
+    "section_salt": "F0A95F8B37A126FAA7403D8A3AEC350D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D94830ED029B92E5B29E222F722B9B6F",
+    "aes_key": "C57D61016B89F28132CA0B4CAA8A1CA0",
+    "data_elements": [
+      {
+        "contents": "402E4416B0C352C40F1163D869B8B760C17457D6C3",
+        "de_type": 188
+      },
+      {
+        "contents": "51248E19812A467000",
+        "de_type": 62
+      }
+    ],
+    "encoded_section": "5A9013EE7189D36F22441A68DC1425B2B4A411911000CFF8A395F22500E8EBCAD614762CF95890018C3EE3D4AEE5CFCC9E2D3FA21E1B79F7D2D3C7364CAA0F33952C56709120A420E36A8443D4870413BA5BD27BE985B58F824AC0",
+    "identity_type": "private",
+    "iv": "DF4774BDDAC6C269773CD0978A6165C3",
+    "key_seed": "346411BF7C90DD0794DE3F6C9DA0D22F6B0A59811E164CA362548BEC7B452A9D",
+    "metadata_key": "D440B77462CB03579C051678FA0C9E06",
+    "section_mic_hmac_key": "70A01DA6C369A6B9ADE05B5C57EB0D5086D2A4EF2BE3745CEA1EC3AADB0EE1FC",
+    "section_salt": "CFF8A395F22500E8EBCAD614762CF958"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "655526F2B3BD4707D603BACC74ABB7D8",
+    "aes_key": "FCE4B6C8FD25716486D3713F4331B438",
+    "data_elements": [],
+    "encoded_section": "379013D596630672DF75A4EA5478E59232E39D91100095894B2B79D0B4A3FAD605E277AA33A29004DC96C8EDCD236F241AF6E6AA6DC69752",
+    "identity_type": "provisioned",
+    "iv": "E890D5EE6189B3BAB5FFDBC0AE63CBFF",
+    "key_seed": "79B865DE8DA7B8930812A3D4E627A1CE74476AA1BB51116CC6B43A0E0C3ECAF5",
+    "metadata_key": "0FAFAA9D6FC46F82384F0D12FB7CD252",
+    "section_mic_hmac_key": "927666232383A3029385567EC2BEE80951FA4ECF87193393D76E545F3EDF131A",
+    "section_salt": "95894B2B79D0B4A3FAD605E277AA33A2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A03E7E784F3434A59007980D905D9B94",
+    "aes_key": "4C68AC909B3117588857C08E1372E532",
+    "data_elements": [
+      {
+        "contents": "184F372DEE00B3F9ED09A7BF86363D488330FFF7C2A0BF099257B3236C",
+        "de_type": 301
+      },
+      {
+        "contents": "9A6408F59389014B219E5B5AD8160848ACA710DE893162BCC2",
+        "de_type": 713
+      },
+      {
+        "contents": "5D3D783CEA628D3E482D801AB6B1E2",
+        "de_type": 799
+      }
+    ],
+    "encoded_section": "8590139CF16293B97917755ADBEF1A013CB4DC91100011705C1239A7475C4A716F4C78B1C8A29002D00DA5542C9AE536C8295452971C87A93A5A15D6C531300972C9451FC7F2644E5803E6E2ADACB793DC59AE0BEF3ACE6E06F03991C717782A35D5DB04914ACA3DBA25CFB011C3A55933FCB48DC19D1938DEC79B8019285B5394C67E60E4D2",
+    "identity_type": "trusted",
+    "iv": "6A675C10F654A737352FA395761C8645",
+    "key_seed": "A5A12D4A886399DE973FDD1D713335DCED621F1A9912397CF17589F2921C3B37",
+    "metadata_key": "F0354D2E5C76AA746DEC6F428377CFFA",
+    "section_mic_hmac_key": "B5FE7969BAFFDB41E39B07E4272ACDD8F2959147C8A3524FD34895B1B4AF1215",
+    "section_salt": "11705C1239A7475C4A716F4C78B1C8A2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6FCE962D651CFA1D1FC26D80D2766F41",
+    "aes_key": "B4B66DA5F5812D38A75BDDD3D39DD03B",
+    "data_elements": [],
+    "encoded_section": "3790132AB715C6AD8256E26D58639B9D263A4D91100078185D32370D3883575CD08D246320B69001F7D0D2D1DDD55101513DB171CA62205A",
+    "identity_type": "private",
+    "iv": "C1E034C75C6B7F6FA8FD225ACE7198F9",
+    "key_seed": "B1CCC7A6A5647E35926BC885BC1462888401B75E7E873A160D9078009E176224",
+    "metadata_key": "8D008DB1E71FF2FA4BB7846A6EB5957B",
+    "section_mic_hmac_key": "B60AFA9229E0A951BE1EF9C112E0DC7E5BAEFB8EFD6C4D87C49B12AA9FDFC246",
+    "section_salt": "78185D32370D3883575CD08D246320B6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BF2838A458097277ADCBE68878A11EDF",
+    "aes_key": "A42FB4383593544F9CD02358F7450E3C",
+    "data_elements": [
+      {
+        "contents": "9AABF3A4911F54903A7A585C5935598A17AC1BA1730F11BCE2",
+        "de_type": 220
+      },
+      {
+        "contents": "DBE8AB3119CFACBA0616EBEF11805BA7DB4C6D8EE936A0C75A585C3731",
+        "de_type": 109
+      }
+    ],
+    "encoded_section": "72901311DD08CE860EC740F5AF704F4ADC6197911000A5915C75281308C25817A519495433AE9002ED9804291B041DF22F1132D88C7AA514CB99C25507964F71B3E681BEC95DB43D36ECCA071FB2EAB77EC221F2814F09A6407F6D6DDF2EE971EEB161A2E4723C08C3D8907207D24940AAF9E5",
+    "identity_type": "trusted",
+    "iv": "B1C915A96024FB361DA2E9E17D7C8666",
+    "key_seed": "D679DE42650FA520DC444F00DC53331B27A4204BE69BEB44794C7566C616CBF8",
+    "metadata_key": "76A213E2A9FC5F503DD5C6E48151E973",
+    "section_mic_hmac_key": "F5A02393A6338BC5D6F1099318530780F0A4AF604FEFE53E948D55487CD6C14B",
+    "section_salt": "A5915C75281308C25817A519495433AE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7DBCB27A82A7D1338F3F078D12EF928C",
+    "aes_key": "EA6B8BC0D8703795277414578517CE68",
+    "data_elements": [],
+    "encoded_section": "3790130BA98A4D2047B41A35E80D49E0D91691911000670F2BAEA4F3B15AE1D3E0A72C72C9209002DB5533D4335FD2C3B6461A9967D344A2",
+    "identity_type": "trusted",
+    "iv": "758D967581262F3882B691B017798245",
+    "key_seed": "8B3FE8D446D0293D99FF268E762B47E33A0B530993E7177F7FED43D4F8C31CE3",
+    "metadata_key": "36C1E1FC2CC7E80D4FC938FCB14F4A1B",
+    "section_mic_hmac_key": "5DA2A4D4B98205C3C9FFCCB93F070B4899739631327C7A86246E0D5111EADB48",
+    "section_salt": "670F2BAEA4F3B15AE1D3E0A72C72C920"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "956D51B44D835809B4DCB5C1D6EA607C",
+    "aes_key": "2AE3CDCA25A22C8A800EDC754D23E416",
+    "data_elements": [],
+    "encoded_section": "37901310086B129A7A396A6DF01FA7F82D5CA7911000ACB37E7A8113B240AE185B5E6AFE9242900251C8DEEC88E53A72C6DE2D61D82C1E04",
+    "identity_type": "trusted",
+    "iv": "FB4F3041A58B740895B607D12438A62F",
+    "key_seed": "75726D6692B7BA73365ED6114AD116A882A771857698CD296A1766803F0C748B",
+    "metadata_key": "090CE8211B3E5418AFFACC353FAE8E45",
+    "section_mic_hmac_key": "EBCE5FBC0923360145A72E27B3FCD677A9B16527631A374EFA5BB4766BF3567A",
+    "section_salt": "ACB37E7A8113B240AE185B5E6AFE9242"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "875B4DC0A9FD6582A298160D8B07241B",
+    "aes_key": "DD8E7898DB01F3022171929DBE859B05",
+    "data_elements": [
+      {
+        "contents": "820995BAB825E0BFCDDD7710B139746B8E330E859FFE",
+        "de_type": 177
+      },
+      {
+        "contents": "6B1EFB732380455FCE778DB6DF50D9C474BBB3353845AF1B",
+        "de_type": 883
+      }
+    ],
+    "encoded_section": "6B9013113600EB6A517F05193F05274022755F9110001CE97084F1258375F2CBE48D88EDE4EC90011A1C1B2B6E68CAD942903FCACCE5E428FB1BE044C55685B3EF94097A3B1FE658703C24BB548E88ACCE80FFBFE5DD8A5A4724CE2254F077234A7282984038E5A062822549",
+    "identity_type": "private",
+    "iv": "CF9EBDF3F06EE6C72089D0F4290F202C",
+    "key_seed": "F6EAA293204F1BA807120918B47F7F1C2DDF8085F7A1138452F72022B16A2D02",
+    "metadata_key": "AA009F2D3D1F97B63CCA3AEF490576A1",
+    "section_mic_hmac_key": "396722ADB64CCA9695A219385A71EECA3E9DD57A1CCFE93009795EA3D5EBE1C5",
+    "section_salt": "1CE97084F1258375F2CBE48D88EDE4EC"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A72824AEC67082FD52F521DA153BC437",
+    "aes_key": "4A68482B406375EA353B8D3DCC41DA3B",
+    "data_elements": [
+      {
+        "contents": "7F8DA439C60E",
+        "de_type": 262
+      },
+      {
+        "contents": "4DA31B9C1BE28FE4B906597598",
+        "de_type": 131
+      }
+    ],
+    "encoded_section": "5090134CE0387DF697DBFF2B6967B922DA1B96911000AFA838CF8AF1E94C6D3ADC3DEAF9193A90014B4B0C5F47F4F72BC0E54FD3A225353D9C2DB6C6C6582B24F2F4EC601F0AD29D305029F326E4E13E42",
+    "identity_type": "private",
+    "iv": "39DE563E758D36C340A8F1161F88A725",
+    "key_seed": "DA07B9585C6328F8FDA0561EDC40F00B21EEA83C666B73A85F099FA6F4B77F4C",
+    "metadata_key": "71675EB7D69EC84B1E4C058B6642D812",
+    "section_mic_hmac_key": "64B80C39B9AE9DD8A7DA97E73E8CFB415AED92B75A815CF1C66AE29FBB9C3D78",
+    "section_salt": "AFA838CF8AF1E94C6D3ADC3DEAF9193A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2D6A4B8DBA9D00228B9C0CFFB24B916F",
+    "aes_key": "C0E2C9F0CD3574911480D28E4083263F",
+    "data_elements": [
+      {
+        "contents": "6F512C943F83EAC9E6E961039D2B8EE806C0",
+        "de_type": 296
+      },
+      {
+        "contents": "3F16FD30D2B0ED2EBDE2EF4C85FAAB16BB428A1E0C2BDAD76E",
+        "de_type": 243
+      },
+      {
+        "contents": "528F528CAD4F647536823261A121CE0875A0E5E41735BC7ACB",
+        "de_type": 950
+      }
+    ],
+    "encoded_section": "84901365F658F25AACABB8AE42B7ECD7FDDD1C9110001C67EF90C57AE9B73871ACEEC9F02F349001EF235FC538D616127E38A22C5C64B5CC82F64248EE2CF44866B2A653BDA861AD1A61493F0DB877C8C4F2DE6F602B859659363701A8C57EB57B60D69C1A556FA11E068F407BD6C9355BB53CCD48FEC132F531519C6A6BE20F6B68B4BBFB",
+    "identity_type": "private",
+    "iv": "7C742AEB01EA936BE74C4B5F177C6761",
+    "key_seed": "A6CC5A90AEE26189984C71CF6FE0DD2C0AEAB767E80B709FC27F16A69EA1504E",
+    "metadata_key": "AEDFA8ECED1B2D6572BF4B181AC7FAAA",
+    "section_mic_hmac_key": "4B1E36074BC7AD29290AF198E332090BF9910FC0D0487C5F46B0EFB009C5B916",
+    "section_salt": "1C67EF90C57AE9B73871ACEEC9F02F34"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "361583139DED2B1E673CD68C16029294",
+    "aes_key": "44C55EF72E97F5BFF1D8564CD731B946",
+    "data_elements": [],
+    "encoded_section": "3790138230C234237A46210D3A04195EE568B0911000292825357BE80336C2218747E9656A299001C92A44671591C7ABF14466844D19A0B6",
+    "identity_type": "private",
+    "iv": "35847BF297CA4F0F3EDEB1EF206DD353",
+    "key_seed": "7FBA013FD2C6A89A6FC72F072A21DA549ED8BDFD1BE50818819EE20C7CB66572",
+    "metadata_key": "0361C0EDBEE48B8DE9C163F5B8241E8B",
+    "section_mic_hmac_key": "27E83E253B784927867786E495B1E54B1B2924DDC766239A45D9D501DE33DFF8",
+    "section_salt": "292825357BE80336C2218747E9656A29"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "01AF8D1493DA0EA7129FEA26F691537A",
+    "aes_key": "B3E74FD64DCFB8D61B4BBF6060921947",
+    "data_elements": [],
+    "encoded_section": "3790133A7FC10C9D1239CD46C3C6B4FC5B9ED49110002478216082A06CBE5C03A3385785D1719002A06C5AC8E3510C373EF27BF7B5B78B7B",
+    "identity_type": "trusted",
+    "iv": "5EDA40827CAB924516B3193A4447F831",
+    "key_seed": "F427B6C08CD9D9EB69955C96D8B523840C8B9BA38572A5AA5BB2263EDA599A6C",
+    "metadata_key": "E754D8C6D2D5428A722E130924D9781A",
+    "section_mic_hmac_key": "90CCD137B4CB590B4D8D37A0EB14FE350FA1E771608DCCAB07469946BB771F76",
+    "section_salt": "2478216082A06CBE5C03A3385785D171"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A95465E03BCFC8E5BFEF31C055C9A024",
+    "aes_key": "0FB48B0B5519ECB357D58721E1A24445",
+    "data_elements": [
+      {
+        "contents": "90B0D5AAF302AF084AECF24D32939E",
+        "de_type": 404
+      },
+      {
+        "contents": "AECA1B6B0D10D843E73AE0165A3E7D5B2C8B8310B7FD00B8810684",
+        "de_type": 59
+      }
+    ],
+    "encoded_section": "669013C6E721C70C2B3944B5FD253FC61566E491100053615ACCE2909F94FA4B998B569163359002040954BBC4C277CA47D211B5FBFDD97499FD51F6C8E8DF808C51649BEED660998226AFAA10BEC9769D1482673B7A0403F5AA343370C040F9F7B82DEA9D8C1B",
+    "identity_type": "trusted",
+    "iv": "B4A532C12A214BC4D727284823EAC0E0",
+    "key_seed": "0F74A62FBF6CF9220166B846A0F76E669E42D1487EB5FD359B0CBC65FCBA7EF1",
+    "metadata_key": "8EDD19022D2A88C0441386C74AAD046C",
+    "section_mic_hmac_key": "2EA06B4B794A2F454E5B070979EDAD76D4983DFB48A098B472710D7917D3E5B6",
+    "section_salt": "53615ACCE2909F94FA4B998B56916335"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FB45A0BAA38D0F35A1F64D9C72B923C8",
+    "aes_key": "9ED5B7BB2B1C3413E6AAC6DFB3754FEA",
+    "data_elements": [
+      {
+        "contents": "2CC3BC6746DD1AE5",
+        "de_type": 152
+      },
+      {
+        "contents": "DCEA4835787A94F495C7DE8F2AAE080A39FFC9",
+        "de_type": 876
+      },
+      {
+        "contents": "DC2F08CEEC54",
+        "de_type": 70
+      }
+    ],
+    "encoded_section": "609013D8F958F5ED45F8F3727CE84B31A06C0891100025A2312ACCB5535F0EF3A099EA10E7A29004D31578964C0136C455E1985055CCCBD7B56A8FD9315960FFBD889907F17865933AD86C73BE09C9E85B1CB8598B4B2E259AD4DF9AEC0871D2D6",
+    "identity_type": "provisioned",
+    "iv": "F332E711DEC606885B92138FD805E405",
+    "key_seed": "44DF410E636A1EBF23DBC113B90F004B58E95049C1826B8F9EBFA59A6F02F39A",
+    "metadata_key": "7FD6C62197D5111EAF0F95084607D88D",
+    "section_mic_hmac_key": "47CF9B8136955D1DE13DFC33ED6896E7A0F27264C5D71FED5148AFA99B3A972C",
+    "section_salt": "25A2312ACCB5535F0EF3A099EA10E7A2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C74D81C8ABBAE1C6A90F9285801F2336",
+    "aes_key": "7892DB13943D1F5167398B4A23835088",
+    "data_elements": [
+      {
+        "contents": "0BEA3CC25F2B23B1A69CB239E9FB07BEF76623E4AF2F5A0C3679AF79",
+        "de_type": 746
+      },
+      {
+        "contents": "8AF23F8EF77D8403BE6D6C9244",
+        "de_type": 465
+      },
+      {
+        "contents": "82",
+        "de_type": 545
+      },
+      {
+        "contents": "9DB8C637C4781544D09EDEA5764F8FD47516ACDF62D8AD98F5586504",
+        "de_type": 9
+      },
+      {
+        "contents": "DFA09FD8BB33F71593",
+        "de_type": 590
+      }
+    ],
+    "encoded_section": "949013B2EE5F6DD997B4B4F8BBEECD33984B23911000757F746B62CB45D006E374E2B107DA549004285D582E49B413EE38A1FF386B7AC0BEEC63BD9ED74984319CD8FB0F39ED9104B6FFC3474EDB24465C3FB6D02CE61FCCFAD1EFE9BF6E06E2394CE62584FB7E76BE01E18C3C9CF2E4932F35F7C6DB988DFD97DCD08B983AE89AB6AB1B6ADA891354C1BD42E38BAE9EC4BE692CEC",
+    "identity_type": "provisioned",
+    "iv": "C1144E36B46120A9BB81FAF638354A7A",
+    "key_seed": "A06644701F516480CF3EED2B66DE14FC48749E39C24CE4262F416EE47407C482",
+    "metadata_key": "A8F0E7D1D083B1EB0E6BB743D2C6B5B5",
+    "section_mic_hmac_key": "96BB03131488C6D55F42293579231EC82F49E057D9D1D91AD4022380BC2B32D7",
+    "section_salt": "757F746B62CB45D006E374E2B107DA54"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8DC60BD4378BA88DAEF0708052F570FC",
+    "aes_key": "AD070254CBD31CFF78F5413B43E1272B",
+    "data_elements": [
+      {
+        "contents": "11FF19A9F2D6881B904B6A020B0658C3C724",
+        "de_type": 127
+      },
+      {
+        "contents": "0914FD60DB1B",
+        "de_type": 98
+      },
+      {
+        "contents": "6DB43F08EE556EF61E1F845D09178098CBE43908E0FE46F8",
+        "de_type": 256
+      }
+    ],
+    "encoded_section": "6E9013EEAB611CFFAD8C7D963355A833C9DA149110006F93D279192BDE0E527BD7E8B3168A12900445AE2642753C4D802B090C99C6EEC222388F26C0C119EB029487297606DD5772A0B043DAF23A826A3C113B6EF49C5D4F01202683137DD3FD800A4DA9E8DA510EA7F8C658101225",
+    "identity_type": "provisioned",
+    "iv": "C69FBF9DCC40FDEAABC5656F054A0B64",
+    "key_seed": "221AE078D6806D3A41EDE4DF8CAA587F4ECFBE17210DCB7F168FD6C2DE4C3C2D",
+    "metadata_key": "77E1A4867CBF4DE00E5C9FEF4DE9D68A",
+    "section_mic_hmac_key": "D60017BB5E5C89DBFA59FCEF5BEF61E3DF6DAC38163D4964FBE4212652058574",
+    "section_salt": "6F93D279192BDE0E527BD7E8B3168A12"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3E93896B318C8A8A2B86F8BEDC4978D0",
+    "aes_key": "DAC516C10DF00826FD6F624BF8B98920",
+    "data_elements": [
+      {
+        "contents": "83674116AC5D2915591B2C50E71E0C2402CF047D4E",
+        "de_type": 602
+      },
+      {
+        "contents": "E199053B60",
+        "de_type": 165
+      },
+      {
+        "contents": "9675FE47BD8D10B11EAD1E1377D3772D5951BDA26D8DBE8521CC",
+        "de_type": 755
+      }
+    ],
+    "encoded_section": "749013EF13622E04C646DA50382C936028A2DA911000A60DAE9062B7E80920115AA20A3DF6709004B9CD323F7489632E56DC010ED403CD83E2E22426733185AE3ED210CE702CE2959513B35B894216D0CBAD236E501B715E3801031478988BB7334EB6EDA2D80C4CD7B78E7A64916749728DD6305F",
+    "identity_type": "provisioned",
+    "iv": "D952D1CC42037B34686C0B0BD9E697F3",
+    "key_seed": "B5663E9F549316F4156FE1E1F3A88CEDFD45EEF1413692310A745E7C711BC323",
+    "metadata_key": "965D9973134E4C5AA5B527EE370875D4",
+    "section_mic_hmac_key": "3AE74AAF3A515AE1EEAB3BDEBEB1233C300AE27BA3A5668BDF059BD400E07F7D",
+    "section_salt": "A60DAE9062B7E80920115AA20A3DF670"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5A049145452ACBD46CEF34B3D44ACA7F",
+    "aes_key": "DB91A343B3C4295B3B5A7578BAD0957E",
+    "data_elements": [
+      {
+        "contents": "4044A5D3A69B",
+        "de_type": 200
+      },
+      {
+        "contents": "B5B5C084C05D28F6A5776A73",
+        "de_type": 53
+      },
+      {
+        "contents": "3F53E321EAAAD37321575F95",
+        "de_type": 264
+      },
+      {
+        "contents": "4969E7296C9756825F11908CF6C44C728579407005DA58",
+        "de_type": 121
+      },
+      {
+        "contents": "EA6EAE6782CADFA1BC03C22398EFCA35A25D1C455A61E86073C05F710C77",
+        "de_type": 42
+      }
+    ],
+    "encoded_section": "969013C9C75F20004942324E23C744440463CA911000E7C40EA2C2E65E5C5946447A6823338C9001E0B8C42F8B334E52A77E63C8BEFD9A717536AF9A21AE15918D84B0688C9B9A83C641B2DA40581639C617053E79AABD4FAF5DB9084512306D84091D2369C5507CED38EBD71CBCA5938CD168EC418BE57C2DA2C3C69224A3AD379C95083FCAB626627D96FD55A216B64C9718C082394E",
+    "identity_type": "private",
+    "iv": "B0E066C1CB9E81FEC072658AB024D029",
+    "key_seed": "6AC9251B57E1AAADB0A82C14052229F0828511E8DFB62A7B01408C4C6CF942E1",
+    "metadata_key": "81B7DFC2288EBA39967BCE164DAFD504",
+    "section_mic_hmac_key": "305ED3775E3CBE503C3F9DE72AD075BD578D6D16A171536CF6FCA86032859FFF",
+    "section_salt": "E7C40EA2C2E65E5C5946447A6823338C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E87CD39D43C0C4C98913104FFFB1B6BE",
+    "aes_key": "EE96CEB9FC198FA238C718D8C664C2BF",
+    "data_elements": [
+      {
+        "contents": "306E2C5F8259838DB0D07BBA4805E7480BEA4A6C165E31DE8BBA763D3078",
+        "de_type": 845
+      },
+      {
+        "contents": "D88025A8047D6AE0F6875BF82717FA782F",
+        "de_type": 521
+      },
+      {
+        "contents": "8565",
+        "de_type": 661
+      },
+      {
+        "contents": "4D1182D9D22A5B584276EB34F00AD16D6FA3",
+        "de_type": 140
+      }
+    ],
+    "encoded_section": "869013F1858C90C012EE372661972315171546911000CE2651E744A99AFAA849A54E1732826C90028BA480AC17C5D584F5BDEF8B4F2E078FF5A0681F77C391C2CB04324E4B5E9EC6EEC870D4F9501CABF785E02FF77D7875286E4505A9B76E28BA5CD940C9B255C609E4A4A4CEEFBB53433E707B56E9E28E202740B6A63C6891A35512A330BB65",
+    "identity_type": "trusted",
+    "iv": "E84094156E309C9E78E0F6B2983B3B79",
+    "key_seed": "83020A9A0A506DE2A82978C1DAE9F961DED0868FABDB237B621F79CFE37E7C16",
+    "metadata_key": "CF32E44F9BDB4C2AD80AEE60E78D3FA9",
+    "section_mic_hmac_key": "21F6F2CDE9AD607DC36EA9F9C55A6FF654B00665379CF80DEE1C8E493DC5E35B",
+    "section_salt": "CE2651E744A99AFAA849A54E1732826C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B57C92EB613E7A217DA71D86490784C7",
+    "aes_key": "D9DB4C7400D56812F5D3F7DD244E513C",
+    "data_elements": [],
+    "encoded_section": "379013303598F236568149434CA461E3F9A4B091100081BBA4092F14CE810ECD0D7109A582B690041B06DC29BC82225D3F91DB0D996619DB",
+    "identity_type": "provisioned",
+    "iv": "D586725A11804C6FE31DEB705CC8D294",
+    "key_seed": "149F80E11AFCACF6E13DF3D36C01C6D5DC688F8DB9F10537494FFF926052CE8C",
+    "metadata_key": "D6319F5160167840627CA7013B292282",
+    "section_mic_hmac_key": "51E43F329487E193A6FB0A179BB609F45AD5C4725653DC59EF075A75B52B36D1",
+    "section_salt": "81BBA4092F14CE810ECD0D7109A582B6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D082000833AE11B48B49AA306FE002A2",
+    "aes_key": "95D0A624DEA476B1BA80444787463999",
+    "data_elements": [
+      {
+        "contents": "EF3C4BAF4B77424745",
+        "de_type": 409
+      }
+    ],
+    "encoded_section": "439013B0798E09DC56FD5C009B7BD24CF2D4F0911000BE2EF537A56A6022953F032D04ABC35390025EEFDD2CC06B518DDC1F1B383C59D1D9EAC33D6548B648CE39399621",
+    "identity_type": "trusted",
+    "iv": "0C8D19316018D63558BF62735E8AC988",
+    "key_seed": "FAAE2DBB5B2652D6AD95B92F59105DD76AD1B41C51C8B4E358CA0B60A0450DCE",
+    "metadata_key": "8D027CF95D5A790683C0B669D689CD89",
+    "section_mic_hmac_key": "98F3525163633F6511A7BFF1598DD040181D2C3CFE3D1AC5D76FE2A23DD09552",
+    "section_salt": "BE2EF537A56A6022953F032D04ABC353"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5D2264D51719AC98B1DC3E0117358071",
+    "aes_key": "2F98AEE5A3841F10E02133F379B7C39A",
+    "data_elements": [
+      {
+        "contents": "4FB4",
+        "de_type": 701
+      },
+      {
+        "contents": "48C3D5622F824DC1C7B0414387C8B4AC866B0EB9A7D888AEB6",
+        "de_type": 995
+      },
+      {
+        "contents": "41",
+        "de_type": 139
+      },
+      {
+        "contents": "EA9186B4375DD1BA3491ED53",
+        "de_type": 934
+      },
+      {
+        "contents": "9AF9C3B2BD374FBAA4F3D2F1DB2A186F8C3A",
+        "de_type": 633
+      }
+    ],
+    "encoded_section": "809013847031FDA820036FD425568B5611C5EC9110002CA0587BDDDBCB78153207C9158A10169002D74E311DD11F58BFCCC0A19F94F67B0AE4BE81741AC8DC4FAE0B17B772BE126CBBBCE66CFB50F091A70D06F3B34E16ACB9C64532990A6417B30A2CDDE1C001151EC32E7018828124E75A0B74CA5AEE9B4C840D19C255BF72AB",
+    "identity_type": "trusted",
+    "iv": "E288D7A1DA92318930084F3ED9ABB505",
+    "key_seed": "C749179E61D827D1E2AD13B82A48420AB3E80D31F3749E950D292B64FFC08104",
+    "metadata_key": "3458741999A1025974EF63298E559796",
+    "section_mic_hmac_key": "A0AD19D8280DFB3DC84E5E68D7D21D5BCBFA9861B1F938660516045D6EB0C137",
+    "section_salt": "2CA0587BDDDBCB78153207C9158A1016"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F68BFAB3213C9FEA8A29A96007FEF64B",
+    "aes_key": "AC939B24BC933934398A7DC7E7C46CDF",
+    "data_elements": [],
+    "encoded_section": "3790139505676F85CA392334B19BBFD5FEC47591100074979416628A37D9CAFB2C4C6F969B569001DB08F385C30A762FA0C410A5184226CC",
+    "identity_type": "private",
+    "iv": "465C6117431966DBEDCD888B5221ED21",
+    "key_seed": "41FFE0FAC77C1DCC8BECCFD8A7CFD4A7343D376B76CABE05961CD44B76BC4B71",
+    "metadata_key": "4F3BC40A440822F086DEF13754AF74A0",
+    "section_mic_hmac_key": "CB956645E987944BEB37C2416D24D7A10C0632E588677CCEF862E86B222C5704",
+    "section_salt": "74979416628A37D9CAFB2C4C6F969B56"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "32AA8FD5DF4F49A764E9AA3BF5563C89",
+    "aes_key": "2B4B17EFB895251408BA5B6BE94B4EF1",
+    "data_elements": [
+      {
+        "contents": "11E38C244B9E12BE76C03E",
+        "de_type": 935
+      },
+      {
+        "contents": "C8D68DB392FBA453357837",
+        "de_type": 335
+      }
+    ],
+    "encoded_section": "539013851104503F1D2FA8E851450F39F7106F9110006634BDCFDE3CACB5C787430316E3B0F89001E28FEC491436FA0518D6DC6039167E200AF6348DBFD0FEDFB8FEE6D1783B34159A46C1CC91AB4AB161C3815C",
+    "identity_type": "private",
+    "iv": "1797CE15779604FE914F93871B2A0773",
+    "key_seed": "FCD60D691DC27E7FDD0206B28BF9466003A96D1DABEB7F0C59BDDA3BC5064BFB",
+    "metadata_key": "0F0F2E2D2C043688CADA7DB16B3890D1",
+    "section_mic_hmac_key": "28862BC1B9E7774DC66B319EDB52978182AF3EA42F4C71C8E0EAF65952C1DFC9",
+    "section_salt": "6634BDCFDE3CACB5C787430316E3B0F8"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "31EE1C30D48B792D61C8792361D3E827",
+    "aes_key": "1B618DD81493DEDC935CA68511197158",
+    "data_elements": [],
+    "encoded_section": "379013A8533FB16D70484318D287A8CA1324889110001DF600D41D8D806C43B138C0F76AF20590024756A94BDABC6824F118571511BBB69F",
+    "identity_type": "trusted",
+    "iv": "73CFA325E5CE5D6698F14615EE65D970",
+    "key_seed": "41DED01B5C779ACF0BFF0641263BAC3406CF6D9F940124F033991297E0B77051",
+    "metadata_key": "CCCC858E3FBAA8E5BEAF59B3A3D530A1",
+    "section_mic_hmac_key": "C65B247379C1C47F50F977EE35EFD36AA14E52BC21567F3194977703D85B946C",
+    "section_salt": "1DF600D41D8D806C43B138C0F76AF205"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A282D0AC1842D0A4DEC37AB35AAF4CA3",
+    "aes_key": "EB7AC26A007B152D033F713CF425D8CE",
+    "data_elements": [
+      {
+        "contents": "BB5234C9FFD150ADF4",
+        "de_type": 109
+      },
+      {
+        "contents": "185CDC775AE199F0D4DCBEBB8BDA97EFF10C482C52",
+        "de_type": 390
+      },
+      {
+        "contents": "B8D8C33864D21722A1F339216199",
+        "de_type": 488
+      },
+      {
+        "contents": "7942EA3BFACE24FF26C6262F",
+        "de_type": 3
+      }
+    ],
+    "encoded_section": "7990138E46F32DFCF3DDB81D6678EE5B9C63C5911000CD7C017292A595A9B91C2A2B0401869290028E1A072B7F5D1AE4EEBD4D3D86C6DE12AF19C45A34F2EE9C79FBBF8E559BE622359C2B632F0714D0303BC8F400263F191FDC55E7098617242A7DF0D5F06B3C3640967F57123DFCBF7263650532D6344C45C3",
+    "identity_type": "trusted",
+    "iv": "39B8DF03463FE9A4F1B74EFF99C79633",
+    "key_seed": "C71AB1872D5CCA2A8AEDE667988CFBCE2EC9AE649062896938D414E9D0E94C4B",
+    "metadata_key": "B8F3CE213E6E058AF15E956A1DC2036F",
+    "section_mic_hmac_key": "7C4B63E31AD2FC40AE1D4F8FBF141E0ED08B79FCA7461892C1C8499B73746887",
+    "section_salt": "CD7C017292A595A9B91C2A2B04018692"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B32A72E57DD180C1CD78E0D8FF198BA8",
+    "aes_key": "0D3B48E8EC2B06C29C96BFC6C538B656",
+    "data_elements": [
+      {
+        "contents": "5364835176EB07D1F5FC",
+        "de_type": 584
+      },
+      {
+        "contents": "C3492A918E552550E781328B57B40732977328B1325260",
+        "de_type": 927
+      },
+      {
+        "contents": "7E7B5AC1F3EAB30D71429C27667ED35C200476965C78F1CD5FB3B9",
+        "de_type": 578
+      }
+    ],
+    "encoded_section": "7C90136A1B890259C14A52A71914369DD5D7C99110001589F7FFF55BB13258B8CE9E93D31AAD900422D15C630478F6F2CB142D46ABE22A98C9C015432E7F6FEB0A922F53F45B513474F47C5068F32ED60CF9AE88147CC957851A4329A9F7116C346481BCE5AAD0786AFDD6D64E9131C36B262750FD4892F5774653BC94",
+    "identity_type": "provisioned",
+    "iv": "AC90BA5B1A5D39BD2241EC7DDEA4DC18",
+    "key_seed": "06405596E394DE2A69B5B205F00E6119A4E9298EB253DD391B582C1899418AD6",
+    "metadata_key": "68A1C5DA1051C2B604AA05DF6AB59EFF",
+    "section_mic_hmac_key": "20FA4EFF48BD8E8FF5767A4C79CB2514AF91DA13218FCB63B280F6E41B2A5A26",
+    "section_salt": "1589F7FFF55BB13258B8CE9E93D31AAD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A9B066473BAFB379F0937FB47F15A38B",
+    "aes_key": "1F660B42014F118AD25C2CC166226920",
+    "data_elements": [
+      {
+        "contents": "BF96B6727B448D012D6E42D0",
+        "de_type": 521
+      }
+    ],
+    "encoded_section": "469013E4A9322645BED3696A4B6924B4F0A52991100086EC145F4758FDC6D5940C864029656B90042D74437259737DDF7606D3750D4169A0F8A316FA278CAAE53B69BA3726EBA8",
+    "identity_type": "provisioned",
+    "iv": "413F7FCDB4FAB753817C2ED9AC9947A1",
+    "key_seed": "7716AE85F2CD4F520438500DE48432F698519CA01622EE802DCE849E2C162DE0",
+    "metadata_key": "0B16502A04A879A8EF6936331C7495B1",
+    "section_mic_hmac_key": "33E577635DDF21CE36E3FC71944393BB3A65B2F1BB67E2015AD4903B47AC5A7B",
+    "section_salt": "86EC145F4758FDC6D5940C864029656B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "97A3EA2B2D4B897973EB658FF34F4FFB",
+    "aes_key": "67C524B281D8BCD2C51C74F057CB2D15",
+    "data_elements": [
+      {
+        "contents": "0A2B142E42BF87F21293",
+        "de_type": 11
+      },
+      {
+        "contents": "733CBBDA78C13C5C598CE34EE9A25453EEA0",
+        "de_type": 847
+      },
+      {
+        "contents": "D53872CC070BBFED0E5262FBEAD45A6ACD9E1AE50D",
+        "de_type": 171
+      },
+      {
+        "contents": "A13ADB931426EAD3B2657C23CE0B4F7E4FCBE44C1E047F28548E05C8",
+        "de_type": 672
+      },
+      {
+        "contents": "69AF37BF3DC6FE2745",
+        "de_type": 258
+      }
+    ],
+    "encoded_section": "9B9013307A5B1D45053F33A0B2BAFDA032BD36911000F7D66FB12A2DCC5B9F5721066CF56BD39002E94F726AB64C08ABFF473FC3305DCC04B7258913115974B4B93FCBE7A65FD568021B184E299F44C4EA92B3FAE0ACC6D93051DF07F74402A0578D82079AB9D2E945C10D679D0EEA5E0A18D390EF17347E559C75216632ECAE4186375EC728ADAB7E1D02DA5D9E8DEB3C1796BCC23BDEFFFF075C8B",
+    "identity_type": "trusted",
+    "iv": "EE833340C3ECE7ED2E42BE6300591A2B",
+    "key_seed": "5D1FEEA2E15BE812D6E7AED24744EAF066D2044226E1E5DBC215554C4BB21565",
+    "metadata_key": "5C81700C6F3E2DB99FD9552A1BF8DB62",
+    "section_mic_hmac_key": "C971E149AF0700BE9FB8A4042F0F02EFC26EBC99141EF025E270E9C6163291C1",
+    "section_salt": "F7D66FB12A2DCC5B9F5721066CF56BD3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CCB6F827B0A39B6DA8437483DBBF4D21",
+    "aes_key": "B86C31C7DF4004CEC6B64D8268246F4F",
+    "data_elements": [
+      {
+        "contents": "1B0FAC5F09165840F1A1FE0A",
+        "de_type": 108
+      },
+      {
+        "contents": "F9FE53B7E86EFB5778E5DC56F8943696",
+        "de_type": 140
+      },
+      {
+        "contents": "",
+        "de_type": 286
+      },
+      {
+        "contents": "C37C58E8968BC63240",
+        "de_type": 927
+      }
+    ],
+    "encoded_section": "67901318528A80BAB7CEF27243F8F7A4543D879110008548036C89FF90B1763514205225BB619001FF05FB9C4AEEA7AF5787D23CB730BF83763C2D88740CEFB3E59A6EAC8AD289FF580611CE23391A41C7F3DAF763834D19D9FE31CCA279E335BE82B315BD028572",
+    "identity_type": "private",
+    "iv": "7D75415A0D1DB4D65196285773255E16",
+    "key_seed": "CB2A52478DCE6738675A0501FB4A696A3B8B00318F9BB4C371B67787BDE29E89",
+    "metadata_key": "76683C45B626D1230AFF1F9E0BC84030",
+    "section_mic_hmac_key": "D8D2FD272E460779C37FE7AD1EE58C11D9AD119BB803C8475E10CF79AA7768AE",
+    "section_salt": "8548036C89FF90B1763514205225BB61"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7664168CD02E2069535A4E243B03CD58",
+    "aes_key": "0761688645B584019E0611E1C100DF33",
+    "data_elements": [
+      {
+        "contents": "055E128D435B74BF4919E3FB6DFF9D061E767FC50A6297674C028B",
+        "de_type": 817
+      },
+      {
+        "contents": "7EABC7A23844D21D3F31940E823FD60578626B7433E1C78898228ECEFE",
+        "de_type": 343
+      },
+      {
+        "contents": "90817D2A59F7ADDF55B1F55B63E85EEE95BAA62408CEB897",
+        "de_type": 245
+      },
+      {
+        "contents": "4787FEC44DF779FAA45E2CF681ED86C1140EEBC15F2D5CA2DB4C",
+        "de_type": 28
+      },
+      {
+        "contents": "053A76",
+        "de_type": 807
+      }
+    ],
+    "encoded_section": "B290132E644D92825A53658AA88F3973AC5CB7911000293CE3D52ACE5D4C36736E0E05C8D3D69001CA7AAA50EB4888A43CDF55FE4B94013356209D4986FD7A74DB8A22B93C63CC29BF4CA30AA7D7976F33EF594EACCAA5A474C83D32F1FF7CAF7E9D0910961FA375084AA6C5A2F6E84D127C042BAFD09A63C6B0D4C4EC8CD84B8DE1711059E3C7888997D354606256ACB6FFC3A3E0F754C29D0E4D6553763C1E6DB476C138AD90AD24A46CAA585F509F2FDA59",
+    "identity_type": "private",
+    "iv": "A583849D6D43B5E8D8F1ABA5EDB4C673",
+    "key_seed": "62F1D6EE9DBD290B2AF80AEDF635E14061025F9F279BA55CF7DBAA16DAB16B2A",
+    "metadata_key": "728F086A73B981B52399C3EA8383A77A",
+    "section_mic_hmac_key": "10B4AF87157247C3D06140005B0B1CB9FD71C023186C277554E16664928A2168",
+    "section_salt": "293CE3D52ACE5D4C36736E0E05C8D3D6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5D2A3F63294D83FBE4110C3572F502E6",
+    "aes_key": "DEC1B7CE58A15E488E53A99B0F6BFFC3",
+    "data_elements": [
+      {
+        "contents": "F08F328184F706111296A6858F64B43E004B476D86",
+        "de_type": 675
+      },
+      {
+        "contents": "71AB692063473C3F09B6CC52884D2ABC5AA5FEE1435B132501",
+        "de_type": 762
+      }
+    ],
+    "encoded_section": "6B90133B241ED22261B210B755B93C3A46339091100024260E21CF1C1B804AF8610EFD1D40A09002BC1E6FE55D438C0A979D8E1724DE2BE88EF49E4DDD021A7BC6D62683FC44DF4B206A475FB56B25CBE20A145DB816E7978E6D0FDA3A29DB4343D410304FBB85C4911BB4E2",
+    "identity_type": "trusted",
+    "iv": "D109C7AA8A9C2F502F7FF2795CF0536B",
+    "key_seed": "DE5BFF67545C1EA0965F927F752EA57236A0A8C07CF1E50C7B05FFE90CA3C080",
+    "metadata_key": "801F239BCD59F71BFF3DC29C1873141B",
+    "section_mic_hmac_key": "4DDC01519083DEE233FCD693B2DB1D50D74FF605ECA73C87D6656C2D9E555AC8",
+    "section_salt": "24260E21CF1C1B804AF8610EFD1D40A0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "50AC8F669991D4D35BC8579D03EA514F",
+    "aes_key": "014FC57AFD464A8788B996F85C208765",
+    "data_elements": [],
+    "encoded_section": "3790134B293E541BBF4E5F17F0D3980C9BC00F911000A8451CCF678102437062C19C5E4A11D990019E221A17FAE3A828DEBA689D8C1F3949",
+    "identity_type": "private",
+    "iv": "41BAA5F8DD05B8E6A504D599EB74012F",
+    "key_seed": "DF5BBCE38A8C3E868522252DB57AF57F57DE993F9B34778A84C153BE8A2C36AD",
+    "metadata_key": "577EF6FD43FBBE8F66D434794686DE81",
+    "section_mic_hmac_key": "086C0B7B64863355C999983AAFBCF74E98F9EFD238F1A1502C7737E2883300CE",
+    "section_salt": "A8451CCF678102437062C19C5E4A11D9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FFA2C3BE27EA9EFF4A305F6BF276932E",
+    "aes_key": "A46E740733F543ABD962D2EB312D93C1",
+    "data_elements": [],
+    "encoded_section": "379013C51DBD3329CE6072C8A2A027F942CAA09110003F972D62A949212CEE442B4835C560EE9001E0725CD65D4CBD335842C42F4C4A0113",
+    "identity_type": "private",
+    "iv": "C93D934B0765A1D6353BCA51589B87B8",
+    "key_seed": "3AC5766B4F5C28643B827A841A590AE959AB3558C3A148CFF3F7B833F00D2556",
+    "metadata_key": "0F7080BB5FA2AA4912BDCC9AF3DE46B7",
+    "section_mic_hmac_key": "9A78FCB3A75CD2B502005A4184563EB25D146A0CC58FF84C15054DBF869D6BC1",
+    "section_salt": "3F972D62A949212CEE442B4835C560EE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2081A4F3811AEA051894C1C7C1B92618",
+    "aes_key": "BB7480392B142CFD23F98A73EAE37E87",
+    "data_elements": [
+      {
+        "contents": "710A0DA64D8668024AE7",
+        "de_type": 532
+      },
+      {
+        "contents": "E3471D8E60F5875C808ADA60850B01BC1F5EAD6FA43426707D",
+        "de_type": 847
+      },
+      {
+        "contents": "32321B333D25E24FEABBBC8E30A5EF11",
+        "de_type": 314
+      },
+      {
+        "contents": "8EE0E55F33EECFEEEA4485872C96CE",
+        "de_type": 110
+      },
+      {
+        "contents": "2BE0F48387594DB1",
+        "de_type": 585
+      }
+    ],
+    "encoded_section": "8F901397FE42D3756E948C098672DBDE9977E691100034F3CD62875F1A61868DD445BDEBA97F900442F07EF844969ABE5029FDEE70E060604FC171F2C6B17AB9E9A6F9B6BB0470A8F72123B30060E88060F3BBE92479CC0E107F330460156C3B6E5626FBFED138195704ED5A79745A2864ED052A5DD4C5AACC511CEE38BD48FDB904CE5904FF96D2F8B224C8C91F76EF",
+    "identity_type": "provisioned",
+    "iv": "731E0DB31EB1F2EBCE317A8AC207AD78",
+    "key_seed": "C648836E062FE1B177659BCF66CE52DA92992A7F57A8C519EFE83B5498B83529",
+    "metadata_key": "6528CBC1D9D05B685EA0B5109357CC73",
+    "section_mic_hmac_key": "0E97851D27E9444ED828E6501A033E5F870F46D9D959BE6D0457EC79479A15B8",
+    "section_salt": "34F3CD62875F1A61868DD445BDEBA97F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3B793A50ECB5E7F622EF1CB281DBFF10",
+    "aes_key": "785E875C44A1BF02579790F4C07B08F4",
+    "data_elements": [
+      {
+        "contents": "06B033003DBD6E5EBA861C20D7A37D61",
+        "de_type": 919
+      },
+      {
+        "contents": "2A729E0AF9286BBF90B0A3A6B7591BFDEB2180100541CE38E5",
+        "de_type": 981
+      },
+      {
+        "contents": "E05FE95894D29247E78451A5FE0635C431E0",
+        "de_type": 555
+      },
+      {
+        "contents": "DCEC979BD3722E22464D4FDBBE6C0C36B9",
+        "de_type": 688
+      },
+      {
+        "contents": "E55C2F",
+        "de_type": 920
+      }
+    ],
+    "encoded_section": "959013A64D93D01432AB2C93EE598ED825E09D91100096FD510E1761C11DEE130801210BE8B1900431467AF0C894A0E722ADE9F6CCB4A3717F37BC36E26D353D47AE9B2109D0FB52BF23597CA6A8542EEBA33FCD05B128629A04D68A50EBAE917CE307E285D79AC17CC088C8A05E4373896500AE0E3F6F602CAAFDD6FE64A4677E2090AACF1E2DE482EA152A11993C82B70415ADDE4E",
+    "identity_type": "provisioned",
+    "iv": "947D28352A1B86C1E2236B6E7531F60F",
+    "key_seed": "6D6A7D942D7660F709710E81D2ADF1EB82B049264E83608CB61918C555C932B8",
+    "metadata_key": "CEF10E891EBA5BD00B6152A2FB251BF4",
+    "section_mic_hmac_key": "9817BF8D1B65414C53FB1C3D264F36D36B48E777DEB910CD87496157C57C60B2",
+    "section_salt": "96FD510E1761C11DEE130801210BE8B1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F7978C49733680326C8CD0D6550F334C",
+    "aes_key": "17FA0908863D1B4EBDF05DD2F30A2208",
+    "data_elements": [
+      {
+        "contents": "246638469C9EFAB7FA881C39",
+        "de_type": 219
+      },
+      {
+        "contents": "9C1A259E1FDEA4E0B5",
+        "de_type": 303
+      },
+      {
+        "contents": "55B6AB32D64D0080BE176569732A38EAFB03450CC7D2E1C21AD3",
+        "de_type": 892
+      }
+    ],
+    "encoded_section": "6F9013C5B6C430D3A84D6611604E90B92AC9639110007CA3BE5D4F1E9798DC39FADA6E870C2C9001F8FC611C2B9508DF8AC88764822333DB1229A05449D35E67ABD092235B01D8037A3549EE3AA70482A187E8C872952FFA4A711288BFF30F493A2EE365E52C416E71D3980342F48B75",
+    "identity_type": "private",
+    "iv": "8BFCD2132085B890AD2C3E3A9948F316",
+    "key_seed": "21AC3F8D521DC1FF26D984A4B9BEDCCB8C311FA31B3E5575A4E3AE671DE012A3",
+    "metadata_key": "03F6987DA25955329DB9A2C50A879C02",
+    "section_mic_hmac_key": "5D51E2CC831C4B7548CE48A6643AFC127764F31FB9E865969AE10050894FC50F",
+    "section_salt": "7CA3BE5D4F1E9798DC39FADA6E870C2C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "88D9897749A087BA692088105D83C8DF",
+    "aes_key": "F7DD8EF76EC305BF6B46B1F99D00721C",
+    "data_elements": [
+      {
+        "contents": "ECB141D6A91EB9DFD5A7943311B7910F15AA07",
+        "de_type": 369
+      }
+    ],
+    "encoded_section": "4D901326351027E10EDFD7051D932A46A0BA25911000ADF3819989057AE9A61819927B7F8D1990047D54033ECFED457BB85532481D583A60A69316ABCEB31F91046C27D8FF7C844A9F662094F2A2",
+    "identity_type": "provisioned",
+    "iv": "4D9513DAC6E2B616C8E13E153897CEF1",
+    "key_seed": "BF5C7631979835CF4B4FF4EBFF456C8CD403C68EA87960B0E6851ED4EEA51CF9",
+    "metadata_key": "DE99D80A3652FE7BC2E467653CB29851",
+    "section_mic_hmac_key": "A270F8B7F2C41B15DFA09CCA748427572E1089E90F42CA3B98AA1FAC5489E166",
+    "section_salt": "ADF3819989057AE9A61819927B7F8D19"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FFAAF9CF08F2C0E4EABE4EDA5849880E",
+    "aes_key": "5579888FDEB07F4AE593D558E3FDDAD7",
+    "data_elements": [
+      {
+        "contents": "04B31B6181ACE137",
+        "de_type": 362
+      },
+      {
+        "contents": "EBE943E23DC7ECD4C7425BA338B5BD3CEDB01706",
+        "de_type": 430
+      }
+    ],
+    "encoded_section": "599013593827607D0CB872B3F9F9E7DD8A7E93911000C6121F8EFBA5B2885B32EC0AB3AC09C390013E91B3B7276D0F86C0C7FE864B96232017B450CDE11DB1322E7C8CCCE8F3F60BC173DCF5F6D4210A2F0FC39EDD71D0A4994B",
+    "identity_type": "private",
+    "iv": "067851344E70F915139C60128CFEF3B6",
+    "key_seed": "685763208F4D5F465E32B59BBBB624720807102E810D13E1B7ABFB08540E93D9",
+    "metadata_key": "0E8CFF3D0A9D7B2998DADD0D9FA14ADD",
+    "section_mic_hmac_key": "D56C9E377820AA656DD234E62C72AB224953C36A65126252BB66773F175A9AE5",
+    "section_salt": "C6121F8EFBA5B2885B32EC0AB3AC09C3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "445F8262587A527A2A50920D59873975",
+    "aes_key": "A0F36838DF419D50BC5C556466E1FC97",
+    "data_elements": [
+      {
+        "contents": "16550C16A40A2C8A362A94BE50C6",
+        "de_type": 135
+      },
+      {
+        "contents": "",
+        "de_type": 800
+      }
+    ],
+    "encoded_section": "4B90131D351EFBD9BAE953304D7A8FE0697DAC91100073AFBD6543076B300486F3EAB58E055B900104F18882A1DED7DED581EA73100AA9EC2F3F9173A401D05AF6BE5B4E1CCC8DF696E42C66",
+    "identity_type": "private",
+    "iv": "39A88826E22EB99F2CBEDB51171E3EEE",
+    "key_seed": "F226B3049DD530E4F60C4887D0A2FBFA987A8E1FEB72EA2303EC30A7147DD8E8",
+    "metadata_key": "AE2B15A2A9B54697E7CC405BDA81790B",
+    "section_mic_hmac_key": "6D21434215A1F6DF62E827E0268FECA28C37693611557B1C9342EC8E0C1D81EE",
+    "section_salt": "73AFBD6543076B300486F3EAB58E055B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0557BC1D38283635FBAE13D02728AB5B",
+    "aes_key": "A9BC8BA7EAF519C7B85E5A01188EF50D",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 63
+      },
+      {
+        "contents": "A3E5",
+        "de_type": 422
+      },
+      {
+        "contents": "D54CC7D06905667D7360AD193F3130425832776FCEBA2679E267B7970218",
+        "de_type": 285
+      },
+      {
+        "contents": "441597784AE289C3622CB239D2C4E8342231F4",
+        "de_type": 247
+      },
+      {
+        "contents": "C0336CD68C4AE63EAC656E3202C84B545813337C2A",
+        "de_type": 939
+      }
+    ],
+    "encoded_section": "8D9013C536B4E39D9201EF3025185148B9453C9110002E9AA3A07F8D9A60B7E03ECF29BB23CD9001509E02E030DC3E8FB95C6BB25A5490B29B435418731DDC6F2FE41F742397A96D8A326826BA73E9839E1BFE0B9DFCF78A063AC0B5135173F31E0DB480B06A4617BF068C88B9CC04BD37BA5CAE862D0601BD1864DBADE74F3506CE064DBBFDA34DEB49C330D7A9",
+    "identity_type": "private",
+    "iv": "D8028895E10766DF8BA06D75C6A112A8",
+    "key_seed": "5493AE88E27447BF331AF54D9F82018ECCD1AADA9013D8FAB3E26434BB65B965",
+    "metadata_key": "14D05DBAB3A9EEE82E952390E0AEDDF1",
+    "section_mic_hmac_key": "10002B26833E9FB12D751AA88A90E30B7F8418BE8BDF2EDEDE47A8906C25C49C",
+    "section_salt": "2E9AA3A07F8D9A60B7E03ECF29BB23CD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "30C56C83215C76E99FEB30822EBC10A7",
+    "aes_key": "5BD799E5168D831A50AE88908D7C819A",
+    "data_elements": [
+      {
+        "contents": "A52634A06EC8E3",
+        "de_type": 239
+      }
+    ],
+    "encoded_section": "4190138560C2A340ADC9FB31AD47095F34482091100068B0F681E3A5DF3C78A44BA62217395E900165E94E9C7C34CED0FEE48824E2BD691A4C924F8FBA59DC0D5697",
+    "identity_type": "private",
+    "iv": "2180C4533853767495A5C245C4E6B7DA",
+    "key_seed": "EA428BE58334D369CB5803FF519C408C44B9C2046DA706B0FC64B3AC7855CF4C",
+    "metadata_key": "794F11DDC402D478236E4FE863A7C014",
+    "section_mic_hmac_key": "BA65D2678CC2A9F28B1FC79BD735A0AD94C978A183D80BABF4F7AEEADAC57CFD",
+    "section_salt": "68B0F681E3A5DF3C78A44BA62217395E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "45450AD30A7FF2646B7FC9A7498B48C9",
+    "aes_key": "C597783A6BEA9B14F749AEFD0554A10E",
+    "data_elements": [
+      {
+        "contents": "A1BCA904A65BB84506FD4FA7B8F82D4E3E27F1FE06FF98C5F5E9DB841D42",
+        "de_type": 255
+      },
+      {
+        "contents": "9E22935748180AE8A2CB2552330AE84E0753C065271E",
+        "de_type": 398
+      }
+    ],
+    "encoded_section": "71901354622DA8EA9F9CC2350BC32E57DE761B911000A833A0E92CA1E0347245C35E678EE14E9004CBDC2F1ECDC2364CEC12BB5C36EBEE053F2D6E806D60BF129AC37E800F49559211A0A8DA47C4F85BD5F5B500201022790C232525FD06CB7161A123892D9D15EA32303BE5439AD3EE6E18",
+    "identity_type": "provisioned",
+    "iv": "80E557930065CB90C62020A24F0A88B2",
+    "key_seed": "BB4AA3FBE34B70ACBBA908FA5F1BA74D9B2C8F521157C183AB94184F85BE6610",
+    "metadata_key": "CAF8352A2D518815C4687370ECA9B717",
+    "section_mic_hmac_key": "4A8327360B9E78473FE9E8CC2F68F19A6C2E7F3CDE21ABC007296E6F37103402",
+    "section_salt": "A833A0E92CA1E0347245C35E678EE14E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2149BA09FAAB9ABCEEFC3F1ABCF9835C",
+    "aes_key": "320ED87DE4141376542574C62FB7F871",
+    "data_elements": [
+      {
+        "contents": "58D1F10B05288C8BEE4CA01E515CAE",
+        "de_type": 472
+      },
+      {
+        "contents": "341278EAF7023A",
+        "de_type": 418
+      },
+      {
+        "contents": "7F6DE46EAB91ED",
+        "de_type": 443
+      },
+      {
+        "contents": "ED3F2FB7",
+        "de_type": 861
+      },
+      {
+        "contents": "89BD3EB3",
+        "de_type": 886
+      }
+    ],
+    "encoded_section": "6B9013899F627C6E1410138BFFCE742BE143E69110003A40A350CE9225C732AC27C9BCD65F1F90020A96A446120DA7C8C20715B87789DA1EE5EB068690DDB044F346E8E5ED1BB493BF7AEA8873E8A3A02ADE54C073CFE9B2E4432079C89D84C6B302BFD02177EC6ADCEAB360",
+    "identity_type": "trusted",
+    "iv": "5F97B82B7494DB44B27135C54CAEC7D4",
+    "key_seed": "B6E611FD268D0E0B4C5F677B942115CF92D2E4C43B5A69E867A36EA2C68C1193",
+    "metadata_key": "F0917DDB2BE2193FC96B46B81675209D",
+    "section_mic_hmac_key": "B11E903ABDB58F30052E0A5046B2E2D5A987589D3365224F4EC6AC25BB5755DD",
+    "section_salt": "3A40A350CE9225C732AC27C9BCD65F1F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "24036FD2BE3DCF97D9DF963B68D92DCC",
+    "aes_key": "602B4616715273B107370D173ED8666B",
+    "data_elements": [
+      {
+        "contents": "2734F55CC2D6B46C5C3B37",
+        "de_type": 963
+      },
+      {
+        "contents": "3ECD6542A74D7BE449DA6B40CFAD8D3809",
+        "de_type": 517
+      },
+      {
+        "contents": "49A3375EABF0AF0B26674D2879BB79F81C",
+        "de_type": 884
+      }
+    ],
+    "encoded_section": "6D9013D63C809F3652DD6AEF44F7FB35794E82911000D146378477019DF7ACFE29254CA21A7490042BF103C5A38BFF08D3CCF725A0811B6427D6C9D8A87A967DCA5C484C6A45DA78801408E91C5E2E377FCA9E5686E3BA2C901532814770E0EED571C0D03BE53841A5A14EF7D7F8",
+    "identity_type": "provisioned",
+    "iv": "080A6136094FC17B1A16AD0BB82693C5",
+    "key_seed": "520DAB213766293AA52073574939FBDF3FF7FD6E440FE41FDA38840112D7D531",
+    "metadata_key": "22E70A8A5CE17D98948AA5ACE440250F",
+    "section_mic_hmac_key": "00DFB12A3DBD705121093901BC2D50BCFDD3173593307F9D4C37C9A0849F5446",
+    "section_salt": "D146378477019DF7ACFE29254CA21A74"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "63C51801F768165BFC326E7C82FC1227",
+    "aes_key": "57B39C2DFF8CAE78838966761E9AD467",
+    "data_elements": [
+      {
+        "contents": "049E77BF20D8B744640EF2F3C776CDDBA3BAFA2A88",
+        "de_type": 555
+      },
+      {
+        "contents": "15BCAE3F4B78785C16E4590DA228CC3B",
+        "de_type": 896
+      },
+      {
+        "contents": "78C11D80D8BBF31D3482C1F4162BA2FB5FD29B",
+        "de_type": 132
+      }
+    ],
+    "encoded_section": "789013E816D1BEAA6F0661CF5A37AFF036BCA9911000B834A100C92A6653F03120CEC5F5592E90025CDCC0847E46F2131D454A6C3774B5EEB4EC5D6AE886A374CFBA015D8FD3336291586D08C141E3637002176BD3F4DA468C61752284262045D3F00A0F9140FC79FC7B3B380A311BEAA0C46C2BBC9790CB8A",
+    "identity_type": "trusted",
+    "iv": "6EB51E1B378E7EC195ED6131D5B917A1",
+    "key_seed": "D0FC05ABA9677770D9560F5CC298BB1CDCECE2776762070E9DB7729C4E6B1998",
+    "metadata_key": "C3DC3239104F41A29A6CA839846892BD",
+    "section_mic_hmac_key": "042BE96EE344DE41F99A6F9A99D74DE39B7FDB8FBDEA76CA4819BBBE76D1020F",
+    "section_salt": "B834A100C92A6653F03120CEC5F5592E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5D2A54C35196DB6687A495E4C266042D",
+    "aes_key": "B94AF3DE4F31E07283C694BE118A2D39",
+    "data_elements": [
+      {
+        "contents": "7F221D4C1A",
+        "de_type": 175
+      },
+      {
+        "contents": "DA7BF9A3C1F1A0F7D394FA",
+        "de_type": 51
+      },
+      {
+        "contents": "A3F5054FAD0E0B0F32",
+        "de_type": 693
+      },
+      {
+        "contents": "A0F34BBEA40E64",
+        "de_type": 514
+      },
+      {
+        "contents": "A02552",
+        "de_type": 259
+      }
+    ],
+    "encoded_section": "68901328AFDD847D58B8E42C91D72766806C5A911000CEA2BF3A4917856CB02C3E535657238A9002BCA81209838C61B7DC924CB7F75B0954E37749E736DBBE2C06A20809D8DD342D1938A290C35AF882C1B7B937E58703E984E4CF794E70265512407A8E10FA031CAE",
+    "identity_type": "trusted",
+    "iv": "8828C505B304C04F4872D41049F59825",
+    "key_seed": "EE9FC69BD400B68041022770DC312DE8C66C492E23BE76579D714E142489B440",
+    "metadata_key": "66FEDAAD7F184A6C27481BD86869213D",
+    "section_mic_hmac_key": "FC34E258074AE77E103008524518165B04278B97935C89ED9DC45F9F1EC090C9",
+    "section_salt": "CEA2BF3A4917856CB02C3E535657238A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4DE3C97760C9B8DE4C61503AB880C1AC",
+    "aes_key": "F92EDC38BB8DEF8AFE9BCA414079A5C1",
+    "data_elements": [
+      {
+        "contents": "3D713A3004C3540EAC1EC4AA1DCAFE0989B228",
+        "de_type": 322
+      },
+      {
+        "contents": "1699702E3F9F64F6A2503415D312429EA274E049BC0B6B7F15756CD8B33A",
+        "de_type": 25
+      },
+      {
+        "contents": "37",
+        "de_type": 200
+      },
+      {
+        "contents": "04F9",
+        "de_type": 375
+      },
+      {
+        "contents": "D363E2343CAB2298956475C4F658C4609E77514ACBC58A40D75A0EA6",
+        "de_type": 62
+      }
+    ],
+    "encoded_section": "949013A75CD13AE9FCA132E0B0BCE584544EBC9110002EB54EBE8F6BDDE1109D60F57C29DFB39001AB7FA220B3D56C65AF369EB529702C9C7D039249F3D56387AE4714EEA61FFC310A96DFE05402F7CE7E354D716A3453B583B9CF812A98E85F4EBB3C2CAF09E3EDD2916A57F6AC6E68EF5180301378077EE13E410C594525D5C0A37AD77495EC42117164B749E16FD6762651110A",
+    "identity_type": "private",
+    "iv": "C266A550D575D8E8A76B32E4EB60566D",
+    "key_seed": "DE0CA86B9DE2F53BC684E1E0546BAE9C1168EA4041E70FEA570B63D153B6E0DF",
+    "metadata_key": "772C23286C809572A8A7A4CFF6562106",
+    "section_mic_hmac_key": "DE9DD28EAD5F258311F9143A61CF1729938E1973DFC71EFA64BC3496B1DC2FA8",
+    "section_salt": "2EB54EBE8F6BDDE1109D60F57C29DFB3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "08591DE70D9203A4BD5BBFF0EB0923E7",
+    "aes_key": "84B87FAF5569BE3145FDF5BC95B8228F",
+    "data_elements": [
+      {
+        "contents": "4B2619",
+        "de_type": 910
+      },
+      {
+        "contents": "737EA4568AD23835B9",
+        "de_type": 193
+      },
+      {
+        "contents": "7F16EDF05CE5CEF44F4669",
+        "de_type": 908
+      },
+      {
+        "contents": "997C7BAD1FA37D3725D2E58BDC87BD892D0A",
+        "de_type": 789
+      },
+      {
+        "contents": "38368E23CA2E20C2D25E0C36E8953D",
+        "de_type": 683
+      }
+    ],
+    "encoded_section": "7E901392A0322C56CCB3EDBDA02426B5F20C169110007FC169892BDFE3C58AE3A9145B1945AD9002B0904135D3B0B28995FD2D3BB2AC63CCFA0EA80B4C2FE257692A1C3D46C2ED102D06679A64D95BBA7C65E41EAD48417AA853ADAF290012327085B183EFA9016EA3AF6365776548E4EE9509651AE6BAE0A1AB23DDAD8140",
+    "identity_type": "trusted",
+    "iv": "1EFC0B89733153C45C3F0B9952E7CA2C",
+    "key_seed": "E069DF1441FF9660D686BA2ED4B324F9EE827A41666AD3D72CECCACA3EDC1195",
+    "metadata_key": "837D4BDE2339F7E0760F507FD65EF0F5",
+    "section_mic_hmac_key": "332B87B53F48DE7951414290B387018BF70E2DD12A550AE288DEB8F082D5E3AD",
+    "section_salt": "7FC169892BDFE3C58AE3A9145B1945AD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D3CD0C0B45D18C67D9FF4ABD9C00F638",
+    "aes_key": "EA252AE1D2F51097B0B3C59CD5394CCB",
+    "data_elements": [
+      {
+        "contents": "9DA05D735D904142FC9820E859D3D2DAA3FD9BF99077EE289848BD",
+        "de_type": 729
+      },
+      {
+        "contents": "AAA29A80423195",
+        "de_type": 501
+      },
+      {
+        "contents": "",
+        "de_type": 729
+      }
+    ],
+    "encoded_section": "6290139551860389CAB63CF19976C38F9F83829110004EAA5E6CB7B52006113B8227B50B6FAA9004F55AF889B0D3A843343569BBB9FBCCFF954C7B2085DDC35493039663D1859721DEC51AFCED18340265399F3D29A634266BD6F7B72B13904BEFFBFA",
+    "identity_type": "provisioned",
+    "iv": "33261AE9D64163AEEA6CA4780557B537",
+    "key_seed": "D276F97EC832428E7341153402EC817EDA087F3722092DFDCD33E3DAC87FCF9C",
+    "metadata_key": "B784A92864FE81EE00484C3407B19E18",
+    "section_mic_hmac_key": "BFF73B8A8684137A38AA0CE919F921F5E46BEB78CAABF9001A9829A91BB2DDDB",
+    "section_salt": "4EAA5E6CB7B52006113B8227B50B6FAA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8F53DA57958205F65AF175946F0E7C9D",
+    "aes_key": "1AB05E4A3B94AED84AF5AC5AA0C34532",
+    "data_elements": [
+      {
+        "contents": "70730B2189EDD115FF4146EB6736958B2131B4E758871206A7BD",
+        "de_type": 857
+      },
+      {
+        "contents": "0C",
+        "de_type": 50
+      },
+      {
+        "contents": "85363F2F6E5B68549DC14698",
+        "de_type": 781
+      },
+      {
+        "contents": "24B2893FBC",
+        "de_type": 493
+      }
+    ],
+    "encoded_section": "6E901344842419D528E3354B2B62AEB7DCA816911000F7F26313B7593F64E2609508E29C568F9002ADA0099489D0829C5C03B5E34C36A22F4DBD656538D7A34FF22307009C917241BC3C03E863B498F7E744B781E4C97EE731D6C27BBCBB9B0BCD5049BE32A34F127AF7F262555E01",
+    "identity_type": "trusted",
+    "iv": "94EEED11E11DD155988B855D19007FAE",
+    "key_seed": "88182E258A729A4E43B5374B97A2C3B62F694B30FE8716172BC346A27E074B29",
+    "metadata_key": "5FAF4F9CDDA36DE98B4BE1111E7BBA39",
+    "section_mic_hmac_key": "EE0A1B46369F96415076C2C5C59FA7FBBE38620043D78E935340767C3094600B",
+    "section_salt": "F7F26313B7593F64E2609508E29C568F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FD84FB907560ECF5CB2A9771A4BA8CD1",
+    "aes_key": "E3FD2A72A74A7EFFC6F4585CDC240D3F",
+    "data_elements": [
+      {
+        "contents": "5BFF",
+        "de_type": 353
+      },
+      {
+        "contents": "56E6B22A147A51A7ADE3A51B1A4ABF",
+        "de_type": 703
+      },
+      {
+        "contents": "FA366A",
+        "de_type": 922
+      }
+    ],
+    "encoded_section": "549013A550EB4A596D0709CC4831941ECD4B97911000BC96DC7FE5F9AB0C79FCB5C3427416309004EE787CB1DA498BB4C72EDB79F03197668CA9719227CA6D084FF44145EDE83ACE127060F8AF7A47BFA9AF03D7F5",
+    "identity_type": "provisioned",
+    "iv": "0A95F9333CCB2B0BFC001BAE3C585430",
+    "key_seed": "32F7B9337E17ABEA1D32339620554D78574F2311A7DF33FDC2040ECCEA22F16A",
+    "metadata_key": "0D7BC86218E42A4DE2ADCE4BFCE1CBEA",
+    "section_mic_hmac_key": "391BCA81E1EB5B64A6A5B48226FBC88361F80157D68FDEF21D159D765E89B1D9",
+    "section_salt": "BC96DC7FE5F9AB0C79FCB5C342741630"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2A020F8E4858919DA9912CD877E5D7E1",
+    "aes_key": "AB7BC14F98F82FC2F63DA94527EE1E25",
+    "data_elements": [
+      {
+        "contents": "F206FA29E92D1E2CE7F8F97335171D49D7634167F9D24DA45945D7C5D1",
+        "de_type": 558
+      },
+      {
+        "contents": "BA45C18251ABB34EBB8A427E55B997260F451D",
+        "de_type": 686
+      },
+      {
+        "contents": "01F97FCD198286623C44DBB47FCC467BEF",
+        "de_type": 596
+      }
+    ],
+    "encoded_section": "819013BB56AD1C58BC3238CF683D9C6A2539C4911000C5480A0E75D4E0A677CA57FB7141919D900153375B41C2A3EB1A8AE9D4F3123AF5908A597DD8279AB6D68BBBA1BC107EC58B6D083F21201D44FB5EB0C254DA392099B8F47BFB9875B67C498B3CFCF4069F9A2CAE853F967F1953305E8943E9B97ED439F16FC82AAB2AEE3CFE",
+    "identity_type": "private",
+    "iv": "496F077A2B7916761DD8AC728D556F06",
+    "key_seed": "F8E22E64BC77461311AB36F96475EAA5398D0080F0FBAE13F1C4492DF46179F1",
+    "metadata_key": "4E7A8A31769B49F87CFE1FD8BCFB052A",
+    "section_mic_hmac_key": "E5F81D3C2D13A10FF5CD9B863C512FA9E0D1AFCF813474F7666251BD055FBB05",
+    "section_salt": "C5480A0E75D4E0A677CA57FB7141919D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2B2937852F695F8D56C725B0A6DED2B3",
+    "aes_key": "C7A0EC3BA5987EA8BCBECC13ADCB9CAD",
+    "data_elements": [
+      {
+        "contents": "3686E921B3",
+        "de_type": 624
+      },
+      {
+        "contents": "13A0B207EA7A",
+        "de_type": 693
+      },
+      {
+        "contents": "5ECF29F01D38",
+        "de_type": 348
+      },
+      {
+        "contents": "E22EA254A7EFB27938D2E75677F7CE8741463254DE17C1EF",
+        "de_type": 413
+      }
+    ],
+    "encoded_section": "6C9013B4F7525345C4D799DCC73BBD7D34A2A891100039E36002FD6A898C7113D8E29BBC18C9900288F3BFFF20D692ED112C8A264C6479AEE31F98BD1410ADB1E8B15E797F18DB33ACEA80FB761CCED0BE25F19B74AC2B7E7874E832E57995638165C3FB0222984E880845556C",
+    "identity_type": "trusted",
+    "iv": "6E6427719A16CE39BB3AD9ADED72A83A",
+    "key_seed": "948B5BB10F06A5C607E6FDD6631F173B7D938E80FFF8F4EFDFA1DF315933648B",
+    "metadata_key": "7419265431EE04AC211B9BE2072065E9",
+    "section_mic_hmac_key": "CEB322C685911AF93A57E15C80E40B410600BCBCDB1091D49F1DD58F55DEEE96",
+    "section_salt": "39E36002FD6A898C7113D8E29BBC18C9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "47F54618F90BA0470CAA122D068090DA",
+    "aes_key": "7D286DE8F9BA981B7AC6EEF116A30B8B",
+    "data_elements": [
+      {
+        "contents": "8E6ADCC3529CB914BA44071D1039476F503534E24E9FAD",
+        "de_type": 866
+      },
+      {
+        "contents": "FF59C0311B6365D7B2",
+        "de_type": 482
+      },
+      {
+        "contents": "86E592766FBA32BAA8CB5926C68B9CF1757B30ECFC8B01",
+        "de_type": 865
+      },
+      {
+        "contents": "BDEC4494677D60C91BEDBC5613AA622C607D623763F1169835649EAE177D",
+        "de_type": 912
+      }
+    ],
+    "encoded_section": "9890133504BB533122BC321979FD233507F92D911000D087206EE8701FADF74E29E64DC42B299001FEE75CADBFA905B7121329EEC77ED201DC81644197BF8BCEE765353ACA4C2D3E6E90F6331506C5A5180DC54AE4FB34B294F70F448EDB3EC9366DEADE0A63EFCCF7B495AF25DFD1E375F109ECF0D66BDC5C1706DA8DDACDDA0D76E109A3998263959F650F34D07BA4908FCCEAA47C3BD1BD",
+    "identity_type": "private",
+    "iv": "06092E39EEFF3F94DDF84FB4E82096F0",
+    "key_seed": "1CEB5B27728B3C394FA53039B1A2BB3963FDB1ABB971C694FF9B583DB4D6F4C5",
+    "metadata_key": "4BFF4D6A274981EEE3A41CFC71104933",
+    "section_mic_hmac_key": "71D0D24E9DF1CC8CA5705A5B97564B392020BC1E31103B902AC6109A20736FEC",
+    "section_salt": "D087206EE8701FADF74E29E64DC42B29"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A5CB335E0E651AEC76610103314BE5E8",
+    "aes_key": "2073B2C6E4A891FA1F4A94E6E0ED2D7B",
+    "data_elements": [
+      {
+        "contents": "39992BB369E5",
+        "de_type": 403
+      },
+      {
+        "contents": "91A4A04160751875",
+        "de_type": 341
+      }
+    ],
+    "encoded_section": "4B9013D868F86C9DABB0C962C104961D2199819110005F70263B58C94A534BA0732A362CFE759004F0376CB6B7C35E6A97774046EB8E11BE29D06EEC71C5300B63E76D1F743ACE32AB77D7C2",
+    "identity_type": "provisioned",
+    "iv": "8E45ADAD9A235A3A0131D1DD9B5F9279",
+    "key_seed": "CF2BF8EA55BEC2D2A5C15C46C09B9291934EBEAC7792D75702B1C1F56DD52AE0",
+    "metadata_key": "E227B26B4D3E35C8778FA1D40D326AF9",
+    "section_mic_hmac_key": "8FAC7D8677AF486D3DFCD671F2830A5CD938A6CA7E2DB273FB9AD603617425CB",
+    "section_salt": "5F70263B58C94A534BA0732A362CFE75"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F1C24DC0B003B6D25BD4C3F1BCB66285",
+    "aes_key": "DB76A3E8C87A935422EDDF2E573D2EAA",
+    "data_elements": [
+      {
+        "contents": "87",
+        "de_type": 196
+      },
+      {
+        "contents": "24",
+        "de_type": 342
+      },
+      {
+        "contents": "C72C39FF57E7FD4DA1C96A5F6C71DBB7912D5E59351BA03CEC4C31",
+        "de_type": 295
+      },
+      {
+        "contents": "8418AD4C9FED5B9908",
+        "de_type": 993
+      }
+    ],
+    "encoded_section": "699013C828BE6B34B2F3061396313E501C35C5911000FD1A8AA4AEE8DF00D003270485B8F7E79001E4A3421E4634FFB67FED3BD908779E411870A14E90F14AD32D3C9F8E34F0DF2F1E956F4586EBA22CCACCA8CDBF530867C4BA55BDE2D461D3BD331F384361963326F8",
+    "identity_type": "private",
+    "iv": "C3A642B990DD53C2652267D0D74140F9",
+    "key_seed": "103EEB5230E3A94CDE86DE361742D42DA89715178B2EEB054192580C46FFEA86",
+    "metadata_key": "AACE9616D0BE1375E9501E23B9AD5A27",
+    "section_mic_hmac_key": "EDA3F8BD268CA694571B96BA31002C4C1F0780914645F09C3F41CD2D89E1ED87",
+    "section_salt": "FD1A8AA4AEE8DF00D003270485B8F7E7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3D1C4D57D1022E2E34A436AB3BA2925E",
+    "aes_key": "95B5084E465C6C37973DEF1CA3DB47AD",
+    "data_elements": [
+      {
+        "contents": "C1A19CFE869417D14BA0812EDB723157572FFE02431EB51B",
+        "de_type": 536
+      },
+      {
+        "contents": "",
+        "de_type": 606
+      }
+    ],
+    "encoded_section": "559013E83D70079ADAB5FC3E1F844299D6B9319110008ED6921AF82E82864706EDE25EB3796E90042DF36874DAEAF11DBF9CF1F0CE2510156BC023B8D936F09D7BF3005B068697F171958A92CFAC237954E57BAE73C1",
+    "identity_type": "provisioned",
+    "iv": "D77A9FE328C32C11C38DC06F43475909",
+    "key_seed": "5BFA074B8A029B3617D2CA1EB0C5CCCC9AE733C23AFAD5EE72D0AFEA1B43E96E",
+    "metadata_key": "0D076B70D9757FA46D1DF675985EBCC2",
+    "section_mic_hmac_key": "13ADE797F4AC758CDAF7B19222516722967586D6742B514E8AC64DA36EB958C5",
+    "section_salt": "8ED6921AF82E82864706EDE25EB3796E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "65E6464F45B5C34BC2B3ACAB85653A62",
+    "aes_key": "4202E0AD401A9919BE9499177FBFE027",
+    "data_elements": [
+      {
+        "contents": "87DE98B78C4998378DBD3D8513F1F4252089430D3ACA43E8A9C52F",
+        "de_type": 613
+      },
+      {
+        "contents": "30DF522A56BC545C1B8371AC0DA6583C415464F29CE827339312A5144F0F",
+        "de_type": 275
+      },
+      {
+        "contents": "080BA02D47A3D4AF7BA94C1FCBCB70A71397E14206B6",
+        "de_type": 264
+      },
+      {
+        "contents": "AA6BF69B8ECD8613C95DA243320D4A2581",
+        "de_type": 349
+      },
+      {
+        "contents": "9007448B4D1A1C6824EF74406318C43421622D8177933E1B469088FB6B0C",
+        "de_type": 763
+      }
+    ],
+    "encoded_section": "C490133190D16D406DE4CDB486C62178AA7FBE911000C0CF7E29552F1C72FE58F39607FED92B900121CD625287C4ABCC300868F871B3F9FC36B8E82A243F4B7C1DBC00236FE4F0F2FB2B215B8016040357A368672BF3670175DE4E57ACE0E68FC1932303528CBEDDA764DA369F6164070F860C86AC90D6C4EE900AA58F37AAC2CA3C92BBACF0556A28BB264CAACB5DD6515F19CC3F31808CC7341D23593B63166186809F4492CD86A1AB181FFC1F48D7AE759BEF015427EFF04FDC794559B7DB7D33939531",
+    "identity_type": "private",
+    "iv": "33A37770A90581B66BF440E910ABED3A",
+    "key_seed": "FDA2E31760FC708DA464AB0C68FE2466846222FF391F483BBDF194DE7ED3507B",
+    "metadata_key": "55850C28AB36C0478C59455F908449DC",
+    "section_mic_hmac_key": "A5F0E47EC740727D97426B01CB0A1D498373E14B2A42964940274954B9CAE4D6",
+    "section_salt": "C0CF7E29552F1C72FE58F39607FED92B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9FAA7146038C8FBF5223B3F4EF402B4B",
+    "aes_key": "FDADB3FC15C2748A41A7BD272244731F",
+    "data_elements": [
+      {
+        "contents": "C888F3DA553255168D1C6C687CC86D8A",
+        "de_type": 401
+      }
+    ],
+    "encoded_section": "4A90138C466CF8E025CD72F5C052580230B0A2911000D14BDC42045F83B2B03EBFEC15C42AFA9001E0A30A11CEE658DCDEE4B62B6134BE16B6F2C5C92F4571BF6A2CE1AF1A360FB9C19792",
+    "identity_type": "private",
+    "iv": "58E287FC21B6D4FBCFF5C9FDECA731C7",
+    "key_seed": "79E63CB8F2025BE59AAAA0BCB7AF1C9876DF9E2C8774637887557F11C87913AD",
+    "metadata_key": "B6F890E2A81B7C0173C0AD1725402695",
+    "section_mic_hmac_key": "C0B180C437E5BC877605ABC2A30E6E008A6365DF291026AF19F181AD62BB5F3B",
+    "section_salt": "D14BDC42045F83B2B03EBFEC15C42AFA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5844853779D722DCE751CE513B2A0B37",
+    "aes_key": "6062FFDA23EB1FD510C3672BA5B92CD4",
+    "data_elements": [],
+    "encoded_section": "37901343D08516A6126826C2F77055E624363E9110005BA67B0DD13A87E2209A8796B4455C2690014158D669F5C62F236538C822C5994228",
+    "identity_type": "private",
+    "iv": "5FB73671DC2F2B6A48245CA4E3FF1D1E",
+    "key_seed": "819ADBF5BF607833105976ECAA2E3BC5A8BE1B5E73BB11A7967B93ED72128AC0",
+    "metadata_key": "4467ADE4F732BB4F0AABFA43606DDB89",
+    "section_mic_hmac_key": "5462BB3C170727E8601FE06BA4B954764D246394D912E56A085567F7148F0144",
+    "section_salt": "5BA67B0DD13A87E2209A8796B4455C26"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3A49403C60AC65B85C47FF2D1DA45B21",
+    "aes_key": "F94C9EBAD0A9A3608BAA2D0DC0493BD2",
+    "data_elements": [
+      {
+        "contents": "9FFF46ED",
+        "de_type": 411
+      },
+      {
+        "contents": "03765D84D65C1DF5BA926D5FBB496AC914",
+        "de_type": 959
+      },
+      {
+        "contents": "2D34BC69CF",
+        "de_type": 64
+      },
+      {
+        "contents": "2456607795672BD7C8E7EB4A79BC6F71970608BB0D6F2E",
+        "de_type": 350
+      }
+    ],
+    "encoded_section": "739013D459BEAE4BCCF848831FCFD6DF0EFC259110000DBB0E6CA11CFF6F16ECCE6188E4A1E6900164CF5B4306C90D677539B05AC8FC468C7048FEF75FA4C486D0BC50038AF5620F863D111F441579478FC7474B593EFF0D59E95AA2AE84A2E2D95EDE9FCB7E6A4F669A645B7BAE8A41309ADD91",
+    "identity_type": "private",
+    "iv": "6BA0BC2764992CFFC2BC748EA0A61698",
+    "key_seed": "2E4F8F58A9D66315331FF83B8BC341494998670500C65260040444A67847649F",
+    "metadata_key": "B8653FCEF2F9771634F76E509234296D",
+    "section_mic_hmac_key": "35AE4A49D73CF2763F80202B81F55F4D2EC375FAAFF14AE60F00F7F706D36891",
+    "section_salt": "0DBB0E6CA11CFF6F16ECCE6188E4A1E6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7B2876D1294D35C9A633642CDB531043",
+    "aes_key": "11BD09E553C69F31A441EB71286BF702",
+    "data_elements": [
+      {
+        "contents": "1CD68F",
+        "de_type": 821
+      },
+      {
+        "contents": "D6758EB514",
+        "de_type": 58
+      },
+      {
+        "contents": "A2AB3B5B6DC7B404F1EE0B3AC1BF3D67BE64619453F5CBDAEDF225",
+        "de_type": 19
+      },
+      {
+        "contents": "A1A3542F7C661B7FECF56442923CC27152C365D245BC303D",
+        "de_type": 108
+      },
+      {
+        "contents": "9E18754BFB",
+        "de_type": 629
+      }
+    ],
+    "encoded_section": "83901388E29374A47FF296171738B1F21D9DF491100032A08CD56B7AF49208B0A3A16326B62B90024A5CADC6674D9B1CD6D74390D279F841B4DF78C1F7D6A08A6A747C6D706FB7070AF8C54BADE0743A9A1DF40953ECAB8DE3D7EB5740B3633E669A3BB14CA04B83453B23E532BE99A7F576D1F3DC5261238A734521217EDE09D908B365",
+    "identity_type": "trusted",
+    "iv": "478031F97CE799ECA7A88B9B742BACF3",
+    "key_seed": "124837A26828865520BB821F0833993EB6459AD3F6C4A3A9E9E3743363CA0FC1",
+    "metadata_key": "0F6C4FA4BA7A110CCAC6F1E253D86578",
+    "section_mic_hmac_key": "3366BD2EC451B292C053D75DF63AE820D999EBB1E4D608ABD71D9EE7F17CD6D0",
+    "section_salt": "32A08CD56B7AF49208B0A3A16326B62B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BF1F3EDE71CC0BA23F3E9B5188DCD74D",
+    "aes_key": "0D34EA39D00C9491832F0C0893FD98E3",
+    "data_elements": [
+      {
+        "contents": "C8D6F76BFBB24D",
+        "de_type": 615
+      }
+    ],
+    "encoded_section": "419013A6981580761522A9EC4FD894D95FABFE9110000903815A6E8B791AD5B98D3F84DC737F9002828E33F525A8188B2C7FB787101D4E1B2D25346336913916CEEF",
+    "identity_type": "trusted",
+    "iv": "B462E5AB2AF8A646A3EE86F73E576561",
+    "key_seed": "317A34230522CA4E9A39A827F78E044E63D1882E174AF27CFC3158E85FA7BCDE",
+    "metadata_key": "A16F43B5C24F051BE891FCB6429D5625",
+    "section_mic_hmac_key": "83683A330870E963D7B405376CAD9952CD313DEF8469F90D6951A0AF7DEF9F63",
+    "section_salt": "0903815A6E8B791AD5B98D3F84DC737F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B96DEA316DEF89973732DB62BC4432A7",
+    "aes_key": "C91E00B32F96ABED4FF0122583AB10B2",
+    "data_elements": [],
+    "encoded_section": "37901325B6BDC8A60672158F093819CF704ECE911000BDF2DD53B2723CF84674A938606393CD9002AF993A3939824B86FAA22B5B45F758C3",
+    "identity_type": "trusted",
+    "iv": "BE5C727FC20CAC7FD9F537FA14DA7E18",
+    "key_seed": "489D396A25321A6241DE317FD48F88BAB3D8626C6C642C33E4D71ED80C33FCFC",
+    "metadata_key": "B16BE5F80A589EAAC9F6CE6E40927214",
+    "section_mic_hmac_key": "DD060E89B2C731BAD9F3B541F17841047A27DFD12DCCE92E2DEDD6D72CF17ABE",
+    "section_salt": "BDF2DD53B2723CF84674A938606393CD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B15D76E91DFA20E5D94AB77C272AEA36",
+    "aes_key": "08F89BDE3E8CF20DAA15650BE114AF90",
+    "data_elements": [],
+    "encoded_section": "3790132C20330BF7AD2A9D6356023F542CE510911000C28E44A518BCC0A1AD058B4EDF7778849002A89640F16E3ED67F7EC86AC01434665D",
+    "identity_type": "trusted",
+    "iv": "4ED00D1E66EABEA0AB30F9ACA64C3AB4",
+    "key_seed": "F4052897D21C7FDFB463D86A3F70F43315969DD6C35D4E2F28E5C5FDC094499B",
+    "metadata_key": "A9CC5F1CC6D129AF1BDE07EC54685F86",
+    "section_mic_hmac_key": "1B1A2DB91F5F90BCE7D03F7F283476DB0E6F856A317A3B29747114D6F7543214",
+    "section_salt": "C28E44A518BCC0A1AD058B4EDF777884"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B23518E75C4291C3FF45E230AE8E1144",
+    "aes_key": "0EE48AA7E17EB7AC213E0251F5863A43",
+    "data_elements": [
+      {
+        "contents": "E8397D814788CE2F20C774EDD9A8",
+        "de_type": 38
+      }
+    ],
+    "encoded_section": "479013B7680C78524B27EF19239EE7409C867A911000937FD9077FE6FE41C87FF58C9760628390045396E7CEC68FA85BA56F754D53A236C80B709D69201120CE8DC52D023F63EA2B",
+    "identity_type": "provisioned",
+    "iv": "70E0CF8376E6263D6D39221A279FFB74",
+    "key_seed": "C1CD56FC8895CFAF52047C5EC6E4B555A2A3FBEA8078EE18B88DF10D073D3D20",
+    "metadata_key": "C409D3270AC018858924F1620EC07CB8",
+    "section_mic_hmac_key": "FC9B097CE0223CF1D7719C00676607E1D99B792D993450C7E333EFB2342D5AC7",
+    "section_salt": "937FD9077FE6FE41C87FF58C97606283"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FE111934B0B07379A319C62F558B8EF1",
+    "aes_key": "BAF0EADC4EAC7805FF4CB8B5BBE3E33B",
+    "data_elements": [],
+    "encoded_section": "3790139B8CC25B1E6EE84846046B6606A9FAEB9110004EEDBAD6580D5B7A26ADC604E4AE5ADB90023E2A49EFB0DAD66407994E861FC7931C",
+    "identity_type": "trusted",
+    "iv": "B9F42C9FC19969B3C708F54B1B2D2561",
+    "key_seed": "CA99DFBEE06974AD30031B9482C62411610D1DE2B05E1977F969FAFD860260B5",
+    "metadata_key": "7EBA70428E31280F089029EBCCC28E53",
+    "section_mic_hmac_key": "B7A04163665233F6DB80BFA0E9DF284676010DCC138FBBA97019550EE0505C71",
+    "section_salt": "4EEDBAD6580D5B7A26ADC604E4AE5ADB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "06340305FD9EDD7CA6E97F5F03028D41",
+    "aes_key": "4A3AE192FE98DF88EFB792D9244CB3C2",
+    "data_elements": [
+      {
+        "contents": "17A7D78EB34F",
+        "de_type": 40
+      },
+      {
+        "contents": "6CDD9B23F45E60C6",
+        "de_type": 13
+      },
+      {
+        "contents": "5EB80DA49615A9313378E994B31F96F8B3C2C926",
+        "de_type": 132
+      },
+      {
+        "contents": "38130E3285",
+        "de_type": 514
+      },
+      {
+        "contents": "B43389EB33CA74907A7A4F86FE1AD1",
+        "de_type": 916
+      }
+    ],
+    "encoded_section": "7A901396619F2B2B94F7F19628FA1F51785B4F9110002340B336B5C2E124737BEF2F43F197BA9001ED28FD63D309949B6BED96D0203D4FDD41B32F847342D156B990DE7DFF2408A202690C74A8F5CE1C8D7A709CE7D85507215D173F3850F3C1B2CB91993E340431B97110F563A286331D4B7103DCBA697904EB30",
+    "identity_type": "private",
+    "iv": "11DD03FA6DB092780B048EBD3113CEE0",
+    "key_seed": "7945F877F9D98C7610CE29F45369C662E303A8F5A326BEAFF9F0FB55611C89AD",
+    "metadata_key": "3FB05DBFC8E615E495E1BAD8431FCA80",
+    "section_mic_hmac_key": "FC6524ACBEEA7CBEC81E530F33889F7C852A85E4108B48F1BB2CE77B7AFFDE3E",
+    "section_salt": "2340B336B5C2E124737BEF2F43F197BA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "62114838135ABD22F7D172D64A9F009C",
+    "aes_key": "3757133FEB278857689A7FA8C48C2A3E",
+    "data_elements": [],
+    "encoded_section": "379013CE7AA72E7E878D42F249B992DB2F7173911000F0DE28B972676F2AB092E80CDF67018E90046FA72EA86F5EDAAA0F8CDCA981D5B00C",
+    "identity_type": "provisioned",
+    "iv": "28D18F45C5B8ED0408635743FD12CF47",
+    "key_seed": "EAB98A97C8016D997690C36C1AFB9B27C179D64C4A95BABCD5B30D160EFCE103",
+    "metadata_key": "1C58B34BEC2709A3E7F68157AFE44195",
+    "section_mic_hmac_key": "A071066F9D28C8A5318A2E186015463596B26CE67FA85080E2E0C1BA3FA7BF02",
+    "section_salt": "F0DE28B972676F2AB092E80CDF67018E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1C180AC933FBF1E4BCBCDB69BE0360C6",
+    "aes_key": "705839E944B1F2E9CD381E4E53EE5B8A",
+    "data_elements": [
+      {
+        "contents": "AF617170EC2294888C20C8A3B43BB3AC96",
+        "de_type": 12
+      },
+      {
+        "contents": "E8DC15F1D350190F674791CB",
+        "de_type": 745
+      },
+      {
+        "contents": "142A94EC2E864E33",
+        "de_type": 311
+      },
+      {
+        "contents": "A0DFF75C7969634EB2",
+        "de_type": 940
+      }
+    ],
+    "encoded_section": "7090137A7BBAF6598BF52772377F42EBBFC25D911000BF57CBF05D69C86F976C9A93BB7DD05990044ED30E5FF146DB04653AB49241949BA2233DEF5D16BDCFA8E61DEE02A211BE46C56D05AD868F1FD3229443986B6BD054D49C895EE0730BF53CAD53C8E84AA47FDE268B61F2343BC294",
+    "identity_type": "provisioned",
+    "iv": "566F3A2DE9C6FEC6D2FBEE1645AACAC5",
+    "key_seed": "CE740FB16B092B7AE502759E36C49BDC5B7A2FA2E97AE29FC9E0B9D2CDA72AA3",
+    "metadata_key": "C74FB2EB350DBBF1969E3A9691508933",
+    "section_mic_hmac_key": "1B8D81AB3F79239B973E2C8E73954ED1B5127289547C38CC71BFD0ED9552AE9E",
+    "section_salt": "BF57CBF05D69C86F976C9A93BB7DD059"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "26C852943966AC80964F71AADDBF07AD",
+    "aes_key": "B4D2FBE9AEF3417552263603D22318B2",
+    "data_elements": [
+      {
+        "contents": "4453D6586D1F59DFCBC6",
+        "de_type": 203
+      },
+      {
+        "contents": "8A3CD10D1097BF",
+        "de_type": 383
+      },
+      {
+        "contents": "05AC77461449443D444D10",
+        "de_type": 209
+      },
+      {
+        "contents": "24",
+        "de_type": 176
+      }
+    ],
+    "encoded_section": "609013CBADC624AD2C1F25563EB4BBA865B8F0911000083E4B25DF44E64CB1F9987202D5EE2990016AACE26DEB07CC0FF6D7CB2EDB3B7049A2E9481144AB66F3998841BF6B369CCF56E5878E5C1D2C17A031CE097D4F9B7E4B71CC190F7B637F6E",
+    "identity_type": "private",
+    "iv": "71A9F7A9ED012D7D0A3B5E1665C533EF",
+    "key_seed": "5A0B49C13A755D3C39FB51201D79662CA2DE0CC5DF1853631D2495F78A55490D",
+    "metadata_key": "441FC2E790A83563ACCEB1D121B02A5A",
+    "section_mic_hmac_key": "DD41E3D2F17A81A9B4891E0B07B500140C19E3BE96876B7E38CF1B4DEAB3078B",
+    "section_salt": "083E4B25DF44E64CB1F9987202D5EE29"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A05BB37EFDDB01C28868C9CABDE45755",
+    "aes_key": "11824EA2413643EF46FD5BCFDB388E43",
+    "data_elements": [],
+    "encoded_section": "379013C86D4AEE77BBDBB8844E2926505C097691100028E0AF5531DA2DE3C0DED5BC781B7F049001582A39819023E35A620C88CE345798F6",
+    "identity_type": "private",
+    "iv": "BF0445BA6682A2B47F7ABF0E20E32035",
+    "key_seed": "B688A40DA68CD7661B7D6089CCFE418B5B408BD375E9077C8DB33B620731526C",
+    "metadata_key": "935583808C7CB2FBC7C0714A8C36CA1E",
+    "section_mic_hmac_key": "F086EBEB816B05AE588F30216FC53E298A827819E14CF791CAA5B43B668A6614",
+    "section_salt": "28E0AF5531DA2DE3C0DED5BC781B7F04"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6E0D833A506E4DB1F3A53EF1F43E4632",
+    "aes_key": "2679F4BAA410BBC4E9854FEF3B8126DF",
+    "data_elements": [
+      {
+        "contents": "5B6A4C0B",
+        "de_type": 32
+      },
+      {
+        "contents": "DCE0D04F8F070A447B924F6C8E16EABC8579F140",
+        "de_type": 672
+      },
+      {
+        "contents": "4AD51AD3",
+        "de_type": 801
+      },
+      {
+        "contents": "A2A4B310EEDB978A748833C1F03354157907B8F4952A82D1C60B6F",
+        "de_type": 988
+      }
+    ],
+    "encoded_section": "799013D95AC86388C09B4142211B1890B433C7911000E94F2773795ABC33E1D514921EE2BA949004E570F5BDF232B20034955E0752F5D6A5CECC93236A9D55EA1B0E47A3E000126D73140A93AE42360BED1C2DB98ECD79A07B5C38AFADFB8DEC81C8AD48B88EBEA6AC5240B479040953B63A5C6A83786CDE7E6A",
+    "identity_type": "provisioned",
+    "iv": "F3D857A44878F37AE15E0E4272AA946B",
+    "key_seed": "6412DBC3C88BE6FE2C83658F87EFC2B68E27DC6E2A5F7818CE07E278DB4258F5",
+    "metadata_key": "2093FAC2282FAB9E32873A9249CC23CB",
+    "section_mic_hmac_key": "59E443F1954D91B37423505D8241E6F35BC213F3059455007F588BABAE936B5D",
+    "section_salt": "E94F2773795ABC33E1D514921EE2BA94"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0366F4962B2FAF43595714EA372D803D",
+    "aes_key": "2381BB44E4A84BC892495AFD32648DFB",
+    "data_elements": [
+      {
+        "contents": "EF42CB7BDCFF5FDA2486584DC7C69755B49AEA22",
+        "de_type": 48
+      },
+      {
+        "contents": "07B646472EC5353965E24350EE4F4B41E1D3B04A5FA3AB743D19",
+        "de_type": 950
+      },
+      {
+        "contents": "4CE19C060C1E3AAF573C8BE7046339C6A72F11",
+        "de_type": 772
+      },
+      {
+        "contents": "A9DF36B2600420CA81D5AC14199AAF13B9E4056F43C0C7A9A1B458F9BD",
+        "de_type": 283
+      },
+      {
+        "contents": "B7A2",
+        "de_type": 578
+      }
+    ],
+    "encoded_section": "A5901395C08630D83223DA1529C5BDDF862429911000F33DF7DF517C94019086C3C55258270190028EE860429E7BF8FA0A3E8D5138E3CFAADB41414889DE9CCF0C46FC07FC618E4B0EDE78A19EF63C6FC7C4127D749C7ECD19EEC9D7F0C1D4BC6F1074785CF7CC06DF2CA35F43B17D8C23F389F82BB16E21C1C80328B60B0BF7EF031D3C885393CB7F86C0E48848DE744E73F7DE8AA69F5E875AF692EE5CA62B6958F450DDF7",
+    "identity_type": "trusted",
+    "iv": "596ADE25EB467684CEF42648156B0626",
+    "key_seed": "9E23BE85340F7F6E4EF0B499865BC6771EAE8777F5CD62655BBCE72E53ACC83F",
+    "metadata_key": "2EB7B8F54852A9FA534E0355A51CADDA",
+    "section_mic_hmac_key": "4A08AF41A015449CDBF11C5A919FE3F09B3D002BA5FE5C0C0910061C291FB569",
+    "section_salt": "F33DF7DF517C94019086C3C552582701"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0AEE1E2CF439B601CEB6912B95375040",
+    "aes_key": "5089E7D176FF1A7223D80B0409C6FA26",
+    "data_elements": [
+      {
+        "contents": "D5276E1226F20AB687",
+        "de_type": 607
+      }
+    ],
+    "encoded_section": "43901358F31DEAC2408D32879334657F553B3C911000D17FCA0932AF190778C24B96E5FD773490023BFABD0169B35850D2228C8AFB2F91608D59B80F95BFFE0B86F85870",
+    "identity_type": "trusted",
+    "iv": "D41B625DDAAC29E9C2C452E9F16A29C0",
+    "key_seed": "44C670ED0F58A7F2BC90EF1F04EDF83C9348139557B451EB6D8275D7B0185398",
+    "metadata_key": "D8BFA1BDA44332D65D99EF0080E01D3F",
+    "section_mic_hmac_key": "C2B8FE9FA062BE161FF8BD14F31BBFCE43378DDD9D82EAE811BF8D61BE0E889E",
+    "section_salt": "D17FCA0932AF190778C24B96E5FD7734"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "14EFDEC1CD63DDC48B8B8E8C8CDC8304",
+    "aes_key": "5E279D274E2D7323A335FB4BB590EB6E",
+    "data_elements": [
+      {
+        "contents": "A16A8E4A6AF9ECA8C6F59A0C810DF0887016754EDF4E",
+        "de_type": 933
+      },
+      {
+        "contents": "91E18A74954C81ED",
+        "de_type": 768
+      },
+      {
+        "contents": "D284DA8A828C589785EAAF87EACD9B6B629C93A72A",
+        "de_type": 250
+      },
+      {
+        "contents": "10F674B0727729EAA5906B2E2055A074EFD5",
+        "de_type": 386
+      }
+    ],
+    "encoded_section": "8890137E2AE6C6195C792C17C7A7D5D85D62C39110000FD914F6DEED1D8B294D54AC1AF731E59001801DE846E75659321A50A88FE67B0F6D15999A664BB34EAD74AF0F15CE500635DCC5662F84ED09B1DD8BE084A71FCC5952EC8D21D42E2C73862E6C7624C1E23EF238E3454F3001E1A1F628F7DDCE9E1603C29A09EAFCE0AC398C535C7E6A3F8B6E",
+    "identity_type": "private",
+    "iv": "2769CEA47FC25DCCB02764766D926045",
+    "key_seed": "94F0C89FCD16F86CE07F9E525E6DAEF427E0E34155511E533DE9E9A3459588E6",
+    "metadata_key": "F8A0DC8DA1A04B3E48500497F9AD016F",
+    "section_mic_hmac_key": "BA370144A94F5A2D914A271DA273C7398BA54051561DF993717920C6402766F9",
+    "section_salt": "0FD914F6DEED1D8B294D54AC1AF731E5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C8DFC829806B833E4CC7A5915DBF6976",
+    "aes_key": "178A9B604EEB014BFBD4E225DCD5F848",
+    "data_elements": [
+      {
+        "contents": "E8C937C8367D2CE21D17EB8473B0C2115CFCF8F17AD95664ABC342ABA8",
+        "de_type": 501
+      }
+    ],
+    "encoded_section": "579013A26BA7738CE48F0A7785573722492B6F91100052FFAE3A4F772BE69EE13ED700E5C0019002C8986203C903B3446CAE025DF6E718BF73EFF77A892F5867B55BFF67E278D59AFEE383E4115BBC6F3052AFA8F85D5B0B",
+    "identity_type": "trusted",
+    "iv": "D2EEBE3242653569FCDA783795429968",
+    "key_seed": "93A836F66F3808515B936588D6A270FEA403392AF0CB25E16CE672AFAF26BD09",
+    "metadata_key": "1DFAA8BD5B70B5BCED114183CA5CD29F",
+    "section_mic_hmac_key": "3DB4DF42F47597DD85B09EC00F7CB6828C0AE0C4AD770964BBB83C18F44A5D4E",
+    "section_salt": "52FFAE3A4F772BE69EE13ED700E5C001"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8EB77BBF9B403FF005C47CD0E16171E6",
+    "aes_key": "F609CCDD1AED844DB12101C1455043AD",
+    "data_elements": [
+      {
+        "contents": "6F7BDD9D79C975F5499A0445A0A45B65093FE6BF6B87",
+        "de_type": 253
+      }
+    ],
+    "encoded_section": "509013F28F4ECA39FA96461F8A0699BFB576AC911000A9E37AD77F5AF0CDD4310C3400E843999004BBC3E4FB4CD4FF5E74A6FD5D24F758D3A225C841350134B8EAAC663A8425EB10B70D3D5AD7F5D89454",
+    "identity_type": "provisioned",
+    "iv": "3FBF642845DA78CA89C9F1C1773C1CAF",
+    "key_seed": "81004ACD295BD7E1F3B141E4F32DB07B38D89628FEE7E832C5250130F7B76DD6",
+    "metadata_key": "12D275A01046BCA9813B58EBA1A111A6",
+    "section_mic_hmac_key": "9DBA40A86FFC3D909D4973DD42F5A1590AEA88CA64FDD1AACEDE1873FABA922F",
+    "section_salt": "A9E37AD77F5AF0CDD4310C3400E84399"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "72F229F976778B8F81E6E11237BE69D2",
+    "aes_key": "965455CE77299A33B4677C22F8934450",
+    "data_elements": [
+      {
+        "contents": "2BF3E31146E2852F0C71FD8D00185974D4945EC0388D52FDD11F6C78",
+        "de_type": 474
+      }
+    ],
+    "encoded_section": "569013F1133A1C5D39C0EB102D559967F81832911000BA431CBF78832E8B284D34DDC999B6589004C08F255B79F62CF6CE040EDC3A23728625BC0399E1EC4D686FE88AE38EA18CD1D3A961F303FE34DCCCA5613EF5B19B",
+    "identity_type": "provisioned",
+    "iv": "39CA34319C4E57CFA76C0CC39D250FEB",
+    "key_seed": "2EE377ED490D438BA5E5856EA6CB0206766DEC800FE300A20C5AA30FD9F985BA",
+    "metadata_key": "A0B481795EE988419063BED63094A408",
+    "section_mic_hmac_key": "E63EBAA47708FA1F7DC4BB439938D4434A0083BE3DB361669A090ACB41D45DF1",
+    "section_salt": "BA431CBF78832E8B284D34DDC999B658"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E2438E9BF16B31C95FD6885C00E11B08",
+    "aes_key": "D4CF5202400F9C1932BE142FFD4CC65A",
+    "data_elements": [
+      {
+        "contents": "6D",
+        "de_type": 693
+      },
+      {
+        "contents": "40F83E490CA9CA93",
+        "de_type": 591
+      },
+      {
+        "contents": "E66886C93E6592BEFD3F",
+        "de_type": 241
+      },
+      {
+        "contents": "8C0010C44724714E61E68F30533460A53E6B0D",
+        "de_type": 277
+      },
+      {
+        "contents": "B277F8E0CBA5AD4FC3545F8F62834693",
+        "de_type": 958
+      }
+    ],
+    "encoded_section": "7C9013FF26D8333BFACFE99C000A04F9446EAE9110003398D1FA6CA164B2F2A9DF651AB8A08B90028DB85D0B6CE0D6780A715759F75B820D7A997FF914C10EA81F49984D37145D11414ED694AE60301AE1181A025E347F78BE15A882905044070CB461D3D04F7BE7466B9768736B89D1E1EDA8227D37E080378D6BA9F9",
+    "identity_type": "trusted",
+    "iv": "FDB266B94952A2C53A36FC76B6B10D70",
+    "key_seed": "2C450CB362CA288FC9F268B3654DE6BBFB2C42A0A3473D1DD752CD670C45E550",
+    "metadata_key": "437B5470A0C2E0EE8257D7A255D776D5",
+    "section_mic_hmac_key": "57AB37FA929E2622240214CDFA222E72B87D00F68B01F28629BA162F61B24856",
+    "section_salt": "3398D1FA6CA164B2F2A9DF651AB8A08B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "16A07829874761800D9FB4C3E21A2A30",
+    "aes_key": "24152963469643ED0534D23908210079",
+    "data_elements": [
+      {
+        "contents": "582A88E9ED0B",
+        "de_type": 226
+      }
+    ],
+    "encoded_section": "409013D7F48916F267119188FE49673E4322F5911000AEA39558B6060468B31BBE90D84E48569004128F5F484DC44595CD6EA02E9616DDEAD65E71B1F3C0ADA8C7",
+    "identity_type": "provisioned",
+    "iv": "B77132A303625EC533C2AB64430BE8EC",
+    "key_seed": "9AB4FD9204A072396ACB99BF24E36F99D6DC23A9C6433CDD793163D716AAB367",
+    "metadata_key": "6B6FEEDF5FECF44F4598D9F9336EA39F",
+    "section_mic_hmac_key": "CA281C0ACDB75B8FCCBE489135F1F60CBCE613EDABCE4F6599DB6A32FFE8A98F",
+    "section_salt": "AEA39558B6060468B31BBE90D84E4856"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9159107E1D54578B844265C291E6F456",
+    "aes_key": "A142FCD93225283E9C860862F8719CE2",
+    "data_elements": [
+      {
+        "contents": "BBD5",
+        "de_type": 347
+      },
+      {
+        "contents": "A61AEB",
+        "de_type": 165
+      }
+    ],
+    "encoded_section": "429013CF49B28303C8F063E5A9C8A2E5E5A582911000C3D02F4B3F14A8C76A0E3840C522BD199002C48D6D20B4B27E0AF7E8AA6319A62AA7AA534F867DED4748522E0B",
+    "identity_type": "trusted",
+    "iv": "E45AE7CB222CCB06E574519786304AFF",
+    "key_seed": "7EFDFFA488A94BF2C11A3EE5B309FAB935BF41D510D587A7115D5BAD030C853D",
+    "metadata_key": "C6EA1FEBD15B10E7D19D13317D39F365",
+    "section_mic_hmac_key": "9F5F37B864A003287CDF62806A6D5CC4422816474DAD127DAAA0303B842DBB01",
+    "section_salt": "C3D02F4B3F14A8C76A0E3840C522BD19"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "01D0C987D88C843A8DA02F96AEEAB362",
+    "aes_key": "4D8530AB04B3B18073DD758C44CDB12D",
+    "data_elements": [
+      {
+        "contents": "C635CC117668AFE7949917A7",
+        "de_type": 593
+      }
+    ],
+    "encoded_section": "4690132F78152F11A6D5F60810B49DE0E34D739110003C013D2EE71384CB77B9FFACF9A47F4E9001A32EEA69EB210803D358A56381F4A39B5F6DD7C26B7E13BAC60AD879791059",
+    "identity_type": "private",
+    "iv": "47787F6AF0CBFF3224FD5B90B7C62C19",
+    "key_seed": "00CC8EC56019B472D3ACBE5BE0A264A6678E2DF7CEF0BC67BD79E6828C8DEFA7",
+    "metadata_key": "726B29FC8323127C8BF3CA61DB54DA54",
+    "section_mic_hmac_key": "6282DF040346562FEC646797AC206013549F226E4BAAA53F89F7EA8D7704CA35",
+    "section_salt": "3C013D2EE71384CB77B9FFACF9A47F4E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FAC14F23FCA63EE1AC8C2F59083B88B7",
+    "aes_key": "6FC985D771EFA0BEA304EBA07A4D4381",
+    "data_elements": [],
+    "encoded_section": "379013210B1AE359DE0CBBEF346FF559B51B64911000588A0BD17ED117BB4AF055C77AE2DC439004E313D80409FCA3D2E2979544708A39B2",
+    "identity_type": "provisioned",
+    "iv": "86C71197DCC66D69EAC756CF2C03457C",
+    "key_seed": "C2AE57F5782C3D478DE8AB1D2E1687BF00B9E0610F7D6E16623496E61C6B1230",
+    "metadata_key": "53695A2CF6468D1F2453CE5EDC1F5D34",
+    "section_mic_hmac_key": "6AEED53AA44B52EAB200C7F46C01829AF89B54BCF92A9976DB76868D6F135627",
+    "section_salt": "588A0BD17ED117BB4AF055C77AE2DC43"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D472CE5EA02A6BA693D3D3C2FDAD3CB9",
+    "aes_key": "F3D466548CF059E4BFD26C5886022F5B",
+    "data_elements": [
+      {
+        "contents": "D8D56CACAF01745BD359143859C0D997FFAF99426DEE4F0526C6B7",
+        "de_type": 92
+      },
+      {
+        "contents": "A24E8CF59B4C05",
+        "de_type": 365
+      },
+      {
+        "contents": "81",
+        "de_type": 632
+      }
+    ],
+    "encoded_section": "629013BE8CCC4DF63F42BA4F95A6E67E961F27911000FE4F65E41C205A3E4AECA5C3793C5BF69001EDBDC998D2BB9F46E2820FFA264F9BE3D3915E34044744679A1B1F264AD4E0308DCB0BF6480F7BA07BEF3F97BE391D659BD97C4CE4105F2D3FA56B",
+    "identity_type": "private",
+    "iv": "991E163873F0FD3CDFEDF8139642A8F3",
+    "key_seed": "568C44F2441F53CD271E0542E28C0FDC6695D248A63610880C0453C64F0377E1",
+    "metadata_key": "2852757C8F7EB2EDEE35A83C67DAA69C",
+    "section_mic_hmac_key": "FA797B50ED1D17BF334DCF82CC974B740018A9C8003954FE8C86266B17D3F3FC",
+    "section_salt": "FE4F65E41C205A3E4AECA5C3793C5BF6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "37CA9E5FD83C77A93EABAEDC05387FA5",
+    "aes_key": "2A6AF75B9E41431A70C784C8CC4F67BC",
+    "data_elements": [
+      {
+        "contents": "537D9BC55AE1DA87236C576CC5F26C2D602732D596",
+        "de_type": 824
+      },
+      {
+        "contents": "86804C087B781C582B55",
+        "de_type": 646
+      }
+    ],
+    "encoded_section": "5C9013115FC54D3F5BE989D8D73E6CD5FA8933911000A85F1F25192415C492401A2F8E01E92890045AEFA99C8FC1CA0EF427BB15090A7DD66CBEDB6F851224E43966EDBB49403FAE54A4EB5F2EC7DC91D3303A587F631C60FD37F77187",
+    "identity_type": "provisioned",
+    "iv": "EF1CAA1432DC4C9DA79FD2F1B6085F22",
+    "key_seed": "83B25874FDA42842607D32442AA882CF07302E77F3ED45483B084173C78CE088",
+    "metadata_key": "D5476BCD37EA529CFE0398E04BFC8DFB",
+    "section_mic_hmac_key": "9A3EA2A97F65070F53F1D0565BF79C2884EA8F83777C386F788878D0405F8F71",
+    "section_salt": "A85F1F25192415C492401A2F8E01E928"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "23A40362AB2ADA10E507ADF73A53B738",
+    "aes_key": "2A3CDE8E1F16994BEAC62D6303BB37F4",
+    "data_elements": [
+      {
+        "contents": "0843EC4474384A6564190967861E63F79CE2C093CBE9",
+        "de_type": 549
+      },
+      {
+        "contents": "528EE47BB4B74DC8BB9E1DF094",
+        "de_type": 970
+      }
+    ],
+    "encoded_section": "60901318D390C46D78B50D713B7F1D3E4ACCAE9110006797144436216197C900B8B9AAC56F789001CD6DE510AECDD868575107FE8366F7D00DEC23322446DEC1C1544F04F07114E1ECB49ACC9CC160A0AD858347DB70785C8A1FE1865C1B8EF1A1",
+    "identity_type": "private",
+    "iv": "D5757A781F250DEA9B32A2187D1DCE66",
+    "key_seed": "D0B4C8F4097FCB6FA04E537590BF5D93980F62C3CEACD9539F4B805FCEB19BF7",
+    "metadata_key": "F59AF47E80215C5D7080A9F17789A0A4",
+    "section_mic_hmac_key": "75CBA9C19FB676E9DAA28A513B222848CF282079CB8D535638316B230DF07FF6",
+    "section_salt": "6797144436216197C900B8B9AAC56F78"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "669368F2B1CA51C64A75E82A26AF1C11",
+    "aes_key": "A4EB2632A392009042825BF578EDE10A",
+    "data_elements": [
+      {
+        "contents": "F2D8D28C9069643C0348AB1945160AF061335DF9EAF41B221DBE03",
+        "de_type": 436
+      },
+      {
+        "contents": "60197A23C9",
+        "de_type": 331
+      },
+      {
+        "contents": "8A9DF20FBD2E506F3A1A9C0A2BFB4DA265569A10ACDE979A7E788D21F2",
+        "de_type": 679
+      },
+      {
+        "contents": "2CAA8CA35DEC7A9CC23AE80F2AD4D04BA3E183FE80DA7CEF25401F",
+        "de_type": 414
+      },
+      {
+        "contents": "1A1B4F43E756C631B06104F7",
+        "de_type": 20
+      }
+    ],
+    "encoded_section": "A990134A4C65C83E53EAC713E40B3AD06319C3911000436276C9196C9DA1609DC9C37F62FCCD90017D953EC227BCF3F8D3C9D12F703836BFEF24DA8CB8DFFD6E8ECFBCEEBD7C7A96FD46C6DD33481F61896CAA97B3080075A5EB1F94CA4723CDE6DEB7A248B1539F7A6F727258DA870911DF1D648D43006DD5E59E84C30F72CD61095DE966561D2CF65E1AD4D23E35CA259C6D24D31B7FC9DA8FC1F6013CF1D45C5024A5586264342E8C",
+    "identity_type": "private",
+    "iv": "B16EB79EEF99FC59C0668A1D7BC49AFA",
+    "key_seed": "5F02964CF3FD078549F6F8A12FBDC0954E721E45D6E846889E7524D2B8434B8B",
+    "metadata_key": "A708F60A0D600AA8A68217B333B97CD8",
+    "section_mic_hmac_key": "E13B13E5A85167161D8B99887734E38F16B76B87A517A8C4FF136F89A5DDF17D",
+    "section_salt": "436276C9196C9DA1609DC9C37F62FCCD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0A2481314ED5461D784F31EAF236F1E5",
+    "aes_key": "16E09656726BD0DC340707E9A8044E65",
+    "data_elements": [
+      {
+        "contents": "92A1BAC82C6C9E906E78A8DB18D26644E7A2EAEEED",
+        "de_type": 647
+      },
+      {
+        "contents": "98233973D9B3EBB10DD17CE8B446D32C9401AFD1B5EC9C57FE18",
+        "de_type": 657
+      },
+      {
+        "contents": "39F2C871399BCE2B2A4B30B8B2310104C5B7056E11F51AD03F",
+        "de_type": 824
+      },
+      {
+        "contents": "92A59F3F222B370631B5",
+        "de_type": 29
+      }
+    ],
+    "encoded_section": "9490133A361322C6CFD8F123B652392B2C33F0911000C1A4FD2EF8C9F2A6D6974F8499A86C659004B9B926F64A99404F409179FAE1A76A99533E523AB5C23493DC15F5F3F120CADCA02CFCAE5A3082F5FF9C2FB21D81E521728C42982A2328CC308F514795CA4EB96B8345F6BAE498307143DD189D826F4724CC8EA3FAF712901F36E30FC459E53DABAF178E7BD5C84E132A30DAB1",
+    "identity_type": "provisioned",
+    "iv": "E767A2363EF745A39E8787B42FD8DE81",
+    "key_seed": "61F9D03A55557256DF3DB5D601914145C9775AEE985415278B8032FA275C5329",
+    "metadata_key": "BB767635FA036098ECA2BC4802D976EB",
+    "section_mic_hmac_key": "31D39D034312D41DC5F9345FB580C37BB38395B84C53E60162A28720C1E63FB7",
+    "section_salt": "C1A4FD2EF8C9F2A6D6974F8499A86C65"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2F5E446BB35D880DD4832A0320D23837",
+    "aes_key": "0561AF2D0D1CA6D8E039AF77CD3EA3F4",
+    "data_elements": [
+      {
+        "contents": "AC27B62265094108D47755E4CCDB67D80B83C7074CECC0D32722",
+        "de_type": 769
+      },
+      {
+        "contents": "B4AAFCE877574BE04E95",
+        "de_type": 926
+      }
+    ],
+    "encoded_section": "619013DDD6BA07092F273FE5A3B387A7DC9075911000CC0F046848B5C94CFAF3C1D28E8683E59001430FC81EB61D0491A40AA0EE069E9B722C2B89CB62B4F352CB8FE93F0E9D15D6312B6DF7F955A3A8A04C4D6A4986F86D536A3E4CBDBF4FD6DE71",
+    "identity_type": "private",
+    "iv": "EABCB9DA7F07B140664428DCC9047C9C",
+    "key_seed": "F82944B1BE8D9544BDC997CA1D03476C40D7D7FFAF30984C6FB2134B5AC19139",
+    "metadata_key": "19D5EDE29D0669273A6E1EAB85910537",
+    "section_mic_hmac_key": "E69B4CE7F49A47FB968E2C884248B3945F308B713AE44E3E4647DED0393E64A4",
+    "section_salt": "CC0F046848B5C94CFAF3C1D28E8683E5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "745EF38C147400E52E78EF73D799E530",
+    "aes_key": "397F15C3D3507F7558ED7FAA6FCFA2E6",
+    "data_elements": [
+      {
+        "contents": "744A64EA84D1A11640AA6EC3E1A7",
+        "de_type": 906
+      },
+      {
+        "contents": "AE5862393CAE8A6A8081",
+        "de_type": 472
+      },
+      {
+        "contents": "FA53D0AC965BCC16F47544049731DA0A5A15BE0404705E",
+        "de_type": 331
+      }
+    ],
+    "encoded_section": "6F901373AFF0834BE5A8A75E5746CB02F7A71D91100061D605F31762567236505062910B3D87900118280B003A65469819DF38D09A494CF6525442F1CEF475B8314478A8F1A57BAF3C7FB86AB20E0190C6FE6850335A7E386D600128E705B2179D425FEB351F9E4EB59CC5E7A9C83430",
+    "identity_type": "private",
+    "iv": "94077956863ACD5EA404F69F49C6DC77",
+    "key_seed": "CEBFDAAFF86989FC83B21C9AF025C8C9179994F61AD5E743A802B5ED773A3EB0",
+    "metadata_key": "538ABCEE91E1133075655C92E743045E",
+    "section_mic_hmac_key": "E73A504BC9BD9D96710628DC0B818E1AFE30AC345BDA21A8D433B5848C46CD2D",
+    "section_salt": "61D605F31762567236505062910B3D87"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0A6BBAF5021A1D2FE1682B7F1075264B",
+    "aes_key": "F9D5C665842BC9A21E7118A5140C5980",
+    "data_elements": [
+      {
+        "contents": "04FCE6BB03DCEF4AFFB691BDC55131FB1362F6DC9716322F4D66C7",
+        "de_type": 586
+      },
+      {
+        "contents": "070F8092B39E3A464748E7AB9F0A6D3BB8",
+        "de_type": 48
+      },
+      {
+        "contents": "1B8AB668E06DCCA0A0D10CFF6319600E8C",
+        "de_type": 363
+      },
+      {
+        "contents": "0505E12CB0611C4DCDE6D2501FAF96B1375497EEC1C3D349017C4DB382",
+        "de_type": 825
+      }
+    ],
+    "encoded_section": "9C9013F127B1FD8A6754A1D23FC5ADF1AA4888911000D2EE2D16407010B143CC91248DF3EDF39001C723843332E652018213683FE8E97832066841091B04D79B031EE9C28AB3EFEBD8DC90AA76D499E8625B8D7DC05E47FC8725C9F52EC835086F1A12BE17FAE08E5648CA25CAC0C975F9D6CEAC578FA100D26031FF7D24B6A39531F184553B64DDA8B42C63400D9D938719D92EFF98743E9E06D83085",
+    "identity_type": "private",
+    "iv": "E54BAF233C2873FDEC34ECDBD2A75BBC",
+    "key_seed": "5E571CC03CF6060B889A4AFE1525C75D7010747E1F49304996A04F6541A15BD4",
+    "metadata_key": "7E9B72FC7CFC6D01C32FF8525C73A26F",
+    "section_mic_hmac_key": "D4FF75AEC965C82A4A2EBCD6D793ED7901083D68C26FA7863DDB45B242B412B0",
+    "section_salt": "D2EE2D16407010B143CC91248DF3EDF3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "DF5BE769CC5F0353186732BE147A63D9",
+    "aes_key": "22CCD7B2403BD3865C7B2A465F6C30BB",
+    "data_elements": [
+      {
+        "contents": "A14BBA160E760CF44F",
+        "de_type": 952
+      }
+    ],
+    "encoded_section": "439013BAC4DBE0F31AC812333CE4E759DB04059110004209A410502B246C097B277FDB07C4D990013BF9818DB28F7BCEB9BB5E009163691F51BC8DE49B58C0D49F0E18D3",
+    "identity_type": "private",
+    "iv": "1355F2F66052B17658A63F135FDA11D7",
+    "key_seed": "7361CCF3A6692EBC56C0CA940F35FC4AF1AEB3D0A61C09D9E514C39787069B58",
+    "metadata_key": "4FA17703926007A4761033EDE0235613",
+    "section_mic_hmac_key": "A13C30E9F3243CF7061EB9B9BEB91A45DAB682A15588C894BC803B751B4579E8",
+    "section_salt": "4209A410502B246C097B277FDB07C4D9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E5F3B694C8D64BE7698617904C135CAC",
+    "aes_key": "42CEDB34BEB620F53150B505DBF0017E",
+    "data_elements": [
+      {
+        "contents": "1B9289BAFE209EB83B1317DAF000E1364AE9B42EA5D3",
+        "de_type": 329
+      },
+      {
+        "contents": "62612B87E30046057587",
+        "de_type": 311
+      },
+      {
+        "contents": "F6E858C9FC1193050685904D19E7AB2BBE",
+        "de_type": 261
+      }
+    ],
+    "encoded_section": "719013159144D7E2194B056A0C7E8584BF6CE8911000218C59E9A77F6C177DCD2A9773BA48AF900241DA1F7786470F9D4A621561E8AF20F7C08EE15C0BD534A675FF6463E81F6CA71A45ECD5406B91DDB3E4735DBADFF00978F8362A398E5F456CDAB11EEC901F03D1648EF8B150DC3E67DA",
+    "identity_type": "trusted",
+    "iv": "EA32DE5C1E430A835C12B1A91CC89CFB",
+    "key_seed": "8BD9229CA4491845B4083623E5FEA2069BD41B56809D886324CDB1A586BE0CB6",
+    "metadata_key": "951A2E71EE9898BDC0296DFF0213DF30",
+    "section_mic_hmac_key": "3FCF9C69A11FF8EEC29F52F44C472C0C57E91D443C1D2B26A83221567F02151B",
+    "section_salt": "218C59E9A77F6C177DCD2A9773BA48AF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C6584EC834FED2E94B8091A8747BCD9C",
+    "aes_key": "15ABEEF92C750250A1A76C68241634D5",
+    "data_elements": [
+      {
+        "contents": "578A958480E03A34F8978B8260C9A13F9B9ACF373C",
+        "de_type": 198
+      }
+    ],
+    "encoded_section": "4F9013A3CDB9B681A52DEE1310B22F1931F9EB9110003F399980C680152865FD9279D977CC139002685C63C0C0E709FEC8E9EFDB7269397FDE1E43D2729F41D9C7A66DEAF2185B5765B530A92CE78B97",
+    "identity_type": "trusted",
+    "iv": "1EA030B4EDB3E3830E853133F5DF8E73",
+    "key_seed": "4121F59F7C8155C2C22DCD541C2EEF8FA89E1A1D92FA6C92767E70EC828E581A",
+    "metadata_key": "87C695F0A704AFB08ADF552F2D70D36B",
+    "section_mic_hmac_key": "8BD01A8873BC672624A111614E646520593EBCDFAC76A81D40E3C1C268F89A0C",
+    "section_salt": "3F399980C680152865FD9279D977CC13"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3F2141BAD98E79288895A150E295742F",
+    "aes_key": "0A35AEB6BA80958F4FBA6475AEDC9C42",
+    "data_elements": [
+      {
+        "contents": "2EECF608AAAAF0FE733CC5E2DBF178C7E39152E12CDDD772D65C417DFB",
+        "de_type": 803
+      },
+      {
+        "contents": "22A2C92D792B",
+        "de_type": 103
+      }
+    ],
+    "encoded_section": "5F90130F0868FBF386021653BA3FE7BCD17E87911000FE75240065FDF8EFC99C0C3AF69156E59002E707FDA0FF2BD0ECDB6FD388E6AD5FB47E69D6B787971FEC414F711F7360869018634A4857329A9B0AD295C4C755CB905EBFAC9A4C0B7BD4",
+    "identity_type": "trusted",
+    "iv": "049F4151D3FE5B124170EAAD35C45788",
+    "key_seed": "2E09F6C972F988C3AEBE406A814ADCE1323861A409071CFAC1EEE755DF201202",
+    "metadata_key": "D6AFFF9038CD3B4C77CE91F438BFA3B9",
+    "section_mic_hmac_key": "B1F883D3A3806235308427AC61D723CE12A761C61069ECB1F10CF61558672621",
+    "section_salt": "FE75240065FDF8EFC99C0C3AF69156E5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "49B2915EC7A33D0286B5D856BC1C5284",
+    "aes_key": "A417B26D49ECA18BAC18ADA35F74D45E",
+    "data_elements": [
+      {
+        "contents": "9B0E237C78F6CB50",
+        "de_type": 9
+      },
+      {
+        "contents": "C94477AAA110FE809B62604500ACD0F7D414FFA49DA215",
+        "de_type": 519
+      },
+      {
+        "contents": "992B20C63A1A22",
+        "de_type": 25
+      }
+    ],
+    "encoded_section": "6490134B524B7F1DCCA091F7824EA36A2617A1911000D340ECFA488E4B8D5097BF106F8B829D9002D655120231B293EF93F1951FA10BE3255011D75CC2409DC37406396FB62A190F4EE6438A650B01A3EE155F192FF7AE7041676C38CB0DE0470D35B881B9",
+    "identity_type": "trusted",
+    "iv": "869A1EF9278163ED199CF9F9F137D4E6",
+    "key_seed": "9EE4BAC6148531F711836FF331C1FB7E3B02B9ACDD78F2F88E8B0E40BE39DE24",
+    "metadata_key": "C81343B9BED7BD4F0758950833314D87",
+    "section_mic_hmac_key": "BA6A098387BFB88E2E4FEB012F726011F577FCA9E1349D7627A46B1B5EB2DCF7",
+    "section_salt": "D340ECFA488E4B8D5097BF106F8B829D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8D17E72A1C35431FE9167E9BD17E0CCA",
+    "aes_key": "8B6E188A464D1E549D5988EF874A9714",
+    "data_elements": [
+      {
+        "contents": "65F9D53284B61B216C2FB7905A7E628A36D346F27E63DF03AD5591CC3806",
+        "de_type": 122
+      },
+      {
+        "contents": "1297A56F07B1E17644212F4E57043C1424A6FCA16610A252",
+        "de_type": 427
+      },
+      {
+        "contents": "0373709C74E1682A1293A7C96B026CD7667BDBC8",
+        "de_type": 321
+      },
+      {
+        "contents": "B7A7F0CBAC26EB1A7F10",
+        "de_type": 240
+      }
+    ],
+    "encoded_section": "969013135DE684210624C70AB737EA21E2BB2791100071D1EC0652294A473D35ECD597CC09C4900451B8461BB4330D89B49CF05D5D0B305361E41C5D0DA38B58335699AA3E806BC4CFADA43F344F49FF0BB77196236F8CDA9054F508DFB5144AA7E11AB860A0F4CE6F9D47237982D8DD5B3232F3627C4C4A55AD1201A865CE24D5C73E50BB704617AA4D887B7A75048D63F29AE2C31CEF",
+    "identity_type": "provisioned",
+    "iv": "3365A1592043B55C5C4144AB1D115066",
+    "key_seed": "80F58265457937034CE0954435632A123D95EDA52237638197E60E3C3941CE75",
+    "metadata_key": "95D1A7C78A1E4BACA51EA2476EEB81D3",
+    "section_mic_hmac_key": "DAF584298F254B48279150416077F45F02EA517C3473AB034D7ADFFE3A670FA3",
+    "section_salt": "71D1EC0652294A473D35ECD597CC09C4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "567BB8BE3AEB3C21E81331145E2A92AB",
+    "aes_key": "A617DFDBC645514858FA32E01DB12BDC",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 487
+      },
+      {
+        "contents": "6AA41CA7DCFD6CB1AC6A4318DC40FB83A14443F387C8A2466EC1CFD3",
+        "de_type": 640
+      },
+      {
+        "contents": "7B8F001428B90D600D00",
+        "de_type": 965
+      }
+    ],
+    "encoded_section": "669013885D0434ACCA45B4F679F4876DC80314911000691D3A0B07D7528440C9FE2FFAE11C0A9004C856B862CB0B81B4CE4355DC8D1D1938938C313D3481DC74949373CAC221012D4B0B4CA04035F045ECD631596E29947BBC2A20A796889E1C37CD64982CF41F",
+    "identity_type": "provisioned",
+    "iv": "895EE2C2AE3779BC94DD8312A6999D85",
+    "key_seed": "F47E65BC805D3E68FEA05C8CCCE3D494649145434287E31E952646F2576DCDCF",
+    "metadata_key": "F952060A084F9CBAA1567CAF63228883",
+    "section_mic_hmac_key": "EEE4F8B3DAE3B3FCB134AD655DF92456239F559B52FA195085850A03481492E7",
+    "section_salt": "691D3A0B07D7528440C9FE2FFAE11C0A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3D5E77232628E33E4FFD9381E791689F",
+    "aes_key": "0DAC17E78298ABF6982AD8FDC35407A4",
+    "data_elements": [
+      {
+        "contents": "97DEABC3A327B8C4354C65700EFE47ADC6617EAE56B7D9",
+        "de_type": 115
+      },
+      {
+        "contents": "2E3A60DF71E005D1E519B5F1443D0D918845C0C621F0D877DF7C33A4FB44",
+        "de_type": 579
+      }
+    ],
+    "encoded_section": "7190134EBC1FB02A556EB545C3DB69A142E9B89110009FFAE095EE40CF7BAE117E7431FFA8B39002E91322121BEDB880976E910A1EA6003BDDC0B45400C07A141DD1E14271CC2912438B0B68EB80ED610E8C1DC4723EADBEF7482C8AAC2E723404EE3D4C88238FB9418A968AF469BD65A6AC",
+    "identity_type": "trusted",
+    "iv": "34DB2B5538C1F25E926D8191C5EB4382",
+    "key_seed": "4DA9A6F59DCF615E03AD56258554641692E02CFEE284A5D0F0D90296490475F9",
+    "metadata_key": "5B8F323279D4CC8CBE66DE149B267214",
+    "section_mic_hmac_key": "D23649C4CBA96BD6413B049C07B87D7CE18AD6E60D68F56AF270E2B1E2DB97E1",
+    "section_salt": "9FFAE095EE40CF7BAE117E7431FFA8B3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6C167B8ECC498094A6DB33906F974F4A",
+    "aes_key": "81353FC4DB19F1128CD2049615C0FA92",
+    "data_elements": [
+      {
+        "contents": "EFAA10A500DA87",
+        "de_type": 436
+      },
+      {
+        "contents": "E3144711F717FD0853",
+        "de_type": 956
+      },
+      {
+        "contents": "522B257ED92E1AE819C77DF0EA",
+        "de_type": 547
+      },
+      {
+        "contents": "A78410D4E03BAC31469139B84654CBC6BA",
+        "de_type": 483
+      },
+      {
+        "contents": "4A1F996AD64441C85400AF32BE",
+        "de_type": 549
+      }
+    ],
+    "encoded_section": "8190132204DF3E53BEDCD51A7AE8F492F566D7911000856E7A66F236E9D930C684BD59B02AD79004641A35B7962DDADF14B7669FCA7CC36C1445925D48C45771B14DDD89DC594BBAD36C95A2A042D28D19979D698BB49CBFC43FEF03C89A80F392A9143C4C5D313A999EEB63C5C53E4DB0568E33770E9D2A9EA92C6EB2EB48224CF5",
+    "identity_type": "provisioned",
+    "iv": "5D8C4A61716F2AB552C717A3EFD049F8",
+    "key_seed": "B92F88C4CF23C1798C1FCEBEB328D300930CABC7DD84B347EF1F0A57F8E44EE1",
+    "metadata_key": "46530816FD06FF7D41FF0BE5A853A6D1",
+    "section_mic_hmac_key": "ED64C3F6E9D7E11E0B9299EB0C33A6510B9AB292B01A3BE53C2D13F8D2D8F9A2",
+    "section_salt": "856E7A66F236E9D930C684BD59B02AD7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C51E8816D92BC1E03CA638712EA09A95",
+    "aes_key": "08C67FCA2B413C3C583437251B130182",
+    "data_elements": [
+      {
+        "contents": "0713D3BB05B5FBA4B840171A21AF080166CBC082",
+        "de_type": 193
+      },
+      {
+        "contents": "E2736CB03ADB4DCECB1A316AED5F331044EBE44130138CB85970",
+        "de_type": 766
+      },
+      {
+        "contents": "2EC922EA4A01CA",
+        "de_type": 582
+      },
+      {
+        "contents": "9710558A43",
+        "de_type": 480
+      },
+      {
+        "contents": "",
+        "de_type": 319
+      }
+    ],
+    "encoded_section": "8090130D8F386275A65EDFE296E7D02E4D8A80911000AC100EAD10CF49B4BFA4BFD03D22DC619002F9B057A5DFB8A47B3DC1E369CFEDF5A03E58B49395A2E8BE6952AE63CA45680309ABBBCD65D77055FCCB901A657631B0B699886718542E5FBD2ADBC7413A956D85F3BCB6921A97641C74FAEB45E7F2483A6500034788190DDC",
+    "identity_type": "trusted",
+    "iv": "A7702DC73BAD3498B5AEE515BA94D38D",
+    "key_seed": "B045094272F3A0C7248F9C2E7CD8A78491F06C05F08865B7B48418842EE56452",
+    "metadata_key": "06DA134E75557D145D8869E8858407F7",
+    "section_mic_hmac_key": "FD2E35B135B6EE46727142BCC2577ED5C53E5D0BF2E8817A05FBC8233B741EA7",
+    "section_salt": "AC100EAD10CF49B4BFA4BFD03D22DC61"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "115CE5999BD1A1729822C11BBFFA3197",
+    "aes_key": "606CD07F4B3B228E11BDD67304CFF94C",
+    "data_elements": [
+      {
+        "contents": "F51C44D19CF610828FE35CA6D313255BED137D1CA02BECC8F1",
+        "de_type": 32
+      },
+      {
+        "contents": "085D8A1FBD42DEEA5DA9960B20CED595A8A220068AEE29DF",
+        "de_type": 692
+      },
+      {
+        "contents": "30322E279AF190D06F",
+        "de_type": 329
+      },
+      {
+        "contents": "FFCBA9466A7731EF8CC5DA9642FCFA6E",
+        "de_type": 383
+      }
+    ],
+    "encoded_section": "8C90131F34C598BA9CC85C706357897958835691100078884C8469817D638BB7387AF840716E90014A5B9F3CA8FD31B906F39867912E9E4472845E72DC24EBCC0AE3BC469DE9E82F365B8C69AF4499902EB14C4F4FD2FA87C7BB5444B524C96D546A69C6374B9EEFE8EABD54FEDA65F3F0A8EE73BC2B253535B32D25675B38FCCD9EBB88D4721D36B0723A21C6",
+    "identity_type": "private",
+    "iv": "879EE00C17EE3C3B44268DA9ED727759",
+    "key_seed": "D8F2A8604FB68290CB810109695B7057A80A161AF8E2685FD099490654A82C03",
+    "metadata_key": "16D27C779AE2F1C4F21AC121F734D4CE",
+    "section_mic_hmac_key": "1B93D2DCA5350A33466639D852947667E54E09AEF3FAA193AE3677EAEBAD0635",
+    "section_salt": "78884C8469817D638BB7387AF840716E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7A2FEC84BCC7D36821CBFDA1B8AF6BDE",
+    "aes_key": "D94316EC0C1F3F5556B0A6E3EA44BAA1",
+    "data_elements": [
+      {
+        "contents": "A18233E6470943CEDD28B316DD43F92E8B658D42BD4322F7E8116B",
+        "de_type": 320
+      }
+    ],
+    "encoded_section": "559013CF23E8E383098669E7F3B37FF2FAF607911000F1ABBD27DF8BA7CC017FA7E81AA40DD3900248488C1E48B090E1679DD3AE096446392E61E2E044F2464CC4FDB5EF6EEA1F72A5607A8F90CBDDA3E320BED67D6C",
+    "identity_type": "trusted",
+    "iv": "E27184AD7419FCA23E773896AD12FDCF",
+    "key_seed": "B4C4197B892B450AE1AC96CDD612B7DAA67CF43DEA931691FCA75E067BEF9A9F",
+    "metadata_key": "0DF12C45B639A4C469417723D0599C42",
+    "section_mic_hmac_key": "87CD066A0003D6487925B00E6D3BB50ADA175AAF8FF4806A0E4A77A62D262D9C",
+    "section_salt": "F1ABBD27DF8BA7CC017FA7E81AA40DD3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6EE25ECBB7A186290EB3DE0E054CA1C9",
+    "aes_key": "5477F3FB31FF5E2ABC4EBEDFC20C837A",
+    "data_elements": [],
+    "encoded_section": "3790135229E15175751ACE1FC3D9E27815847791100012517EF20157AF7D7686300FFD93CA76900429A2EF5644E24A3812DDC9261EC4C8B0",
+    "identity_type": "provisioned",
+    "iv": "551FCE3922ECEA01BF57BF7855905D9F",
+    "key_seed": "1BA73E4554F36779EE44DE6B9105F69DFF5D0EB3A148F671A1494E9070FF0C94",
+    "metadata_key": "951796A7C33819FEB9A73F6C7AC70683",
+    "section_mic_hmac_key": "F5858FC13AB364F8F7DBA608AB127EFF8C96B885D3A4750F4E77A6E6EC206E3F",
+    "section_salt": "12517EF20157AF7D7686300FFD93CA76"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5AAD4B0F2A5F00FFB25C6289A53ADA69",
+    "aes_key": "2B69E18B00F7C55BD2A0ED3BE199F17C",
+    "data_elements": [],
+    "encoded_section": "379013B003774586CD42E7AC66F5E4E31E355F911000ECA4F513378109DFBC32212674423D2F9004AF07EFDCAA038B74D585648EE9827064",
+    "identity_type": "provisioned",
+    "iv": "B39D516DDC2723FBA1B60D0FF63DB836",
+    "key_seed": "8B69FF71E1BF629344A119B02EB326CDB7B7D3145657CECC390E2F81C1890907",
+    "metadata_key": "C74ABEDA2BE5770EBEB1DAECF4C5E7BC",
+    "section_mic_hmac_key": "0C5265739DE3730885F7C6A628C96C57851387ABEB914B75C16F8B6099CBFEEB",
+    "section_salt": "ECA4F513378109DFBC32212674423D2F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "532E9FED397C96814EEAB6E1B27D4C86",
+    "aes_key": "C45208E0024404A60F492DDB2C914191",
+    "data_elements": [],
+    "encoded_section": "3790135CB193ABAE4F297BDD49862D1F937ED49110001E90A2A86D1CA79E2F64AD39A5CA77869001526D432A5829C0283F24F39A9CA1F2D3",
+    "identity_type": "private",
+    "iv": "9CA827CC416005F5F30C3E170D482CE1",
+    "key_seed": "1F991BF25881125FE75847D4C6F85BFA6392C2F8B53F1E7FE5FA893B023224BB",
+    "metadata_key": "39CF4CD3AFD063272F5E540476861918",
+    "section_mic_hmac_key": "EF468FFCB94D5466593B9B25909D4ED49BB1F5590A66FEE2A6956EA5FB2B8426",
+    "section_salt": "1E90A2A86D1CA79E2F64AD39A5CA7786"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "20F33C7ABCB97FD1B01811347ACDDC19",
+    "aes_key": "9C75B6FE554C7B132A95FE610239A5CE",
+    "data_elements": [
+      {
+        "contents": "D9ECD7FDC3",
+        "de_type": 927
+      },
+      {
+        "contents": "C1CFCACCFA30BB3D0F84",
+        "de_type": 486
+      },
+      {
+        "contents": "CFE52999406CBAEAF0BC138DE8233B9664C10997E6F8902C1D",
+        "de_type": 282
+      },
+      {
+        "contents": "019E37A059275E31906C582B37C190F7926DD006EB4390CC",
+        "de_type": 53
+      },
+      {
+        "contents": "DB192BBBEC104BC6FD5884AF1FA1E86C4DECE0D945DF93E130",
+        "de_type": 342
+      }
+    ],
+    "encoded_section": "9E901377069C7408696D7960EA0BF71DEC6B1F911000674927D66F2947C6E6CFA19007F33A7A900263FB8DE4E5D01AD9B90E3C430689362C1FA797775FE1A5F6AA66B563AF190D6BC65F85F22AF2E337FC4B3AEB313E09E2A5F2B7583C504B37513170BC93F35C43D4CD9D02C7C5A9FCF66F83880160A769D1825AB2A1BE3BBBE69709D6649009DB70314C37D4704C7325A7C3E0D042BF8C0F6858A86F2769",
+    "identity_type": "trusted",
+    "iv": "75B00C025C3B6E74D1685D850286425A",
+    "key_seed": "D483C3C44C959801D49A5D40EA8ED53C623A1C2E4366AA22DD2CE4D2BB2AEB65",
+    "metadata_key": "B636C1D5060722295EA4D9D29D83144A",
+    "section_mic_hmac_key": "409242248BD9F7B475BC0F055BAA93A676948BE6F57989769DF739717B56313C",
+    "section_salt": "674927D66F2947C6E6CFA19007F33A7A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5FFFBB726259844316370AFED28E66D2",
+    "aes_key": "E8B7530E124B7900B5281191D89BD73F",
+    "data_elements": [
+      {
+        "contents": "5ADC8EA7781A428860082FF8D90439A6D195C7",
+        "de_type": 452
+      },
+      {
+        "contents": "0743",
+        "de_type": 582
+      },
+      {
+        "contents": "DA22170A8C",
+        "de_type": 645
+      },
+      {
+        "contents": "5D1B5ECDFE491D5171232041",
+        "de_type": 267
+      }
+    ],
+    "encoded_section": "6990138D6BAB5B944BE0BE770B03757B61DBF191100094F0DD055481AC91B3856C44C113C5229002AB5EE385FF4D8533458D5D1018B219406C7C016D3CEFD2F2D89FE06C32CA1EB5AE7E8A5954D0911C4A4293AAA0E3F88E9DF83F3EFD19EC8764E16A51B60EA20C822F",
+    "identity_type": "trusted",
+    "iv": "B673F39CCED213EB6880FEF952DA8F56",
+    "key_seed": "F78D9E077004872A3050A6A3EA50B1E70FC3C6DE9E7F49F134B0AE9BE1738A2B",
+    "metadata_key": "24085049DAFEDDDFD928D0E87A95F58B",
+    "section_mic_hmac_key": "639957A7793CF45CF598A1BAED976AB2C127212C3C2925CBC11E1570AD73B549",
+    "section_salt": "94F0DD055481AC91B3856C44C113C522"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6325640BF11B968B7C13063AB59A6F22",
+    "aes_key": "5D2197FFDEFF298C4FF9FA541DAB065C",
+    "data_elements": [
+      {
+        "contents": "F4F7C14E800989F15DEF6ADBEACFF1A1035B658234C91152C6C51C5F",
+        "de_type": 157
+      },
+      {
+        "contents": "86F2F7FE27446E08",
+        "de_type": 555
+      }
+    ],
+    "encoded_section": "6190139595DB3FD2DD731ABDD1BECA616687F7911000378134A082F77DA2BD4DBC13CD4A1C1B9001A8A5CFF56B235053651822983E68C5BD46F3B4020623A8AE59169CAEDA758AE87865319B3A8D3228CC4D04418D44F394B949B37815980338A7C1",
+    "identity_type": "private",
+    "iv": "AE588E4ED351B78564904D2E45354BF9",
+    "key_seed": "A4DED14526CF6F5F984E8900D671B9BBAD83515521A53B9D420D2A388CCAB2F3",
+    "metadata_key": "94583C4E13E8C9C9944ED50786D19345",
+    "section_mic_hmac_key": "6F320F7C56B7436AF72F9DDCF837FACABF9D4AB713268225A72BF6E4ED4D56F8",
+    "section_salt": "378134A082F77DA2BD4DBC13CD4A1C1B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5B662E491149B1B15260B320F4E01E89",
+    "aes_key": "D4D334E6C506B1E46ACAADCB94AAB75E",
+    "data_elements": [
+      {
+        "contents": "E45B42DBEA4552BDD8987DA3A9F7C474DD0B5D594704D34C",
+        "de_type": 927
+      },
+      {
+        "contents": "80",
+        "de_type": 144
+      },
+      {
+        "contents": "8C19",
+        "de_type": 612
+      },
+      {
+        "contents": "2AE92C14EC",
+        "de_type": 278
+      },
+      {
+        "contents": "5A3FB2F54F4399259685DE522D31C9E1E2A150A97F597B9DB51F",
+        "de_type": 449
+      }
+    ],
+    "encoded_section": "8090132B814D8B0438AE06E18CC62B190F0AFF9110000E7D5791602F29BE17656BADCED2A7269002C35227A826484C307A5FEAE5F5946DEA16A6512CF0C7E661C994CB23E31F0EA5A393FE3B7EE99BEEC02420C3DA7BC94C7E80CF5AA0FE0BB75BEE24632756ED3EC92CF64F9A2E7F9777403306D6995C1F32B1F7ECDC6037CB47",
+    "identity_type": "trusted",
+    "iv": "A31ECB0D9891D74FF9DDF376007CB629",
+    "key_seed": "E50CD35171C69F53BB3631558F6A92B8D202FCB93ACD6C864DE9B1FB0D8A3C1C",
+    "metadata_key": "E83B8B0FC3FCBC486C852EBEC880A253",
+    "section_mic_hmac_key": "0CBFE4AAD62203251AABE57D06C7F8785CE7A8AB924584888E4B2E91D0BEA44A",
+    "section_salt": "0E7D5791602F29BE17656BADCED2A726"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D4D3BEA3B13E0E8F2614716FB48F0D6A",
+    "aes_key": "E05199F2CB435DEF145BB7E73344E9AF",
+    "data_elements": [],
+    "encoded_section": "3790130A196A0477DCA5712C2882BF02E4D442911000508CEDD68F1A6A9D7611F0A8BD14343590044945F0B86E7D957AE20C1B6BC7E86735",
+    "identity_type": "provisioned",
+    "iv": "6C41743B8B7DB7062EC670DAF6A61798",
+    "key_seed": "C3C39B75D1D6402D67B7646996D02C1B3A74FE334497C43048D2433668AABF2A",
+    "metadata_key": "62CBAFD9D46C32E325D99A83EB7C353B",
+    "section_mic_hmac_key": "64D6C934EE6EAFE81A9AB9BD79C8374461550ECA553909391E1F60E8368E64E4",
+    "section_salt": "508CEDD68F1A6A9D7611F0A8BD143435"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "57ED0FF15D76C4099AB899F4E418420A",
+    "aes_key": "4E9CDD52C9055A07A3BC128358EFEE80",
+    "data_elements": [
+      {
+        "contents": "779B8A371B9E8BB9D0CAD88505AA1D9A1ED23036A0C6CF572A66E139A687",
+        "de_type": 215
+      },
+      {
+        "contents": "BD5F721280FC99C1B08886",
+        "de_type": 828
+      },
+      {
+        "contents": "D6",
+        "de_type": 810
+      },
+      {
+        "contents": "347A48731BFA69103A4D0F",
+        "de_type": 678
+      },
+      {
+        "contents": "FE74379D142F",
+        "de_type": 975
+      }
+    ],
+    "encoded_section": "819013DC7D6CAD65E2DA625647E9D79B415C7C9110000500D0334277EB0134622CD78688B3DA9004BF86CC7D343077E7E560156DB988B4D44DD10AE2D2A9024C20BF5DB58999156BC086F7CD85517B70C08511AEAA9172C56150F5FE5EAE80DD4629EAE66D3B02042A5E0821FF37290FBA5216EFB2C2C01B812F339EB4D240DE59D3",
+    "identity_type": "provisioned",
+    "iv": "01576839BF9354E4AC4C715763D32CAB",
+    "key_seed": "9713BD491A7DDA28161429EC8DD6A456D3A135A1E808DA30B4A55D8528776495",
+    "metadata_key": "35B0152C9416B9C96E369110D8C6CF9B",
+    "section_mic_hmac_key": "D12B6016B127A4CC62D2B1BCDE84CAF328626B19F24F3B770A07BA7E6AD9E9EB",
+    "section_salt": "0500D0334277EB0134622CD78688B3DA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B4573C31F4F975EFFC728BDAC5734826",
+    "aes_key": "71EFBBAEB4A0E65A8B25AD5D630CCF60",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 389
+      },
+      {
+        "contents": "3CB055F06072",
+        "de_type": 910
+      },
+      {
+        "contents": "B7518C446B1576FD37BF85481B",
+        "de_type": 953
+      },
+      {
+        "contents": "B6059A5CDC56",
+        "de_type": 792
+      }
+    ],
+    "encoded_section": "5C9013FB6CB6FB8FCF17D8F4B5547D9D9FBCA2911000B55F88A79A4D2308C6C58ADAF22BF1CE9001FC6689DACF7BBD836A7384B5E25B4CA444990364955921DAFAE62CBA2953A472F8D06A177D1FC116BABCC99F564BF1773D65E8D964",
+    "identity_type": "private",
+    "iv": "54C25EC2FA8AB87ED1EC10ED342FFB3C",
+    "key_seed": "47495F708FEBAF178EC2565BBCF981AE6AC35E1F8B721102A7337E061BC91935",
+    "metadata_key": "C8013164B860618F36848811670EF929",
+    "section_mic_hmac_key": "C5D4B92FA23796773094C596DAEA1B33219F2A3D7A64316765E41FD8D3E16BAA",
+    "section_salt": "B55F88A79A4D2308C6C58ADAF22BF1CE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E4B5A27A27BE52545A47985B9E7672C8",
+    "aes_key": "1CBEF7B3F2D0B8B543A8064D081887A4",
+    "data_elements": [
+      {
+        "contents": "66",
+        "de_type": 56
+      },
+      {
+        "contents": "BBD48390F886FE3524BB7CBEEEC484C3E5F8AE56D6397507C986C64B3334",
+        "de_type": 797
+      }
+    ],
+    "encoded_section": "5B90138D632E4E4CF4342FF32A48179E3F363591100066577FA1CF451210A7F51FCB91E8090F900225745619E27544AC812B4E8A914870EE4DB218008E498D777469B12F683439BEEBB15F1D438CF9A2D065D13F7464BEFE7FC78487",
+    "identity_type": "trusted",
+    "iv": "B4636AC8670D445B40129E5AC546748B",
+    "key_seed": "1119F85B101A1C2E50916D1D4EFBE165115CFA1D516BF6FF38E26AFD989AFF1C",
+    "metadata_key": "07261A673092A6796C05396F34FB979D",
+    "section_mic_hmac_key": "64CDA74FAE14EA9A68520991817CEB209D3842D1507C55E2398618E02F778686",
+    "section_salt": "66577FA1CF451210A7F51FCB91E8090F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9B384D5C760F4D838C96CB5C1E9BB241",
+    "aes_key": "1836C7B82C2B6EA947D8E012F116C09F",
+    "data_elements": [
+      {
+        "contents": "D9976568115CB8BF83FCC86839E7FA5E6CC215BE1BB1",
+        "de_type": 358
+      },
+      {
+        "contents": "AD587B8B83B854A5F43E3A876649E31E",
+        "de_type": 27
+      }
+    ],
+    "encoded_section": "629013D20E8E8CB6A740C268055645992CD564911000237B1902E39CD0E962BFDC3C0CB8F2EE900260224FA07FFC1C8496F1B76A4206C6909D5F802F2B79F688223D656DEC755A01F5E27362E186B5CAE06E37E3AB1D0B3B1293BE67650D0F4377D7DB",
+    "identity_type": "trusted",
+    "iv": "2FA2BA9E498FD9F7357D16A77DAE370B",
+    "key_seed": "602DE291FD9C7C12925034FABFECD98118C38F348372FD534786FFCAFF706400",
+    "metadata_key": "346B99848B2B463F6693F235D874805B",
+    "section_mic_hmac_key": "52D562B21447516C31566EB4C0C68A98C71630B24304B428EAC3BABE398A7AAA",
+    "section_salt": "237B1902E39CD0E962BFDC3C0CB8F2EE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7E91FF05B49BE21AFC9F91A460ABA336",
+    "aes_key": "B67FC30117CCE626887A7EE662652CD2",
+    "data_elements": [
+      {
+        "contents": "D69E2C5653B9BAAFBC9D5C3EBC58D3",
+        "de_type": 627
+      },
+      {
+        "contents": "EA28DC05603AD928B2826DCA",
+        "de_type": 452
+      },
+      {
+        "contents": "9501D6E4E075570F383542CF6E8AF8FC",
+        "de_type": 126
+      },
+      {
+        "contents": "930EECF1",
+        "de_type": 833
+      }
+    ],
+    "encoded_section": "719013234A6B8D05D901CAA3BB8EC5EAAAB230911000DB399806753D8B6045C73A755B71774B9001DCA87E9CA2A023437557F2F0D4B9A5B58AB3D608D4498CC71DB3547425858CA2D7E5F1BB29387BE5FE9D3272768A65E1765AF706FA43BE09CA8B311B2B7C8B2125E7C8A4B52D1025AD5C",
+    "identity_type": "private",
+    "iv": "9AC108D06B463F055D49A91E14F2C8A3",
+    "key_seed": "A3A8F349F07BB0F7447F51F661AF542D6904BFC6087AF67511A645FE8FCE675C",
+    "metadata_key": "79B2212A99BB2CD43B34E2E1CA322B62",
+    "section_mic_hmac_key": "9E7F2E3CDC198279843A86A60FF128B9F349C11E48B67EDC3158A9008C9C36F1",
+    "section_salt": "DB399806753D8B6045C73A755B71774B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "26582E4CE5C251427F923630006AFCEE",
+    "aes_key": "AEDEBC8CF8F3BC8DE853731DCA9E4DC9",
+    "data_elements": [
+      {
+        "contents": "DD433F55AF726FD4794FA327246F6F2132E92E62D21D67A321B864",
+        "de_type": 846
+      },
+      {
+        "contents": "D122B1144A43EFF0EB",
+        "de_type": 759
+      },
+      {
+        "contents": "7E078FD3",
+        "de_type": 404
+      },
+      {
+        "contents": "61",
+        "de_type": 461
+      }
+    ],
+    "encoded_section": "6C9013D15EEB0F499029BD0116FEA1D3408043911000BF71BA034AAB72D7B4D362AAB499C78790029776023BBD26F7EAFC7B7928DD679D540975CEC90BD83475280C3DA16D23ECB642CB67456C25FA0F51560628DDED9F2D6662FFBDB54D11E57405825F77E5A34396BB7DF1A0",
+    "identity_type": "trusted",
+    "iv": "8040F7832AEB66320A2D61CB079320D8",
+    "key_seed": "118711EA1D5E88DECC48D0139846D57F64A7C1B61315B1A287310948F8A7227A",
+    "metadata_key": "51759DA981D7A83ABD931FBECED991C5",
+    "section_mic_hmac_key": "1F08673E88B1D86CD3E152BF6C9E31A06D2CC05F57F9C877D03809FDA407518D",
+    "section_salt": "BF71BA034AAB72D7B4D362AAB499C787"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6E2C7B1C5E818B1CEB5F7DE8FC9E5755",
+    "aes_key": "DFEAFCEE8B8EE1F96CA60E271B6725F8",
+    "data_elements": [
+      {
+        "contents": "113C3E2039C4E1C7418BA6BB55FA8BFA",
+        "de_type": 366
+      },
+      {
+        "contents": "3AD067F40A",
+        "de_type": 823
+      },
+      {
+        "contents": "811535BFE2A541B0961314CECD50D59374E1B30D08DC",
+        "de_type": 763
+      },
+      {
+        "contents": "16FB893BF2AFEA6DFC5146AD63BE92F84C5D2D88607E46A228BB",
+        "de_type": 391
+      },
+      {
+        "contents": "FBBC7E70BCE1D5B1EB183D3B9E62FF8E14065D94930390FF",
+        "de_type": 382
+      }
+    ],
+    "encoded_section": "A3901332173E24B194596D0A48EED7B9F048BF911000EABEA0196320B7B9C0A57A2E416746029001F85327E3300056CC3C0C0D434A64ADFEB159198EF001E2C778F56DBC1EAF9DB00C725E6688EE8812EB5DAAA339F4A9FEC3927310EC508FCA85C5D611C42DFBE9323EAA48FF38702EC1073C9C13B33BC2EB1BA89E3F233C1A326155F7B5745D05AD16976725672873F40CB030AD916DFF0A42EC4B84F5394FBEA97808",
+    "identity_type": "private",
+    "iv": "A9717CD38A876CE4107BD424D8FBA366",
+    "key_seed": "1148504329B3B33FA44E2A221DFF6CBBE1CD4A52248B6A09A8ADCD3012750977",
+    "metadata_key": "27856505C84E581AA1A6C46C6FA516F0",
+    "section_mic_hmac_key": "DDE977E035CC76BBFA8A642C1F143CAACE972E3216BA65A7D75E984A14E5ED13",
+    "section_salt": "EABEA0196320B7B9C0A57A2E41674602"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9FBFBFBF8BB497AB6444B41A2B58A6AB",
+    "aes_key": "862A0A31E0D23BF6CC4E9DD3D885718B",
+    "data_elements": [
+      {
+        "contents": "3477BE93CA3B096D960FBE16F63BA456089D872D76F3CD00",
+        "de_type": 767
+      },
+      {
+        "contents": "3D9B50F6ECB3F59931BB2C31A67CB18D",
+        "de_type": 681
+      }
+    ],
+    "encoded_section": "65901361778F70E6B5332529106BC5D0D796CF911000CAD36D8BE2990F1DD1BE5A8CA36725939002AE6B6909552DF36AFCC86E4D91C1FAF7ED62212D53C2B7F84E640B3E5760A41BD98F8A544F830A97595B8386EB3A27AE2CC178A5EE103CC275D404DA6417",
+    "identity_type": "trusted",
+    "iv": "783403F6FE6BA30DA746FA2708C4D692",
+    "key_seed": "3942CF4816E8B430A03E14D2F94108C0A770891FB4E99ACD3D277501465BA68D",
+    "metadata_key": "C78FBDDCEBF1A5384BF7ABC8064377D3",
+    "section_mic_hmac_key": "94053E6382CEC871376151CBB9694C564ED767E1EEE3239C941D914ABCE92CE3",
+    "section_salt": "CAD36D8BE2990F1DD1BE5A8CA3672593"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "55FF1F0BE15C17461B43BAB93500700A",
+    "aes_key": "966B7CD205F081281E6E93C54EEDF15D",
+    "data_elements": [
+      {
+        "contents": "D13D37512C791FB5ED13EA221EBA6950B0",
+        "de_type": 301
+      },
+      {
+        "contents": "6244AF57E139117455782A325E7E3D1C910FF0EFDFF03A",
+        "de_type": 12
+      },
+      {
+        "contents": "0E2D671308A90AD27AE72BD2C375CD2E1E54926A6DCB",
+        "de_type": 571
+      }
+    ],
+    "encoded_section": "7D9013EF0E9E3112F9F8052BFCD5095F6DA7739110008EF37B9F957E72577A88E3E6616B1F0B90025B8420F2A9242BCAFC847C0C4D389501339DF6BFA0C91B4BD11343632BB679D50A288118A92B0FD09C57E75E13FA0DAA5C2F77D107185487F1F22CFC2F9B664D30F6D386975C72B046FA237531D0D5AAADF79593B9AE",
+    "identity_type": "trusted",
+    "iv": "1A624B59ECF332000562C8474140249C",
+    "key_seed": "5289A92DAA075E761F56E835F2DDC562DB148FE624E5C6FE08FA89CF5FCC9425",
+    "metadata_key": "F86972B236221A5B1DB9EDA61606B299",
+    "section_mic_hmac_key": "0F75B7C9F4CEBCB3D3CA5114EA5BBEF6A1065CD11CF1A401A7E3D6C2CEE85961",
+    "section_salt": "8EF37B9F957E72577A88E3E6616B1F0B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "257A8180A470B26312484B49DB427FBF",
+    "aes_key": "1A6FCC5E29E7D4BAF2ADE0428242C2EF",
+    "data_elements": [
+      {
+        "contents": "FA0C8C637E390F8123345F41392EF8CE",
+        "de_type": 556
+      }
+    ],
+    "encoded_section": "4A9013E976A9B1B377C5AE53AB1396521D337D911000CD1525ED218139EAFF89E47A20B34D4790044DE380677DEA81DAEABD099BF7E04531DF12F3E9C7A9C1B5CEB919C9EF3567915FB74F",
+    "identity_type": "provisioned",
+    "iv": "2AEF9979665B18EA76574CF455B20335",
+    "key_seed": "27AB5D93445CB4CEE55B3405325558636F198AED90C8E51836080F087A2E842A",
+    "metadata_key": "7C1A8511E3B9200C13C78F9EA4E57939",
+    "section_mic_hmac_key": "B1C4A104A63A1BA805D20818384EB39B6A440171D8C354424EAB9B6B7502DE77",
+    "section_salt": "CD1525ED218139EAFF89E47A20B34D47"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8D49077EA04B6722167FF9DC3E5A5C6F",
+    "aes_key": "1D3642C5B0338782485683BC113AD3C7",
+    "data_elements": [
+      {
+        "contents": "0761DB68EB536A1ED11FF6EE1A2BA0B9859AC5DC206C",
+        "de_type": 490
+      },
+      {
+        "contents": "64DACC73432881300198",
+        "de_type": 69
+      },
+      {
+        "contents": "A2074C1932DACCD81D3DBA",
+        "de_type": 213
+      },
+      {
+        "contents": "E26C55BE99DFAE8088BE1A01890F801D9E382C5419E6EE",
+        "de_type": 118
+      },
+      {
+        "contents": "3D9D9009F5F0B28BAED466EF285DC30B93",
+        "de_type": 969
+      }
+    ],
+    "encoded_section": "9790133210E2BD4D3A353337D7ADF84E63FD129110003B8C8A598DE9C86BDF539187043684DA900206D1B6437D8BDF3B6EA83CFF14D82D1241F0019EDF8FD5F1710CA0A9AE469B7F2EEDF319626F11376E797E91FA97E46F82B54406D5C1BB3032165223FBBE1DEB996FCC3C9036B8CA441FFAFE8846277F3FF098FFACB231D8DA52C7997AC3B2CCF65A875747EB0CDD02599308A56C5B5B",
+    "identity_type": "trusted",
+    "iv": "8D7F69E96E0B0FDF5711FC3B55A01715",
+    "key_seed": "AEF224AF0FB93E5306BE251CA4A2F387E5A5CC6630605B0A3E0C56D7078B679A",
+    "metadata_key": "7DCC60F2F58A401AAA957CF76649C84D",
+    "section_mic_hmac_key": "32E6F4E7934A34A459D136652114A9C0BD0A23AA4DDE36B51FDBF59C9A9AD9FB",
+    "section_salt": "3B8C8A598DE9C86BDF539187043684DA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4E4ADE9BB0F5C4629AEA9E3F16EF9601",
+    "aes_key": "95CB67B31D524CCC83FE954FE9D4E2BB",
+    "data_elements": [
+      {
+        "contents": "A1BA",
+        "de_type": 870
+      }
+    ],
+    "encoded_section": "3C9013A8A3FE675DFAFB72CFC76C7833A5F9DE911000173AC3E1BA7DD39FA785C6E60BAED8C69002F3C038ED49854C212866A5AA075B6ABEAD7DFE458A",
+    "identity_type": "trusted",
+    "iv": "9C68198A56ECFD51E7F8B770EBC315D0",
+    "key_seed": "5F5ACCD7667D18B16F2F816046CACEA387775372D3C2CA44290C17F083B0D8AD",
+    "metadata_key": "D6F99ABC33D92064B46A910FCA2C4036",
+    "section_mic_hmac_key": "3E1FF3C4491442BC4C092D3DDCEDF840451EBE6C3D3A438C79B079AE4241BD84",
+    "section_salt": "173AC3E1BA7DD39FA785C6E60BAED8C6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "824423E2D4F67BECC3EF225445DB8976",
+    "aes_key": "CF185400D6689B037B238F61B0F8159B",
+    "data_elements": [
+      {
+        "contents": "3C304F6A2D4E030A1EE524588D6B890A278EA715D7E72DA1F6AC41",
+        "de_type": 939
+      },
+      {
+        "contents": "EC9DC0C94D",
+        "de_type": 294
+      },
+      {
+        "contents": "291621E7F7496B",
+        "de_type": 704
+      }
+    ],
+    "encoded_section": "679013E3EBF925B22D0BD4B57CA802DE30BD10911000433A9544240B8BEFDA531A895B5FC46D900266034C3D13145C66E02477FE8F718D1C475176016D59CED1DEDEEE6415C87933D3A6D137BD15079779E7CB0B172C0563C90C9A95ED56E0B171AA08E2AEF81C58",
+    "identity_type": "trusted",
+    "iv": "2569CB0445A6BF7291D567B280EC7903",
+    "key_seed": "81E738D2BF50C258C1144AA9371826CD04F166B110AEE21F696D0F776B35BAEA",
+    "metadata_key": "094A54CF97E267D0FDBC858C3CB5EAF7",
+    "section_mic_hmac_key": "8C3E857F64C351326BB726B05274A8645176C8C8678C82E9190604DAC1841CEA",
+    "section_salt": "433A9544240B8BEFDA531A895B5FC46D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BC9A5197755D9A5679DCC87B79E1C9CA",
+    "aes_key": "374CF6450374370DD377AB35C40FE17C",
+    "data_elements": [
+      {
+        "contents": "017B0CD8B639ED915D35886531E1",
+        "de_type": 58
+      },
+      {
+        "contents": "F66ECBCA7F402517158769BDD4E7D50CEBC2DF10F32E41911B510F",
+        "de_type": 856
+      }
+    ],
+    "encoded_section": "65901307620D1E9A1EE0D4752BAF1CE59141EF911000BAF72D3D61009CA97C8FDD9CCBEF10ED9001E882E442913D85A2CC21169B9257EDCEC72349678006BF72A6C7FD18C85BBCF02E9843BC4ACE539C23AE19D1A79F63EC8886B34A7A32091C8873921F61BE",
+    "identity_type": "private",
+    "iv": "B5DB29371481C403B0349A10A7E33855",
+    "key_seed": "431919386DE84007C979116DF20230D0A60088C81C4CCE8491FD0CD5EF0C07E7",
+    "metadata_key": "78F91A3FC436CE326988B3C55EA9B5E7",
+    "section_mic_hmac_key": "B9CF0EFBF1F1F6CD77E6F8314FCB3DADFF55DE06B6B684E8739DD6B793BF7442",
+    "section_salt": "BAF72D3D61009CA97C8FDD9CCBEF10ED"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "33F99E993A3416EC161F0044EC71B42F",
+    "aes_key": "BDA1D8D59CFC0C0E3C0232944E5A82DA",
+    "data_elements": [
+      {
+        "contents": "C0F5E75C8B80C62DA67A5834B00A",
+        "de_type": 720
+      },
+      {
+        "contents": "894B67C2BF3458",
+        "de_type": 977
+      }
+    ],
+    "encoded_section": "5290139B54D6302AB388F8B952001F3F233723911000DA579BCFC70266C882B420E1B122710D90018D8C89DA498ACF2DDD060B59D48A85249435080F054A5479432EAFD1089FCEFF46465BB7A63332561CFE19",
+    "identity_type": "private",
+    "iv": "F4DA1B762699DECE3FBEB755A3C8F7DC",
+    "key_seed": "E615C6F1F6494D3CB1EFEDB1CA97EDD096997DDDB0F840FB4B8A9A9AD8FF68CC",
+    "metadata_key": "9CCB7E17B8E4F311F5217BEE076FE193",
+    "section_mic_hmac_key": "08A3425953011FB61CDF4F73BFDF0FAFD337C6192847B028580392CA1920BDE3",
+    "section_salt": "DA579BCFC70266C882B420E1B122710D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4F729B7E8A3DA79951DB474393B34C05",
+    "aes_key": "D4CFDC392B5398DA8EFF9761AC883BED",
+    "data_elements": [
+      {
+        "contents": "7B3D33709DE248C8C6E55A17681634BBD51B9AD16CB70AFE732D434F73",
+        "de_type": 950
+      },
+      {
+        "contents": "572C1E1284C61CD3191CA7FD48278E69A871061C",
+        "de_type": 519
+      },
+      {
+        "contents": "F26F1FFF732399534BB9",
+        "de_type": 462
+      },
+      {
+        "contents": "25D3DA009DF358AA2B1502B102",
+        "de_type": 760
+      },
+      {
+        "contents": "696815F62069A011E27DB2B6",
+        "de_type": 116
+      }
+    ],
+    "encoded_section": "9990133BA7F84BD37A8ECFF8991F41816603D9911000A24D83B5B489290033B0FB399D50278C90048830A62074CC528A053D57B871559B428C52947FE6AC380E6C409A9FE4CB2C778D396C9EB33D284ADC7AADB7FA26F64AD1E77EF8700C7D5011EB4188B8EB69C6AB8B247A3A408C296E0E9505DED7DC9B6B81B6AE18BDFE328F76BF28194F1C9FAACEA61A1305D8853B62E00E92B3B5DA906B",
+    "identity_type": "provisioned",
+    "iv": "27D31B8F040B8147F00DBE3EDA8DEB3A",
+    "key_seed": "E4ECAB1DF51BDE39E140E09E592023B0EBB70D51EF925AE06F55BAF1F232F965",
+    "metadata_key": "A74B0FB29ACAF1F6DCBF1D4B80D05D7C",
+    "section_mic_hmac_key": "064478CDA8ADA4303610AA070F13AB89C7FEFA11044EB17C620B4843A1D2B185",
+    "section_salt": "A24D83B5B489290033B0FB399D50278C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "532A9B509151D3891A89EC8122177A00",
+    "aes_key": "65CA1FBDA266B5CC1F687F05BCFFD91E",
+    "data_elements": [
+      {
+        "contents": "28CAF4164DF090AF",
+        "de_type": 267
+      },
+      {
+        "contents": "2BC0D162D9A11B1592505DD0A88C222E3A05F584",
+        "de_type": 344
+      },
+      {
+        "contents": "5F0BE74A54E9C769E93876",
+        "de_type": 663
+      }
+    ],
+    "encoded_section": "679013D6A5733B956C24C026EB4CD77CD241FF911000BA40F9A069E1D2864028AE47BC7FBF5790021A2F29AF45309E075686A17B858A7453DE7F746B1A9AA04C68901F0BAEE8474D84BC96034338542D2FCA389DB128BEC31B187D96C2A7BA001B53B5F3E4B058B9",
+    "identity_type": "trusted",
+    "iv": "3B7CD74E54AFBF2903999BDAB75C4E77",
+    "key_seed": "65A6D38463734CF87E73D55D9695658B0C08ED9F35838884F08DE839C224AD9D",
+    "metadata_key": "DDE0C29AAF70BC5299D0945DFDB2A320",
+    "section_mic_hmac_key": "5E63974EFE6650031F0244E69A2533ACCEDDD75479D939E5DCCDFE355FFA52D0",
+    "section_salt": "BA40F9A069E1D2864028AE47BC7FBF57"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D5487414BA08F69CE9D13560766378D9",
+    "aes_key": "4597450D328A4398969C6984A4812726",
+    "data_elements": [
+      {
+        "contents": "5594877DB8046C",
+        "de_type": 749
+      },
+      {
+        "contents": "D49D19549FA675ECB739E031",
+        "de_type": 1
+      }
+    ],
+    "encoded_section": "4F9013F87D55A4AA36BD81DEB11033F76E60A9911000F948EAC4A61D540FAF5BF958C0AA15029004969211CDDBF8AE4D251A89A69378E93D41D2C6E1FAA39580C4606EE81B99B2F7146566D5F3A2D187",
+    "identity_type": "provisioned",
+    "iv": "7251B83564C131AEE0ED8E7D4B2657B3",
+    "key_seed": "32055A58CFD37AC838F8978ABEDCC2A30BC8752D9985DC4F24AA8010B4855B06",
+    "metadata_key": "1C85CA810627CA299F3E7C5D8F2CD904",
+    "section_mic_hmac_key": "20D173254B6DF487603D339E1BB394DBE0BBF19F4680F2FD3DD3EB3E389215EB",
+    "section_salt": "F948EAC4A61D540FAF5BF958C0AA1502"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7443AED9489E3C74C778C996DE9B67C3",
+    "aes_key": "D131442579CCEA76DA56F4E5171F09A6",
+    "data_elements": [
+      {
+        "contents": "C879C6B33BAB741D400BB9A06533672BAC016E",
+        "de_type": 367
+      },
+      {
+        "contents": "5ED5",
+        "de_type": 783
+      },
+      {
+        "contents": "0C31C60E1A246200DF872DD766E501",
+        "de_type": 288
+      },
+      {
+        "contents": "38B9BAACCDD2C285CE1DD7D4C101E8FAF4DECE26190B08E1942D71D30434",
+        "de_type": 835
+      }
+    ],
+    "encoded_section": "859013856E63F667D52C056607CD1EC8638385911000E3196F7725B52982CA91690DCCAF3D15900132BC6722DBC8E95809378C5569E0FBBE845D96271B645007A3D4A698F25B8A816924D66453873D49313DDFDDD5158FF1A9C0318C0EF5CC5604A58C9E6EA95E2DFAFD40939E4DA0BC33B5DBB471A83773D6E1CB927E79C0509447CB9291D2",
+    "identity_type": "private",
+    "iv": "6EF81828124A99A5798762BDCD4F0CA7",
+    "key_seed": "01281A1DCC6627FB7336A190C0E316C0225EEBEB3DAFD6E79DF86BE811EB5B1F",
+    "metadata_key": "5DB0440215FE4B0B403027E82DD05BF1",
+    "section_mic_hmac_key": "FD0BCBD301B26D355985422BC65A0414C2FF451AC7837EE31DDFCE060E6F76C0",
+    "section_salt": "E3196F7725B52982CA91690DCCAF3D15"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "01CDD6964C7DCD733D0365A455354A94",
+    "aes_key": "F9EB800C6E2AB6E3457E3DADDA4E14EC",
+    "data_elements": [
+      {
+        "contents": "05013630B53FA97478A6B3B4E9617A2B35C4200EA5D1B29D86184A",
+        "de_type": 161
+      },
+      {
+        "contents": "591FB0F89D67D7B2FF2FB27D6B8C",
+        "de_type": 821
+      }
+    ],
+    "encoded_section": "66901370C473297041FA4A4260B3995CDF0851911000BB3A62B2E753295B664F3C1B06172B33900186CB039689830CF401848577471BF720CB31EE848CA200D7705C87C3EEBEF421399B027060C18731B7FF977CCB90406E7BFDF0A4D389D6EFD11F426B89B35E",
+    "identity_type": "private",
+    "iv": "2195E6D71AC6C2AE69D6DC7E7440FCDE",
+    "key_seed": "B9AE3932FF811CC014314D266D048E145DE60956DA53BB98D96CBBA136314389",
+    "metadata_key": "F43D7EDF61357AC7B512D6502D5F1EC7",
+    "section_mic_hmac_key": "5685062CCF0CF66F8EC8F0601442AE4FF9CB028F7F693235555A7918B83CDC44",
+    "section_salt": "BB3A62B2E753295B664F3C1B06172B33"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "201E65F2C73E6749E104294C5B80BD0A",
+    "aes_key": "9FF2BAEB97F201967B41A9001556C782",
+    "data_elements": [
+      {
+        "contents": "42AD133E97FD6C468A8BB259F4FC05",
+        "de_type": 673
+      },
+      {
+        "contents": "D7B8495F3785063C4A4B988EEB3804CC5E7040",
+        "de_type": 973
+      },
+      {
+        "contents": "FA600360B5B21558266D62",
+        "de_type": 30
+      },
+      {
+        "contents": "6E90096C876401A20FD96E0A307C57C08893C533C3013A894380ACCFAA",
+        "de_type": 176
+      }
+    ],
+    "encoded_section": "8C90132F63EC2519B043C70FF4BC0AEA11B040911000B950743AFE9EA5BD4C03AAEDD3D0736C90044510CBC7D4252D98D4AD42CBFDF678C7D2A145E3EBF06D19FD695399D65444D16D7208A4E71B6CD26FAB2990E0A1F7308F5E2B73461BB7D81BD86EF287D1DCD3467F846DB7B9231F17C535082924817941954F82B95791BFEF9530BEC4D3177495EA68B59A",
+    "identity_type": "provisioned",
+    "iv": "3A32A1543E3241B3C6C7D7C40430B793",
+    "key_seed": "8E5C4D3AC2D07C2092CFE2D34E54C63A572CD8187316161E3DBC78AD90F8353B",
+    "metadata_key": "6389D90BE57C99D0147423C3088C8433",
+    "section_mic_hmac_key": "421BC7BAC32D064027C7D3A5609CDC742FE9988282040A0DDF07BA67FED68DBE",
+    "section_salt": "B950743AFE9EA5BD4C03AAEDD3D0736C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BF4149101EBD062FD66BB8A15D8D97C4",
+    "aes_key": "D25E758A7A3B45C004D6CC5D04BA496E",
+    "data_elements": [
+      {
+        "contents": "6E73EAB3E73F8231F2E9985E31B82C1DE362F26327FF355E45",
+        "de_type": 457
+      },
+      {
+        "contents": "173120937001D3979F203D7008E83A2452",
+        "de_type": 115
+      },
+      {
+        "contents": "D857E0E0C4FD3A32A4167DE23D9F4B67",
+        "de_type": 989
+      }
+    ],
+    "encoded_section": "7990130DDE44464CAA38BDE84281442900A8509110005ADFF0C03105B2B399A18E9B17168E6D9004AE5A46E81D5F0C9569137015FDEA89BB572AC008302F09D2AE7BB332431A38B0034756E35370BB6F6408594F8CF8898565D4C7C985124484911ADAB72BFF3DA57A6D37618AD5EDB2093AF1C05C186AC624F3",
+    "identity_type": "provisioned",
+    "iv": "22ADBBC7329D0E519D5F94A63E763E74",
+    "key_seed": "FAF2516570FE1256279CD47301C50DF52C2327E6DD7A5653AC6231CA6D788B35",
+    "metadata_key": "350488F862C7604DDFA0272A3D21B786",
+    "section_mic_hmac_key": "D2824640C9C9593142EB2CFA6E58AD8E4B6A27F97422A429DAC36D0FF98DD312",
+    "section_salt": "5ADFF0C03105B2B399A18E9B17168E6D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3DC3253CAA257609187D246F31331F3A",
+    "aes_key": "73A354EF72BCC07FC9473B64843E5669",
+    "data_elements": [
+      {
+        "contents": "9835B7634A82F3DFE1EB3B0D25EACF27B111",
+        "de_type": 786
+      },
+      {
+        "contents": "AE349EDFD372502D738B6CE186BD30A24BB77E",
+        "de_type": 462
+      },
+      {
+        "contents": "27A1F50AB7CCEB9B0D69DE538604F8957E44EB05D27608",
+        "de_type": 570
+      },
+      {
+        "contents": "FF7EBE",
+        "de_type": 960
+      }
+    ],
+    "encoded_section": "82901331D537AAB3FF00D04936F0A31A2FD4499110006D7E10C60B7F564BD819EEF42810D82290015B0B2252207FC9225CFC1A3E91FA6BCEC5EE55CBC4B9D4CE2C809C666602339E88B12F6A145C89C06C744499988D39A8CF69A2C73B3625C54DD58A74DAC3511558EA11A36ACF302DB6FBC1091E0018672C1299D834A56FE53E6562",
+    "identity_type": "private",
+    "iv": "82F350EB514C88202688646DEADC2AE5",
+    "key_seed": "B7846E30DE6251075FFE9DFF3EF493655033CE4DA3721204249FDAC0FEA81EE4",
+    "metadata_key": "D6848E0588A7653DBB03F88A3984F6FA",
+    "section_mic_hmac_key": "EA643D83A79705A66FE8DDBD3ECCBAF88E3C1F80B68C2C406216F65CD1A232B8",
+    "section_salt": "6D7E10C60B7F564BD819EEF42810D822"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E31F9F8EB3513BDFB44EF96AA620AAFB",
+    "aes_key": "4258A9B2525ECF4A5E58E1C2A9063DD5",
+    "data_elements": [
+      {
+        "contents": "ADF8FCECA7E191B3517BD0CED3",
+        "de_type": 968
+      },
+      {
+        "contents": "B87EF036921C2A821A7F1870DE5322CB54C78317881EBC0464EA4CA53C",
+        "de_type": 932
+      },
+      {
+        "contents": "EB",
+        "de_type": 660
+      }
+    ],
+    "encoded_section": "6B9013F16715F33E9D6F1CB228C7980AEDBF909110009EF4C8B8957C9963F83740019009F8CB9004BA838E0DF9D06746AE2BE8D725EA825AEA40D89326B71B94F0182B2F1187359CA49DE5B68FEB2F489617FBD98183BD84D2A015061EE9D1586BE943BB3AF7631C2BFFEED3",
+    "identity_type": "provisioned",
+    "iv": "E4C0765EE932EC49F352EE800E95BF09",
+    "key_seed": "39F40C082855D864F9EAD4D2E01AABDCFB3AEEA2D6E3CF8BCB5319EA1AAE1C5B",
+    "metadata_key": "BD48F853813C1365B9D7E7B62FF934B5",
+    "section_mic_hmac_key": "9FC866D3FA1D25D6A429BA6E8D8BC12C64860E5FBFA2995B6F5C27C3D8C7B940",
+    "section_salt": "9EF4C8B8957C9963F83740019009F8CB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BCF433EB76C6DC46D6E21B55EF890A62",
+    "aes_key": "4E79EBA2284EEFAF313F7ED5BCA05ABA",
+    "data_elements": [
+      {
+        "contents": "D15571FE1145DD2C7490910BDD0C",
+        "de_type": 910
+      },
+      {
+        "contents": "170565A8A4",
+        "de_type": 762
+      }
+    ],
+    "encoded_section": "509013C3275F9959C9B6B3984A4D9D7ADBF846911000FF62C0D98902FFC817A5262C7AAEFF34900297B89286BBE1563519BD6A4D344DA0D02A56227C8F15BD7419D3191EE89E07DEDAAEA2C80F44A3BCAC",
+    "identity_type": "trusted",
+    "iv": "337A5A9380E964FA6BC47A318FCC34D3",
+    "key_seed": "E7166D09CDE23D2758F900FE5256262B4E9854C004C565E86240856C6C9C5936",
+    "metadata_key": "7C7DF4DDE672B397105EDFC764E8E659",
+    "section_mic_hmac_key": "2DA615C9E80E2528B13F1EC95860BA8BFCE20D5BB09B3B60FA9CC4429AE7B58F",
+    "section_salt": "FF62C0D98902FFC817A5262C7AAEFF34"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "944EE800BE99462E7D2CD5B33FD5E63D",
+    "aes_key": "567FDB0D6E7E46FA89779F09423DAAB4",
+    "data_elements": [
+      {
+        "contents": "BDE03470416E865C3BABD4",
+        "de_type": 462
+      },
+      {
+        "contents": "D6CCF4C7C2F63DCC143C3D9DE7F43227D61E670D42C8B68180257EB370",
+        "de_type": 128
+      },
+      {
+        "contents": "20C72E3A955F310EB699",
+        "de_type": 101
+      }
+    ],
+    "encoded_section": "71901353E7C27131F33499622E7CE6CF74E3A391100046B0B64F499BC8A30778C7EE5E5D53C890045B77D7B11E140D541F75ED8F022F45EE22DF1E033AB90EFB89C5FA7EFE75869168A17A3E5923DFDEF8E94BD2714B039A98FFF4C834E4ED222C88CD29501B34BBD59E294039D5D8AAC305",
+    "identity_type": "provisioned",
+    "iv": "429662A647C2A5C874388D09ECBD3863",
+    "key_seed": "B08E79ED71A776EC7A12D208D40263839BCA251400D223DD604FB46006B16016",
+    "metadata_key": "3BC1E5BA014BDC2F3E86557B27439B42",
+    "section_mic_hmac_key": "3C3A1354B81E8F4BF020D00025F63B060526C77F98F41EE759A002AB5E80BAC0",
+    "section_salt": "46B0B64F499BC8A30778C7EE5E5D53C8"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "40C50798CB6B90E84B28C2DA92DEFE6A",
+    "aes_key": "E9EA2C7ADF7FFD2FF4AD9FE602B1FC1A",
+    "data_elements": [
+      {
+        "contents": "B8C8CDEE",
+        "de_type": 793
+      },
+      {
+        "contents": "9A",
+        "de_type": 749
+      },
+      {
+        "contents": "E449D3660409413C63",
+        "de_type": 588
+      },
+      {
+        "contents": "BF5F66ED2CDF72FE206A9E",
+        "de_type": 52
+      },
+      {
+        "contents": "EC62382023B21EA450983368754FE9B2AE",
+        "de_type": 39
+      }
+    ],
+    "encoded_section": "6E9013C9617663F4A258ECAC1D10242CE9C20491100044AC3079A59D58FE95ACACC78E24D4CD90015F59D0C643A5B519A0B0AA437E113BA30E055830AA3D8DFDC8B0CE7BC4F01FFC4472BD93362308715535B643DC58C7C9288EED97CA0687EBC5AF4C2DD4E48464B7974101F424E7",
+    "identity_type": "private",
+    "iv": "0E0F84344052E7671CC153002EE1CBD9",
+    "key_seed": "15F230069139FF86FBC71850F7AA9275ED0BA1A471AFDD4F6F4F32718FC180C1",
+    "metadata_key": "99FDD5669D2B0D5F466C202F80898CFA",
+    "section_mic_hmac_key": "F933F36F11D6751204A7D4AA5D00F6D930CA7947DEDFA8E588AE32CDC50355FA",
+    "section_salt": "44AC3079A59D58FE95ACACC78E24D4CD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C39D831B39DADA8A4D2FDE8CADD7AD5A",
+    "aes_key": "40777A255D48F7182CE23A787B7C5765",
+    "data_elements": [],
+    "encoded_section": "379013F6D0187446372B4CEA0E67575D4EB9E09110001ABDA9EC38BF3FF2C4E6CEA7CB296FAB90021EB5EB4EE1AC52FA36C007F242C903B1",
+    "identity_type": "trusted",
+    "iv": "8BF471907B22592267F1C653662E40CB",
+    "key_seed": "630FE25E7432AC0D3A4DF3B2FD196CA8B774674B7F65CBC1B7EC8C680EDC88DE",
+    "metadata_key": "CA7D44E7F05D3FE953991E5E2F4F65E6",
+    "section_mic_hmac_key": "3EE2C708429DF966A211FEAEB99AC02D4B4F88A1AA6D1B3350E0E72D6916472F",
+    "section_salt": "1ABDA9EC38BF3FF2C4E6CEA7CB296FAB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "97552E387E6AE7F19813273C95BC98DD",
+    "aes_key": "C6F2E67244DF14B25370D81999B3B703",
+    "data_elements": [
+      {
+        "contents": "48294D8737F6689CA1224806F2BE96746AA3F7E9",
+        "de_type": 281
+      },
+      {
+        "contents": "046A03298AC6CC74C9875F01C585EBFA285FAEE43330",
+        "de_type": 662
+      },
+      {
+        "contents": "5772009914B0F7D03D99EF3848500E5CE2CF1BB8967A4802489DB999",
+        "de_type": 294
+      }
+    ],
+    "encoded_section": "86901375877260F8680F64A523EAEACB6A70A6911000C9BED517D11AD9DE1BD79769B4BF1E6F9002B350E0DD7516F6310B5565EF2CFC16FD0F7ABB3C9672D2A4273D874DAD2A50F90B827E7DD2D1F3144E9F44CA56A8F5B8CFBC080004EBDEBD57572915FC3B3ADD1722FECF6DE45A91F1E383F15C990E22790A81DACBD72D7664F3941D15CF05",
+    "identity_type": "trusted",
+    "iv": "9343721F3C8067E079543B212BB2889B",
+    "key_seed": "02AB71C90D39A12A244CF71B024542CC16A83A213203F410FB5E68A9E047C59E",
+    "metadata_key": "303F6356D15193128F6E6B381E88EE17",
+    "section_mic_hmac_key": "4E43FFB12A718E30D9F2455E985C46D0998D11D65E84CEAA3DF88E5012AAD482",
+    "section_salt": "C9BED517D11AD9DE1BD79769B4BF1E6F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "71BC9ADC29579DC8A0E0487EAA5230A7",
+    "aes_key": "9620661A0AFDB63AD16819514497C47E",
+    "data_elements": [
+      {
+        "contents": "1C1A3657E3A21392",
+        "de_type": 220
+      },
+      {
+        "contents": "6C9F1CA43BCFAB1857D7805A84E4A516FC4D9E7C9678DDCE",
+        "de_type": 740
+      },
+      {
+        "contents": "089BE9",
+        "de_type": 171
+      },
+      {
+        "contents": "331FCCD6645D0E6C2FDC35F3AF3AF969F2FD0282A81D061DD11111EA08",
+        "de_type": 645
+      },
+      {
+        "contents": "60A8B144593D90FEFD6253F416B570B8E55F1BBE4A5D",
+        "de_type": 986
+      }
+    ],
+    "encoded_section": "9C90139CA48B7A14644F84BDB15949D54E4D929110009744CE2971F1B4E26F8073C4B4849A10900130945DF1008EF4B256752CAC699B2CBCD0A736335A415D81671FE6C4E62E1AA6721CB7B9A862FDE44D4865E8CA00D9689848B19ECD766EF2612D73BE4E7DF50E81C75FA990DD295777F5F9D4B89D619023163C2ACEB31EE43CFCDEA866EFA0F1F98DAAFD0097DFE4564D5158B26EDBF3943E7D1624",
+    "identity_type": "private",
+    "iv": "7D0C9BE18436626C75E5F109E9FA6505",
+    "key_seed": "06AA79A2060D335E6035AFD4807E33B665C0AA91D672258386D3C8A18BF62730",
+    "metadata_key": "7011E726D054C8F0A3AF0A64CEB3C04D",
+    "section_mic_hmac_key": "FC9ADB7DEA9F8B9BC8AE7EE4E37290FBE67F49938209F722BAF94F00F5AD8A3D",
+    "section_salt": "9744CE2971F1B4E26F8073C4B4849A10"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "96AE4A65693FECD0AE7DC294E815285B",
+    "aes_key": "766190BC62AA978ECD78A5FB1B9393AC",
+    "data_elements": [
+      {
+        "contents": "E2819425AA7B8D06E07D12EBAA19",
+        "de_type": 112
+      },
+      {
+        "contents": "668F51765E67802E8D947DC83432A82F4F9FCDC3FE56DBEA",
+        "de_type": 997
+      },
+      {
+        "contents": "9F",
+        "de_type": 189
+      },
+      {
+        "contents": "B7A803AB085D7464012E7141C92759CD5ABB1D5EE20252D40B",
+        "de_type": 910
+      }
+    ],
+    "encoded_section": "8290134C5FE3E874324FF0481B9CF6C7BD23DB91100042F06DF6293FE7CF1755C951BE41DCA190029B0054551005D376488CBF35207D28173DD036E39F6D2DB18CEB5F87FA981F7695589EA3C6CED88CA59C664CBA7F19F5AEA26ED8B819F1A98A2290E8AD88955C9B1CE698BA709C76E66BCD3E0EC22BB6AEE6E2D45619A100FA717C",
+    "identity_type": "trusted",
+    "iv": "D5A0D32FD5106E9435882D01E1B6367E",
+    "key_seed": "1D64C492D1FDA772BFB5BF34A65A186C4571F0B131A19A15C40644C5D597F7D2",
+    "metadata_key": "18AE245FF683EA4D131CB3B9CBC5AD5B",
+    "section_mic_hmac_key": "C147044183E1BA4466D363443FFB1F6868D7B9B52D128E702757AF3A8872E2DD",
+    "section_salt": "42F06DF6293FE7CF1755C951BE41DCA1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D6A98C7976ED88F4776F57E55051BA42",
+    "aes_key": "D6F42BD59A9A4D83D113E168F945476D",
+    "data_elements": [
+      {
+        "contents": "33E7567D2554B29992ABFF5F",
+        "de_type": 733
+      },
+      {
+        "contents": "1CEB66A7934CD81BDE08E0B4C68F418C",
+        "de_type": 235
+      },
+      {
+        "contents": "221A4083EE6BD86567C08EE459ECAF0592714C08F3C4541C254EF7B1",
+        "de_type": 664
+      },
+      {
+        "contents": "9802DC6EEC151819FBCBD2208784FC5F45E439518A33BA49C30C9812",
+        "de_type": 700
+      },
+      {
+        "contents": "F59E9C167060C57F524B06FC2CFE8C30B7C245A5C9F02657EBBC2E7F",
+        "de_type": 938
+      }
+    ],
+    "encoded_section": "B690133CE3C2FA05766D5CA1A3D5EB51D94E5B911000C154515607DCD6F34C441B78BA3E68A2900155F5CC8E4A8A8E627FBB74C83F67F73F72C7B6F84B5897C890D28B73C4302EFD9EB62782B56E9D0C9F64B75CE36FA88E9C912A29CE40AE572A564E74BE9DCD07E0F252C228F235DFB4CE51B033D4D93BB28E05147464D77673CCF87AF583F02574484839C5407D83B93676066F280BD2E62E586A465D1D62AD7CA1902CD7FDD1C69ADC1A99A85BBD1E56BEA1F7B6AF",
+    "identity_type": "private",
+    "iv": "8A66F137E1DD93ABF2E6F8DB8E5629A5",
+    "key_seed": "0ED34984F8608A1ED2420168D3E39EAB29CAE89E6E00F577A2FE2435E371BA8B",
+    "metadata_key": "6D78B0D9464EF03BAB914959BF7471D3",
+    "section_mic_hmac_key": "F77AA75CDBE8F413D63FED4997A9DF7B110A1EE1238ED913DEB1510213F82FDB",
+    "section_salt": "C154515607DCD6F34C441B78BA3E68A2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "95D42E733AAB2A8F4623607AE3AAFA1A",
+    "aes_key": "307EB5096605C93D74051BF3019140FB",
+    "data_elements": [
+      {
+        "contents": "CF43",
+        "de_type": 272
+      }
+    ],
+    "encoded_section": "3C901309D2D105A3900C7562AD0B847A6BDCD2911000719CA000E206EBB7E414B1F331D8879790017D362D435E3C563734593A7A7A1F6FB1DEDD3FA0A4",
+    "identity_type": "private",
+    "iv": "CE936BD2A93680E285FE69D3519B37E5",
+    "key_seed": "3CACB47DF80E06C8E73F10B1CA40BF090558409363E97E32EDE98ADDC25B7948",
+    "metadata_key": "70936418E7BFF920321C1D1B1E22E5A5",
+    "section_mic_hmac_key": "37593B2D5BA45C77CB0E2C19246AF6FD05B182409983BE087D9C100BDCC2B7DD",
+    "section_salt": "719CA000E206EBB7E414B1F331D88797"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7C6A5E9D266FBE338500EF4B1A9AE1C9",
+    "aes_key": "37B697BF854925E9E7CA558956992E29",
+    "data_elements": [],
+    "encoded_section": "379013BACA5D191A040F13B2D30C356C3C383E91100026E263D75F5CFB71AAC091E648255C629002BA53540471CBE7FCAF7339225583900B",
+    "identity_type": "trusted",
+    "iv": "88A2CC9AD86FE18152AEDFE96F0264F7",
+    "key_seed": "666B0E3B2CE558955F83D1992C4F3CE552B1591BE1FBC39E7578A33D4A66015B",
+    "metadata_key": "9EBB6E6E93A85AAA2629A791B4760394",
+    "section_mic_hmac_key": "8FE26D7990CF7ED06F5FD77E2F78F5D99DD08D6F366D2C6166286A8C92478306",
+    "section_salt": "26E263D75F5CFB71AAC091E648255C62"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F8170168CDB98E6054D980DC4F486BB3",
+    "aes_key": "A723C83FFDB884866843D23669DC6225",
+    "data_elements": [
+      {
+        "contents": "F7844444403E9C",
+        "de_type": 782
+      },
+      {
+        "contents": "8233B24F5F14FFE07565AE42",
+        "de_type": 69
+      }
+    ],
+    "encoded_section": "4F901345A324F37CB55A5C0949CBAD49CC11BD911000668B8E44F0078A09F12829F40AD701F79004F968AECCC04CCB53902EA8B7A9AB90AC9D3507DA5708488D8A6D1A681DAF59454152EEEA00D55441",
+    "identity_type": "provisioned",
+    "iv": "FD415093D0B11FCFCD62D5EF7EBA2EB1",
+    "key_seed": "1661E1DB8407DDF7EB6909B99391A568FCD11321E9D340BA2C5D3E802753436D",
+    "metadata_key": "443844D2B1B640CC1C9A4CB862BD5B5A",
+    "section_mic_hmac_key": "CE882FC63AF0978CD195CB6DDFA2FD4F77162F138567CF2795776F32B834D7B0",
+    "section_salt": "668B8E44F0078A09F12829F40AD701F7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7F1798862045B2359834FBEFA172D80F",
+    "aes_key": "612224E493519B499DA8E37EA72BD934",
+    "data_elements": [
+      {
+        "contents": "440654B4248B492CE5D00CA61809",
+        "de_type": 768
+      },
+      {
+        "contents": "D417931E9C9816A0289BD8855D855FCB21",
+        "de_type": 166
+      },
+      {
+        "contents": "E8C520AFADCD6D672723D0DA5828F73C6FB01B9F0DC6F7B4D6",
+        "de_type": 139
+      }
+    ],
+    "encoded_section": "7890130D0ADE5589F80B65A31269B928FF63D0911000489AA2FF0B570F1558FBCEBDA587BAE590040E64FFDBC2E0CD5EC3C8DF92196E4AF3057ADE7C296F26DA271D95A20FE7C1ECD2C28A8947CFF6007D293217FFA58261AD7F3D223DC7F1C2F2B19F696ED43E593593FDDD0E3AA714D6D646F34DBDD6C298",
+    "identity_type": "provisioned",
+    "iv": "FDCB3FCDD56A66B6C933BBFDF96A9FB5",
+    "key_seed": "8293C98B9D0BF923A3721AC82F2AD92EBB1CA01487D3CEEEAC8CD21CDD69F4DE",
+    "metadata_key": "78F9E8DC1BE37E91D04C8AF24505C390",
+    "section_mic_hmac_key": "8B092819354220EA5B74C6332BDDC7D8D817B74789F17501F6D2E13230D93633",
+    "section_salt": "489AA2FF0B570F1558FBCEBDA587BAE5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8140D71FE04244D8BCA21C9B5080A385",
+    "aes_key": "CDF733CFB60B594C37C1F1970F06F23D",
+    "data_elements": [
+      {
+        "contents": "9EAA4D737BC194651FF11D027E653915B66F89CE",
+        "de_type": 146
+      },
+      {
+        "contents": "85",
+        "de_type": 517
+      },
+      {
+        "contents": "B2D927",
+        "de_type": 37
+      }
+    ],
+    "encoded_section": "579013EE370B2CFFB5850F24E31EA18EA165E59110009CE7EBE57787FE3B841AAA34A9CEA8879004B79F8E5622D80A40CD40274BD5D19B70D57D842372B67C2220EBC1B075DDDEAE5B7A6E9BC8BB0C1104357CD7F9E27856",
+    "identity_type": "provisioned",
+    "iv": "3A43AAD47E0F8DF1D833F633226CE6F4",
+    "key_seed": "645E00EBE423EDD4AB5A50D7EDD53F4B94B75EDB68D8FD639D72FC1474AAAB6A",
+    "metadata_key": "AE54A918EEA35A8FF008113B344C0707",
+    "section_mic_hmac_key": "8D07A0FEDA41154101D987AC882BE0C42375C3F66179A2260997983912026192",
+    "section_salt": "9CE7EBE57787FE3B841AAA34A9CEA887"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6D9C63CC15928B2584D3A469A65E0BE8",
+    "aes_key": "3571B4319B4687C0D5D54F436896C228",
+    "data_elements": [
+      {
+        "contents": "782C0F67D4BBA10130696435243010144820F4752910F9B0E3F80FC0",
+        "de_type": 381
+      },
+      {
+        "contents": "9B336B1421B796A9C8F97A20705F",
+        "de_type": 870
+      },
+      {
+        "contents": "9F23ADFBB8E3EE4C54450A49552A6A",
+        "de_type": 506
+      }
+    ],
+    "encoded_section": "799013F321877FD6CAD817E2C641F8A90FEF4C9110009A96FEBC9A8FBEA4A344561254552C7F90046293184DBBFB610A416EF1FA50075E891A3937FAB2E51B6F0812D0E3ED51EBAC6849CC78AD2B85DAC2992CAFF2D2D2908E1F5A90889CFC1FE1CCBEDF435FEA597C4E2A2C2D220E4228E8463755D57BFEB5EC",
+    "identity_type": "provisioned",
+    "iv": "DA7041AB2C2B7685E1DC21095428E0D4",
+    "key_seed": "839C80E9283189E3AB98E48862F375C4B87CFC3B6F6C044DB5E26AD4DE364323",
+    "metadata_key": "BBF2E5F0D26483F19588EEC82EDC6C12",
+    "section_mic_hmac_key": "12445B6BAD94883AC9E4DB8F94BA02D08DDB9F7A070EEB7D3A8A6FDC10F176E2",
+    "section_salt": "9A96FEBC9A8FBEA4A344561254552C7F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "35A8251868DD2E1A9194786BE8C64BFA",
+    "aes_key": "A7B21AEEA0C66BE702188CAAE0EA6512",
+    "data_elements": [
+      {
+        "contents": "A9055442F2B47596B0DB0A971C07",
+        "de_type": 961
+      },
+      {
+        "contents": "D71C",
+        "de_type": 677
+      },
+      {
+        "contents": "E57B64B155CF7527D751CC68B263A792C2",
+        "de_type": 265
+      }
+    ],
+    "encoded_section": "619013AA0300E2A8F8624386FC6A4F5F403591911000837E4DF997864CBF37E0B55EB497A1C490027D171341BA6F6E8007CEA0ABBF21B146571A065717806FDAD5CC16C8122394811D1EB1F4B25D784D9CD216CD06A40CAC8DEFE77C0A19BF542ECB",
+    "identity_type": "trusted",
+    "iv": "BE19F81834F18C01B380AA4092DE5F1D",
+    "key_seed": "5787FAEC4C0349041EE656ED1407458B8F07064FA7FF965C37E01938E0939071",
+    "metadata_key": "23C90D62E06A3A03EA5E4DB7E27387A6",
+    "section_mic_hmac_key": "790A1AEA80F909DB3A515737E1260748040994491F71C97E02BE9042B5F0FE83",
+    "section_salt": "837E4DF997864CBF37E0B55EB497A1C4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F3C6A0D85CF7280DA0AE087536D46D4F",
+    "aes_key": "714CFB9897FC29FC146F4ED1980F8A02",
+    "data_elements": [
+      {
+        "contents": "CA93EB016F5AB0EAEE15BAAF19508C09E9FBE3ABF0CE6DA662CDD7",
+        "de_type": 966
+      },
+      {
+        "contents": "AA7C1AEB498A8A539C7F9CA7C6AC",
+        "de_type": 924
+      },
+      {
+        "contents": "9A7BFF",
+        "de_type": 856
+      }
+    ],
+    "encoded_section": "6C901340616A3CEEE6E3DB8958540220AB0DF8911000D6C0D020C67736CA0DA95743E11FB3559002E77AB2D50E5622942872D90F79889A1211EA3DFD68974FD22077EF7E297B27655072A61CA8148751503D2F945419CC3A41D10116203246F7A29D557ACB20AFEC92FDC3F6A5",
+    "identity_type": "trusted",
+    "iv": "CFF129908DEBC64E87D30CEBD7CFB92C",
+    "key_seed": "E76585B665156041F17624D98389BC90CFB1F7B5FC98395CBB0C92BF39275F08",
+    "metadata_key": "11E5F0AD1D1064EE76EF482287716210",
+    "section_mic_hmac_key": "D388B45C5104F5EFF3114BFA514843F086F9CDD012E32ACB4322B3AFC3EF25F8",
+    "section_salt": "D6C0D020C67736CA0DA95743E11FB355"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "899E72C0ACE8467E62C1534EC6C7A9F4",
+    "aes_key": "0ED6FFDFAB0E1775C01399C65FC1EAC2",
+    "data_elements": [
+      {
+        "contents": "46E4",
+        "de_type": 164
+      },
+      {
+        "contents": "1CD5EB57C26AB946B644C8C6D2EA",
+        "de_type": 147
+      }
+    ],
+    "encoded_section": "4D9013D876C620764709BA76B867262A767E9891100003C6477E17249A35DB289D156146DCE19002C34E905787280A485090274A6BE1EB6BAA83C8A860B7E10EF6E68170CD6CD856D47F1B5212E4",
+    "identity_type": "trusted",
+    "iv": "9A9EC26A4DF843F67A50C2883B2049E5",
+    "key_seed": "D093FD917DC3D0AACFB61D214DEC5CD7E9F4D9D1B38A16DC4746005201209030",
+    "metadata_key": "47EF5956F658168934538B98AD8039EE",
+    "section_mic_hmac_key": "15D1AE58C9F76DD3D6AF7D332A79746DAC7CA69EEED1E03DE1BA3C2CBE6D0D34",
+    "section_salt": "03C6477E17249A35DB289D156146DCE1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "37D4F69D0CD26B40E94ACE2A5DBCCEAD",
+    "aes_key": "ED777D47AA2B1CD9A18A679A11D2D4BF",
+    "data_elements": [
+      {
+        "contents": "3A3396B74739FCE4",
+        "de_type": 813
+      },
+      {
+        "contents": "",
+        "de_type": 280
+      }
+    ],
+    "encoded_section": "4590131BEA8B2830E5C0EF21FAA31033A5E5D8911000795CDD085DB06D32AE5FD26F7BCDDBB79002B6A7C8FB0E06CD39246BE00D8F824C8CBFBE5FB5B4CC94298EEC5CBDF16F",
+    "identity_type": "trusted",
+    "iv": "BDB607DE3CD62030073D459C5B8D6C93",
+    "key_seed": "338B03B03A5E620E3B27EAF5E57D5A3E91B50113DC68FD76CCB906A0CD6AC15D",
+    "metadata_key": "C7C3232A78820948E56ECFBEB230CB6F",
+    "section_mic_hmac_key": "6A734BE5E220BD0FD824A54573671C3D15CF7B4BB57AA2B505EB6BF0B0CAC0D9",
+    "section_salt": "795CDD085DB06D32AE5FD26F7BCDDBB7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C4DD5ECE3088AAB59CB1D292B33F366C",
+    "aes_key": "639007FB19AE47F1C559685FDA3EB75A",
+    "data_elements": [
+      {
+        "contents": "E88F621FE3EB583D38E8BAC78F77C628",
+        "de_type": 933
+      },
+      {
+        "contents": "75ABDDF8",
+        "de_type": 54
+      }
+    ],
+    "encoded_section": "509013AF1C7CA2B228255162CA076C8B11BE46911000F45D6C318697B0191B1D88F3CF9D00F39004ABE13C11D4EE0C8DB3480A7B4B3BDC25563B1C28D8665AD58EDF8794E2B9AF89F46772315982210EEA",
+    "identity_type": "provisioned",
+    "iv": "7178DC1EF12587D629C2D6FECFF095CA",
+    "key_seed": "98AAA87C26694BE9E3BBCC696C76246465B0239410B523EC447C9A2049D1EC0B",
+    "metadata_key": "A278B435B2A9CA7EBAD385FC6B7E3F15",
+    "section_mic_hmac_key": "80B3F75573897BDE6A79AF64C8FA3E66E60E12DCA0F934D92464B8FC037944A7",
+    "section_salt": "F45D6C318697B0191B1D88F3CF9D00F3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "98345469CAFE42F15D87F5EEFC770569",
+    "aes_key": "EAD0F193D218EF675EA19B2DAE377F02",
+    "data_elements": [
+      {
+        "contents": "AB6691F16BD89FBEC7EA564644B836DF20E3",
+        "de_type": 396
+      },
+      {
+        "contents": "33283B4AC99D1351B01D0FAC70AC124EA0C18806F4EB79A81DD0C7B7",
+        "de_type": 761
+      },
+      {
+        "contents": "338FA25539C9F603E8AA",
+        "de_type": 545
+      }
+    ],
+    "encoded_section": "789013E04AD2F52216D16070E3AE142996253A911000908F07CC93A0157CA88C95EA00D2F8B09001801529DCA17EFD27E94D8A309ECE9126B84DDEF670D9AE859FC518535A5EF9E512C84FCA40EA028006D89902575457662EEF326EC7A07B9169BF15231DBE29B408E134074E7A1037F445C293EEF0F50051",
+    "identity_type": "private",
+    "iv": "628570BB5423D437AFFAD6A68E7D7C51",
+    "key_seed": "D16A1A2DEF6A5A281D1345AE625CC996CE718409EC67F52C2126D4F4F35A240B",
+    "metadata_key": "5D5A62A4FC06971533C17C6914A2ECB1",
+    "section_mic_hmac_key": "B4027E120D33DDF70FDB320E58DC27EC588E7D0F16E413200A8A834D4FC06B6C",
+    "section_salt": "908F07CC93A0157CA88C95EA00D2F8B0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "473589D555027506C32625BD8CC7DEC7",
+    "aes_key": "3EEAA4B0A65FE6A149E92A3ACD460F2B",
+    "data_elements": [
+      {
+        "contents": "00706503DDE2E48069E553BA253443985B15A915D6536999F1F8",
+        "de_type": 655
+      },
+      {
+        "contents": "152C59162A8FD170",
+        "de_type": 261
+      },
+      {
+        "contents": "29121F0B063A6B6F863E730BE1563CE5136F4B76",
+        "de_type": 1000
+      },
+      {
+        "contents": "A4E52EACF159",
+        "de_type": 503
+      },
+      {
+        "contents": "986D5DEC9898E595883F738E6313D79A010DA5",
+        "de_type": 413
+      }
+    ],
+    "encoded_section": "9590132BFDDDC9034E622342FD8689E276F16391100053743B86B516991B130398CD526856669001C9112F3BEA177009F48C84164DB23C8A235D39B30B30621639A06493FDCA70371EF4670D5D7F6F35D41573DCA035DFA187060D4509A3085763A2FC46AA05E1414D3A83151E7E8268A1CF1A1F6453114622E36FC069C6FA97D4DEAC4F2BBFC0E2E066BE2BA08D102E0FF80C67AE64",
+    "identity_type": "private",
+    "iv": "F4CFB23D5B57AB5DD39B7FA98B5BCE5D",
+    "key_seed": "A949CA927245FE4AE45D4F369FDF339B2542427E268A92A4FB56D818E1585080",
+    "metadata_key": "2D5AA2AE17FA3B780595B442816D577A",
+    "section_mic_hmac_key": "5E2FAD4AD9AD36D0FEFEC43FA96CDDA06B95035C188A02188FA134AF1C039B35",
+    "section_salt": "53743B86B516991B130398CD52685666"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "25EFD74B18D28C38561611A4E0EFA653",
+    "aes_key": "D62A62981F5281FF40D4559D01F3D42E",
+    "data_elements": [
+      {
+        "contents": "29CD91ECAD1EEAA72B8343AC127EA910C60103006ECF8AB36941",
+        "de_type": 469
+      }
+    ],
+    "encoded_section": "549013834CCF10766629D4E328E20F100325A09110001875FF4F2F9EB5B632BA383003DE4C139001D4CD5795AC80238CEA4265BB4D2A4668F9569493BC5936F84442A51F9F93144DC7F0B9855D6E2D8892965D0D75",
+    "identity_type": "private",
+    "iv": "583AAA53E4CB858B5425E6CAA806020C",
+    "key_seed": "2FC71501293477514573A265C5C8704E9C86047A7A6B14A67EF489DF5844E0DD",
+    "metadata_key": "9CF9951B23AA2C216A88920C36927BDE",
+    "section_mic_hmac_key": "2DE14E1989C82EF73E9F57D5F31BF1D4C01B96488D633FBA7FD93C8F07DAE841",
+    "section_salt": "1875FF4F2F9EB5B632BA383003DE4C13"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "230C6C323653F615C3EDD59CA5C3E4CD",
+    "aes_key": "8DA0B2533F0BB0B636C0DD2C5F4C2325",
+    "data_elements": [
+      {
+        "contents": "0F06B38FC8A536260ED355C9FC9E14E7DDD7929CD568A0E2B11F4417",
+        "de_type": 196
+      },
+      {
+        "contents": "E9DAE7C7DE865122E920DE218A959DC66B87191B880164152496328A4D",
+        "de_type": 564
+      },
+      {
+        "contents": "93DA2F2DDF4E29DD44012394C9A9AC64405DFFCBEB",
+        "de_type": 257
+      },
+      {
+        "contents": "F56469A172DCCA67832689D1C2",
+        "de_type": 228
+      }
+    ],
+    "encoded_section": "9E9013D58191FEFB4A9B9BDA6B037A0CC63F939110007B2BEA4E28BBEBC044F1282B590D42209002FB5F97FE4F62B89E614F28D1CC810522FB81A03B4C526D66C7B23A95AC861BE8072D5AC673D1E91DDFF56B3354305C6C5798E51B4C34F3AA0B8E49179F988718FA0A500B2F0F1A369DEB3A2DB6E99799CBD3B9970489B773C2C41E567328EE044FEE336F9120673102432E3A80EC7306705CCD5486A3A1",
+    "identity_type": "trusted",
+    "iv": "616285E84578D5625166925EDFABF2F0",
+    "key_seed": "CEA74ABC6E8F5BC365B2A23575FBC9A5242A1175298E8D93900459C42D129730",
+    "metadata_key": "37E8237111A63B854880506BC5B086F5",
+    "section_mic_hmac_key": "3DAA034FE225951D1CCF0289F091B047D091F350A6566A0CE44A60152EBEFFE5",
+    "section_salt": "7B2BEA4E28BBEBC044F1282B590D4220"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5D324887E76C3F9433D2B4A42FCAF044",
+    "aes_key": "66E4331038810B466F236AF2610624D4",
+    "data_elements": [
+      {
+        "contents": "985840558092746F07B1",
+        "de_type": 498
+      }
+    ],
+    "encoded_section": "44901326F885F961FE74FFCE3BBB43648CB811911000D8A99AE153719865050D04CB7D1673FC900256ED4D9FF8B3A8B57F704B5ECC167466004EDBC803DF32767BA4885780",
+    "identity_type": "trusted",
+    "iv": "49465FE445A423A5A4D9C893C7124241",
+    "key_seed": "BB5DB5AE369B6C5D2EBCAA7A14B03F9A249DA93B87C24356475341E34CE211B7",
+    "metadata_key": "88F87FCEC4D05BCAEB97098A827FAA80",
+    "section_mic_hmac_key": "2B66622A6228FFDE6DBCE6808DA2A207F942EF38059457C1E84D49D65D5EA0EB",
+    "section_salt": "D8A99AE153719865050D04CB7D1673FC"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "492310415125301AF370F3A28F99C923",
+    "aes_key": "3E60451A7487BD9CC8EF9CD117EC06C3",
+    "data_elements": [
+      {
+        "contents": "7E0B2E1CB803",
+        "de_type": 96
+      },
+      {
+        "contents": "",
+        "de_type": 4
+      },
+      {
+        "contents": "5FFD2C7DAB0C",
+        "de_type": 557
+      }
+    ],
+    "encoded_section": "499013A8190AECB7A7CAAC7A41BCCC1BB23EB99110003D9D5DA626D91FD8CB8910200ADDDCDE9001C4A2BBA08569798DA7CDD17B9434EFFDAB07119526363656E66DD52D79BFE6402756",
+    "identity_type": "private",
+    "iv": "C512212E4B03688C91E6742FD6CE85D0",
+    "key_seed": "303426E69CF0478D3546C376E523B59976BEECE4CD7E5D73A253EFD37AE59596",
+    "metadata_key": "2EE9CB59D9ED13C836389363377F0C10",
+    "section_mic_hmac_key": "177318DF2F5E18A2BA15AE658285E89541A870D219C47C5260C77D286E9EAE11",
+    "section_salt": "3D9D5DA626D91FD8CB8910200ADDDCDE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "34B38738AD29FF67B98A87A5E632B403",
+    "aes_key": "31A27BC1F826FB2A14BAF5D41AD7EF32",
+    "data_elements": [
+      {
+        "contents": "8FF21C1E9727057BF441B8845924AF2652",
+        "de_type": 561
+      },
+      {
+        "contents": "59354C8203E3D49D708164F64A8E94FD37DC4AB3170AF86EB2DE23",
+        "de_type": 143
+      }
+    ],
+    "encoded_section": "6990137AED32E0B427E327EB555684B103FAF09110009FC7D83B3BFFDF9324A3DD576C83C25F9004860BEA1F0A861519D2F64FD943CB247C301755CF3FC0F9688CC9C3A59D712C0A45DCBC0C4A4BACC93E9206E1A1F01AD375047EE9CDC415AACF23CED21082D0D6F2F4",
+    "identity_type": "provisioned",
+    "iv": "95AA62BEE82A7EB218781305E16CF180",
+    "key_seed": "EE9B03BA6F99F320443D9EC2D4080AFE8669D55E64A55476B910609E79804BE5",
+    "metadata_key": "791FFA37592A73FBE2748C91CBE5EDEC",
+    "section_mic_hmac_key": "B31DEDF27A541AAEB000A61976F06FB1137AB359B3D86DAC2E30C3DDFE8B85F4",
+    "section_salt": "9FC7D83B3BFFDF9324A3DD576C83C25F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6F1A5550F40245579FD1FEDB994C60E1",
+    "aes_key": "EF74CF6922AF88727876DD6180BADDDB",
+    "data_elements": [
+      {
+        "contents": "10F27CAB4FB6B95F77A5C6",
+        "de_type": 998
+      },
+      {
+        "contents": "7F4C192988A13A4E53C57A52F5DC",
+        "de_type": 961
+      },
+      {
+        "contents": "F676A115F3B1DD",
+        "de_type": 176
+      }
+    ],
+    "encoded_section": "609013305284C016C6D4FB8B85A6853EFE3BE1911000A883FB09F88AEBC1CC6CB4375B6F309B90027F59BF0ED26EFD7FC2826D3C353F894B923AAEAAF953CA9710D76864FF689AC4E3AB2109BD45AC5F1DD5578251BBA54D47002CF28B741222F6",
+    "identity_type": "trusted",
+    "iv": "3076D26E01CAAE164B6DD68DF2C98D6D",
+    "key_seed": "F7701383A99913E39E948F24FE4375388A477B5885BCE42E1136D694EC5940E4",
+    "metadata_key": "FCA9E9D4A7FC73EE0A84DD20EBFEFCD0",
+    "section_mic_hmac_key": "3090F43370303CEFE295DE610007E4521B9C61EDC8413FDCEDB1A1E827193103",
+    "section_salt": "A883FB09F88AEBC1CC6CB4375B6F309B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "91652221827572DFBD2DECCFDEBC0623",
+    "aes_key": "93D4594F6D83065E87736A4B1C8B5D90",
+    "data_elements": [],
+    "encoded_section": "379013CCA0DA07331E1D50F654EF152E8BE56C9110002EBA87F24986E786C3CF5E687E930F6D9001AF4C55F24D83258BC9CFC3ACE6DD4F77",
+    "identity_type": "private",
+    "iv": "7407BF39844950F7C02EFA0DB33EE20A",
+    "key_seed": "62C96793C0C0A1AD2EAA5D77B983C772D1117BFAEFEF6F1880D15A138CF02BA7",
+    "metadata_key": "493DA0C9159C6E0A451EF59760E8A037",
+    "section_mic_hmac_key": "59E78109732E338964B9D72691182ACCE1F13B1FB2AF815D0D9E107BDA483E99",
+    "section_salt": "2EBA87F24986E786C3CF5E687E930F6D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "49A2D6913773EC08C26776F5D82EC4C9",
+    "aes_key": "61B9D6C9A96D8195A2448D9A4A9FCC50",
+    "data_elements": [
+      {
+        "contents": "9F6F",
+        "de_type": 985
+      },
+      {
+        "contents": "585537C36483C7D6D71A12EF0E",
+        "de_type": 650
+      }
+    ],
+    "encoded_section": "4C9013598C8EAEB8D51BC3FE88DAF09FB46EDC911000A381CE76EA131827A0C0BD7720D36AE59004DCC9D1BAB25D0CCBA65658980D6DBE61D2F02E7300B983FD2D944B9BED0E9ACA1AE77591F1",
+    "identity_type": "provisioned",
+    "iv": "DB8334CADCA491D2C65763FED225BEB7",
+    "key_seed": "076B4CB28DFCC1192ACE62FD2078B9D7A719A4FD023E5C806D60464AD004F54F",
+    "metadata_key": "C8B3594B1DE8BCC1698D794EB9159D32",
+    "section_mic_hmac_key": "05F49F228F859D213855BEBDCE762E3297CFFD51ECBB2088CFD8DC8E90E0F1B0",
+    "section_salt": "A381CE76EA131827A0C0BD7720D36AE5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FDB28EC49C232187F4B313D338CB401E",
+    "aes_key": "CBDD90D1BA86EBD8B627412AD9097632",
+    "data_elements": [
+      {
+        "contents": "67B75AB60CE23E879336887B5D9F5775A2078C1B2BC755B1B40901A14D7C",
+        "de_type": 482
+      },
+      {
+        "contents": "CF980B5189EA458B3E9EEA80758E9FCA5195E09F06",
+        "de_type": 167
+      },
+      {
+        "contents": "5B619E636C2E",
+        "de_type": 759
+      },
+      {
+        "contents": "0A408A22E62FC9245250A072273ADD497C300228",
+        "de_type": 387
+      },
+      {
+        "contents": "94",
+        "de_type": 481
+      }
+    ],
+    "encoded_section": "949013E4CFAF2BE466963149A6224ABCFB0C0C9110006886CCB0F507AC5B4E3A33B6F31D03EE9002F2392C3A765BB4AD1BAA31BFAC8FA8B5987DDEDF99E0B1F4AB5BD84ECE46D3701BC1B28DCBA2EA465B7F4EDD078FE699CAF1E3E9C2EACD89849EDE3E13B4E9C69A2381755448C9E0113843A4A22BBFFCF7C11BB0EA70C08A606952234B4B6108EC83040C10C6DAD374A5F05EDB",
+    "identity_type": "trusted",
+    "iv": "C028C5B6F9A36584545FB179C379BFB2",
+    "key_seed": "F6F00C19B4792C24EEF3D27D69993076230247603F817E90B855099E413F2B07",
+    "metadata_key": "67746BF043260C6C49EAA6197157A491",
+    "section_mic_hmac_key": "61E943AF30DDED5473FBA40F5118C7C2F350103F84A444FB4F7550667228977A",
+    "section_salt": "6886CCB0F507AC5B4E3A33B6F31D03EE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1EBECD2EA3A8364948252CDAA5B96320",
+    "aes_key": "5C07BF2012F7917650BBA25DD8F336CC",
+    "data_elements": [],
+    "encoded_section": "379013BF51B7882CB99C30571F24D1DDD05BAA911000E3F0D6C54BC850F9A48E98054374ED5F90020F71BA6B33808FA225AD2296003121C5",
+    "identity_type": "trusted",
+    "iv": "BC7CAF3B06416475990D575B2B3AFF29",
+    "key_seed": "D140C25596258623F7D0A978CFB6875793307B7210A9965CF4A09927E23848EE",
+    "metadata_key": "A62C713646FA57E510CEA5E76377164F",
+    "section_mic_hmac_key": "B606AF244BA59DCBBF6929DDBC3EF9B7FA0A968EE4958F8D628946460E0B574E",
+    "section_salt": "E3F0D6C54BC850F9A48E98054374ED5F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "34B8D0AA1B6076CACFCD67EAA56205CE",
+    "aes_key": "D18687CE96E0D9B21847502E60CDCD25",
+    "data_elements": [
+      {
+        "contents": "53493339",
+        "de_type": 153
+      }
+    ],
+    "encoded_section": "3E901369FD29BDD5FCAE64EAE91DA4C76BE48D9110007999D3B31650C18756A1D319773212AE9001275F57FE6AFB60B6DC87B624099A9B24569491F5F49121",
+    "identity_type": "private",
+    "iv": "5564C020A460380637EE5661E0F18465",
+    "key_seed": "51CD66A9B8455A1C61806C6575710F29B99AA5C08B5FB6883E2656EFD4EF4B98",
+    "metadata_key": "7A089FA25B6301D9D8413F0AA49603CF",
+    "section_mic_hmac_key": "B6E66D366DD2C413AA66A99E8CACDAA9761BA51C95898458F7B4D37988F135E3",
+    "section_salt": "7999D3B31650C18756A1D319773212AE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EA23F3D623563CA554B644B8944836A5",
+    "aes_key": "952EDF3A3A92D45B9DED25777352BA23",
+    "data_elements": [
+      {
+        "contents": "A0A99C479635E3819E8702A34BDBAB13",
+        "de_type": 852
+      },
+      {
+        "contents": "E0253587563A4C07",
+        "de_type": 385
+      },
+      {
+        "contents": "1FF104D3D8A66917AE8B770463E08516393A6FE29A",
+        "de_type": 654
+      },
+      {
+        "contents": "DD0D3D55183C193476966F12ABFFCF2C65AE5E9000E57E93DDBEEA6B47",
+        "de_type": 807
+      }
+    ],
+    "encoded_section": "8D9013E81D950CC4779370E13B06AC5F9BFA749110003F78335FFD99A2E7A40D78D6314F7713900211BBD3B4F8A56E26538F9FAE57F0AA9114CC34411E8D4408B53039E144A6F0F6E3FC4C4E32563A97C177FAB41C6AB5D6ED9EBB41E98627ED5DC9B196432ED1C0036FCD729E492A25D4976723C777333C52ABDDC04D9E7F8654ABE7CBC319DDA5BDBFC37DF51D",
+    "identity_type": "trusted",
+    "iv": "2A0B516ECD2E3ED9E8491CB2A23BE7BE",
+    "key_seed": "9A76DCD6488802F550A1A5B2D68A21B45850BDB5D04F6BFCE6737EE9065459B2",
+    "metadata_key": "7A82BA273F40F1D7147503A0521EA07D",
+    "section_mic_hmac_key": "D0071AD96C81ED47B74B6141DD9BBA6467D69ADEE3C4B23556525ED204FE5450",
+    "section_salt": "3F78335FFD99A2E7A40D78D6314F7713"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EBCA2068CEB2497377233BA55556143A",
+    "aes_key": "B7CAB93856D36C4234AB9B7E3FF2C2CA",
+    "data_elements": [
+      {
+        "contents": "B906252C6FF66DCECE5745A021B149F9AFDF854A258D184B",
+        "de_type": 9
+      },
+      {
+        "contents": "113F12D313183B2C0F0080EB04",
+        "de_type": 401
+      },
+      {
+        "contents": "33B9E9DBD10F",
+        "de_type": 838
+      },
+      {
+        "contents": "EDF90FB1E1E1D0B56F88F8E52E9F28",
+        "de_type": 649
+      }
+    ],
+    "encoded_section": "7C9013B26979B83B32E69A1562F16DE75E14319110006B6BC738CBF9DE91F89702F34C609C239004E53E0A53B0F500690D822ECF8B51533921124980942C4C52D2BDF88BE78D4CCCE1F7B9334FE9EF5FA7846D447BABD7149F092C75AFC759AA705A511848528674C4A75131D2B0FEFBDA757DEF4319F405DAC80EF1D9",
+    "identity_type": "provisioned",
+    "iv": "84465E974A7F46A57204E7B87ED0AAFF",
+    "key_seed": "E00C8B52A62D38CD16051B45E43ED15D643A93FD6F673B03448250D608D10535",
+    "metadata_key": "3E2F563D9D36B4AF7752C0C19548A5AF",
+    "section_mic_hmac_key": "5FA9E23CC79D9776D137B5928675B099089A5EFB01BF98F6687C66BBDB3C334E",
+    "section_salt": "6B6BC738CBF9DE91F89702F34C609C23"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "246DD4A6A94037FE404D0A0EF4606013",
+    "aes_key": "B80A4E7A36FECD53741D1832DA6135AC",
+    "data_elements": [
+      {
+        "contents": "FF7E4C70C4C530F2728E854ECF67475F62905652931C8B7D95CE",
+        "de_type": 867
+      }
+    ],
+    "encoded_section": "549013AD258AE82CE83D89E404223234B3AC95911000D4C424C2D921D1248156D8D5AE0B40A2900108EBB7D35A6FB92BBAC4DFF57F860E87A043D0B90A06B94C6282265F668887704AFE03D7D6582F0816A5326028",
+    "identity_type": "private",
+    "iv": "2CF2A660A004D8D204498034A9C28C04",
+    "key_seed": "03982AE5B7459AED3DF2C506B459A366A17E98F81BD7DF3BC27492D0C60AB88E",
+    "metadata_key": "26C5F75F61DBD2E1E014D7EBD5259EDD",
+    "section_mic_hmac_key": "CAB0A73023E9B8CBDF76C30DFE90FEC62423FF1328BB239C7F7064E49255464D",
+    "section_salt": "D4C424C2D921D1248156D8D5AE0B40A2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "14369DBB0C59ED5213EC3886FCC36B32",
+    "aes_key": "3BE5F37F21F48652E478248A61745106",
+    "data_elements": [
+      {
+        "contents": "7B5BB22FBEBF31",
+        "de_type": 256
+      }
+    ],
+    "encoded_section": "419013E3C20D9A0D8CFF73CD40DC2EA192F87D911000E26F9F9CEE62E88574F9614FDF510F5B9004BA4F3353BF508F98B6B06BB3B36442AD6F00882B337E8202F717",
+    "identity_type": "provisioned",
+    "iv": "16BB18DA1471AE79153EC619BC92D006",
+    "key_seed": "E351CE8EA42F777F5490CA51A37836EFFC360847D086D0181F34C50B48A84CC3",
+    "metadata_key": "17170F758D7A1BF5D584322C73297E1C",
+    "section_mic_hmac_key": "5BBECE4B2E6F573B52BECA481ECC505F4C38A17657A5CC75B418754E5D19B4D7",
+    "section_salt": "E26F9F9CEE62E88574F9614FDF510F5B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C8C8E6A84C29BEDCE24FEEE95F310A81",
+    "aes_key": "D0BE22BCB73BD71C3FE37C497EE212EA",
+    "data_elements": [
+      {
+        "contents": "95",
+        "de_type": 110
+      },
+      {
+        "contents": "1CA6BD05453648BD3FF1",
+        "de_type": 606
+      }
+    ],
+    "encoded_section": "4790131C7F79B0F1E2086443460FE2AE232E95911000FC13C4CD5778C7E95DDB96C09062B64E900238A595E5A0F6964E89CDED56CDA41DD8391A91782768A7ECD119D3C12A98E0A5",
+    "identity_type": "trusted",
+    "iv": "2E84FA52101610AAD88549E7608A3849",
+    "key_seed": "A06EE64788DDE83EB17B56B49A8EC7596A559E9782A491BD87861F63D4EFCCAB",
+    "metadata_key": "B6B79621B08ABE548DB74B2C2910B691",
+    "section_mic_hmac_key": "B51522E30B6E35A9C74467E74B32E6319A059BD8C2B60343FE9C6DAE4E881613",
+    "section_salt": "FC13C4CD5778C7E95DDB96C09062B64E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1961134C789B5EA15AEFD01B020E6C6A",
+    "aes_key": "AFD569DB55FEE7DD324325167509AB92",
+    "data_elements": [
+      {
+        "contents": "ADE5",
+        "de_type": 666
+      },
+      {
+        "contents": "5A78B8137C56F49AA2A402",
+        "de_type": 744
+      },
+      {
+        "contents": "CD1FEAFD54E39FA95E0C492E25",
+        "de_type": 758
+      },
+      {
+        "contents": "5D931A41C7E445F6C6EECE448FFC54839DB9F5D1F854D9",
+        "de_type": 74
+      }
+    ],
+    "encoded_section": "7390131DD3C5EF126658F5E2DD60B357AEC97B911000A97D706FAD3538F852E485B8E91B9B4D90029973B762AC2D40747B49B7DF31B7BB0071DA2E4F5B4E371E3745A05FA602B3872F4DB9F9805FCFBD6E9E9624E8B05CEE407A25EE98E0865FCD11C08E04F706C96E673BF69E353B692B771DB8",
+    "identity_type": "trusted",
+    "iv": "E1BA0D8B2C19F6336353D6019F0D8D59",
+    "key_seed": "7B0C9CAC1C6FB86BE8E0634E24CF942B571EF10B5BEF56A254E269F931D741F5",
+    "metadata_key": "61B2052FB3E72679CD7AF270FEF714DD",
+    "section_mic_hmac_key": "66217CD102C260D78F693E1E5C070009ED91981060E8554C670B6101AB87D67E",
+    "section_salt": "A97D706FAD3538F852E485B8E91B9B4D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BE37D2BF26F95DA0420AB793F2FD51C3",
+    "aes_key": "94CAC64FAF0883BC5A905AB0D27402CD",
+    "data_elements": [
+      {
+        "contents": "45C8134F7E3A2B0952A12FA06074C1F55E228C",
+        "de_type": 641
+      }
+    ],
+    "encoded_section": "4D9013921E779C25C2F1969FE5EFE492EF05F49110004857A1A663E286BB45649A4E2A95E4C090020E887CA55C65C8F304D7367060AB2D4C08538F57B150310D0DDB8FE2BFD75DEE9C4E0B2D5201",
+    "identity_type": "trusted",
+    "iv": "3F059AB52F8DC52A14C635AAB44A7A58",
+    "key_seed": "DF5565B416A2E7AB41E62C7E2DF6857DF2E35D5EDC4AD2A070E168287A20836A",
+    "metadata_key": "073410FCAA7FABF86F28C9921B05AD72",
+    "section_mic_hmac_key": "A93B302F32C8F81FCEA9AF1011CD9F657B33BE4090CC7F351E0AEC32BF3C4EB5",
+    "section_salt": "4857A1A663E286BB45649A4E2A95E4C0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "771F89E3B46AC6611C69451AD4EDFC64",
+    "aes_key": "F915BE6D3B134480D0A5D7455D4BFE4B",
+    "data_elements": [
+      {
+        "contents": "EFA11DE2127527F334FE8B3458C817A05EC0A227",
+        "de_type": 784
+      },
+      {
+        "contents": "9C33AA668F95CC399ECE329BFDEEDAE8CD1599BFEC83C51738",
+        "de_type": 704
+      }
+    ],
+    "encoded_section": "6A9013B37D84C2D193043679822C766E68B552911000C913144F7DAFC50ABA66049304D883B3900169CD7BC8EC1BF46A0A81358228CA475A03C7730C36BCF2A69161E8AFFF092DDEA4A8B97783C80CB47CA5E777C43A6C840FCB619B23919CFD33FE5DA1EE4CE37F03875A",
+    "identity_type": "private",
+    "iv": "8ECB870D9F4F3DF7E0F61B0F37FAA178",
+    "key_seed": "8A62A2DECFA4345C616E196C18739C2ED2DBEFCF45BFCD3A68D4BBD673ABC400",
+    "metadata_key": "30BBDD7957FFE92AD9AC8F4D638186FE",
+    "section_mic_hmac_key": "57A0D17FD7D3C257222D2862C4EDA3EF89D525634689B41442D4F408940A76DB",
+    "section_salt": "C913144F7DAFC50ABA66049304D883B3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E862AAC7000736B663C508376E8BD3ED",
+    "aes_key": "26BB6FAB1BF2E0042949DB8877820B26",
+    "data_elements": [
+      {
+        "contents": "402462632AADDD04C6419557",
+        "de_type": 818
+      },
+      {
+        "contents": "9E6730409FF8",
+        "de_type": 605
+      },
+      {
+        "contents": "F47F7D404EA0D495FF62A49520",
+        "de_type": 873
+      },
+      {
+        "contents": "287092DE18F81EA128A63774FA885821AE34DF",
+        "de_type": 903
+      }
+    ],
+    "encoded_section": "75901340D2D16C893F60F75377B5BC6D7C15799110008CAF5A78B1E6790F346DB14AFC187FC190028FDC753F6FDF59AB4C30DA74B57848A69A5DA9DD03C4F8069D71CCE6307E698277D98C7C83A4DD5E162C542D51E763C65B88B7F9082AA40B37D55BF387851F2EF0C0124D81C610962905D4022114",
+    "identity_type": "trusted",
+    "iv": "3E1E75C62AA622FD5D532FA03221A5E8",
+    "key_seed": "89112D0AB38C09870723291EB34F41CC1276649D22EC916559C37E5ADA6BC495",
+    "metadata_key": "742683BB2FE3A781C335B64655BDE1F7",
+    "section_mic_hmac_key": "F1FF987DEF82976AE3323B0794E8B55DAF78097FAEC13971E2DC110033ED4B06",
+    "section_salt": "8CAF5A78B1E6790F346DB14AFC187FC1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8E2730566E4C094460D3430F556F601C",
+    "aes_key": "DD80F41866B5C2305F7EDB83DDB2314F",
+    "data_elements": [],
+    "encoded_section": "3790135D8F74283C3477E5A48A53983576A3789110005962F214FD66C62FAFD7ADB0449C91D9900101D4C5113DD0A160D67C7694A365EA98",
+    "identity_type": "private",
+    "iv": "BF345DAE8603A50EBA6E1F53D639EBA4",
+    "key_seed": "7EDDBBCA0C3D3E70E8A1AE0D1537F660F8E17DD7AC70E2B12AD710AD270C7499",
+    "metadata_key": "49E7FD99EA8806E02F7D9266C51E58AE",
+    "section_mic_hmac_key": "FB24F853F734086D0360DE9B5036D6C9262BB446F78E3E8594351A966A95FAC5",
+    "section_salt": "5962F214FD66C62FAFD7ADB0449C91D9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B07E55E2700925068EDB49793A5FBC2E",
+    "aes_key": "00FA5878B9B5C9C67B6B78EA6F7C987E",
+    "data_elements": [
+      {
+        "contents": "E23741BC5357278D7F1FAF6FD06F",
+        "de_type": 381
+      }
+    ],
+    "encoded_section": "4890135E703F79C8BBCC5412BB7F51D7C65ED7911000123652CC63D81642784356825AEFA5149002B8471E8B3673496EA7D67B901D2A0DF2607B9AF1C329F0F716E0D127A22EB3143F",
+    "identity_type": "trusted",
+    "iv": "1D38B3322CD6A4B1E5DD0626D6B3F4D5",
+    "key_seed": "C0F3DDCA80EB2A1A1BF349A2CB48E9EDA04153DAA1DADD20C760C5C4E712D1D2",
+    "metadata_key": "657257C54ED238136FB1CD0F38189EA6",
+    "section_mic_hmac_key": "83CE2AA9DE2D247CF7DDD33519F40F49C6672DD7B68C321153C59501E7527226",
+    "section_salt": "123652CC63D81642784356825AEFA514"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F0B2624C966B5ABB55D185559CC05BEE",
+    "aes_key": "B0CC1C99F199D7B0DFA6A8818D97E3AF",
+    "data_elements": [
+      {
+        "contents": "F8E673AE46653F33686B67CF9641406F176FD36E",
+        "de_type": 534
+      }
+    ],
+    "encoded_section": "4E9013B619CC5D111EE3DD731057171A8E147C9110003777191AEC924C44BDB4A82B1B8CF55990044D4549D7A1B2AB4EB43666D6E04C1AB21F3053ACA9C3C8A8EF4F34DCD75AE8E3443C0BCE6FDE25",
+    "identity_type": "provisioned",
+    "iv": "9CAB7FD16B0FBDA87A216F5BC3C64D84",
+    "key_seed": "D389626DA719AB4CF557F675341E1E959782CC0A975BABAEA6E7B6F106105786",
+    "metadata_key": "CEC5D039323AB0A6EFC0871786DD4B9D",
+    "section_mic_hmac_key": "B2FA1282A7DD0C829E6BEA74AD23B119DA99F144359027FAAAD3BEB2E12AA1E4",
+    "section_salt": "3777191AEC924C44BDB4A82B1B8CF559"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D709C7EFFF43F8B5F50357511634199F",
+    "aes_key": "D9BDAB1A62CD59915C6D87AFD81DCC66",
+    "data_elements": [
+      {
+        "contents": "FB75717581E26ADACE888FC7B65251F8ABAC3C40613A",
+        "de_type": 775
+      },
+      {
+        "contents": "1764F1",
+        "de_type": 536
+      },
+      {
+        "contents": "30EC19D6A92E42606B66FA4436A8BF35786D",
+        "de_type": 154
+      },
+      {
+        "contents": "491A5D8D776B0370",
+        "de_type": 563
+      },
+      {
+        "contents": "1A2C2252D95ECF1233A5A83D20CE56501E741FD8A3A1",
+        "de_type": 74
+      }
+    ],
+    "encoded_section": "8E9013E6FA247F24A139082788D9F9137009EC911000F52EC2909102AA8CD7731AFB755087CF9002A6FA67CF1B1D109A5BF9A45AA25FF44E68CFA66213A90B891313055BAA791C98EA2450AD923CB7A039FB8DF6A1D6F99F7023386BFCE77936BE122B9D9DB17353689C19177F07D850BF2697B3FDF09D4A3C0A4EAEB24D9E147AD481667EDE2C323CE7607A3E31D3",
+    "identity_type": "trusted",
+    "iv": "1326B2D61CDFE279821BA574CD22D395",
+    "key_seed": "E23E916F47CA7077773636B248F20DCC8B3570F5B7035886BCBD4A4C6983225B",
+    "metadata_key": "51C25C132D519D0B8A3D62697731A46C",
+    "section_mic_hmac_key": "AF5C6E5D054F422A1958AF447AA500C6695FBB24A28A30F1AD85898A960C5D6B",
+    "section_salt": "F52EC2909102AA8CD7731AFB755087CF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A90C5F9A4D5EE8C0F093DA60D34E4F7A",
+    "aes_key": "5BBDF9E43276717F469C46331CCDBDF2",
+    "data_elements": [],
+    "encoded_section": "3790131EDB1EE9AAB1D9913865783E4ADD8EA891100068D0833BCDA158BBC5B7486992DFD73190010C8E5201A178300C0997D19C63660359",
+    "identity_type": "private",
+    "iv": "D037D4F2047D995CBB869FE4C0AFB002",
+    "key_seed": "2222133F9A08B0B6DF5DE67AA09B19BBF3279767D9E924533FE77A3E681870D5",
+    "metadata_key": "3527338EBB73E631F165D4334A5845AD",
+    "section_mic_hmac_key": "A4C47342B039235D55E3BFA54E273BD3C250C2B3A9B8C60F846450FDC55D6C2F",
+    "section_salt": "68D0833BCDA158BBC5B7486992DFD731"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B01C0A512EF90678274BFCFEB65B9BFB",
+    "aes_key": "FB0A68F0FAACC559B8B7CE60692B5578",
+    "data_elements": [
+      {
+        "contents": "D1BD",
+        "de_type": 244
+      }
+    ],
+    "encoded_section": "3C9013E9A1064EF69CF0E99BE8718C433CE4039110009532E764C5200635AD10A03DC30287399002DACB0D8438EFED4CD36A27C1AEFDFB48627927EC4E",
+    "identity_type": "trusted",
+    "iv": "36F33FE9F30FF5F345261E94AD27670C",
+    "key_seed": "A95137212D3A3C03BD4A78822E2F55955D833BA2AE8454DA2EDF749F06DD0E19",
+    "metadata_key": "98C80C93560E9287602B9DC167933921",
+    "section_mic_hmac_key": "1E0A6D7D2E12C5E918490B41A8D0B2F1AF8CDDFCF7D968F507BD84B5028B34C2",
+    "section_salt": "9532E764C5200635AD10A03DC3028739"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6EEAB27FB59D9E6CC29C4A77DDA80073",
+    "aes_key": "E272F73E7FF2C352CB16961A117DA4B8",
+    "data_elements": [
+      {
+        "contents": "AC9F54867C2D3A343EE15B46BB21",
+        "de_type": 920
+      },
+      {
+        "contents": "B21F47CC9AE7F415AC85AD33E360",
+        "de_type": 3
+      },
+      {
+        "contents": "A4F7ECCEF25FCBB7DF7C",
+        "de_type": 251
+      },
+      {
+        "contents": "4AD51198F063055EE851A62002E4150C537144FB5C1D1A",
+        "de_type": 918
+      },
+      {
+        "contents": "6B78A9AABA9F",
+        "de_type": 742
+      }
+    ],
+    "encoded_section": "889013985769BEEFB87EFAEFD9016724CB70209110007285FAB75391A148A7EAF2CDB3E7312390015929069EC6D45F3249513153B9AE3CF8BBC891ABC84001532CC0BE7F9068D906C3FA96D915DEF7F6CCE423D22F23F98B6F62CEE6A6206265707AA7C191231B94222884B904BEDC7269016B982B57BCAC107CC419EA378A2FABAB9A9AF413DFFAA8",
+    "identity_type": "private",
+    "iv": "2D1CFBB0145D7E9FE2E12C8E060834A8",
+    "key_seed": "2E8DB347C722FE8FC819707AC6B1D9F1244D91CD7B7A76E35E379F17DF92018D",
+    "metadata_key": "90B7D0F0D7AD2041C06A6F07D4C12DC2",
+    "section_mic_hmac_key": "903E4F3ED660355AD0FDC44DCD556A5A325BA002E430C9015D43495EA3ACFA24",
+    "section_salt": "7285FAB75391A148A7EAF2CDB3E73123"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0B34E362BE1CCA7EA27E689A78185921",
+    "aes_key": "0B25B59E48937801A1B8B2E567E38A58",
+    "data_elements": [
+      {
+        "contents": "3AFF6623B18BF5A2FCAD751E561111AABB6A6BB5F6F33E5D",
+        "de_type": 901
+      },
+      {
+        "contents": "7E6522479D7F",
+        "de_type": 337
+      },
+      {
+        "contents": "A1DA1D6D618A",
+        "de_type": 221
+      },
+      {
+        "contents": "EE348B17E8A41816E716",
+        "de_type": 18
+      },
+      {
+        "contents": "F96BBF72D4138318",
+        "de_type": 639
+      }
+    ],
+    "encoded_section": "7B9013F45B179A1FF35CAAE790906F2B6B039691100014D27591E7A5B662518B0D93211411239002FE9D30D12DAB1418665668DA1CB7F5EC4DAA9CF88CA252CBEAB6D02BBF81945CB5FDB217EC422556D09938E338C8438632BBEE86118F54D7FDA189CE7060AFF1E279D7FC726EB59F1D74CEE318348F248B0A9D77",
+    "identity_type": "trusted",
+    "iv": "41224E5FEA506EA36F51CE022F3ABB1A",
+    "key_seed": "8CEDB96BA8CB14FF94B7C7A3A37A3864C597406E194D69FCF5A871FEAA16CECB",
+    "metadata_key": "08E48EDD4E12AFF47F8AAF55C517C8FA",
+    "section_mic_hmac_key": "2463AF9C4F677BD099151DF4759A4F3632D51F1C41BC96E97EB4476658F3D6B0",
+    "section_salt": "14D27591E7A5B662518B0D9321141123"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A904E6EDDC39B1F3213F1D74FAEBE57B",
+    "aes_key": "AE2236A355CAAAE9D7044AF1B9FE08B4",
+    "data_elements": [],
+    "encoded_section": "37901350FA595EF5F19AA58600FA8356264FC19110007A69E35A44477408600F40C1EA6020F990019BA326E5C0DC4D3DA39BE3EABA175E37",
+    "identity_type": "private",
+    "iv": "05CA9ACE5528AF680023C92BACAEE8D8",
+    "key_seed": "5038A07C7783575EC758DBFA22B5B0C961C9C7BACE1AB44549C547DA05167B2A",
+    "metadata_key": "39CEC4870B31445FF870008CBB598309",
+    "section_mic_hmac_key": "00277572EF8546C2B9D70D0E7D668FD59FEA252347333A76B0FD6A353830BD03",
+    "section_salt": "7A69E35A44477408600F40C1EA6020F9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0E75F1D12F3EF90599341DDCC4E6CAF0",
+    "aes_key": "C63FD8AF5CF7A9B46934298ABBC00693",
+    "data_elements": [
+      {
+        "contents": "E10020BD5E92D8B6D3ADDC0232197F7AD8EA8B10F82DB6",
+        "de_type": 94
+      },
+      {
+        "contents": "9B56332DD723E56CA51F89D5FD126FD40BF6953679",
+        "de_type": 255
+      }
+    ],
+    "encoded_section": "6890138541962B9DAD2E109AA523E949E8D3B5911000C939914DDC703A7FBC857AFA6C1A94369002AFB0809D9C92645644E0A2276F90707E45256A92643432D9288702769AEF6AC4D0C778159A5B4AA0531C612940DE6D832F64DCF9A6EC457C76D3CF42FB5ACFB3B7",
+    "identity_type": "trusted",
+    "iv": "864721546276C7A96CC880DBF5B8DC7B",
+    "key_seed": "9D096BB52548302F9A0F8C6D2DDF1601F2E96F799FE76187DFE2138E7A3FBE4A",
+    "metadata_key": "81C35203EFCFCBE083726B15AC9DC275",
+    "section_mic_hmac_key": "6CA85DEF3BE730365475A93E71330031A6DBD9E48E04BB295FDA5321F496D8D4",
+    "section_salt": "C939914DDC703A7FBC857AFA6C1A9436"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D007D878C6FFFACE78778BC06B98E8D5",
+    "aes_key": "8C1265F1ABAC004CA2D681256B5C502F",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 734
+      }
+    ],
+    "encoded_section": "3A90136B53F00BC73427570D56B25245E31E709110003F1EA18FEF5037CCF30402C46130A70F9002E563FA84C94D3ADEC61DCE418FA76320E5BAAB",
+    "identity_type": "trusted",
+    "iv": "C892BFED70D002EBDCA25750710BFE76",
+    "key_seed": "C4915C71ACA0B455710629B063B5D9286E2CED111FA1C9D638C7069DA933F2D5",
+    "metadata_key": "B44812E7A415896300387540FA9C4DE8",
+    "section_mic_hmac_key": "CF8E967F00EBC62D8729A9A1C4AAFA3288EAE5ED966B12953837CE736FCEF820",
+    "section_salt": "3F1EA18FEF5037CCF30402C46130A70F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C4C0A0A8717305E60D1E1F4EDACB40F1",
+    "aes_key": "B64935A371108F799E67FD260F6FBC97",
+    "data_elements": [
+      {
+        "contents": "BC6B8FC4A146298C2C7C4C04B0BCA9",
+        "de_type": 256
+      },
+      {
+        "contents": "A3C4D6D6",
+        "de_type": 148
+      },
+      {
+        "contents": "82ACEC78D07CA4CC55D05CA5455FE192",
+        "de_type": 755
+      }
+    ],
+    "encoded_section": "639013159D08B00F5A835AB8977FAC857298BF9110009B3429DD955B53030DE7A0949F8051C590019BEDC8B153588FB31C3D7C0B8EB3B0876208647BE21E2AFCC19CC883A03E5A42636CE85778E8D0D7ECAC63B1E5AD97B095EB538ED53C0F20E31A7B5C",
+    "identity_type": "private",
+    "iv": "CBC6CAD2BE51F64BAC34C059A1CDBA3D",
+    "key_seed": "1B755890B9282E3D75A62CF30D8B507C526AC4D69A87DB688EE1ADE45E6FE64C",
+    "metadata_key": "F1C7FA9D59151B942260D9095ACB804D",
+    "section_mic_hmac_key": "8B88E568964992FFEA8B172CEC92CF35A09C17DA53E3B6A4178F30C69E30AC94",
+    "section_salt": "9B3429DD955B53030DE7A0949F8051C5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "46D9D063223E48E1437D30D40B5753F8",
+    "aes_key": "F648B73CE969976B039A16A28433F333",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 181
+      },
+      {
+        "contents": "4E76A9FE722A",
+        "de_type": 265
+      },
+      {
+        "contents": "8CC7337D6BB03B7659C537AF883BA4CB5A6831CFC821ED8F",
+        "de_type": 571
+      },
+      {
+        "contents": "61137B10A9EB95EC8B9988C92C8AE58084962EA4EB8A0DD54F4E28AF82",
+        "de_type": 963
+      },
+      {
+        "contents": "F90154329E618F408A44",
+        "de_type": 319
+      }
+    ],
+    "encoded_section": "8B901349AA55BEBA93CB2C7A54840B9FBB35CF911000FDB1B9359452E3E2CEAC0DD0CDD50EFC9004984C75297EBDC0AF9A194C52F8B51C4E091EFBBE21423579FDD7E020426A58EFE96C0B50D4FDE6835CF20CEBAC6A24718A4423E3420765508987C19C056C8E56231261FE9537C604057D374C7F21B3C7EF84FECD99476B2ED180E4B2E60C0D066F71808D",
+    "identity_type": "provisioned",
+    "iv": "B52F5E947B987B2B1BFDA86CFBAEB325",
+    "key_seed": "71264001CD0F41F3851E55A3694A78A3503C5E9FE5A0B3B3B7AB8D502E49E667",
+    "metadata_key": "85510A6F5299C7CEB851856A36EC426D",
+    "section_mic_hmac_key": "194A3B0426B099DD77F0381EA83D71887298EF577A42D30518B18C7A34B51A07",
+    "section_salt": "FDB1B9359452E3E2CEAC0DD0CDD50EFC"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E0858ABAACE0527B975B26851C8292C8",
+    "aes_key": "CDF94C859322D6AA6A30EFE4D2038652",
+    "data_elements": [],
+    "encoded_section": "3790138224408F0C54B5D42BEE2FC498F3011D911000DB852F256100992EE97EF0F6F931193B90049FD1BC537CFC7F362C6398CE8C7746C0",
+    "identity_type": "provisioned",
+    "iv": "D19FDC0000D6D76E0CE605C96FE3ED88",
+    "key_seed": "A67946C15E4AEFCAEA932BE2B26CA22A3631CAF3963BF24BDB7A839CBC4215B1",
+    "metadata_key": "034314A9C047377E60A04D4D6D24B67E",
+    "section_mic_hmac_key": "D37426DEC6209A1AED271135308F665981D7DE9C2250A7982A68FD129FBC597F",
+    "section_salt": "DB852F256100992EE97EF0F6F931193B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E5D850A6B98731806DD70FE80D14C57F",
+    "aes_key": "45F17F2A11C37D39EA2E14EB6F2CE1B2",
+    "data_elements": [],
+    "encoded_section": "37901322ACBF267B3AC6BBD623E29E4C3CA73A9110003B6349B2E28BFC8EAD832D04EE1D41C6900495D0821E110F23240CF70BDC718DC1E0",
+    "identity_type": "provisioned",
+    "iv": "8A38DECA4DE45018DF71E0F5613FE0B5",
+    "key_seed": "FF31FA9C59DF8135328628787FA48637CD6AF39EF0787506983782D7E32BE634",
+    "metadata_key": "6C2A4E42EBE23C4D726F76B9FEEE9C18",
+    "section_mic_hmac_key": "F05B9956C3C0EF6621FDADB68DDE990EF64AEC91603107F728EC761C32FC3C17",
+    "section_salt": "3B6349B2E28BFC8EAD832D04EE1D41C6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "92BC4AC64813CE0FBCBF063580B8450D",
+    "aes_key": "46FC81523837471CC7B1132E3EAAF8F1",
+    "data_elements": [
+      {
+        "contents": "3C5DB709AF6BEF1A6DB5",
+        "de_type": 44
+      }
+    ],
+    "encoded_section": "439013E00AB739B468075FF17A2F097CA281CC9110004DAC6BD9A7A7499B7171120940ED042990018B201683ED366466ADFB2EB853E969162DA6AFAD259C2FCECB94858B",
+    "identity_type": "private",
+    "iv": "2F91E5A6914064B461D1C006ED76FA2F",
+    "key_seed": "863FB479EFCB6FB70859DFEB44427143E0D5784CDA22DEE6280D75E217720D82",
+    "metadata_key": "7A7F61C5B138A412235574D1A509D1B3",
+    "section_mic_hmac_key": "1FCF532394A9A225DF35E2544418E724EACC389FA5E033F8958EDFF1717C6D87",
+    "section_salt": "4DAC6BD9A7A7499B7171120940ED0429"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A47C02A4CFF31760341922681C976C9B",
+    "aes_key": "CCC21FB62FFFAE008ECF5BD0AA3AF62C",
+    "data_elements": [],
+    "encoded_section": "3790138F26A8BE5D75A6F6F8F6CE5ED388FE35911000FCEDAA0772047E6085B7A3DE0656591B900427E950F6D62A13D2BF10F3AE70CF99B1",
+    "identity_type": "provisioned",
+    "iv": "748F18DC41E1742BBC685E0F699A8A9C",
+    "key_seed": "43902BBA2C0D479E16711B145C936CAFDE2EA717B06E48F913861605673E4352",
+    "metadata_key": "225F23821A1821430F1518C514C45FDE",
+    "section_mic_hmac_key": "EAD438CB4DBB42665F5EBB51578C6889268CF032E82446E6DB78F538CF8D2008",
+    "section_salt": "FCEDAA0772047E6085B7A3DE0656591B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "529EA628E2445A5F44FE204E7287CB83",
+    "aes_key": "D077D4226135FE3CC4E82D9136D013D5",
+    "data_elements": [
+      {
+        "contents": "9B815B76A0BE",
+        "de_type": 794
+      },
+      {
+        "contents": "F0176B0CD2D7ADE497BD",
+        "de_type": 585
+      },
+      {
+        "contents": "FBBD3620FADB7987C5",
+        "de_type": 951
+      },
+      {
+        "contents": "6E6D2A26D45B22C48FBFBF5BA353822DB5",
+        "de_type": 689
+      },
+      {
+        "contents": "",
+        "de_type": 824
+      }
+    ],
+    "encoded_section": "709013ACD9FD3F06A15506252D036301A1D1289110007FD227289748907CC788A03478E4C4A490040BDE2788F193C43DCFE364FAD39822E9693F9A61EC2AF84BF6E409352D804375946F04F76B6C8CA105D29896668E6509C7D9A2B12345E0FCA01318A33066A052344AA55973E26EC11C",
+    "identity_type": "provisioned",
+    "iv": "21FB688EE8D48AE0204DD0FB6723BDFD",
+    "key_seed": "09BC65B83D4A9DD8E665C350AFCD428364EE0C429A26432718129B954AABF45F",
+    "metadata_key": "0A4BF92CCFBE7EE7BA20212B2C9BD9C2",
+    "section_mic_hmac_key": "2B29674CEDF3923E447AEC380E9A5971EA8858B669B79ABE829731A48A69D46F",
+    "section_salt": "7FD227289748907CC788A03478E4C4A4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "27F532D8AC32634E4CA75D32B8F21CF0",
+    "aes_key": "C286EC660EBA9F0D2EC7A6303A73DCC8",
+    "data_elements": [
+      {
+        "contents": "556D2EB5364D03B0D15BB6C2FF22",
+        "de_type": 982
+      },
+      {
+        "contents": "250D3A6C86F50DA0",
+        "de_type": 215
+      },
+      {
+        "contents": "B0D390472D2E4730981C8C9B5520",
+        "de_type": 879
+      },
+      {
+        "contents": "4BD0DDF2F7A591B4F423B8",
+        "de_type": 519
+      },
+      {
+        "contents": "2DF0B2BF2276228A5DA4C99B0E308A7F75B4288A73230B0516",
+        "de_type": 301
+      }
+    ],
+    "encoded_section": "8E9013B2FE9B4E230BDE0A6B4C680E38425A88911000AA44252B7B0597D8CAD27BB2DE2E932B90024B03F77517B8733BDD7FC4A6EFF00D0CD0E9136611DF78E7069F61888E95212A50981F152A7962DA910D35D28A87D0FF7AF72A0698459C5AB90373F3ADF7952A8565B1787C0D5FA6C2AD85E3F2C818AF0D7FCC321D29632B3FE1A9E5B0953249ACF71A5D6D6A20",
+    "identity_type": "trusted",
+    "iv": "40F91D78B10069B117960376FABD0D24",
+    "key_seed": "2FD8F442EDD094DD39EC00AA2CFB7FD0675A1BD7F7941D4F53D0CBD82753E8CB",
+    "metadata_key": "4C3D9AFFE510E1966AC131A89E1F7620",
+    "section_mic_hmac_key": "A54C280F5756F9FA52C63779EBA43987D19A7EDEFB9967AB425BADC59BF61817",
+    "section_salt": "AA44252B7B0597D8CAD27BB2DE2E932B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D4E5C889DF978118233B27AA4104654B",
+    "aes_key": "970E140CD44D7A04EFB008734CEC7010",
+    "data_elements": [
+      {
+        "contents": "85C4B76453D6E516D361CC73B263CE9D034720445802DA220ECF657A5F3E",
+        "de_type": 271
+      },
+      {
+        "contents": "E32FD49D906691",
+        "de_type": 731
+      },
+      {
+        "contents": "7B3C90A05085048B6179D21AD5A6A86A6ED4F13A5DDCAA6AE04E6B98",
+        "de_type": 768
+      },
+      {
+        "contents": "032F3243",
+        "de_type": 307
+      }
+    ],
+    "encoded_section": "889013714CDBCFDC9979F2A631D817CD6F5D81911000B686CC2DD9B1CAF68D2D40641EE8586990022E34067C0F459E6DC7270F4800ADB3332572AAF09C0F3F02D96F7B1886C9AB3337693E4FF929CA72EF3EE3CC4F5A812200784AF925FA20CCAD85A5AD7852BB76CA82B942A1A9BF7BADB315844E595BEA39AFCC17E1DBB66B6E048C605B7441F676",
+    "identity_type": "trusted",
+    "iv": "82D4C9AA85D158ECEF4066430E4CA88A",
+    "key_seed": "08D94818510EF93C263C2F1F29CF026DD9492D6A51C9A8CDA500CA1286DC8548",
+    "metadata_key": "14EC5B29C281FEB2AF4832FB60E1906A",
+    "section_mic_hmac_key": "51694A80381B233D9DAF1ADF4486927BEB090BE27033C68E4C767C3AD81FBD32",
+    "section_salt": "B686CC2DD9B1CAF68D2D40641EE85869"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8B3ACC135A6B5C8563C100BC132C3012",
+    "aes_key": "EB39B2E41C39888C378B488AE2905CEB",
+    "data_elements": [
+      {
+        "contents": "5CED8B3EE06AE3BF23221CD8516F5A320D",
+        "de_type": 306
+      },
+      {
+        "contents": "D44E64F4CCBB96259885825F",
+        "de_type": 621
+      },
+      {
+        "contents": "9993FECFD946C4409519E9A3178868E99C9C2F715A",
+        "de_type": 956
+      },
+      {
+        "contents": "D61947350812F913D6FCA86D0BE8543C399D",
+        "de_type": 641
+      }
+    ],
+    "encoded_section": "8790132D65B8942498CCEA42A0D804A1C01A6F911000D8E290276E0858486D84502DD4CA687D9002D38DF4747B01659AF237FA5A531219AE5136549DADC2B7E717B8F02BC335EE5C1F0D56EC2F477DC8E5F6BD3D376FCF4E0D9D5DCA895BC72F259F18A7F731F595156293CE9237BD2CF392B34332ED00E56695AEF9AB71DBEB9E03784760D8FDF2",
+    "identity_type": "trusted",
+    "iv": "3E60B91D4AA0323C5F01E0E597ECF1CC",
+    "key_seed": "7ABA9927D395596BAE76B09B53E3747C14DDFF26299CEC1C3D27251187E18D53",
+    "metadata_key": "01F04DC463DFCAAF77C09879E550F4DF",
+    "section_mic_hmac_key": "9CAA148E03F3E71D5E61C523CA945873AAF055D6B30AD66FE2D4D00B3701769D",
+    "section_salt": "D8E290276E0858486D84502DD4CA687D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FF3B16C4698751E68F84DE97F35A5FA0",
+    "aes_key": "3BF5EE085D208F3D6E5A6442013C725E",
+    "data_elements": [
+      {
+        "contents": "ACC85C",
+        "de_type": 664
+      },
+      {
+        "contents": "83F79F7267E22A6F772DE90F3B3AFA",
+        "de_type": 179
+      },
+      {
+        "contents": "50B49C934D255C07EDEDB85D21754295DEE043",
+        "de_type": 991
+      },
+      {
+        "contents": "9BB5F0D259BDFA70B9",
+        "de_type": 118
+      }
+    ],
+    "encoded_section": "709013B5B1766D569DF4A453ACE83B0F38E916911000E37D1545FE3474350536BBFDA3FF986790028E3033EFFCDD3FF351F65DF657B9E78DC235D1597CFA8775D2CA4C2F8B6BB104CD9EFF986A2448B871BFEC865668788447245F0AC1B6E24C869C93D25DEFD64D3935B781AEB3D6A8AE",
+    "identity_type": "trusted",
+    "iv": "F2878B2027076B2D71D6F9871A2F0D03",
+    "key_seed": "A7548D59575A8ADF65ED6E5C2B91BDAF3E49F4420BCEA25A47F2DFFA66A6FB40",
+    "metadata_key": "A7689FBC874B5252F84B652A6C801ACC",
+    "section_mic_hmac_key": "1B247C85EAEB89FAE3D9A6F57B342AA2EF11A3D31F99B92B2BEDC33F25E24365",
+    "section_salt": "E37D1545FE3474350536BBFDA3FF9867"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "376B1E2353FDBBEE04421E92268F2137",
+    "aes_key": "B99788E0D39B29BCD2CB9914602DB519",
+    "data_elements": [
+      {
+        "contents": "9DEF31274C87EAF90C3BE1E286CA6ECE487A9592AAA5",
+        "de_type": 832
+      }
+    ],
+    "encoded_section": "509013D0FE03AA8832621507D192A7A032A6AA911000B672CC780DFC5CA8872ED98841695B5190014330021041DAE80CAF03A0921B48EE4DAE14F5A1D5B70B181E47B17DDE48F9E7EE753FB7461464C071",
+    "identity_type": "private",
+    "iv": "8A479EBF518ABDD0F8B6E2DD6E6C3DFE",
+    "key_seed": "038F101C0818A96A4697FCD0C04F83A5E8B305D020C2B1EBD9EF9F2DD47A3A68",
+    "metadata_key": "74BB45EF94F7CB36DA9A6E8922F968BA",
+    "section_mic_hmac_key": "DE187BC6A18B7BEEB0F080D19CAE3A966B04B11F2DE3E0B3A4839B4DAF642BF9",
+    "section_salt": "B672CC780DFC5CA8872ED98841695B51"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4A68B75255C47966CFD09D3E6F4D0F00",
+    "aes_key": "F40B55E81D5218A9C153B4A518EF7965",
+    "data_elements": [
+      {
+        "contents": "1206302B0C2DA5BEF95E297A1002C931B1A561AC0FEF82E59232",
+        "de_type": 975
+      },
+      {
+        "contents": "4C7B43DDC3DCEDFBDBD82A0E",
+        "de_type": 106
+      }
+    ],
+    "encoded_section": "62901370EF584FCB26A18F3353C63B2C6E550A9110002346BA971CCC84FDB572925FDD8415EA9001C180B71BDFB6D03797769B28831D787CC1E34B3D68475BE6BD52BD446FC1F98D46CE95A4E95D6675F751158AA2F32E80E31EBBCC9849E1B38B61CE",
+    "identity_type": "private",
+    "iv": "3C79194828BD1CAB4830FA2EDAE139B5",
+    "key_seed": "E702E9695C5F7A8FB6B07D8826DAB5E93DF485453C1D47729736C247BB5B1989",
+    "metadata_key": "9496D7B7F81FEB95A795BF7D0094DD22",
+    "section_mic_hmac_key": "ED70B19FD1BBC280589C9760473339DE84CAAABD844B7E5B6F373B4F2DFEA1B8",
+    "section_salt": "2346BA971CCC84FDB572925FDD8415EA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A7DC2F6205111E24BC5D3E96A4036E2D",
+    "aes_key": "948FB743319951D6EF15792E57C44CD0",
+    "data_elements": [
+      {
+        "contents": "17FF183A55CFC3D6F761A4319DE5D307A3BEBB8337945B",
+        "de_type": 437
+      },
+      {
+        "contents": "14FE4641B1B15E",
+        "de_type": 850
+      },
+      {
+        "contents": "309BBBC5FD371BD50A09BF5C1935638EBBA64CED26",
+        "de_type": 578
+      },
+      {
+        "contents": "82FA4B93D7E9E8E48C452C3765F30212C5D0CE308E",
+        "de_type": 986
+      }
+    ],
+    "encoded_section": "8B9013531B7DDA6851D5A468CF7BA6FCC96AF19110009595A85248F0E068EEBDBFFC4A67064D9004A0AD96175DB820F281BCA29136E3FA64A1E0599AE13172AB44649AAC952DCA3FE132D516C5735C86E2AF6D741A69D75D3362D18D9C9CF9218ABDB944A24C8DAF25648A3C76334BF4668F17C1A693891BB74CFCB98A0E6F3E4F7B5E7F63ADFD626CA50BAE",
+    "identity_type": "provisioned",
+    "iv": "2C85C7E9AD55CD74962F7494F73F381B",
+    "key_seed": "7C486876D239CE8820A1F0B2DB610DB41CA61A7AE8B6BEEB0C908624D6F8C73C",
+    "metadata_key": "4C62329C44D38B35F5A124CDB6DDB4ED",
+    "section_mic_hmac_key": "A147DDB86022B7B38A5A0EF46FD8A5A3AA8EF58F1A3B29D67692E8DB21CDCDA1",
+    "section_salt": "9595A85248F0E068EEBDBFFC4A67064D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7AC5CB315FF73D315B9D7BA673EBBA60",
+    "aes_key": "506C8FB709BD805F07907F3CADA63A4D",
+    "data_elements": [
+      {
+        "contents": "2FF3236ED0BE30DBA2EFF7B322460D50CBA1CEA89A73D48E002122",
+        "de_type": 189
+      },
+      {
+        "contents": "29325485",
+        "de_type": 667
+      },
+      {
+        "contents": "BE1D11D85F08DC5096CB2C",
+        "de_type": 755
+      },
+      {
+        "contents": "E5A8D258FA69",
+        "de_type": 265
+      },
+      {
+        "contents": "54E1452EF7918625F1C2066886",
+        "de_type": 395
+      }
+    ],
+    "encoded_section": "839013313C5AB1D44BB73DB9DCE0A44381CA5F9110007CAAF0C331734518BAD5BC0AE39D6EA690024326AFCA074771D3B7122DDEAD650CC13735E349EE776FCBFE42C28D8AF0B04F72F453412F9ED8F79D05387362CCEB5893D18016C30315C51493E7A4DA3F0AED6B48B92F3A1CA3A7F3EC8508E26C18B1DF167AF4220A79383D06C697",
+    "identity_type": "trusted",
+    "iv": "38F542B60DDCF1889C98F636AED0DB70",
+    "key_seed": "AE9FA4DBE8FE02012923C404592B04CB6645B07CBC053BBC849BC860169B968A",
+    "metadata_key": "52EAB1D56E20ACE3BFA4998ECD77E75E",
+    "section_mic_hmac_key": "0F5609DDE1DE5F239BD1F96B1441DE52BC2D5ACD27064FA3007C0652064124FA",
+    "section_salt": "7CAAF0C331734518BAD5BC0AE39D6EA6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1371D42BB56CC9589A4E711E94003CF1",
+    "aes_key": "F89B50E8D592AF6598CFFDD4631B98F7",
+    "data_elements": [
+      {
+        "contents": "BD965E4D7FE3BE0983",
+        "de_type": 915
+      },
+      {
+        "contents": "71317D36EEBF7AA7C774",
+        "de_type": 130
+      }
+    ],
+    "encoded_section": "5090134DE55CD88FD6657759CA777FE2A6A5389110006380196708715DC7A15514FCF0C680BA90043BE3270FC1B56DC645FB6F2FE08340A78A7AEE99B6E701C28398BF90CF6A234F664F39263F0B1C12B8",
+    "identity_type": "provisioned",
+    "iv": "6D5FF6F65CCD1AD3CE0E402B14996B5D",
+    "key_seed": "2A965EA9FE93E8AD29738534A581AE4063AE843A84FA26BF5AC4DE9EDE3CD9FB",
+    "metadata_key": "2F754F4C60734B33C40721F3E3F65157",
+    "section_mic_hmac_key": "53F2A6DFD7AEEFDE014E55D7BF8840E5D7A573029BD9BC789F4AF5D83A0FE4FC",
+    "section_salt": "6380196708715DC7A15514FCF0C680BA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5852F713F32A45F394D6CF1503681E71",
+    "aes_key": "53579F776F4D91AE48BAA741D51273CC",
+    "data_elements": [
+      {
+        "contents": "264965713C4FF4C23F6058",
+        "de_type": 957
+      }
+    ],
+    "encoded_section": "459013250493378F298B2F0FD41D3F26496997911000E097C08787305AFFF05C26120584ADCC9001FCBDE7AD1AD06682B2B4E0E9BFBA96CF731B887DF56996A8D3F184BDC5B2",
+    "identity_type": "private",
+    "iv": "586BF8EBA8BFC91CF524513850FA6CB7",
+    "key_seed": "C1DC5EEA6320D89745E956A59829A9F12BFBB0E84D5702D4323A073153A402D0",
+    "metadata_key": "CABC965DC85DE1CC03766E3C3AD89955",
+    "section_mic_hmac_key": "E5BBD68BC259259BD8D7456D0028F4F9ADE138BD9ECBF8B08121095E5385A104",
+    "section_salt": "E097C08787305AFFF05C26120584ADCC"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B6AFC51F6469A1134FC9F3B79C63B648",
+    "aes_key": "0AEFE23D6E06401C54B9EDFD128EB043",
+    "data_elements": [
+      {
+        "contents": "E592EE15CC4A379D37A1336E8AEA",
+        "de_type": 177
+      },
+      {
+        "contents": "16A5D19E7D776BB328AAA2",
+        "de_type": 167
+      },
+      {
+        "contents": "7667074E7BAC9ED1071F6D802D",
+        "de_type": 32
+      },
+      {
+        "contents": "6422E8",
+        "de_type": 397
+      }
+    ],
+    "encoded_section": "6B90131C4A85CB414A096694AE91D2F80F642B911000B029880034337B48522C5743B764F6379002C54B4FDA4EE62DED8E3CEDE200278112467A6BC315CE1394D3305D6AD8389019B042E52B123A729F5FE8AB7D12E16D97D997E926B5B77E72E744C28708F78FD46C9DA7C1",
+    "identity_type": "trusted",
+    "iv": "00CAEF5FD9AC22C1D4D849A1F8405E97",
+    "key_seed": "CAA6234004DDC5868F8754AF727A16EB9CE58007EA363B77ACFA131DA8B8DE64",
+    "metadata_key": "E0EB0DCE07B9F33812599159F0966193",
+    "section_mic_hmac_key": "72A1D922D6D948622CE8A79C84EB61176C5A4624E5879BCE31312C46B7A124A0",
+    "section_salt": "B029880034337B48522C5743B764F637"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FAD0410EFA60449825FFC8516A0FB3B5",
+    "aes_key": "3A65582FCAFB3BDAD34815AAB02C6A0F",
+    "data_elements": [
+      {
+        "contents": "F1E69503995E087568407D6D4A43E62530AAE4D1F234446F",
+        "de_type": 395
+      },
+      {
+        "contents": "D324E4CA9472C8AB06D88FE419426C232D883A67CBAF486BC6C3",
+        "de_type": 260
+      },
+      {
+        "contents": "BEB0E1",
+        "de_type": 153
+      }
+    ],
+    "encoded_section": "759013EA5DB79A4B63F265C79FAE27A1E26D32911000FB31E0B50B916E1F3ECDE7E827BF50E29001F006CF03659E34A07A5AAC66EB68D19ABD36C2B2B95105487E089604722037191C1B864033FEAE9E902C9085A4DAA25167B29E6158B30DF8E0FFEA9F8AC5523813593B4EB612BA146E7FC0020902",
+    "identity_type": "private",
+    "iv": "B9B5A13C98A85049E31086ED7F63A8BD",
+    "key_seed": "5ACDFEBC110EFEAA985EDC3499B192C4C63780076D69CA3453E33AA31B1FD782",
+    "metadata_key": "415BB381B6F26519F4A8C16B3A2B2E38",
+    "section_mic_hmac_key": "617D53C2A4797B14451D556CA739B28CDC74C11599BCA1AA0CC5137AE1E06D64",
+    "section_salt": "FB31E0B50B916E1F3ECDE7E827BF50E2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A0672D9DBDAC66877E4CADA6575E629E",
+    "aes_key": "FE14C2D672CD9D635AA444035A977DCD",
+    "data_elements": [
+      {
+        "contents": "370473F9E9A4CD",
+        "de_type": 331
+      },
+      {
+        "contents": "1091627363EA5D",
+        "de_type": 599
+      },
+      {
+        "contents": "26D956645FD5C2BB41",
+        "de_type": 831
+      },
+      {
+        "contents": "725282C70B7EFAFA41DCFB83486789",
+        "de_type": 703
+      },
+      {
+        "contents": "A6FCE9D3F92AFF803A2EAEC9ED854C84DBD836C2E53DAFF2FBF42EF9",
+        "de_type": 208
+      }
+    ],
+    "encoded_section": "889013DE18750F74B8F143F9531EC602C6F8D3911000DE2483B00AB55A180FF1F9B1F841FD2F9001155420E62FB73633F34D463D6FB6BE6C43CDB46D66BCE9BED579D8C8AF270939D8CD5B758458BB6BF168DD2189A818A421C46177C681B3AEB51971C7EAF979D286C5AEE7C5C8B9F4B2A024629B0481555FB6B91D72136640AA6259C98B6A161869",
+    "identity_type": "private",
+    "iv": "7FC34F901F1CA946F025BEE913D80805",
+    "key_seed": "0E323E4FA86CFC101E020EC3794DC949AB5583CC705081F7EF17098750114567",
+    "metadata_key": "F6DD9E9867B8367443C7454962722B5A",
+    "section_mic_hmac_key": "8B0D6438887EE9AEA8B4AA0C8A3B51348696F8D714ACFC329ADCCAA94D3FA90A",
+    "section_salt": "DE2483B00AB55A180FF1F9B1F841FD2F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "96F1F913702F12AE480B7EAB21F2E29F",
+    "aes_key": "7286CA7480D60CCE64380194BBB16219",
+    "data_elements": [
+      {
+        "contents": "2D8051",
+        "de_type": 395
+      }
+    ],
+    "encoded_section": "3D9013A36724A659838BA6715EC43B10B6018D9110004A50460AFDA8F4151FA5F0D09AB9D3119004351C5DAC336A78804914EABF3048100B413604ED1804",
+    "identity_type": "provisioned",
+    "iv": "9FD8B714A92F6DF61BD8313AE3F7A49A",
+    "key_seed": "3A032816A0CB8C6047394D942A569235A698EF81EECCDA4CE2EA03319FD31EF7",
+    "metadata_key": "DCFEE171874E4F3F44CE3F4C25284136",
+    "section_mic_hmac_key": "4F27828BA59BEBB1BC8D5491A8DABF3B0695E48243CEAC341E6B466FFB1E45BC",
+    "section_salt": "4A50460AFDA8F4151FA5F0D09AB9D311"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "49C3EE4484207ADDF24542801C4A8BE1",
+    "aes_key": "CB1A44E35190A0A40391E9AC0352CF0D",
+    "data_elements": [
+      {
+        "contents": "D13E6A67AF69CD4831EA837B4EED38",
+        "de_type": 118
+      },
+      {
+        "contents": "6CBA9A5D81EE86",
+        "de_type": 576
+      },
+      {
+        "contents": "91806A710A3CB7C48C7F9B",
+        "de_type": 141
+      }
+    ],
+    "encoded_section": "609013306C20AA4B9DAC542AE193249ED0B4F0911000EFE9FADED32A35322200ECAC8AA2881A90029272DBBD9AAC8A12D6F6004F781D1F4D52EA2D558745FB470410EBBD4C176D934B79E574A2E302C32B6AC058CFC3C4A97099EE579974607E94",
+    "identity_type": "trusted",
+    "iv": "8B897A7D823EAC1B4DCE4088B1239438",
+    "key_seed": "97C8CEE0EB78ADDA0E9ED93B32D7578C1C79FD019B59C4FFC93C243608CE3FDA",
+    "metadata_key": "07C3B3BE5A728497F903AC14CEB46CAD",
+    "section_mic_hmac_key": "8D485452833BE483BCCCFD8AC29D62E88798A74B7B0211930CEF86928D20D8E0",
+    "section_salt": "EFE9FADED32A35322200ECAC8AA2881A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "29332896433E0267F1BEC7C68F39BD0E",
+    "aes_key": "52F52B3912CC1D4375D4C7CC363A06C8",
+    "data_elements": [
+      {
+        "contents": "E71F91C189472E376B422A2BBCE9CBF608F93D7480",
+        "de_type": 480
+      },
+      {
+        "contents": "147B9B4DCB0E6D249DE2C41A2AAF577F6EAB2662D792ABE203A602B7C1E8",
+        "de_type": 382
+      },
+      {
+        "contents": "193DB2CE325FF3211237EF564F4876",
+        "de_type": 447
+      },
+      {
+        "contents": "22F03DCAE07E9F63B095F57A37A90C72708295C66BA5B46669272AA16D",
+        "de_type": 335
+      },
+      {
+        "contents": "6223ED9F71639C2228485250CAFE33C98E294D76C1704A539157C6CD5FDF",
+        "de_type": 324
+      }
+    ],
+    "encoded_section": "C390132F02AE5C28B3D32341611CA5B50CB2D491100071C1B6B18B6BE3F8B10456DAFC58DE4190028D41A79087A8FF6623388489853F49A93D41BF1B458A34D85AAC3688B1E883037A0DEB66DC2A3948DBE513A5A2FE44AF75A3CE8DB96F36C7B7F289FF212BDECF375BE179F3200EEBB9FB185E4356005527031F37151971D546F2973D46F00B4F6A0C669725E69A70B6726BAB0553B65CD4FA49F1B56BFABF1A34A7B9543A474B7BA7E74CF7D212F9FDA74A93071B20ADC6A385081922658E66B27267",
+    "identity_type": "trusted",
+    "iv": "C86F257947D0FBEB5F1C7A0F9901D101",
+    "key_seed": "DB73F443904842E9F64F60B67EF63825A2FE8AA122B4633B5782B6FDB976BC47",
+    "metadata_key": "7F5EE2AA799A8E4E3F79C30E7B77B176",
+    "section_mic_hmac_key": "FDC07A4B26BEA7D99987AABF4E031FAE14538A0386922659B5FCCD66913FAB57",
+    "section_salt": "71C1B6B18B6BE3F8B10456DAFC58DE41"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3709DEC44BEDBB170C7652F0248E9DE7",
+    "aes_key": "400777F0893097082B132E298D6B2B0C",
+    "data_elements": [
+      {
+        "contents": "0C4B67C6D9434B025D8E75580C8534E0C7851104F102E9666B131B",
+        "de_type": 269
+      },
+      {
+        "contents": "E2C34FB045408D602FBA91CBE2DCADFA",
+        "de_type": 815
+      }
+    ],
+    "encoded_section": "689013405BED7C212DD107163732A69097B11E911000861DEAA6AD7EFF607DA016E4DE278FD29004937E2B1A97EA25A4AEFF38D95D57B4188ADC5AA57A1B38E4A86FEDCDFD5903ADC9EDBB7EB35B96A689D83FF35BFD7962DA302437DD32394EFC9B8DA42CD33CAA5A",
+    "identity_type": "provisioned",
+    "iv": "1CAE6EB0B86F8C40C325FCAD7BC975A3",
+    "key_seed": "C91B9ECAE0A8EF1646B96E3C6F06B99C5A01B0904E98349BF7974E1ACBBCDC68",
+    "metadata_key": "DD8A480B4A601C38C0FB3B382E646A61",
+    "section_mic_hmac_key": "9BBD9E8CC618CBA17F36BA2593ED4C05DEB69B0F69F2D2917CF37285E62DB629",
+    "section_salt": "861DEAA6AD7EFF607DA016E4DE278FD2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4992036A41F8E54D00A1D3D4359A9300",
+    "aes_key": "69BECDC75EB309182C3DADE59FEEDF92",
+    "data_elements": [
+      {
+        "contents": "8B591A5CAF41CEF237A220785B",
+        "de_type": 941
+      }
+    ],
+    "encoded_section": "47901308D7B199CE04C602DE931C37B8E0CDB29110001463D56B2F97E53F05117D1D414DB9A39001CB5CF571A7859271C1CA2D95AE0F4557A8B146FF2FC636B1A6C948A7136E6F10",
+    "identity_type": "private",
+    "iv": "6B12EF5D3282AC2EE71A0398322D3655",
+    "key_seed": "B306946230C730CCD3B93C0FD74760734AFD01F5DAF1A17BD648505A6439C3A2",
+    "metadata_key": "C42D7A526D780B5D5E46603943A3FFB0",
+    "section_mic_hmac_key": "821AF2677045D3BAF8341C06C72F0476DBF407FA38967F3B08F060E42E2A0525",
+    "section_salt": "1463D56B2F97E53F05117D1D414DB9A3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "04CC1B63DDC7EFE20F035A5CA57AEA43",
+    "aes_key": "60046C736A3EFCD5DEA769D6BCFE3654",
+    "data_elements": [],
+    "encoded_section": "379013C978E90C73B9CE22075761B22E7B66B0911000C031142EF1CFE2DBCFA88DBE7038F4339001EA998FA7111B16AAEE5D76DCCE34F832",
+    "identity_type": "private",
+    "iv": "1425BF85545089772F7A0EC13B31F218",
+    "key_seed": "29C84402ED9B668C4B419AF8CCF3FC53BB771A5E41BBA83FC8D5264E5847F719",
+    "metadata_key": "0102525542E84C81FE13D0E70A4512CF",
+    "section_mic_hmac_key": "4A51F7871DC1B6363526C10EFFFD3492F38B5C352DFE2EEF206A9D8508BB8FB8",
+    "section_salt": "C031142EF1CFE2DBCFA88DBE7038F433"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2C87AF2AA5587D0D186ED5420388AEC2",
+    "aes_key": "2DA61DF51325B07DBC63B481DDCDE64F",
+    "data_elements": [
+      {
+        "contents": "6DFF113A772C2EBFEF3BBF18A36294FEF1D734BFC360C376",
+        "de_type": 548
+      },
+      {
+        "contents": "89A698C96D173176BBFC3538AFBEF049CC59B34B14",
+        "de_type": 546
+      },
+      {
+        "contents": "E2F16DB52F89",
+        "de_type": 266
+      },
+      {
+        "contents": "DA22DAEC64B917FD589D805253",
+        "de_type": 685
+      }
+    ],
+    "encoded_section": "839013EAA633D971185BFABB394355E4E31064911000C21027A41702F6DFAE49F1629A8E39699002BF31A3881922775031E2AAE919D18CBDFD195B02DA0445F61DEB7B7E655C8A975938B4A47F0FB27356C8A419774DF6A0FE213E84BA6EA1A0EF45F40EAED8ECBE37E53BC6542DFD0D3E582227E27A113785022CCEEFF15D15D94FFCA0",
+    "identity_type": "trusted",
+    "iv": "AEFC3DD760BF1C8A0C4D3F4D6F4332B6",
+    "key_seed": "63CB4A41E5862904E15594B7FB570AB2D20BEAF67CD053241796583FC4BBD471",
+    "metadata_key": "D1A562E45D9D59A9011D511728F7543D",
+    "section_mic_hmac_key": "BA11FB7271F9021364AD11352009E9452A74EB81FB340C526D9D2F5DA0CBEFBF",
+    "section_salt": "C21027A41702F6DFAE49F1629A8E3969"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "79906A0C8EF398B55A1B7D6626F780B2",
+    "aes_key": "36EAEBAA45DA5B60809CA32832414FC5",
+    "data_elements": [
+      {
+        "contents": "FA3FA3A9F0756E567E2A801656",
+        "de_type": 868
+      },
+      {
+        "contents": "45F76C1B",
+        "de_type": 816
+      },
+      {
+        "contents": "B3816FC81347A8D40FA3937BC2CC82C137D7B6067751AD29CCEFF635702C",
+        "de_type": 379
+      },
+      {
+        "contents": "360C1E18456ECFF656F8AD95220EC360ACD246BF31",
+        "de_type": 213
+      }
+    ],
+    "encoded_section": "8790133E894393E3BA6C82A326DA85D9031F089110008C2D013111DCC58A0DA04E0EFE9C45319004864DE8CBBF7C31B013DD161A12A92A2C25E57FD4465391B1E1A51F6A7420EB21A6E72917783613E65E885B08BDA69B1A6015E249A2912B3EC997B8972459459270601B6AD2A41BC1E73976A86D8FBE6473C844C32157575412717212D045EDE9",
+    "identity_type": "provisioned",
+    "iv": "0E4490BF80B78BC51FE57DB85EB61ACC",
+    "key_seed": "A8850343015360DFD5FF867CA561B5B41CC0B6BCCE62CAB56055E57AD7EE2614",
+    "metadata_key": "84CDFC0DC3222FFDBBE864870E67A8D7",
+    "section_mic_hmac_key": "35A9250370418DA082D0649DCA2C1F2C5581EA3B444905B33D83601A1B16C1FB",
+    "section_salt": "8C2D013111DCC58A0DA04E0EFE9C4531"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7DB249FB5D7BFD40D6D94D4AB36E91D5",
+    "aes_key": "1236191281B7E6536582FBEDAF9DA8E5",
+    "data_elements": [
+      {
+        "contents": "119D4427C80B8E",
+        "de_type": 760
+      },
+      {
+        "contents": "EC6A6CBDDF6848B16FF08DA7CF3FA284",
+        "de_type": 739
+      },
+      {
+        "contents": "B0E04C01243711008D6EA5D07C161F6195C5D3",
+        "de_type": 462
+      },
+      {
+        "contents": "DD978C138650CDBAE4",
+        "de_type": 743
+      },
+      {
+        "contents": "675E333C4398FBDB5DA8E19C",
+        "de_type": 403
+      }
+    ],
+    "encoded_section": "859013ED4DDEB3D0D051B4EED779AC376BDAD1911000C0643734B37286129B4562EE0BBD13909002B4989BEBC63EA94FB8B876A2BED6797B0BC4FB7579D7406D5BA3E0BB069BCA2503A413B61DDC92002924E14321086EDB5799981AE6375534852E18BBD7497FA7AF7613020DBA383848020A7D2503027F2141669BFEA617C2195E5608407C",
+    "identity_type": "trusted",
+    "iv": "9F2743DFAAC832E0F80884CD326918E8",
+    "key_seed": "03B79B00D65494F60FF94D2606BB2E27ACBDC599D7255B2A74B96F631EB0CB0E",
+    "metadata_key": "996FB9AF1F3A5C5465BF8704F76410FD",
+    "section_mic_hmac_key": "49A636DF6F31E0E4D2A77EB1E6209ACF98AD16DB3E177E50F528116D445D3FA9",
+    "section_salt": "C0643734B37286129B4562EE0BBD1390"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CEB98B4B0D841160C2E35158B1037983",
+    "aes_key": "F053887925734FF405C94A8F3092C193",
+    "data_elements": [
+      {
+        "contents": "5F8FE0C8238878BB",
+        "de_type": 994
+      },
+      {
+        "contents": "CDED7F45F36DD2BB6C5E5BE59E",
+        "de_type": 566
+      },
+      {
+        "contents": "B8E19720ADA1842AFBD9F20A979CB6",
+        "de_type": 22
+      },
+      {
+        "contents": "ADC17706EEF38EA4BF6842C76B00B7A0",
+        "de_type": 864
+      }
+    ],
+    "encoded_section": "769013FB3E7BE1C7C57B079D1C68C1FDF94F499110005B21E275525D3CB89AE0C75679294F3A900115D44F49C8842FF45C041D7D9D3715675882EEC328AE875937FF27A2F98D28FC0FA595179DFB5DF10527AA494524553C57B7E76DDDD9F18724CD4BD2891947A5CECA8486F0C59A5C62387BE80B7DB8",
+    "identity_type": "private",
+    "iv": "E0052D908B8B534F17012FE22FD8C1C2",
+    "key_seed": "042A0DDEB37D4E1243415F80E9AC5FEBC7902B0F4EE29E7B0DCF9F6527D6ADF6",
+    "metadata_key": "4393A5FFB48F851733D1B5A7B790BA35",
+    "section_mic_hmac_key": "A85552BEAFCCC741A72DF287A142CF3F998231B97755E3C70FBA249989C053A1",
+    "section_salt": "5B21E275525D3CB89AE0C75679294F3A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "745AFAFC0D37846B5E0C490DDCA6B0FA",
+    "aes_key": "806FF3273840321E8944A21CBA372A14",
+    "data_elements": [
+      {
+        "contents": "73B86820241EC5E7D125D74FE3D2",
+        "de_type": 315
+      },
+      {
+        "contents": "56DB7131D8D9555B",
+        "de_type": 495
+      },
+      {
+        "contents": "8E6A76DC340E0AEC07D79C",
+        "de_type": 895
+      }
+    ],
+    "encoded_section": "619013D03954EA8469566EFA768C74AC4D2261911000FB23753432B9B3628220D45365F2AF579001083DF8CE07930F669C932656AEE1259E713C6D323E8D102093CE210868F5BBA9B4851B1294C512B9D778BF43BAD9A859BF57409A14294A756E35",
+    "identity_type": "private",
+    "iv": "0E3C4A8E72AEF423375202C1176EB2B1",
+    "key_seed": "60144BFB597852910B428D8DE204D6D6E7EABFF8CCB6B61F8274C2B38CD02BC1",
+    "metadata_key": "BB66D2E7C096B7AEE4BB671BE9071AF2",
+    "section_mic_hmac_key": "596D58D71B171946CF75F706CEF421DAD978584AD60E979DCC737D95BB7C0CCF",
+    "section_salt": "FB23753432B9B3628220D45365F2AF57"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9B363547BB9948D07B69AA3892AA525A",
+    "aes_key": "08E1C799F15F1C96C27A4A1B37AEC7A6",
+    "data_elements": [
+      {
+        "contents": "E553E23A099E8329DB",
+        "de_type": 754
+      },
+      {
+        "contents": "D9037BB04B6E600107E7DF0A67566115EA3F619158D938",
+        "de_type": 244
+      },
+      {
+        "contents": "3571B7",
+        "de_type": 517
+      },
+      {
+        "contents": "60C498C9A191CF99BDB4C8BBC9201BABE9BAB9AB30",
+        "de_type": 377
+      }
+    ],
+    "encoded_section": "7B90138719640172A7CA979ECE524C2CCC5B0F911000C470C9EC5726236DC6C06A591EBBAE7590021E80E98CE6E81A29B6EA96E5B7EC0B496E21D40C10F430851949B30F38A1071A3E98BF8BBFC9CC8A13AB30B73518AA59D96DED687C9409A3C46EE8AB3A4B0BA118AD67F2492522AC66391FFE18E7F41520F12458",
+    "identity_type": "trusted",
+    "iv": "6E4892B791E5664DC249425A2E7FBC7C",
+    "key_seed": "5A08FAE5D0EBAC61590102AA36711002B7800BF744CB7863766BA932F048B8B3",
+    "metadata_key": "EA9F3E7C877395501F3D890721C96996",
+    "section_mic_hmac_key": "2D774C8BF3CE278132DD7EA105A125A95ABFE9EE1EEDEF7A191DCCB02155B816",
+    "section_salt": "C470C9EC5726236DC6C06A591EBBAE75"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "017CB0E1120225BD43E6B17407129A4A",
+    "aes_key": "236EDB5FE7F023E81E2772AE8C371905",
+    "data_elements": [
+      {
+        "contents": "FC6C",
+        "de_type": 842
+      }
+    ],
+    "encoded_section": "3C90139BDA46CDA896DC46E1953D4DF84DFFDC911000491F606D2C12BABECB46793C4FD4DD9D90029E9A317E650F42EABBEF539D64E97459ECE92C7716",
+    "identity_type": "trusted",
+    "iv": "3E43A43F32F7416F10FCAC7AA29F53CE",
+    "key_seed": "C536746CE8AB786BF064E636500981AFD86FDAF6D4631B161AA93FE09EA47F0E",
+    "metadata_key": "AE51F9455468275B5F1F3624602A4E76",
+    "section_mic_hmac_key": "BA03F46EBC0147C0582AA5BBAEF21D69737DEEE365F042F2767D660B6597B2F6",
+    "section_salt": "491F606D2C12BABECB46793C4FD4DD9D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8134AC1B9E894BFA8F57429D27BE03FE",
+    "aes_key": "8E466BF38FD6488483AB864A1B9B2463",
+    "data_elements": [],
+    "encoded_section": "37901372B0E373CBA7A88E17D27393CEED2A9B911000580E141B47F88A102003E045B3306ECE900260CEC45B63507146E4F2021A989E4107",
+    "identity_type": "trusted",
+    "iv": "9ADDE95FF00ECAFC9BB6DBE00CF4D420",
+    "key_seed": "DB86E0A4E7BAECD6971FD06F4EA08B999E321D18139B295E3820C5C0A1D9EA6D",
+    "metadata_key": "AECE395205E92B4E824736CD2EE10388",
+    "section_mic_hmac_key": "A892FDFC74404F4639A18BD6AA1C732FA67A3F76EA9A4455C241346FB6088646",
+    "section_salt": "580E141B47F88A102003E045B3306ECE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0E11B8EB767BF23776B2242E7F80A17A",
+    "aes_key": "CA4F5AC11D27A32BA5813B32CE9FD176",
+    "data_elements": [],
+    "encoded_section": "379013437CE707D51EAD22AF0E3D32C70129AD911000679009A3AB6E4C7835C13FA51C82745D900428D8BCD3A330E9A52A90BCD6C042E918",
+    "identity_type": "provisioned",
+    "iv": "4A026ADB419CF7A487500F4358C45D59",
+    "key_seed": "D373D3E85CF5AA0813907E92771B96A67823D7D7644AFAAB76324814008DBB89",
+    "metadata_key": "9E23DE492588EF5A6F10A9DFAA038A16",
+    "section_mic_hmac_key": "C4A11FF865C6FD2544C54CB7D16DB70136AD68A4B663DF5F530DE273EE36DE4E",
+    "section_salt": "679009A3AB6E4C7835C13FA51C82745D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C9CC54A5BD1EBB46FF5246ABC60AAA8D",
+    "aes_key": "BF5E5C3153CF9792AFD6CDF96A2C5344",
+    "data_elements": [
+      {
+        "contents": "9D4B5F1E5AB4A177310F992112F9BEA680",
+        "de_type": 886
+      },
+      {
+        "contents": "2D36CF0F4C8F1B36DDA5D23FF20EB6CD379F92",
+        "de_type": 70
+      },
+      {
+        "contents": "342637079BF30209525A62AE1D233B717E",
+        "de_type": 396
+      },
+      {
+        "contents": "D112664E69B12FDF70",
+        "de_type": 38
+      },
+      {
+        "contents": "D9AF0F568322C795328C8B4C1788987C398192A22A",
+        "de_type": 678
+      }
+    ],
+    "encoded_section": "979013282215741E4345A78D01377EFF9E84189110005B4B4A350A45FF863C3EAF2AB7F71C0790011B34CF8E42769B0FB7FB3F66C45BBB7B7F2160D74F03D27F7F1AA2D8C52FDC024CF2CF9A7EF240540C04FEBA619ABFAF2D79C7BC35421D09D20FACCE2A115C262624A87057FB67B440D453259A65476D5134E1E263A128B7192920FC7DE545B0EE63F83AD8963197C51E056FA2C6200F",
+    "identity_type": "private",
+    "iv": "B084B7392E0FF2BA4DEC9EF8E26B1A93",
+    "key_seed": "33565BCB2529940138116B4DB968D4D320B749D470FB480FEB2B9A6D6971EAE5",
+    "metadata_key": "A3988254E6FEAA0D759AE32D048013AA",
+    "section_mic_hmac_key": "41B9C812B94BD2AC4AC218F8DDE986E2D45EEBB89A0882C438933B001DAB2181",
+    "section_salt": "5B4B4A350A45FF863C3EAF2AB7F71C07"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4144053F0E007DD7F1D38291852FE2A4",
+    "aes_key": "1E65E2D1E7718EBBD972BC2042B9B11F",
+    "data_elements": [
+      {
+        "contents": "3AC4BEE4E3E37B706980475F09EBDD",
+        "de_type": 102
+      },
+      {
+        "contents": "7876A28FE5101EC499AAAB",
+        "de_type": 112
+      }
+    ],
+    "encoded_section": "559013343E829B75A77E72E1F5C0EC1ECE8EC49110004F47C2E91506FF96DA391B2BBE842F2E9002B9E7953047832B10DFC880CB57E7F569953E97CE5469368BFDC23E298878D41A775E405A97B0944DE64EFFACEE3A",
+    "identity_type": "trusted",
+    "iv": "AC1839A4D9EBBC369DF0E5DE3E9FB486",
+    "key_seed": "F53B91BB8F5F267901F6D0C2E6B511D37F23F41356B514C5BDCE04AEF60A7624",
+    "metadata_key": "B82E90A5753E1604C5C50790383528B3",
+    "section_mic_hmac_key": "FBB75466A337A9EF19DAE241B45E6366B3ACAA49B3678F6D410CF6A4B915EBE6",
+    "section_salt": "4F47C2E91506FF96DA391B2BBE842F2E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "DFBED8D9AE83990BB427226E21034CB0",
+    "aes_key": "AD572A7C029F77B3C54ED924525D3229",
+    "data_elements": [
+      {
+        "contents": "3E120DC6A27E75C6B4D1D1A1C9F7A29C6B3B9B0F14E45D175F418711",
+        "de_type": 213
+      }
+    ],
+    "encoded_section": "569013F5A38DF3EC99C4156E794798A6F296D9911000986627D3A935F5C710D101A38FF8286890024F59E49C79DC9C0E298AD99275CECC28E1B8EDDEF0C3C2B4A7C984A2CE21DDAFE6E918D16575D2D6624D8C44673699",
+    "identity_type": "trusted",
+    "iv": "AA8AD31CCD7C59E5EA8186E39301A7F0",
+    "key_seed": "AACADF297C376735AF0138DD2F3F4B5CFABF32A8762275DFCA9EA2295E86A28E",
+    "metadata_key": "19528CA6D4629802FCA9D11353A60C2C",
+    "section_mic_hmac_key": "79F40360C6EDB9881CC05F01929B36746DB5F046093AFF5C2F3721BC5DB54A8B",
+    "section_salt": "986627D3A935F5C710D101A38FF82868"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8BEC81AF56FA2AC4193B05558C125204",
+    "aes_key": "AE9C86DE09A15A4F3859D801E0678262",
+    "data_elements": [
+      {
+        "contents": "4340F3E3DB2B1E56361256AF51DC6526",
+        "de_type": 221
+      },
+      {
+        "contents": "CF0E82",
+        "de_type": 309
+      },
+      {
+        "contents": "3EAD73DC8251FB1A5921E8255EC3CE3C12BE13839BF284A799BC",
+        "de_type": 508
+      },
+      {
+        "contents": "E261280F5BEFFFACD5D0ED3CC81F0C1BC1631C2E5D9A",
+        "de_type": 929
+      }
+    ],
+    "encoded_section": "869013F05F6FE5E4F7979EEE836171656BBA54911000465E3D595AAD47749A7384B123CA18E9900246F59681BA8A29A4B50D6B4EB3A5A37571EA7EBECCADE01435C0AA8A59440DCC455EC858FBEC686DC4CC3BB20F562B161BD729338C4FA13753F30FE021F5747CF11957D338E0256D07F3AF7A9D2A949DB748A997D6466F6CC5C6F80614B2A9",
+    "identity_type": "trusted",
+    "iv": "2E91EDDDC24CC419B76CC16976B8833A",
+    "key_seed": "11FD266669C2E6C279D8EA69F540B784989D11A09568A19F66D2ED0C1D6DBE08",
+    "metadata_key": "9B21D37E086FFA839142C0A22F3D65F6",
+    "section_mic_hmac_key": "A7F1A78902BB05FBB7B54D35CE9225330B349654936258EF908C11D4E6F3BB47",
+    "section_salt": "465E3D595AAD47749A7384B123CA18E9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "801D4CA35A70D4C283D2629EA148170E",
+    "aes_key": "65B82E5D5498A2A0557B1D39C0F5950F",
+    "data_elements": [
+      {
+        "contents": "A02494863822B1EA59AC8EB4",
+        "de_type": 243
+      },
+      {
+        "contents": "4C200134B8F4ED2481229F256DEBECCB6C5EFF7A8ECBB9684BAF",
+        "de_type": 900
+      },
+      {
+        "contents": "1CECAE0187941B94F8",
+        "de_type": 950
+      },
+      {
+        "contents": "DB6AF61301EA124E883131733344543394B9EB2D18",
+        "de_type": 77
+      },
+      {
+        "contents": "",
+        "de_type": 542
+      }
+    ],
+    "encoded_section": "8990135245B0569137C5BE751DB35223449F6E91100054E61830D0D0DD6A1F6B3DE7013EF06D90044DAE7D1C3F0BF3E5104C1DD01FDD1C5DFC6963613291EC87DEE2ABBC16C9D2BCA620921CA07A64D1DF36C733EAC39D997BCBF38E4D252F232C58CFF37697A13C04EA5284FF0BF47C11E85805018DC6E3495D61EFA87FA298724C267F1F29031B2C9D",
+    "identity_type": "provisioned",
+    "iv": "DA7D5D3FB17D06F46DD8AFB6647A44AE",
+    "key_seed": "78D9D6D609D520DA4339EBF814B40DC3C80AA0096C2E7948D5D4B92FB9243084",
+    "metadata_key": "ADCD26D03B8A1AF8C0FD9B3188124D19",
+    "section_mic_hmac_key": "B0430F46E286EA342ACB84CA42C151174AA8650353CBE5B064BA37DE66D823AE",
+    "section_salt": "54E61830D0D0DD6A1F6B3DE7013EF06D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0CEA8476765E2C9409E38AAD4F554E63",
+    "aes_key": "BD88F43CAB6E5D6B2BCB69424BCEC9F9",
+    "data_elements": [
+      {
+        "contents": "D831FF5C4756",
+        "de_type": 24
+      },
+      {
+        "contents": "8689F2BAF45E",
+        "de_type": 805
+      }
+    ],
+    "encoded_section": "489013E6F67A18C298C579609785D002870A829110004B7B840D8A6CC70F61B178722D71FD419004B85364FEB66321ACEEBA3A8C7133634867852A5A6A1B2A18FA032B1853288CEB84",
+    "identity_type": "provisioned",
+    "iv": "1FC05B651BB33F007EE45A02E7AC904F",
+    "key_seed": "667CD8F62F8A77492DD85747934C30D23D3658252198EBA915382603CD2B6CDB",
+    "metadata_key": "68CF855C510241813831D894E104173F",
+    "section_mic_hmac_key": "9BF0F323006089DCFB6181BE51EBD8DDAC8692E6C8B36A69EFBF85A7C073E31A",
+    "section_salt": "4B7B840D8A6CC70F61B178722D71FD41"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EC30A0D58034A34B8E5C559F280F509E",
+    "aes_key": "728B0357E323756231894D94286C3AB8",
+    "data_elements": [
+      {
+        "contents": "A7F5481741CB91CDE0",
+        "de_type": 894
+      },
+      {
+        "contents": "2AB65DA2EC0508A1",
+        "de_type": 303
+      },
+      {
+        "contents": "380AEEF682FD5EDB89F02A05",
+        "de_type": 920
+      }
+    ],
+    "encoded_section": "5D90134D517709AEF9711FA7C2AE7B5ACC3ECA91100080E251133A8F0A7747C29C80983F07A790024BD1D93EE6C137F6504D32C8CAC34BCE856EB4FA298CE7801B8F56463E85457A15C15F7075F06F2EC32AA68CF9794298E42F07AACFFB",
+    "identity_type": "trusted",
+    "iv": "1C296F5143FB2934F70CDC21DA10965D",
+    "key_seed": "955963D16FDBA60A066C6F698845F5A28A9D6D0099B4C77B443B56B249CBB1D6",
+    "metadata_key": "4AB7C96061268E4C9778E218F0E34ECB",
+    "section_mic_hmac_key": "D0496A75DFD42062C8DC17A2424ECC60EFF3890942702CF45733DCFEE97C58FA",
+    "section_salt": "80E251133A8F0A7747C29C80983F07A7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EDB71DD72EEABB1066B3E8250E2E6838",
+    "aes_key": "B0BE972933B74F340C2FD12F033D470A",
+    "data_elements": [],
+    "encoded_section": "3790132359338C99B060B1F9B0CA90849B5B7C91100073BA46B076BAB82D101B0761C8B676B590026EE24CD8FE1FEA2573DBCFF4F2E712CC",
+    "identity_type": "trusted",
+    "iv": "47E21BB24E2B6E7E524F3B9EE2B3D661",
+    "key_seed": "2F6D9575641AD9DB592DB0D601A38DC7C33EA96141E7E46F2C12D1DD4FB5DB58",
+    "metadata_key": "16897C47EAD110C4A40E872DE97BE7BA",
+    "section_mic_hmac_key": "B383738B32E347E6CA30DD1AB86CD8C6C6F3817FF5DCA69E5927FFE970966B30",
+    "section_salt": "73BA46B076BAB82D101B0761C8B676B5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CF3696F6CB3680CB90959720B0C0C8B0",
+    "aes_key": "DEFB7155A421A3C00BCA9521B9802212",
+    "data_elements": [
+      {
+        "contents": "BB94E1E012E8C01D78B367A8676B719687FA84832A",
+        "de_type": 100
+      }
+    ],
+    "encoded_section": "4E90130470C8FD4D0863A99E0655588B3677999110001560EF35DC8690A269985B834F5DF50C90015F68C10A7D7C940497ED4E77972D7A694E425C5CB5CD557378D55E31F445E7D38CF41BACC3584D",
+    "identity_type": "private",
+    "iv": "C493FA8A5AA5716991EA0A1825B88634",
+    "key_seed": "DFFB9A504328A5836EC19500C592E8706E45A8CC9530A63B6D57A50D81DE4368",
+    "metadata_key": "24DBE2F5B5592F053F7E969D336384F9",
+    "section_mic_hmac_key": "6A0717E12EC5CD7EC7B18B3A0A597CB73650649DE6E9B11947ECF3552E72BB80",
+    "section_salt": "1560EF35DC8690A269985B834F5DF50C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "96C29DB449A05ABD7BD2AA8292B5B1A3",
+    "aes_key": "48A7161729D51256FB3A22D800C9F4F8",
+    "data_elements": [
+      {
+        "contents": "2A33FFE5AF0D",
+        "de_type": 146
+      },
+      {
+        "contents": "61F2724E94BF6C6B841EA6DA24",
+        "de_type": 777
+      },
+      {
+        "contents": "79013E7CBF1E6757B28357C09CD8DF3F06EA5C8B29790B6AF12FAD",
+        "de_type": 19
+      },
+      {
+        "contents": "4E31D2948A6FCB9981BA3423",
+        "de_type": 85
+      }
+    ],
+    "encoded_section": "7B901309CDADEFBB30DF2A333B1F1211EFF789911000317126A212B7088BCA01CEAC599314F39002C21EC35FE4B66BE19DC9DAE8FEFC0FA8E0CEDAF4DE232FD592D75432B7D99511A15AB00D4359120C22D4934C0FE24C00B612684FAD1B4B8ACADC18BDE97D5C7BA24454248F2B816DBFC326EB73A7ED11C5F4B3F8",
+    "identity_type": "trusted",
+    "iv": "D85729A8ED6F4206E1557D6C0B1A6767",
+    "key_seed": "76BCB5FF9343256A836AA5AEAD8462A0FFFC2111B70F095635995A2AA6C60FFC",
+    "metadata_key": "B89DC800A35AC2C0AFE5A91834D7AD2F",
+    "section_mic_hmac_key": "A9C86D50FB79A6B609EF7F805E8EE1738B278AE7FCC46A0B5462089755752E6E",
+    "section_salt": "317126A212B7088BCA01CEAC599314F3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C827366ACD1EB08E13FFBF22716C436B",
+    "aes_key": "420312434A398DF54C75FDE9FC81E919",
+    "data_elements": [
+      {
+        "contents": "79",
+        "de_type": 784
+      },
+      {
+        "contents": "290E4DAAAF",
+        "de_type": 11
+      },
+      {
+        "contents": "",
+        "de_type": 225
+      }
+    ],
+    "encoded_section": "449013BD50CA32BC08AA861296C928AFD29D20911000F29D169C5E837778E5A31231ADEA015C900287033FD9D655A2A75CFB2D920787BFB3A9BD5574A01CF64B3BFBEEE838",
+    "identity_type": "trusted",
+    "iv": "88016DDA898C2FEF943D1EA8E96C9A87",
+    "key_seed": "69722E285E4866039C057956F5CA697047315D8C4C72ABE50D586695683FAD60",
+    "metadata_key": "475C542B15D91FAED80364C9399C1A17",
+    "section_mic_hmac_key": "636441B2DC928073663261C3E1A69B80272551D557AEF7F6BED9BC2B86C419BB",
+    "section_salt": "F29D169C5E837778E5A31231ADEA015C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5A822E5B54BDEF7F5009548D324BBB5B",
+    "aes_key": "6C2B767028935ECB4D5259451A6FD38C",
+    "data_elements": [],
+    "encoded_section": "379013C45F3FC194B77E7CEA94559ECF8B2CEA911000C29DD4EACB5AA9ABB862A37A0BE5EF7B90027B67A1CA38161CDD01B235691A241DC6",
+    "identity_type": "trusted",
+    "iv": "10FBB6D3CED80733229DC291931A5F62",
+    "key_seed": "A25CF787076C32D614D8D7A292FA70FCBC0B24A48CCF9F48126E9A083E9A3B3E",
+    "metadata_key": "615711C7C51985FB53AD38EA82645DAA",
+    "section_mic_hmac_key": "092803121B8DA22AA60360C830EA1A5DD8C4FDB5A474914FC4ECB717D13BFE76",
+    "section_salt": "C29DD4EACB5AA9ABB862A37A0BE5EF7B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3BA5CCE53243F98AD868DE1CD3E9F63E",
+    "aes_key": "7E3B147189BE67DBA984C1682CEAA129",
+    "data_elements": [
+      {
+        "contents": "434D0E7DB4C0BBD5674A83C484DA072FEA",
+        "de_type": 0
+      },
+      {
+        "contents": "6AFA19CB7C46BEF2EA5369837FF9F4C834",
+        "de_type": 413
+      },
+      {
+        "contents": "1070DA173252B48ECD95EE5AD376",
+        "de_type": 410
+      },
+      {
+        "contents": "9A09FE8AFA0D8C036D3670E709658C3F67BD13352BF689",
+        "de_type": 27
+      }
+    ],
+    "encoded_section": "88901314095DFFE2EEE0485F9947690F21701C91100093DDBC1927840E03F6449B6CB0FFA110900226C7CBC3BA4BD4FCA1E8EF197562C5F485BCA2B259F0A214E3D5C2A68492BBE242E720DA326C82CEF19D79A430D4F2F23E7F36811D5878DF371D6AB23FAB74235DA55E21AC6BA52BEF2F86B4D3DE92F79AD995CA6AA796AD37BA43FBFC9AE913B5",
+    "identity_type": "trusted",
+    "iv": "A8976278B12AE5463AE984157E0205F6",
+    "key_seed": "6D57B2178FBD724251697132B807A3CFBD68DE400362C57CCF9108CCEDD973AD",
+    "metadata_key": "0D5B558D2890FFB2E5FEB48ED21150B7",
+    "section_mic_hmac_key": "F79CE3F6795EB7F1B65DC1FF2D997397B02C3975B304B62C7E49C7D0AF3037F2",
+    "section_salt": "93DDBC1927840E03F6449B6CB0FFA110"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1E4EA1B93504696BC87BBA1AE230DFBC",
+    "aes_key": "65F515D0D4AFB386BC2D9D1C37A46C92",
+    "data_elements": [
+      {
+        "contents": "0EF8D96C53C49ABD11B69751",
+        "de_type": 258
+      },
+      {
+        "contents": "B945DFECDE411CC9B1FA63",
+        "de_type": 728
+      },
+      {
+        "contents": "AE610E4798CA99",
+        "de_type": 212
+      },
+      {
+        "contents": "18526E1BEACEF8F0FDFC34AA7F0992387B",
+        "de_type": 765
+      }
+    ],
+    "encoded_section": "729013B0AC05E79DD417567F17EF2ACF4A48C8911000D05DF80E62306F8629AE61A8270A7CBE90018D38E80AC68E0B71973CD3BB0A4D58D10932C58303F629C6497ABDAD814AAE32A7CD767EDB9F4F6E7B3E1245F15D6D1D6D45B175C6535A701B2C0A19E6ED9BCFF379255F23992E877887ED",
+    "identity_type": "private",
+    "iv": "2CBF8042D27B1F49DDA990A4BFF88509",
+    "key_seed": "09E15C8F181659969AF6C6C2375A564A9E8271EA13B1EDCB8A1F7809406E95D1",
+    "metadata_key": "F7411DB79645E475BD12C015B15ED0FE",
+    "section_mic_hmac_key": "AE6FC455FBD017A6B7B80052C2EE240019CAFC961605EA703F0E6F1EF9CF44F9",
+    "section_salt": "D05DF80E62306F8629AE61A8270A7CBE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "967CD8FA43AF6DAC8E445A080A65B16D",
+    "aes_key": "0A01B5E36CC69764CCE3A74DD544B1B3",
+    "data_elements": [
+      {
+        "contents": "4747E589E226F4F9093067D1E5227412CD7590",
+        "de_type": 212
+      }
+    ],
+    "encoded_section": "4D9013F9C57DAF3EEE1AAC80E7C06F1066F0929110009A52343FA860D361860C5072654AD99A9001A6D1DE2BC661B5E9AEE33FF8034275C5308DD4AE9340C637DFABE250FD8A31813DDAFE0BE84A",
+    "identity_type": "private",
+    "iv": "9643C2FA43D519B44896490C005E01B5",
+    "key_seed": "882D996C004CD5A1A8E00F436F97DB555099408BD3DFC845416A55179EF22C3F",
+    "metadata_key": "9ABA26D1743D347716204D2AAB927133",
+    "section_mic_hmac_key": "7CF80AA4D38DE78937E2C09F53E5C71081A5036309D4D3732DCAD4B6D2F82E5A",
+    "section_salt": "9A52343FA860D361860C5072654AD99A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A703D473C6044C05892027F1F0B60F72",
+    "aes_key": "2FA998F537E61F6E8195C5CBB96457B3",
+    "data_elements": [
+      {
+        "contents": "E1A624CA4950C406697EF34E02A7",
+        "de_type": 902
+      }
+    ],
+    "encoded_section": "4890134D9EC007C7BCB6530D03FD5F58F0B753911000737B467B6EA222531CD57C3DE300F0BE9004B24DABEFA8C0B41D78ED1E5201E4BBB51D8BC92D8976081E6FFC732C2E483E4547",
+    "identity_type": "provisioned",
+    "iv": "F09BCD4A5B8D538621858D272F8357F4",
+    "key_seed": "D41FE25607634264613845B1FAAF6735778475A69D76DDAA067279DF982667BA",
+    "metadata_key": "08C6FC8B190221DE2134ACB569BD9002",
+    "section_mic_hmac_key": "8D5B13DBD8411D3E2012F8B17F42FA32F12212905D7B123C6C8F5A794C28FD17",
+    "section_salt": "737B467B6EA222531CD57C3DE300F0BE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "225DAE6F894DBA4F2E24E053E5DF0926",
+    "aes_key": "0C13A76631F9D2FF50D2B7943578F342",
+    "data_elements": [
+      {
+        "contents": "DDCF88A122E86BBA27EDA33BCE5C8C92A5CDD960E3D401DBBF8235",
+        "de_type": 860
+      },
+      {
+        "contents": "EED509DC49EB0688DAE0EF2B694BD257D334656BAE46BA",
+        "de_type": 281
+      }
+    ],
+    "encoded_section": "6F901307E6D989A7D4580033D10CDCD0BB35C0911000AB498A5AC0AF52C5CA35710B455BA21F9002AC340BD4B1E47545097AA869F28CDFCEF69744505C494AAED292AD78A9A4F2018CA12E1587B9AB701BB58F91C587B32155674BE664214638B527597315F0F1975D8A6AF1995EE16C",
+    "identity_type": "trusted",
+    "iv": "23513AA8837D20F3D7696AAAD240E477",
+    "key_seed": "7BC68EEFD9B2B6410C33AB48E86A7F66719AE9475ADF6F0A132F869A82BF0297",
+    "metadata_key": "6E06556BE6FB79950C5DFAE4A2E674ED",
+    "section_mic_hmac_key": "9016C1CDC6CB002A1B2F89D05DD939B8DC0215BD625C2BB468ED6EF69B9257AD",
+    "section_salt": "AB498A5AC0AF52C5CA35710B455BA21F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2E9D2DFCBE85982F854C1D4F0E6D93E5",
+    "aes_key": "D2C5575DDBC1CDD5CE0FE02422980767",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 888
+      },
+      {
+        "contents": "B9D74B1C7C57A773B30E7A1BBE85531092",
+        "de_type": 717
+      },
+      {
+        "contents": "9D7507067864040C",
+        "de_type": 743
+      }
+    ],
+    "encoded_section": "5990134C8FE31670AD6DF853D9B25DF0C1793591100095C176F7E36BE5C6DA5004DDB3C65D7290029317FD5A115128CC9331C1610AC7B2797FA680F094169BF66D48E7E6E1E08D541B89EDF9C3342E8BFAA9F6B2DF6AE881C718",
+    "identity_type": "trusted",
+    "iv": "BC20E92086374ECD11A19A07E3E2CF3F",
+    "key_seed": "02D4DE8B5FF08DCF8256D575084CA4983548DD3F55E7AD54336A4985E3351112",
+    "metadata_key": "7FCE36BF9B0479FF853DF40B4EF98956",
+    "section_mic_hmac_key": "7C13466EA8471C744D721F3A584E59B5FED47C7CE25B9C47D2CFF2036920C9C6",
+    "section_salt": "95C176F7E36BE5C6DA5004DDB3C65D72"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "39808BC788108E6F5B6D34DCC09FA9C7",
+    "aes_key": "08F97FD75991B8686F0FB843EE31A1D0",
+    "data_elements": [
+      {
+        "contents": "9FA77C23C482636D020CE064",
+        "de_type": 370
+      },
+      {
+        "contents": "BC99",
+        "de_type": 68
+      },
+      {
+        "contents": "83E5",
+        "de_type": 573
+      },
+      {
+        "contents": "1EEF6D24",
+        "de_type": 145
+      }
+    ],
+    "encoded_section": "569013BAAEDE05A06A54EFEB6D88CBB00A8A7A91100066CDE62F4772FF4E97566A182D5C03329002FED2FF0BFD3A6103DBD82114343B47F4846B6B2A001E7533606442DB32EE91EBD21245F80F6AD615FF03DB2C35118D",
+    "identity_type": "trusted",
+    "iv": "5EA3B7F4C64F94FDE824BA20F150F5F9",
+    "key_seed": "3BB0AA21375B167B2A4777D850C4A2432C0EC93A3BDF6021456508619433F97D",
+    "metadata_key": "41537838EB8E6DD487D4F2B26182EB72",
+    "section_mic_hmac_key": "249AD0CAC358E0402D1F0905EF4BCB199B9988D958C17F4A91CC01249061EACE",
+    "section_salt": "66CDE62F4772FF4E97566A182D5C0332"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C8659FDC730244DA2ED976154CCE7794",
+    "aes_key": "1217C04A0210C3DA505F5EB9123372D6",
+    "data_elements": [
+      {
+        "contents": "84ADCF3C26D68CB75E3D7290C59D6F86BFD9B23E10065C2886",
+        "de_type": 795
+      },
+      {
+        "contents": "221C330B2C2A3F16F957C02D806C5EC9FB18117D9EBE45A32D9E4C",
+        "de_type": 534
+      },
+      {
+        "contents": "2C858E1D7D841372",
+        "de_type": 544
+      },
+      {
+        "contents": "B5DC82A3D20F6601D1",
+        "de_type": 629
+      }
+    ],
+    "encoded_section": "8890133129E43BE247688922EFFC1C06A2976191100097BBA7CE5BEDE598EE61AA356BFA3DB09001E23B0136E0AB1C5D8DE60F20A809FD1D5B787159DB77B950B9F353C38D777D290ED5586BE886CABCDC8E07909FAB3FD375F42F3855D01FC55B4F29DA7951456624CABD2D4454E45AABD9758EF277C1E25B631E897C52201E53D44C8F3FDCE1C82A",
+    "identity_type": "private",
+    "iv": "4322ADCB565A23AB23CD40565F78C009",
+    "key_seed": "FA744BF2436D127CDE08772282F961254C68C88CA37CF683420F04A4321CFAB3",
+    "metadata_key": "7119BE6A5D9DB6AEFF8C4ACA38E43DAA",
+    "section_mic_hmac_key": "70A522C74AE34A81184EC55874314B13532145C99D47324BFAFC08041E0755AF",
+    "section_salt": "97BBA7CE5BEDE598EE61AA356BFA3DB0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6AD3D60D04723C57A58AEE240F6BBACE",
+    "aes_key": "43D34DFDF2BCCCC8DB6216E7C35C61AE",
+    "data_elements": [
+      {
+        "contents": "E2",
+        "de_type": 132
+      },
+      {
+        "contents": "19855C45342ACA24BF3C73CB79",
+        "de_type": 696
+      },
+      {
+        "contents": "E2E48F8ACAD7CCAA6910E3",
+        "de_type": 265
+      },
+      {
+        "contents": "76FD5B530D0014",
+        "de_type": 236
+      }
+    ],
+    "encoded_section": "639013E9ACAAAE5E2D8CB5E46DCFC19FA72E519110000675F279365CE50B3AA51B78DB0DB4B2900235FD3644D84D6326F596083705677D0F50B4E9C8C25FAE3E08308E09C28D388BB5C0FF248FF9789030675D9B4C73C5EAD088ED65169869A8F20F3FBE",
+    "identity_type": "trusted",
+    "iv": "7FC53B20EE21524D8567BB6EE0B24693",
+    "key_seed": "ADFF7F0DAE8A0314B915683C900FDB5EA48F05D1FB65771E44C1772C2BDD3287",
+    "metadata_key": "42CFED512703687B96EAAB7E8E402877",
+    "section_mic_hmac_key": "6CF494AA61E6BEE966D48FAF7E2672F82527FDD1C3075B7637550E7AF90BE358",
+    "section_salt": "0675F279365CE50B3AA51B78DB0DB4B2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9DE0357046BC21405E3FAA9554F7E58A",
+    "aes_key": "F9793D17386DA59EE51F7D32A8A151CA",
+    "data_elements": [
+      {
+        "contents": "6C85DE2E1644563269414164604499D1A2C443969711F381",
+        "de_type": 473
+      },
+      {
+        "contents": "12E30D7E922A107B3803092257C476D6CA8795F03A9E",
+        "de_type": 759
+      },
+      {
+        "contents": "00",
+        "de_type": 527
+      },
+      {
+        "contents": "FE4B43A8995BEA8FAD5746D92ED6F9BAEA918E51F433D47E71C12FD7B9FB",
+        "de_type": 57
+      }
+    ],
+    "encoded_section": "8F9013962F6EDF9C4DF87F7C4C5DD8CA42CFA6911000963BE50C9F0419B34F64BAE61586A95790010869544823FB9E1FEFF595AE61CB1806C2996320388AAC60CD987CA7EE6DC1272B2EA4DCC069C3E127ECFB9F616F4B9A9633A355861DF6B463084236E9E8E6FC4860EEB27F65803C8E18C898123DDFCC6621A9F74780D038D3051795B536F9D2D90CBA19090A0978",
+    "identity_type": "private",
+    "iv": "ADB30AE2A8D404F6B9EC3C5C7F40C87E",
+    "key_seed": "C88CA68847CC9E39EBA84A18D9882BA9284276ABF72E3A71E046BD0061A0F946",
+    "metadata_key": "0A59A06A76CC860B8843AF5DB75DF85C",
+    "section_mic_hmac_key": "2805BC04A45CC27210E07D9A5C74E95FE7E53C4AA59BCD95D4EA877509C25416",
+    "section_salt": "963BE50C9F0419B34F64BAE61586A957"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "57BBEA707A339197563A41AA0E0DF11A",
+    "aes_key": "1434B77F9FF8ED4472524CEAD5E2600E",
+    "data_elements": [],
+    "encoded_section": "37901317C3340DD8DE24DD7038087A0AF9F8919110003A25A320C3B2AF5602DBCC5ECB87F5049001B989234629FFC24C7AF47AC6F5591241",
+    "identity_type": "private",
+    "iv": "FAD343C30CA085B82CD74F2EB90EEC36",
+    "key_seed": "7618055D281738547A4B524FE0C6EABF1BBEE14AFBDD654010569DCEC71EBD5C",
+    "metadata_key": "2CDE85BDEB42F4A684CB85402EF2050F",
+    "section_mic_hmac_key": "780A1086ED611E46176DB2BBC18D9922D10CD2505B65C948C3AF08D1EBEBA1C0",
+    "section_salt": "3A25A320C3B2AF5602DBCC5ECB87F504"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "69F7A5E815A8018FA3C12A5259619FED",
+    "aes_key": "1EEA4B9B9FABAC2BB81EA1833E7A9C05",
+    "data_elements": [],
+    "encoded_section": "3790137E34824746AA819ACC4C60043B9B3D2791100065C80E3A90B498B761A7C07ECFD92DF69001FAA0CC5A0DBDC1AAA92FF3ECD5297778",
+    "identity_type": "private",
+    "iv": "5407E8912C6A7CC71C741306C0848964",
+    "key_seed": "567ED96D44DD13369424A930E8340DFB1B3A5423A3A8EC36EF30A5CF95B0CBDD",
+    "metadata_key": "6265BC696E8C105ABBD597107653950C",
+    "section_mic_hmac_key": "102CB9E93C412A3E2D267FB56147326CBBBB34CA36471AE61B00EDF4BB24B35E",
+    "section_salt": "65C80E3A90B498B761A7C07ECFD92DF6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EA4E1434567DB6531BCCE1A5D8142D5C",
+    "aes_key": "52CA47EBCB645595D4CAEE61A9B3C181",
+    "data_elements": [
+      {
+        "contents": "53ED1098F6A0BAE7CF9EC6",
+        "de_type": 128
+      },
+      {
+        "contents": "A435650C36CB2E6CE210E52065405617925507797DD8",
+        "de_type": 761
+      },
+      {
+        "contents": "F3E6",
+        "de_type": 242
+      },
+      {
+        "contents": "D4B6AC531A7CC0B6296463AE4E98D99FEFE577CF473CFA4D",
+        "de_type": 556
+      },
+      {
+        "contents": "185BBD798D78329142610AF413428555C31F543D65093312003D17BAF8",
+        "de_type": 388
+      }
+    ],
+    "encoded_section": "9E90130A0D321186AF0AB2F4AA4379978B717B911000221CA03F0091EF740A7A59E45C6A8B4B9002AEB4E9389E0828052CECEBAB082423E0349E44EA64E5532DCF3C323319E13345127A426379FB1E494C9BB9D6DB2DF56FABAA87E47E7901F2D4805002F428B000CC4DFFDCFE8CC9209596718BD5636C25C177E7726AE4730FA153ABA0CDBBEF47A077EC595144440F725EE5CF6914DD6FAB91AFB8B1FCC5",
+    "identity_type": "trusted",
+    "iv": "4936E010A41A65BA9541DC9709158FD1",
+    "key_seed": "9E67123907427CA52C8260AD5B362365EFEE24A87BBFD9EECD3B17C0A9560CED",
+    "metadata_key": "E2A5139BC71D9F56DDA6FD58CAF4C72C",
+    "section_mic_hmac_key": "0E95D0175A99B701BD80DD3B51C02D70DE1D67FDED07F96D3870A89D995B5D27",
+    "section_salt": "221CA03F0091EF740A7A59E45C6A8B4B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D3721817C8956FE858948C1931BCF455",
+    "aes_key": "E929945B8EE42B6E003C3E073189C621",
+    "data_elements": [],
+    "encoded_section": "379013036FE7F04378A9A1C2894954362311F3911000044A465A357C84AA284FC794D2668FE99004AE1D9D5ED13C9D6409BB549FE27B8814",
+    "identity_type": "provisioned",
+    "iv": "66FC1EA30719B09F2E504C0AEFE155D1",
+    "key_seed": "67E133E44ABB305A340F39B513135EF0353DAAFD23092784520DC9199E9D14F4",
+    "metadata_key": "1A031A4C41C8DBDBF482E9945F3E928A",
+    "section_mic_hmac_key": "5FCAD75E7446707C69045518E605986A8BB0F25A0F986648516727E5B885D78E",
+    "section_salt": "044A465A357C84AA284FC794D2668FE9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4B352B0757FB0D8DC0AFD2AD77FC8F30",
+    "aes_key": "FBFE41732E1EADFADC6DB41D32E7B56D",
+    "data_elements": [
+      {
+        "contents": "93E38ED62D376819",
+        "de_type": 571
+      },
+      {
+        "contents": "91B3ADEBDF3A97DA0A772CE21F2272BD4E1EFFA70DE4A3014EE66C",
+        "de_type": 921
+      },
+      {
+        "contents": "348345",
+        "de_type": 660
+      }
+    ],
+    "encoded_section": "66901389B03B6684D250EF07E1913E8A54843B911000908608D294CFE21DCAD59E6B65063026900457E91F0F06E7F3A59FCEEDDCCCEAF0BB6FC1C31762C5FF7E60EECBD37BE8FA1CFA439D9FD3F5EC98F22B497151EFF602C8868F429469544FFACDCBBEA6056D",
+    "identity_type": "provisioned",
+    "iv": "BD6A74E891B7616A8704F0D2B5361A22",
+    "key_seed": "9ADEF374AE5C0763B4C81FAFACFC3FDD00BB31EC2BDABF08F72E0CC25C8F8A0B",
+    "metadata_key": "D925195F47F2C12E5837398262F9894B",
+    "section_mic_hmac_key": "D4CCE814EEB5CD71C084A1E98D5C3F1A0632DF311D665CC6F1225C1E20561B94",
+    "section_salt": "908608D294CFE21DCAD59E6B65063026"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "08B9B51BCFBE04D4523BFAA17837286D",
+    "aes_key": "23C322B350234D1FA4023DA8FE2D381B",
+    "data_elements": [
+      {
+        "contents": "57148223",
+        "de_type": 549
+      },
+      {
+        "contents": "ACE590C4F65B4143CF4BB7801CDD",
+        "de_type": 957
+      },
+      {
+        "contents": "39FD3C339EB0A86E78FC096FB33BB284",
+        "de_type": 22
+      },
+      {
+        "contents": "",
+        "de_type": 120
+      },
+      {
+        "contents": "A840D248AD83380304C9BDC1",
+        "de_type": 534
+      }
+    ],
+    "encoded_section": "72901304935566CA4CD8AF2420D84128E1F8A891100051A5D7C9F920639AF9C89DB51DC724079001821FD769D4AAE093F00DB6744A7E61A70B1EA33D810F7F266AF3FCD2841A2177DED23CA8C60E4574DF4EFFA31C21D27E39731EB7EDB802287ED62D075FACABC42C9407F742D333A00B6F40",
+    "identity_type": "private",
+    "iv": "FFE0673572F02D6F02CB5CD380B2F345",
+    "key_seed": "80C545E5E6F1E3531C0FDE45C8DF59910DDAE325F822C84F4999C344E7B6E572",
+    "metadata_key": "A473658E9F2E4B02A48FE08F5A9A03A0",
+    "section_mic_hmac_key": "279DFAB67F702246B59FA57F0700ECFB97580F0D8F2EA56C621FDC55626B13A3",
+    "section_salt": "51A5D7C9F920639AF9C89DB51DC72407"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "397658B7EB19939359DB8BDF7DC09977",
+    "aes_key": "355D838167010BFCD65619044A34AF0C",
+    "data_elements": [
+      {
+        "contents": "A329FFEB42E67FA6E8C08620E087CE7E85FEFCBCA1EFAF765F",
+        "de_type": 885
+      },
+      {
+        "contents": "157803B1904DAED114559F0AB2",
+        "de_type": 480
+      },
+      {
+        "contents": "703A8005A3EC894539CAAE34",
+        "de_type": 354
+      },
+      {
+        "contents": "596FB5EFEB49350FC8F683C80926EED7054787",
+        "de_type": 187
+      }
+    ],
+    "encoded_section": "889013C5BDBD074C803C8A17E3185E1BA6A571911000395E87FC0DF8B105176174C1D832DDC090044B65DD586A362858D7A824EA454FE3671CC784DF5ABC89CE611C470D04F2F44C9D474610D038A521A619F9703BBE8B0DCF18289A924A01516C63272F03524DEB885D5FD708D66D9D673C553578B27D514441ED938BC1754D94DFAE47BE20B6E2B7",
+    "identity_type": "provisioned",
+    "iv": "22D55CE5BCCD3D372782C35F5ECE49C3",
+    "key_seed": "DD3D65E71C5DFE02F5BD548BBBBA3F38FE8926D0CA9A50804EDA24B3EF7A2868",
+    "metadata_key": "888FC2EA55F320201E6252FB7DDBA66B",
+    "section_mic_hmac_key": "AA0724D6E22D4887021B351D9D201A618F8F303201E283F79D95AFE23DDA4CDF",
+    "section_salt": "395E87FC0DF8B105176174C1D832DDC0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "653ED3515E8811D572C1B7765DC268E9",
+    "aes_key": "686C0B1F2970A3CAD0E2B1209A5A5B78",
+    "data_elements": [
+      {
+        "contents": "B17112",
+        "de_type": 147
+      },
+      {
+        "contents": "FD920FDBDAC1D5",
+        "de_type": 721
+      },
+      {
+        "contents": "C817A535ECD2C643341E6230F44B67C8D06F228B8EDD",
+        "de_type": 612
+      },
+      {
+        "contents": "B6D4633DC57509F731479DE1127117E11E333682374DFB",
+        "de_type": 544
+      },
+      {
+        "contents": "5321F349",
+        "de_type": 876
+      }
+    ],
+    "encoded_section": "81901327A67FBB0CF04078320EE77A2873B8E09110007D7C2E8E278663EB6A532BC7848229B4900227C099A8BD586C51B776FB08D9D29D095070255058F840466D79C5E306488458771690C02C4AF052F3A53EFD7920D40FDAEA1354F4E5B87C375652F2DA4ECC2D744C36C74FA3380799223848829E7C594479214C31205A740524",
+    "identity_type": "trusted",
+    "iv": "263DAD92EC0DB2C39822FD26F2AD62D3",
+    "key_seed": "428968D9A9F686878BF560B65ECDFE3B38569FF712AF4EFC58564CD92AF3D980",
+    "metadata_key": "BC7405270D0F5841C3A3D3D40FE79873",
+    "section_mic_hmac_key": "A463136592A1F07BF2CC6D80071A290077283DB827AB456A4CDA64588019494F",
+    "section_salt": "7D7C2E8E278663EB6A532BC7848229B4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "31E689DE84F116A3C449F0B5D8A7288D",
+    "aes_key": "A6E2770208FAF2A476A475D770A3800C",
+    "data_elements": [
+      {
+        "contents": "DFF2C917C345C09B31E08B347E588FC64DF374BA28",
+        "de_type": 218
+      },
+      {
+        "contents": "3484B697920F1CBC",
+        "de_type": 764
+      },
+      {
+        "contents": "FB57C8A58AE76571",
+        "de_type": 686
+      },
+      {
+        "contents": "386218D2313E3A5EA2",
+        "de_type": 723
+      }
+    ],
+    "encoded_section": "7190132B37ADFB276B7EB4C503CECB801FA3F3911000CDC1162295B9A8A4CCA4AB56810D571A900273FB6BEA176F6DE9E6140EF7A28FAAD0A9DA45DDC9E40E4CE30B514CC388036F31BD93B0AB6F9EDC96583E089F70DEAABB3A6811E35A5463452308A5684FBDE3CA57D9CE8D9458C18606",
+    "identity_type": "trusted",
+    "iv": "3B99F43C244F3D82B2F519F26B2FD6F6",
+    "key_seed": "A80F5C4AC0EDDD45BD9CCE9240FFC30E4616F733172FBC34E7BF903E052A08D8",
+    "metadata_key": "3C7D19DC3473CE74F9629F28BD35D441",
+    "section_mic_hmac_key": "B9C76D0EFC21D1EA2AF1A595745B91DE11AEAE661FB727846B887C85AFC79039",
+    "section_salt": "CDC1162295B9A8A4CCA4AB56810D571A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3A95C623FA8B0993A51FED27660FC46C",
+    "aes_key": "F6FEE1C8CC0D3E0E0B994591AFA98C35",
+    "data_elements": [
+      {
+        "contents": "6C0370D55999B1BA966C80E76E5A3143B0A6E9D0766601",
+        "de_type": 508
+      },
+      {
+        "contents": "EC68D3C546",
+        "de_type": 542
+      }
+    ],
+    "encoded_section": "599013A1EA22CB6A535194CA61B0F1D589DE5B911000D80A718BB8F999D070DC63B1FA1AB2629004697B686559499F94149621FF9F55241F4B64FFFD0A441863DFEA40E65ED5212335F948EDCB6DAA735F19776A404221BC469D",
+    "identity_type": "provisioned",
+    "iv": "D6FBED76B19AABBD88C9EA200FC3C231",
+    "key_seed": "8A4E313D9ED5FB9056A2A329BC4BA88A75C1BA5540496647765AC14FDD884FDA",
+    "metadata_key": "F3D9C6ED1DECC720D7640D5B0FA3BFCF",
+    "section_mic_hmac_key": "C7A6BD4AC4BF8386D2EFB23E0497F7F1C74CE0C45DDF2DF851D857F2EAC01435",
+    "section_salt": "D80A718BB8F999D070DC63B1FA1AB262"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "15D51D5529B6554802E05F2B0EF4DC28",
+    "aes_key": "F4EFE9267FF46EDD2B41456BB04F5EEB",
+    "data_elements": [
+      {
+        "contents": "7CE8",
+        "de_type": 187
+      },
+      {
+        "contents": "88EB094065F1E658E0B8265BC3F782C4",
+        "de_type": 643
+      },
+      {
+        "contents": "5720AB47DDC16762C5AA",
+        "de_type": 248
+      },
+      {
+        "contents": "0579EB83BD637F0CD137C57BF03F232166577572F6",
+        "de_type": 760
+      }
+    ],
+    "encoded_section": "749013DAA2590C575668648A3B6F693BB83D6E911000A98545FD8338EC5A966F1F501EBD5316900192E54C5C045F96FE474951DDA6BFE1E45CF6CB0F1FC97E9959BDB0AC58C60B5804E852491D23E443DCD3DFEEE8EA634974AB9952BFA30DA8B11DD97C0CB154A2A32C5A5E301E28C550DC2409C3",
+    "identity_type": "private",
+    "iv": "72EC916B14A083F2E7B345730323CC8B",
+    "key_seed": "AF922192993E36A50CAC64F9BE2ECE249DB8B2CD256D74B729551D2F45FABAE9",
+    "metadata_key": "21BEA9236D94154587759956D3F73485",
+    "section_mic_hmac_key": "F1FCD0DE064ED425D757B87220A95FF47F6B3B9DFC12A1E8D2C31B5C37CC067F",
+    "section_salt": "A98545FD8338EC5A966F1F501EBD5316"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7EE7B0CA063CE2CC1A2DCEED5FF6714C",
+    "aes_key": "BDDC38B2F185FD0B4F644ED613987035",
+    "data_elements": [
+      {
+        "contents": "19E3F28620",
+        "de_type": 502
+      }
+    ],
+    "encoded_section": "3F9013528238500EB32504E2DF4B101C2D7FE4911000BC04AE42E6A53E5EB4E86672375D905C90041372637B3F4839D1CCBCEAE0B52A6572106DD6E116AA3488",
+    "identity_type": "provisioned",
+    "iv": "1600C8A4C762DF0E381EEF9244F0BCB2",
+    "key_seed": "503A4D71E1FAD56FE3DD7F8FEB65ACC7F116E09E19B8E7BE7EE89E46D0366B1B",
+    "metadata_key": "9BC9C621E4AB6A57CAA69475ABB06C4F",
+    "section_mic_hmac_key": "B7D4BEAEB788E9CA0445663C6EC20E21A73EDF73FC4A8DD61A948CB6C21C5CEA",
+    "section_salt": "BC04AE42E6A53E5EB4E86672375D905C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "84ECCB6CC061557F886B9245936C76D0",
+    "aes_key": "7F3B0C1BA0EDD583625029C096DD029A",
+    "data_elements": [
+      {
+        "contents": "CA7963078A11D0A7228C6CBA3744CC798AC512FB3DD9DCFE",
+        "de_type": 967
+      },
+      {
+        "contents": "C7D4BCE12696450F47D9EA845672",
+        "de_type": 431
+      },
+      {
+        "contents": "177DB2DED349ED0EC2447742",
+        "de_type": 910
+      }
+    ],
+    "encoded_section": "729013B836C7E8CD3614C380121EC46833E761911000FD700ECE83DE5196B3247F17E0C7B8C2900471D9B6AD99D7935EB289FEAA1BECBD93D8E91AAEBF23F71D856A1D211558A798F1593DF65C74FF1A11691490EE59F50088E778193E2B82F10B63A019F699E6276425DE74B67A6997E7A199",
+    "identity_type": "provisioned",
+    "iv": "2A30A215680833E42AF075488E76C5C6",
+    "key_seed": "47C165ECD9CE942B7213F794280434AF22A2BA002C5C841D3AB6D53F8AD6F3BC",
+    "metadata_key": "0D9AF4F93F888702495D34C8C38C9C1A",
+    "section_mic_hmac_key": "804B6DE7ED0C8CD36BD95E305C4E03946C8E398E2CD8E6D1D6C0D987E01897D2",
+    "section_salt": "FD700ECE83DE5196B3247F17E0C7B8C2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C52DD0C0E31D56FCDA7804C58A6F3399",
+    "aes_key": "0E2385A585A2092D068EEB158B3B816C",
+    "data_elements": [
+      {
+        "contents": "7A1AD7A0F081FB5E75D2AEEE6B34E40AA9C45FE2BB68C0F4",
+        "de_type": 552
+      },
+      {
+        "contents": "78598CA8AA45EB9D46",
+        "de_type": 810
+      },
+      {
+        "contents": "",
+        "de_type": 233
+      },
+      {
+        "contents": "30827F3E80566B78620FDBFFE3FE2D31EA2FB8AA41E7EF2FCA",
+        "de_type": 557
+      },
+      {
+        "contents": "7BA140F266BEB8206478BA90",
+        "de_type": 880
+      }
+    ],
+    "encoded_section": "8C9013B90FBFD47BDC1DCFB3485BF6F2C909039110007D1B4708E6954D4C0804966FC950EB44900475C5B49C69BB677D07FC03DBE39284AFFAA42C55793F626211D1CC5907A788409D6A3CBFD4733A315BF3F2462B8C178BE54FDEDD30AA166BE53268874FD8873ABF7B2F33C42ED03E57F54B94023F17A7C6C7CE53C370513D892F41ECCAC88F501E55DFECD2",
+    "identity_type": "provisioned",
+    "iv": "2CBD7DCD77B66F17326CA3E36E31DA3E",
+    "key_seed": "6C7E8B7296170D5C035E8738E66032688E1392FDD96567E94592D1B001E4833B",
+    "metadata_key": "ABD68F6323A32F1FDB2F278439E1D526",
+    "section_mic_hmac_key": "9B87D3AEC1B5C3199643D8542122D7EC1C619A6241F194B04929609E8598825A",
+    "section_salt": "7D1B4708E6954D4C0804966FC950EB44"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "835DD484D2FB9B6ECA4A3EEC6067A7F6",
+    "aes_key": "2DA3CA25BB833993F56C8A66D16ED327",
+    "data_elements": [
+      {
+        "contents": "C44E2A5E5625A6",
+        "de_type": 860
+      },
+      {
+        "contents": "2134F33D2359D4F288D3A7977D0C8001EA2B4EEC98BC93DE27F9DE0FA7",
+        "de_type": 523
+      },
+      {
+        "contents": "993DA1984ABC29C3B21A11F03125",
+        "de_type": 683
+      },
+      {
+        "contents": "C1ACD752F8FD5786645E11DEAAA13BCE",
+        "de_type": 865
+      },
+      {
+        "contents": "341BAA9E743EA09FEC2E9282EA6B132D48309B8DD7F1F946AE68EFD43028",
+        "de_type": 613
+      }
+    ],
+    "encoded_section": "A690132E3DED612DE97EF7F9A44BE590A63D2B91100032FB76369CEB20CA101F1007ECE8694A900403BBD86CE0A9D8F2188B771C6025C47E9B3B31DF6640F8254189CC17F45B61470F01CEF3C0F22720B9ED4EAC50100F4015DD4049B640741067959EFCA41ACA09A216E34BF48DB9377CBF1EA080665151195475CC8FEA2CCB1BCA845314547E3540C1184B0D27C59BD76642114F823391E1358A05FF9817F31C19125F1C5DFF",
+    "identity_type": "provisioned",
+    "iv": "1C0CFBCAD7A73BE78ACEEC5AD98A6506",
+    "key_seed": "10E128D39BF362EC6FFD8E8E1686E0BDD731892BC2A40524346E46905AB097AF",
+    "metadata_key": "EFB6BBA329C8523F0D9593F267ADCFE3",
+    "section_mic_hmac_key": "19B833BD8554B60C5A689185D7E087A08B15186B42AEDFDCE2238A7BBC3A120A",
+    "section_salt": "32FB76369CEB20CA101F1007ECE8694A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "771BE78E465BE4E1C94ACB5E4B4ED943",
+    "aes_key": "52956780EC21E2BAF2C9BF59C7C03E3A",
+    "data_elements": [
+      {
+        "contents": "3369A56AD364F5A53D4790B0C56E920F79",
+        "de_type": 743
+      },
+      {
+        "contents": "7C7FA8A3BB5B8239EB0AF0D3BF",
+        "de_type": 344
+      },
+      {
+        "contents": "0CE02F21FF72540ED4351A6F04276489D0BCCB",
+        "de_type": 649
+      }
+    ],
+    "encoded_section": "71901301F306AEF69B7E55C7198404150FD74491100042AFBE3BB7529B6CE1957A34DD897301900416173A7AD7E611475C2FBE369D84DF2C53203A301A4CD74CE4B1C52BA023FB02B145DB1BDA8040E38F09290D173FA538917FDED3CDDA945A215A954B9B627FF1C724F32B958044C7AD01",
+    "identity_type": "provisioned",
+    "iv": "104F4E9AE0F9B86C604E225E535AED28",
+    "key_seed": "E36C5E16253B098CF1A878723BC88CAE483B7CE4F075210834DF5F4232B3D721",
+    "metadata_key": "506A4A3A85045F7ABCB2AC0D381C86EA",
+    "section_mic_hmac_key": "F79D72CE2DA34D0B002EBD4CEFC93DE588B78E3D252E44D9F154EDB987BCF86D",
+    "section_salt": "42AFBE3BB7529B6CE1957A34DD897301"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C8E0431CA117B1831BB6671CA7AA07EF",
+    "aes_key": "E7AA3598705D6B36C70661E4AAEFC72B",
+    "data_elements": [
+      {
+        "contents": "E50F0C47F610A27F273715EFD96E61AFC41F07F2",
+        "de_type": 424
+      },
+      {
+        "contents": "EA8A291C59E1",
+        "de_type": 432
+      }
+    ],
+    "encoded_section": "5790136D1DDE2484AA68F62E5BE1167BFFEF169110009500FA6CDDCD547D0BEDA1D6AFC6F04090024468565BA0402401B76CF55C729B5FE569695A820992D12CE45A465092D826C730310E13D9F8EC5D7D5717DA77C6CF46",
+    "identity_type": "trusted",
+    "iv": "71D6A3CAE2740361D9ABA1066E7330F8",
+    "key_seed": "DD5E65D75F8C056BFDA78D3EECFD5A42A9397ED1F0BB12378D085F0B70F8750F",
+    "metadata_key": "6C92FE3FDA57C9A3553A09FA5B37D77B",
+    "section_mic_hmac_key": "71C6651A3B4956C3C5782D13E4FE870B4D5492C3CE9BEE8374F1D5298147D14F",
+    "section_salt": "9500FA6CDDCD547D0BEDA1D6AFC6F040"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "09371C9C7EAF87C2E11BFA366EB616AF",
+    "aes_key": "84BEEAF36C24AA0C83C825E4BE3F10A3",
+    "data_elements": [
+      {
+        "contents": "4281AE866AE1A0745A5E6C3842",
+        "de_type": 254
+      },
+      {
+        "contents": "637873B552AB893BBE8CBFFA65E859CB95F2",
+        "de_type": 935
+      },
+      {
+        "contents": "F0AC06ACF732D6E74DBA2367CE64432210F0C03A9C1093",
+        "de_type": 950
+      }
+    ],
+    "encoded_section": "769013BCFA668DEBAAEEFE66D7CB5AFF0DDBC5911000178E6852E46CE22115DEAC0CBE53D4A8900479D4969091D3685CE787E51C0B7BAE37FBCA6A67BA8CB03A1BB9D1A08E0D7E6365AB4AE42CC2E445E6E302A7C1BCF28E69ECE32FFADD69F0BD5EA0297DB7241022BFFFF7746884B4A7A55FE41E2A50",
+    "identity_type": "provisioned",
+    "iv": "972F1E1A54C9BF5A318CD2F381001A0F",
+    "key_seed": "20054A2AD5787C8190261524586AC1317AB9A939D775FC8A5559736F67F8EDC3",
+    "metadata_key": "29A2753D8D2D165B52677B4478E148BC",
+    "section_mic_hmac_key": "0F498B4B84396C4E4BBD8EA8AC04D100CFD0993AAF4630865665155399FD7CE9",
+    "section_salt": "178E6852E46CE22115DEAC0CBE53D4A8"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "312B34C1F8D62CEF39CC22C6718F2AB7",
+    "aes_key": "1393D21C5EE04A4ADFB2A154F1BC0CE7",
+    "data_elements": [
+      {
+        "contents": "897F9A471F5A3E7ED36837AC9911A40B3546DCCA1FD9DE7874ADC67A",
+        "de_type": 852
+      },
+      {
+        "contents": "4DF6900031FFFCE8F2E54A3AA4337FF095D50D25B677AC204B57",
+        "de_type": 813
+      },
+      {
+        "contents": "850EB9276E6B8A933DD66B44F18F2CA5",
+        "de_type": 44
+      },
+      {
+        "contents": "E814D95425E1DDC645357D54D569E223CE74",
+        "de_type": 822
+      },
+      {
+        "contents": "CD7697BDE298D3F2C6",
+        "de_type": 97
+      }
+    ],
+    "encoded_section": "A590135059149E5A7168D5647488D33E4C5D1291100043760DEB67DD337023E74D8057F8D0B190015EEC17F40A65777B5FD8DFD42A41610D7405BE1ADA0FEC3FF9582ACFA1BADA3027626CC70E0975642DC341B332E735BA412C8C217BC425C11B515077701A5384F7E66F54AF4137938CA1F8BF584C54AEA4FEC7A508FCDE1F7F045182F31C1DC9A486DB90340F79ED72F39D26D658C766AA4A149387CCAE407EC5013B7A61",
+    "identity_type": "private",
+    "iv": "CE7902AEF1D998C6ED70A23CAD78AEE8",
+    "key_seed": "9B2B2B4455F675F8BFD7D6EF0D11DB025DCA56B8FDCC3F91E381A5F588F2AEBD",
+    "metadata_key": "AC5D5DFCB4B394A76C768472CE1C4DB7",
+    "section_mic_hmac_key": "A42A8C6554F3CE2FA45E52702A152F0B5AC825789727105DD723478778B410D6",
+    "section_salt": "43760DEB67DD337023E74D8057F8D0B1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1E2C19C423EA98927CE4F1FFD50DE67E",
+    "aes_key": "36C1EC0F045707BE7FB3744C95E33F09",
+    "data_elements": [
+      {
+        "contents": "9427449425",
+        "de_type": 409
+      },
+      {
+        "contents": "FA4CC2EE4D6A",
+        "de_type": 341
+      },
+      {
+        "contents": "CEA2CA161176B4C3B33134476EF837EF32B5D278660CDE48E6B03C81F17F",
+        "de_type": 102
+      }
+    ],
+    "encoded_section": "68901308621A6F1E729548386EEE826FB947109110003A5233398F5D3BE64AE007254529830690022A40871AEDE5A3A73C83A9E5220F800AF29C2D8CC34A6EE29734B811823BBB805D32FE9C34BD588DE52C3C9B5FFDF5722DCD625D10AA0B72943A2BB61BFF5E5109",
+    "identity_type": "trusted",
+    "iv": "FCE402A294C3AE2A8D0F94417F0A990C",
+    "key_seed": "E4DA5C79DB8653F6C010ACEC3D8D3A728690FCAE87811AB4B442CF8888597E7D",
+    "metadata_key": "140A593CCC7E365D5E08D7B30ACE7B1C",
+    "section_mic_hmac_key": "410D6C692C1A6E677B21261AC4EE2D61087FE874265E1A23BD3996208779682A",
+    "section_salt": "3A5233398F5D3BE64AE0072545298306"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "88E66F0BCB2F75310F193D23254ABE27",
+    "aes_key": "3BC020A4C2A62B57BF29E29668DB8E5C",
+    "data_elements": [
+      {
+        "contents": "B7",
+        "de_type": 727
+      },
+      {
+        "contents": "A75A29",
+        "de_type": 909
+      },
+      {
+        "contents": "8DD038868341",
+        "de_type": 505
+      }
+    ],
+    "encoded_section": "4A901365F4100A29450DCA93B0632DA7DABEA79110008CD04A9DF97342A29F966C6BAFC2A962900112DF363FE2D500C29E75E28E5D7831F485B3CF426A87B4BA74379063395A62240A0F5D",
+    "identity_type": "private",
+    "iv": "28152DA95BB94508449CD3C229459A76",
+    "key_seed": "A03E79B5DC16D85A779CB85A0771817415A6DF256701B261C1ACCD6B4D5CD2D6",
+    "metadata_key": "3FAB498CA08113604E40C3D5F393006C",
+    "section_mic_hmac_key": "3F13BE4FDECBFFDED1AE34D92642C7CEF5C406B877DE00B647EE908C12E6A95E",
+    "section_salt": "8CD04A9DF97342A29F966C6BAFC2A962"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "AEE14DB3ADD86B7B5DF9484C853A3781",
+    "aes_key": "8B112E04E5BD800D5169E31665A707A9",
+    "data_elements": [
+      {
+        "contents": "C01854F342050239D5A83BC58D8BCC107B",
+        "de_type": 364
+      },
+      {
+        "contents": "B06F3F2E6DCE4B0C488F1FBA9A3E09FAC662",
+        "de_type": 793
+      },
+      {
+        "contents": "A516FB2431DB05EBF5514F03650339568203BFD3FD5844765D3BA41A",
+        "de_type": 57
+      },
+      {
+        "contents": "0321515318EC9D9071445D0600A67EF2971E",
+        "de_type": 688
+      }
+    ],
+    "encoded_section": "939013ABCA1090D779D697AC56F3591EFF812E91100042E5D94F3697DAE433EB544B01407F509002E58E223728C742FE9FDDDFC05278550FBD564FA0520DF322B90B6F2C18C3E281896D409BF9CFDBE0306DAB483B407019ABAD11FB0B52420CA2CF238C20C05A31ACCF6911C5E2C3488705144CA481B31672D7BF316EF49CB3D88BEA3115DFBE71B69EE065D12039CE5166C9FC",
+    "identity_type": "trusted",
+    "iv": "3BB0C86F4784D62474D2310BB337A09F",
+    "key_seed": "EDAA78185A1A5175083E82BCEC82F099C8331C5C132E9719C5CFD92154857279",
+    "metadata_key": "7FC7DF905655640A265CE4249EF2343C",
+    "section_mic_hmac_key": "FD55BD1DF6A3A7B11CE1F6CD6F54B5D5F467908CA565EE5EF51D8E87DAD23F3E",
+    "section_salt": "42E5D94F3697DAE433EB544B01407F50"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B7611E4DB66970C64C508B012B19D038",
+    "aes_key": "2AB8E62B732603133EFE0A777862A3B8",
+    "data_elements": [],
+    "encoded_section": "3790134C043B652FC7D9BB7E47E7C074C00E9A9110003B975A14294937B99D71E213A16D49749002D1804746ED376A0B7412BA53650D6F5E",
+    "identity_type": "trusted",
+    "iv": "896CA16D40C2FE9EF467463B781B2D30",
+    "key_seed": "C8CC1B103276D084459C1C0ACF7EB4E360F9E700891FED6676E6D1075B19A369",
+    "metadata_key": "141C175A69BC895A7B2F6DEED99F036C",
+    "section_mic_hmac_key": "D3219E1AB65611823B84767FF42E79D91D19EACC7C057CE11954FF13B1E1876F",
+    "section_salt": "3B975A14294937B99D71E213A16D4974"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3647592C7FBDF648CD7EDB024F33BD04",
+    "aes_key": "3A1A12B6FACDF29899EE462AEBA9B344",
+    "data_elements": [
+      {
+        "contents": "88A9B2A6",
+        "de_type": 712
+      }
+    ],
+    "encoded_section": "3E90137DA38E03A36C9F9176947F63FB67C12491100062620E36B963B4DE09225791E16F486690016BB6BB370C97BE4450674D73D9130B348323C380B88DC8",
+    "identity_type": "private",
+    "iv": "1BC76C617AFC378D7A296ABA4757EA3F",
+    "key_seed": "C61557026D3D253A85F7AC194BAE74A1E761F59DAD126F47136E993CF2F5B6DE",
+    "metadata_key": "D0ABA18228B34F9AF59D7248CC844111",
+    "section_mic_hmac_key": "8FC4925A00CBF30B6ACB61EE98B832AEEBB03CE0ADDBEB4D989FAC453FF32F15",
+    "section_salt": "62620E36B963B4DE09225791E16F4866"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "40952DC0D221AE688E3E7162C0923F0C",
+    "aes_key": "19B5C1C6D9E48CC519A20E81D5D63604",
+    "data_elements": [],
+    "encoded_section": "379013E18D5027806A73D9048564062FA8098991100014034FE308AA953FDA2D86F85CCCEA57900257D1F879E535C6C429BC4A2BE220EE7E",
+    "identity_type": "trusted",
+    "iv": "BEA9A319D926C16A93C7C563D3A4725B",
+    "key_seed": "F701D04F3AB67A553F3F007677AE499E1F573CC2AC9219EC6386AC9C001A55B7",
+    "metadata_key": "758A0996ABFD4059E79623EEE974A91D",
+    "section_mic_hmac_key": "B2C8BB02DF87BBEACA0088A3DD4B94036C80788AFE9D7BCCCEEF03265C97B824",
+    "section_salt": "14034FE308AA953FDA2D86F85CCCEA57"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "756FDFECA95A8AD628CC57BB41E734AC",
+    "aes_key": "94D6D7BB94A5503D75AEF2C51C940589",
+    "data_elements": [],
+    "encoded_section": "37901353D770C75B341EB54A72DE3DD4D0CC899110003B7992CACB34F3A9C66283E73D212F1D9001E853DD8ED1E580D63FAF80B4FB4F620B",
+    "identity_type": "private",
+    "iv": "8121921E27A4466509E573B3255F16CB",
+    "key_seed": "A14520D1E0ADBEA8EDBD90360368C3B198C604A2340EF83FEA134721D6C79613",
+    "metadata_key": "7AE0BBF927B2590C49791320A4325B68",
+    "section_mic_hmac_key": "D5727682C5055A4090FAE17716DF6B0B0E321019C4D0809E8200850A4CBF458B",
+    "section_salt": "3B7992CACB34F3A9C66283E73D212F1D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "82B7393BD43AE40BB06D1A3A2823133D",
+    "aes_key": "469CBADC1BB8023F1BA0DA05A9310B22",
+    "data_elements": [
+      {
+        "contents": "40A863DCCD4054C96E",
+        "de_type": 667
+      }
+    ],
+    "encoded_section": "439013C0F02349BBB2FDECE00F7C9296899417911000EF4B9DE242CE6D6AB6DA0B896C786F389002B25529FA48ADEF1CE9AFD454048A8390B4713EE35D5B6314919CD64D",
+    "identity_type": "trusted",
+    "iv": "D7DE8E7D886512AD0339056C7CC54C62",
+    "key_seed": "BD980624836660BA2C0982812F6F23078802E982DCEA461EE94BD4E8922BC8B5",
+    "metadata_key": "060B8DD7D93EFDDCE3FA26ABE785B9E0",
+    "section_mic_hmac_key": "BE821CA0FD33D9E57C3BCE1371AC54A6DC461EA194D0910EA9B38691F76434E2",
+    "section_salt": "EF4B9DE242CE6D6AB6DA0B896C786F38"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E4160F1914D232240945FBF05EC8DA4D",
+    "aes_key": "673A79D26DA0EEBFC56E507EDB61F814",
+    "data_elements": [
+      {
+        "contents": "BC315F251FB68CF65A3663343CA7",
+        "de_type": 562
+      },
+      {
+        "contents": "DE7CC83BD90D587EE41E2EBEFEB39E85BCCB1B876DE2A3ED7B9CD046",
+        "de_type": 259
+      }
+    ],
+    "encoded_section": "679013B3FABC50AFB0E2CC60D03D341293DFFE9110000AB560F9226EAE8DFF4EDA62A661E9819004946BD0DE5F133F9AFA422180C709FF504E166A3FF94760F24B0248E830D4E848058AF863E9F4296908B3F1061FC8668480676FDA3DCDCCDD5B6C11A9AAB632B5",
+    "identity_type": "provisioned",
+    "iv": "3DC82BB10A656986B8EE35FCC6C4D681",
+    "key_seed": "DD867E8AAA962AEAD05B0A027C1D0BF098AC2B5A9BB81F6629A09A3DB6DF77A9",
+    "metadata_key": "EBED6F7F0D41A90BCFFD07DC38AD4E7F",
+    "section_mic_hmac_key": "52835EE8B0354CC1819B4543F5216BDB806D6202C824FF1BA2B1EAEAEF7B667F",
+    "section_salt": "0AB560F9226EAE8DFF4EDA62A661E981"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "23EC2882AE29D794E00F3C929ED4EE82",
+    "aes_key": "21B174B8C2B2C1C32A151FFB3BEE8682",
+    "data_elements": [],
+    "encoded_section": "3790137AE67F61984C37A01FB8B94165B8EB269110002A37AE16791BE17CF76D244E7714E43190024E181B5BBB9F5FB00E6A774D12FD3C00",
+    "identity_type": "trusted",
+    "iv": "A9BF6682AABD317E8A06D867766A652D",
+    "key_seed": "A9804B5A70F86AC25E6D501C3CE9EB2E2125DEEAB3AD5D05F0BEEDB0B70F8E89",
+    "metadata_key": "640AE8DF2C5FD30430D67174765B5D9C",
+    "section_mic_hmac_key": "33C747147E7BF5C0E36AF6EA7071655381568471DAFA92ABEBE4C78677219216",
+    "section_salt": "2A37AE16791BE17CF76D244E7714E431"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BCF6CA8BA694336C8555B15D6E06F5AE",
+    "aes_key": "18375E93FA4431A762A9B737D2336ED5",
+    "data_elements": [
+      {
+        "contents": "A84F3A8B3FC540FD359F5DBBC001EF57",
+        "de_type": 462
+      },
+      {
+        "contents": "75029C04F876937EF2CF8BE2BB09B1241CFFB0A631DE263E",
+        "de_type": 960
+      },
+      {
+        "contents": "7A26076DF65B13D39494",
+        "de_type": 555
+      },
+      {
+        "contents": "BD1C",
+        "de_type": 307
+      },
+      {
+        "contents": "DF3E8C",
+        "de_type": 513
+      }
+    ],
+    "encoded_section": "7D9013BA96BEE6CEC0F79A25B8BAEB823DA45B911000F11199E929FB5DE7474EC679FE4B5A4E90022C2DA6326BC23D58AA4E77AE3ABF66A8B261E4E78FF193835D2B9A5F3AC971BE4949847D170429A80B5D763F7D136E9063D7F40A75AABD4F956710B6D5EA391C631FEF5310261634D6578A6A7F7184508FE7CF52E224",
+    "identity_type": "trusted",
+    "iv": "0CA6D1FB7354E9E4CEF190EB8ED327C9",
+    "key_seed": "ED623407DB6E29C91192E1EDE3B83BF57EEECFE10EA5E2547C59F31F836634B2",
+    "metadata_key": "A6DD5533AE1DE0719410FABB85400660",
+    "section_mic_hmac_key": "B34016F96945E2AFA191598597EA58E6D5F5AE9EF8158B45AD50F60EF436C732",
+    "section_salt": "F11199E929FB5DE7474EC679FE4B5A4E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "DDCCACFAD9051E1B99C43C413148B0EE",
+    "aes_key": "E247320C16C197987CA928AD87BA1030",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 720
+      }
+    ],
+    "encoded_section": "3A9013BCFE98BDFD2205C5C668EED3FFB8E672911000DDBE757080D8CA7B65921FC3A638646190046065B7703FFC69AF2E14B00D90BAE51F9111E6",
+    "identity_type": "provisioned",
+    "iv": "BCD763E963B259C4E19C8A6F62F05810",
+    "key_seed": "406F13FCBECBF6E301208FC9C4AFBE541728D2241C987C38D7DE961A95874752",
+    "metadata_key": "FB990D13C3D0EBE79AF30E19B6262D66",
+    "section_mic_hmac_key": "D441BE8D9C7952F3B60B023069D64BF2397257FC8FEC7A2BBC090CB2646238C9",
+    "section_salt": "DDBE757080D8CA7B65921FC3A6386461"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FAD923151B5EE843B58C5E02C8636EDE",
+    "aes_key": "D6353A97771C8967BCA9F7AE4884DAC9",
+    "data_elements": [
+      {
+        "contents": "DE7E13DAB250CEC845BABCD1",
+        "de_type": 860
+      },
+      {
+        "contents": "6531B82D346C3AFD2D276FA5E02E2A93",
+        "de_type": 274
+      }
+    ],
+    "encoded_section": "5990134AC7CD530495F2BAFB85AC93EC6F012B911000438C5B3D5AC51F66F6C683C9ACDD401D9002AC396666585E471439C0A5EF4DC05AF49B9600A96284D58D2C72807902769EBBCD923F31743ABB3F7440C3AD394CC436244B",
+    "identity_type": "trusted",
+    "iv": "30D9DC82B1A62B353A8B52CA627211A0",
+    "key_seed": "77524ED887D0A9A1A96782470380EF5672938C21EC13CC43658246E6520D3D75",
+    "metadata_key": "76EA680B23CE5062373D8F0AC9FB0912",
+    "section_mic_hmac_key": "A83C77A67D7CD424BB55C400C3F12E4FB47F6602FE03F0ED8A1E2DF1A311D1F6",
+    "section_salt": "438C5B3D5AC51F66F6C683C9ACDD401D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A5EBA3EC2EDC3DD714C2EB3288F5E142",
+    "aes_key": "CE45D560B190E915974255CA1378211D",
+    "data_elements": [
+      {
+        "contents": "80677B0D8386DC",
+        "de_type": 102
+      }
+    ],
+    "encoded_section": "4090133665BFF6F114B04DCD82E3E6627CEB879110003295E996819A16214D393D240335FD779002F049668CE0B95A53D2EB885B92DB5BBC901C37F3C5F350C0C9",
+    "identity_type": "trusted",
+    "iv": "D9E137F6608666AF35D69A5EBEEE38E1",
+    "key_seed": "F33CB9D14DD2597AD7D68D0A4F7BC85C4F32D2B7F4EE7227DABFF6FC5FDAD466",
+    "metadata_key": "AD9CC4271E2075FB353A9CB5DCD07162",
+    "section_mic_hmac_key": "0D0174A3186C8CF1D9A57AFAAECB8B284D7E08E82ACCF3AF6C39F0A27199B496",
+    "section_salt": "3295E996819A16214D393D240335FD77"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1AC1B2E96E974AEFAE2BD3E1CE81AAD6",
+    "aes_key": "BA47EF9390032854FC6FAB604892F729",
+    "data_elements": [
+      {
+        "contents": "E6063E542EED02F65B9B7BC296A3F78D",
+        "de_type": 413
+      },
+      {
+        "contents": "A5D1",
+        "de_type": 969
+      },
+      {
+        "contents": "7ADCCC9D04EE88E04EACCBEBB555CBC4A2479E1425656DC017568B74DA",
+        "de_type": 919
+      },
+      {
+        "contents": "2F0BDAD9E57D070C4667F38E193B",
+        "de_type": 949
+      },
+      {
+        "contents": "8CF202B2A335336F0A5F2589FDC3CCB21E46658B549A787021",
+        "de_type": 618
+      }
+    ],
+    "encoded_section": "9C90135BB284FDF4C800B87360099389CDDB9B911000BA4FBB4D16C95F10913371D7DCE9D3E390020CE61C619DB74977497E427B1C0E9CD9F9D3581D42AE5D15081AB1494E46914E962366A6FADD9C79CC4C64BD0B3E7A83011385919B57F8C04E17CC46D31EB470B7580195A2608C816EA4D5D34296AFD1CF3DB51A99327E8420F15A73539B451D7A7BD9915F56D2D9CBB7684C07146564B6E24B5CBF",
+    "identity_type": "trusted",
+    "iv": "42F6C7EF706340A72B05C5C6A99E316C",
+    "key_seed": "B04216F33F8E756F288B27E645564265383CC9335CFBFF47F439629236A697F3",
+    "metadata_key": "A1FCFBA76475B80E589617C587806CC1",
+    "section_mic_hmac_key": "1C62F6D1D011A26040C16859D31494E66A00896B20C852B3FCA34B065DFD48C1",
+    "section_salt": "BA4FBB4D16C95F10913371D7DCE9D3E3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "89BF5E643860DA08F54E99325545E0E3",
+    "aes_key": "B6EBB7A5B193254333D9EBA863ECDC2A",
+    "data_elements": [
+      {
+        "contents": "7A10F256CC3DF91E78DF65B24F052339E8C81DEE572D96C4",
+        "de_type": 833
+      },
+      {
+        "contents": "A15E536C45941AD26F38EE81E50E6F5C54C5DFFA12BEE0E3D25E8CC5CF",
+        "de_type": 607
+      },
+      {
+        "contents": "12CE431D2ED376FD594A80943044EA856C642D11DC0F2D9450",
+        "de_type": 31
+      }
+    ],
+    "encoded_section": "8D90139DB6F3EB17792669F56F53FA03DE87C09110003AD9600CE15FC3CE465D0228FC8CCE769001CBA6140B22FB73FB1B0E4F8950351659BD43415DC971F0FA325B81986C47A74F3FB2CB7E7374C278ACE925EBF2B7067F8E6488C4CC57BA6AEB832C8B1B4D9A002C8870DFB147033F652EF25CCF19D8D59727EA6BF61A0B52D489106BD21BF8788EBB015E1465",
+    "identity_type": "private",
+    "iv": "AEF47384658A554A58363D62F7DB13CF",
+    "key_seed": "056214B06D0378EBC92E13F6C5EB0FAD7564243DD2317D66CA38C340BE54BB4F",
+    "metadata_key": "813ED8A5314A2505023A99227D91A6A9",
+    "section_mic_hmac_key": "618FDE5AEB4E190D45EFF78AB4BF2DE14BA35855973E688853E749A69E3A47FE",
+    "section_salt": "3AD9600CE15FC3CE465D0228FC8CCE76"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5D5F06D37BE24A3EAEDC3F746FF4E579",
+    "aes_key": "E713EE216EDE341FE268F6237725F725",
+    "data_elements": [
+      {
+        "contents": "FB504B451A1F0820FE29A2FA",
+        "de_type": 164
+      }
+    ],
+    "encoded_section": "4690137FD2067B6E15D4CC6AB3E34A8295F66F911000E9A8A1CB24E1555E9EF384F4124C6BE29004A963964B7D5921A4FB27CD39CC194268B8CF554ED279FCA799130371519A31",
+    "identity_type": "provisioned",
+    "iv": "13C7A35EAACE574E2EAF7A13B0A6A32B",
+    "key_seed": "22A1BCD9F24ECC0BC71F4525D8E531EE7A5E40BAE308C43DA07F034C883C8396",
+    "metadata_key": "E6A03218FDE3E27FD782B86E176647BD",
+    "section_mic_hmac_key": "C0FB0F118A976D4B19E95AEE65EA88359C9F071CDB15ACBED9211A5B1EAF958C",
+    "section_salt": "E9A8A1CB24E1555E9EF384F4124C6BE2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "95B989A608C0D6967B551F8C7CA6EBE3",
+    "aes_key": "0B231EEBD178E593D7F473D51406B900",
+    "data_elements": [
+      {
+        "contents": "36520A4632FCCBDE9AD34A32301A30B2439AB22E330AA7A18C3A61",
+        "de_type": 275
+      },
+      {
+        "contents": "5B2B4C836A013A651571B13DB670155FB746325B8F",
+        "de_type": 620
+      },
+      {
+        "contents": "DEF0BBB8C8B205",
+        "de_type": 41
+      },
+      {
+        "contents": "1B5CCECF35D720A442BB0AE56E1E91D5EE0CF2BDF5DD6240",
+        "de_type": 719
+      },
+      {
+        "contents": "6BEADE80570A85CC0D95AAB0E3DD76DC2A8123DC48D395380C",
+        "de_type": 789
+      }
+    ],
+    "encoded_section": "AD901306AE4285463C53926B1BD6FADF6E1C5691100045E4F8E6A509CEB6F9A49BE5A9B9C20C90011A4BB20D968C614C735D4923F5CAEBC4CB1C56FC8F02B3319B998A5069B4ED1BE73891C3F7D0A6F4211183456B571768FCB52280F32D2D9BF903D21EB5B98781A86FD0548F68A78703F17E0C2929BEA276A85041F8B8EA24B9D6E7D6A627A49812349B564141338E2B3C207B17EF8729E4A3E3A0079D08F33A7B34CC1499CC47A5D460CA1DBB",
+    "identity_type": "private",
+    "iv": "AFC59E49ECE5A97EF0FAEACE62660170",
+    "key_seed": "17FD257E62CE7BC878DA16C5043579B98F79732B0B817B4F2EC51738CB77527E",
+    "metadata_key": "3186CBA7D7424D1B8B47B2897F11732E",
+    "section_mic_hmac_key": "2594DDF724498B52B29F3DFD0CCA6283C3403310AFC8E4EF37FC475E30367BD0",
+    "section_salt": "45E4F8E6A509CEB6F9A49BE5A9B9C20C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EBEC6D0EF372E4BBFD8A88C319852FFC",
+    "aes_key": "AAB99254BC7CFFE24CB438DF3C727AD1",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 432
+      }
+    ],
+    "encoded_section": "3A901307CC248287D8A88DB671E1586D3FB9CC9110002CC36DDB7D7A279AEAE122BA13AA019990046C51B7CFA17821450A90C98A7B38BD5DBE4FBC",
+    "identity_type": "provisioned",
+    "iv": "685AD69EF191E56EF06D7C86714348D9",
+    "key_seed": "5F065E34B94CD90CC221ACED8910D641D4FC4C6F56934780189E4E6E67DA4901",
+    "metadata_key": "A592DE8232D18AE8E195363D4B6CD07A",
+    "section_mic_hmac_key": "0264B54BB116AB3514B39B737B87ABEE206F8CD594CBB3E9B24648C5F53E635F",
+    "section_salt": "2CC36DDB7D7A279AEAE122BA13AA0199"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "94DD0021538CC04AA70A5F77125BE600",
+    "aes_key": "F0C472163938A1BD47B15B942FAFC48B",
+    "data_elements": [
+      {
+        "contents": "A00EFC0F33C01F0AAC4F5DC6541F53C8CA5B34",
+        "de_type": 481
+      },
+      {
+        "contents": "B12B24",
+        "de_type": 630
+      },
+      {
+        "contents": "81319ED0F5EE75A123443AAA795D81B9278993C6BF",
+        "de_type": 503
+      },
+      {
+        "contents": "8224C14BE4C7CCF408C4E3",
+        "de_type": 435
+      },
+      {
+        "contents": "681B900D27F4699C820155209DAE07AD857DE896C037DC49876E1E",
+        "de_type": 951
+      }
+    ],
+    "encoded_section": "979013E5CA4E440ED0EB31935166AF13C4256A9110001ED58C6BF2B47B9556A5D909E29A7AB49002DC33B008D4CF57AC179104B3F5DDABE7D56D19EAEF9BA28100DE838F8D6B98CD2CF81FF9BA53847382E6F71E502F127A858FEBB8AE77D0A504D685DCD638CB167B60DA02ADCE29E3F57BEA20F1113C7718CED429E7A813E03208194C0C99421F55D22265B201A2D80FFB254F5FD619F1",
+    "identity_type": "trusted",
+    "iv": "807C9838F5A3DF8073FDFBAC74766862",
+    "key_seed": "ECA0F4886F264A9CFE0BD7255F6FA88B64AEE99627DD204D4100523CCD96A354",
+    "metadata_key": "8344533765DC97CD1FF2B037CABBD8D8",
+    "section_mic_hmac_key": "F0D7ABF7AC2B3A3945209EF72944671D98A4EBD63BF94CDE96EE2D364699342A",
+    "section_salt": "1ED58C6BF2B47B9556A5D909E29A7AB4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C112DEFB7B31A43E9EA8571DBA1CCAB4",
+    "aes_key": "383D18B559037EE81B05F2A3A636A6EB",
+    "data_elements": [
+      {
+        "contents": "27C28C2FF32016A4829B967FDDEC6CC7C0B5BFF5EB412D4899BC2C4A754D",
+        "de_type": 382
+      },
+      {
+        "contents": "4650A741B70621E3D576483481C56AA21F9C",
+        "de_type": 310
+      }
+    ],
+    "encoded_section": "6D90136D9098A3888E98C30DA05CCF9EC57EA6911000FBB0F01A46FADCBB680D50359653C27490017AA7C1CE5BBC717C0A1D0003F112B244703260E60034777FAB79B3B9CAB5A5E8E2A955F11A4CD50FF0D7D1FB7F8E17944795C73E8A24161A13FB2F578F549A82B2822D63668E",
+    "identity_type": "private",
+    "iv": "B87F931962984B01923EA47FD3193409",
+    "key_seed": "A9A9F32E48740489BAC39106C497D0350B42C553BFFAEE0A88D67B4A5B424D5D",
+    "metadata_key": "745B81AF3E8CC9B2FA7203A71AFEA41A",
+    "section_mic_hmac_key": "0AD484AD1377BC263AB10E7FD0990D6AF7A9F70BC9CEA564EE60913EFFBB13F4",
+    "section_salt": "FBB0F01A46FADCBB680D50359653C274"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8F20FB3600592D6EAAF2F1E74BD0CEB0",
+    "aes_key": "F9A37408AD4AB15C048209D298BF9C3B",
+    "data_elements": [
+      {
+        "contents": "348A6AC7D6951E86456352AE6DC70519FBC5",
+        "de_type": 869
+      },
+      {
+        "contents": "07BFAD354EEEABB377E35A3CA9F93C2919D63A5F60F47E9A6E6452",
+        "de_type": 379
+      }
+    ],
+    "encoded_section": "6A9013F3CCF8ADF413726CF270C2464A7D6D0A91100075FB92C2BDB77630B96A7871350B3CCA90018B5CB809F8B85ADB3582601C38071C20A3D7C776D0FDEA4E4386B23278FF5C05EF39173B35ED5E64B5E63F5299971353BB80A3E88226FDE3610113FAE3650A87EF3BE8",
+    "identity_type": "private",
+    "iv": "F48F1E40820CDCF7DB3E6107C448A32B",
+    "key_seed": "771A683FBB41544543E3000270F62B0E75BE97DE1E8931A5B0E30874A315B40C",
+    "metadata_key": "CDBA3FBDB8051258774E18B2A19647A9",
+    "section_mic_hmac_key": "58F7FF2CB350E0FEE347D0DD9DB0A50D1074F737E04E34351E5D897545149F01",
+    "section_salt": "75FB92C2BDB77630B96A7871350B3CCA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0718AFF8D3F260798EF3336D840814F9",
+    "aes_key": "1978A74AB0D377A6443E38504531BEA4",
+    "data_elements": [],
+    "encoded_section": "379013792A0670A6E601F9061A049EDD5E34FF911000B179453D2FB79CF56E8A31CFA8B15A389001BBE562860A2039D0152A0496133E865B",
+    "identity_type": "private",
+    "iv": "167401B2B2AD0240F0E57038F262961B",
+    "key_seed": "003D1A9D017396CD95C9138D152B44E500408A013CC2E3E50B0D01B2E9CD80BD",
+    "metadata_key": "77C3866FBD457BE09D29A90CE12E1689",
+    "section_mic_hmac_key": "B3A6886A924FE33D724385D45E5FE158AD66370D2791BA5DC553D5E66327001D",
+    "section_salt": "B179453D2FB79CF56E8A31CFA8B15A38"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "21E532A86E771C51558095090F8AB251",
+    "aes_key": "68075EA0842A1D448F7B244E5FC6B29D",
+    "data_elements": [],
+    "encoded_section": "3790133308F2B9AB4434656EC8305913A01C089110001708C5DD384808FF64D2BA400F2312A290013A8342F0CC39E9B96584E5CA7DF1DE7C",
+    "identity_type": "private",
+    "iv": "227DB4C6845BF40B82073BC0783EC727",
+    "key_seed": "C2EFBD062A6498B9E52733922A598BF3D4949A74FDB57D92D0ED064239E5C37F",
+    "metadata_key": "41C0037D03840085364AC811B553003C",
+    "section_mic_hmac_key": "452A3B6B009FFDF2B2E8F6CC57A2C741418F33E7A85D9FFBD33FA2A8ECEE28BB",
+    "section_salt": "1708C5DD384808FF64D2BA400F2312A2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "52F9C4E2952B34DF2C0296D50B197CBE",
+    "aes_key": "507A391115EA010FC7DCD6F69DAC200E",
+    "data_elements": [],
+    "encoded_section": "37901397A0CBA6F76625846FD918D0DFA8B5EC911000807D0ADCFE480829130092A629C43B779004E57DD041E63A98C2398922E8C6780738",
+    "identity_type": "provisioned",
+    "iv": "2CFF04243F275FBF2A33912ED849608C",
+    "key_seed": "C39B6A57CC29C43B34A9B24B6AA5F88B68249F3EF3FA242B7A227A7FC5B9F013",
+    "metadata_key": "F902EDE5E988C6DFCB6E550C739CACBB",
+    "section_mic_hmac_key": "F5914A0D86F740B26A39165146FBE172469E9C3B6A8D7FF5659E8C3A3C40FAAE",
+    "section_salt": "807D0ADCFE480829130092A629C43B77"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "560AA4E7A57E03DBFAE7FBD4EFDA7CDC",
+    "aes_key": "9638DDE581FE5B67F2DD50376E3A99D4",
+    "data_elements": [
+      {
+        "contents": "F2AED0A54D5317974CEA1732E79EFB900594C5660907",
+        "de_type": 56
+      },
+      {
+        "contents": "",
+        "de_type": 992
+      },
+      {
+        "contents": "",
+        "de_type": 86
+      },
+      {
+        "contents": "61F5EFF11047065B2933557CA2EA9356A4B569A20B362C760A",
+        "de_type": 748
+      },
+      {
+        "contents": "8754249571E61C93D55CA58B9DDB23402C",
+        "de_type": 790
+      }
+    ],
+    "encoded_section": "849013203F5A7282936A2C5F6B7D31F2C2B3F1911000350FBAA0A5C14EE71DD5564DF054F7059001F63722D44C16939F37A228801E10C7AF0D3AB2DB910CB4A915A66C9AC57A057E79A46BEAE2B01B7B2422C789156152DB2C0C3C31EFCAFB6260012D7B01D8E55C0DC93FDCE2C9E3883DFBCF4D97E76A4F557470AFE3F6F3630A59DB334D",
+    "identity_type": "private",
+    "iv": "5FA4D01E917F4AF96837EAC84C94033C",
+    "key_seed": "AE37490A40777E13212927937035E5D5CAB7CFDB227BEF01AFCA1D4CFB348910",
+    "metadata_key": "7C0861BE5B2DA8F097517E544D50EC5D",
+    "section_mic_hmac_key": "A2CCBE29DCC3756A8B56810F1D9BB20F3087F60A04CF2968CAFB067298BF1FF0",
+    "section_salt": "350FBAA0A5C14EE71DD5564DF054F705"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "136C515299513C1C23396C72472A869C",
+    "aes_key": "F8E96AD115365C1DA32ACE0E955D707B",
+    "data_elements": [
+      {
+        "contents": "0004ACDFC6E1BF2DFE084CEBD5210494FA370D8D",
+        "de_type": 439
+      }
+    ],
+    "encoded_section": "4E9013B093C4394DF11527B26EF2770B65B0579110007923EAF675A0D97190BC856AAA92FA5D90015BC232EFAAFFE8486D932A63D9121426BC5FEE983041B15F40194FFF44A3470C0F5862DFA2DF7F",
+    "identity_type": "private",
+    "iv": "2F972A959571317A323BAEC64650D9E0",
+    "key_seed": "653D1790B9B4E73D40ED58AF3548C01EEE9A1CA7EDBB6788113943F29BB8A7A8",
+    "metadata_key": "85BB2BE74E51ACB8D631E31C193730C6",
+    "section_mic_hmac_key": "01A9931123C16D70DF660545EBDC39099DBDE472CA53ECB8CF65CFA3FA67033F",
+    "section_salt": "7923EAF675A0D97190BC856AAA92FA5D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3D877A078133B36B3035B3D2FD091B01",
+    "aes_key": "F141257F9BECEC2DA61B11F67E4E107D",
+    "data_elements": [
+      {
+        "contents": "21F663C2B4668DBB030C2D2EB1506BDA8A77FAEA98B4567E8A91CA",
+        "de_type": 173
+      },
+      {
+        "contents": "71",
+        "de_type": 401
+      },
+      {
+        "contents": "FB19",
+        "de_type": 751
+      },
+      {
+        "contents": "755DF137F59366F68158D6BEA4F7877F1D2BB7CCF6962137",
+        "de_type": 748
+      },
+      {
+        "contents": "A286226956337347E1A54B",
+        "de_type": 192
+      }
+    ],
+    "encoded_section": "8790134D927FD029D5F95E67D68D646A6A361491100039D2819931C23ADD06B49F18423BC84C9001B112FAE321EEC67D926158ECED1C2B19CBD9F742E45F25925FE6C6795BE721A2F72638DAB903CF4C970C4B3C35DD693FDAB3DEB719FAED9DDC1711F51F631B36FD26BFC34F9039E535BCB78D1A14D5113270D00F96A956D0DF082E2F30901283",
+    "identity_type": "private",
+    "iv": "32F841444267601174749E94F87DE1C2",
+    "key_seed": "E9333F52CFC570120ED0105ED56952CCE1FC9645367619713FEBAD14AFF0E76C",
+    "metadata_key": "6E13A84FE3BA463ED9E607F5B1BBC9B4",
+    "section_mic_hmac_key": "3C44C33189816BB62961DC5FFCF2C71D910C0730BEC3953C5411489DF41ADFAF",
+    "section_salt": "39D2819931C23ADD06B49F18423BC84C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "71A9A746DB966A4456DDE375B6F12606",
+    "aes_key": "1D5C27ED10C3063737A421D25B061C89",
+    "data_elements": [
+      {
+        "contents": "39D427B897A964131313B227CCC4DE10B368B8",
+        "de_type": 519
+      },
+      {
+        "contents": "3A67A2E11BF608DC073983D1FB0DA3",
+        "de_type": 701
+      }
+    ],
+    "encoded_section": "5F9013B8AF9217D548709840B3AC857034ACB9911000B4F398A8A439BC972F70E2609A6C7CA990022A637108B4F22FC613C0A0E75AC2471132DD1D972FCC1174BE70BB6CAFBB3F6998C49DDBEA8A425CBB28664071BEF42114A0701F112D37A7",
+    "identity_type": "trusted",
+    "iv": "F2754259EF584E77196E83CA8B4B49EA",
+    "key_seed": "B1939F4E5BF1BBA5B56B4C53FCFE87EC1873876B1869B215D79AE2B742AFAD08",
+    "metadata_key": "E35B349B13DD23987416D3C506A26EDA",
+    "section_mic_hmac_key": "2DBDE1B077515A353314FB3D933F17F37893CA377766A4C8A3BEFE1E8E2FE8A1",
+    "section_salt": "B4F398A8A439BC972F70E2609A6C7CA9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0633A7D37D0E75C82950F86658617ADE",
+    "aes_key": "1EEFF97162B2CE8A3E6C657B8AFB9DF5",
+    "data_elements": [
+      {
+        "contents": "0A263635A12CA6",
+        "de_type": 461
+      },
+      {
+        "contents": "13696B3B2D423455ADE08CE7E3BEDE",
+        "de_type": 304
+      },
+      {
+        "contents": "4382E5A1567DDC",
+        "de_type": 911
+      },
+      {
+        "contents": "",
+        "de_type": 3
+      }
+    ],
+    "encoded_section": "5E9013C561581D56E580C0221BE31A9F5A97D4911000F341712F781AD354FB9444AEB9813A769001EF9DCFE8941FC69C1BDA3B6E61D484BE3CD363AFA8F753EF60E93BC52D8721FBD05DFD27C74584E9087B7645148A9696148501617ECEA1",
+    "identity_type": "private",
+    "iv": "1442CE37668B7EE9935E4E400C7051BC",
+    "key_seed": "E999377BE50FBB31279CD98440114E6CFD0019FA212A47015B9EE5EAC4BD49D3",
+    "metadata_key": "D489962146D1E488C02D148298B86ACC",
+    "section_mic_hmac_key": "48392CA50B2CEA5B7AB937397A530A54E1EF8320EE64E23E377333DC1A0725CB",
+    "section_salt": "F341712F781AD354FB9444AEB9813A76"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E5BCB2BFB4497D55C0BFE5EDE0CDC6A6",
+    "aes_key": "59A78870C55690255DBD141A15F090CD",
+    "data_elements": [],
+    "encoded_section": "37901330292E7FF856BD9476F0190AEE3ECA199110009029F02502CCA11E12A7809D3BA9304D9004901405D5FDA5DE684E4D372DEA766905",
+    "identity_type": "provisioned",
+    "iv": "08584E585B5ACA5124277D06708F34AE",
+    "key_seed": "8AAF95575F0A0E04188D3E42DA9F50AA3740E28DA9BE4815B98E74707B02AA15",
+    "metadata_key": "537EA5D04F0A1B31DC898C1FEAECBAD4",
+    "section_mic_hmac_key": "F8DCF1DBF531FA564EBA22F2809144AF11DF8BC792A54F77513AE58406FACE1C",
+    "section_salt": "9029F02502CCA11E12A7809D3BA9304D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4579CC1B14F511A11A441B67B89E39DA",
+    "aes_key": "7E0F6C860EF0D264F8ED7FDFA9D843DA",
+    "data_elements": [
+      {
+        "contents": "F8CDB7B169E1147E9B47779FF86A1F7BB2",
+        "de_type": 284
+      },
+      {
+        "contents": "A7FCB30D4379892BD07112349F7580699FE8B8",
+        "de_type": 603
+      }
+    ],
+    "encoded_section": "619013E68A36F6574C0776D73BADC793720D31911000115B858A780FD00A4B1D74707D2F85679002F3B4DC9017DFCB21B818ECDA648233753AD42FEE0C77901D741C38EEFF3188811EA6EC7BDED6517DDF15636024BF3DD27B6CFE7A479848AB9DD9",
+    "identity_type": "trusted",
+    "iv": "37288FF7CCDB400825540E0E494D3A30",
+    "key_seed": "1577AFD72DCFDE648AB3084F07F93F275D98D58FEBC60A6CDBCBB1B1EC0E2F05",
+    "metadata_key": "77A66776AD508B9319A72FFAE4F45720",
+    "section_mic_hmac_key": "E2AC40D5A99B858D41D224CDB76685071E9DA4A1A4313E913C7C57DB5C05E76D",
+    "section_salt": "115B858A780FD00A4B1D74707D2F8567"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "AD85D70775BA4E741F713229A6EF6529",
+    "aes_key": "28A1B46194B2DDC3497E5AAE297539AD",
+    "data_elements": [
+      {
+        "contents": "F3F9AD43482D0E8DC791D639C671542CA0EF24E4A3",
+        "de_type": 292
+      },
+      {
+        "contents": "C32E4B8D3F8F7B308A",
+        "de_type": 578
+      }
+    ],
+    "encoded_section": "5B90137F7A54A12574145B6DB3F5E27E73E7BF91100024E555596DD4D3555D08243513295FBC9004A301DDBBD6272926BB9DC0B9885A79507EE94B5969DD57C197A16CA97315534F7708D2B98743EFB67CDE8880B55CB6FB6048F9BF",
+    "identity_type": "provisioned",
+    "iv": "6899C0DEC131BB47E9D9DC98DD724BAB",
+    "key_seed": "59F841FD000EB3E98DA6DA3035D326B9242698347F0C972E2C45E6D28C2B7A2D",
+    "metadata_key": "A90DB67D319DE8549F8B31EE91B69FD0",
+    "section_mic_hmac_key": "B903E393AFE19D7DC80AEDAC8222CD5B99E60102BB471E4767F06DF32561F7FF",
+    "section_salt": "24E555596DD4D3555D08243513295FBC"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1BDF3C712E3AE53D63309EE3B8023A87",
+    "aes_key": "980CA9E6379B483E443DC1E160D5201C",
+    "data_elements": [],
+    "encoded_section": "3790130534A9410FE91114106C1CA9A8062F9A911000E578AE0019A2141EF58F01365677B05490047AC84A7E04229A68A6F7F3308374957A",
+    "identity_type": "provisioned",
+    "iv": "7D7E507A0BE6403325935B1DFA05A9F3",
+    "key_seed": "ABA16E9B7EE1835A8CC675D390FDD4616623AC235379B657C1233FEF741FA690",
+    "metadata_key": "2D8A58D701172EDA89904C96AFE41524",
+    "section_mic_hmac_key": "54E5FA2CE95932EEA68CDD1BD3D445AB83FEF2DCEF7E3A9B2C3785A92B228302",
+    "section_salt": "E578AE0019A2141EF58F01365677B054"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CBDCE43E4A6BED0CA0C6D08F3065F633",
+    "aes_key": "CEBF5E518C10D4684BEC405850BC032C",
+    "data_elements": [],
+    "encoded_section": "379013FE585D545653A98465FB672C230E014491100043DB7392F99B019A671A05708D588FA79002DCE155F4602E46063A0C523C88E2DC50",
+    "identity_type": "trusted",
+    "iv": "4B26BC7185A6C854190C227BCAC402BD",
+    "key_seed": "5916B9D7017269DE9134B2C7612BB1EFD625FB48BFAA111A0A2C093F2277EA26",
+    "metadata_key": "9D9A222628AF278F409455DDEF8461A8",
+    "section_mic_hmac_key": "A03260EB043E0791406F9CBBAA2E3F35EA9D3E5E0DE545C3BA5BAF070DACF5A6",
+    "section_salt": "43DB7392F99B019A671A05708D588FA7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E39DC77B87C9B486CF0A220E9F96005B",
+    "aes_key": "710AB1ABB206738BF8B7CD25F447C6FC",
+    "data_elements": [
+      {
+        "contents": "4B",
+        "de_type": 934
+      },
+      {
+        "contents": "66F3ECB89A6EEEF79D7B7E56D0322DF39B288742A2C1C501ADA9A41B6DB7",
+        "de_type": 110
+      },
+      {
+        "contents": "16C065D0395BF1207051A48B11E8CADF",
+        "de_type": 386
+      },
+      {
+        "contents": "98BB36DA75",
+        "de_type": 76
+      }
+    ],
+    "encoded_section": "759013A2B7ECF2852EA59A6C5F1CCAAD2756979110002854AECD9C5381CCBF80A06371B88FB690040E78B4D151F14503F20A32EC29FF08EF3B152E32D1A0A6262EFC3A259020C14B6387DC646B3E16ED8F3D3E519266F723184D8B9833BA01AE0320B0F40CBC89431D479F1C6A77A8B91F75CD625434",
+    "identity_type": "provisioned",
+    "iv": "907158F1F28F23E9346C336D15BAF4F4",
+    "key_seed": "7974330F2BF907399B0A00CC0732BBC1A06946E0B1D581E4A4186F99E778F076",
+    "metadata_key": "6B05DBBF085163F895C1A797DDAB7BB7",
+    "section_mic_hmac_key": "D10DD1068B113669C31BE18259AA3C6E077D61E97CDF58A6C6139E14C9CB4229",
+    "section_salt": "2854AECD9C5381CCBF80A06371B88FB6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D2778817F879B9E6369EDFE544E22294",
+    "aes_key": "C1691E7FCE0574DF8952878B6381739F",
+    "data_elements": [
+      {
+        "contents": "EDF6EEE118AEE831E7451217",
+        "de_type": 925
+      },
+      {
+        "contents": "EC9312D8F49AFF",
+        "de_type": 220
+      },
+      {
+        "contents": "CFBC75",
+        "de_type": 681
+      }
+    ],
+    "encoded_section": "569013718B15A1291DF01695B0DE521D99FB57911000947D8B59F619BDD6502FDF257004C9819002E4348AED16D25DA49B95C26845BF7DE590721FCF8952532E2002ADD53B5A98AD19B3F10E85425FB761FC9641FD6182",
+    "identity_type": "trusted",
+    "iv": "4077CA3D2F7BB0F5D8CEE41F01482B98",
+    "key_seed": "18A71701D5DEE8400E61168A3B3EF1AD1DDA90BC194C446C8BA40B6480C30CDC",
+    "metadata_key": "D1FE231F740FC03B295276053B2BAC3F",
+    "section_mic_hmac_key": "82AE800A495516651B39F72786BD066F05890A592D64AE7C1FEB9071FEE6C4D5",
+    "section_salt": "947D8B59F619BDD6502FDF257004C981"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "587A03C7955F9860870984298B058015",
+    "aes_key": "331E9D1FF1937D5F85F0668282E65C29",
+    "data_elements": [],
+    "encoded_section": "3790130FB6023392D2A41095E8206D06D7FF0E9110000D85431BAFF333B2573911AFB2EE969B9004E7FD0D3F84B425FCE63798DC6DD93C29",
+    "identity_type": "provisioned",
+    "iv": "77A5EAB32784959211B1E7EFD4086F70",
+    "key_seed": "E46D0C46C240ADB0C96768BDEA14323BAA3AF59DA10695DD2AA96963FB75F633",
+    "metadata_key": "0364468086B86E4E69D4998412D9446A",
+    "section_mic_hmac_key": "B8A88D796B1F5CD4E1B3FA421F911CEBFBB33203B5F54D397B77AB08C6A4CECE",
+    "section_salt": "0D85431BAFF333B2573911AFB2EE969B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7A1632119CD401B77764CD3CBA1B7E48",
+    "aes_key": "367BA98DF8FDBDF8D92C9E223204F9E7",
+    "data_elements": [
+      {
+        "contents": "660362F50CAC47EB6D5C372ECB360FED6010E33CFE2BF3",
+        "de_type": 744
+      },
+      {
+        "contents": "2E27FF821CD7CE8C7A",
+        "de_type": 864
+      },
+      {
+        "contents": "24CA67B8",
+        "de_type": 38
+      }
+    ],
+    "encoded_section": "639013B6F61D3EB8ABF5F504C50AC36A94EEA191100040B91207E7595A02CAF00DACEEB362229004899D84903A3B24808A0C8B7F59194E87CE3801D9A364D3232D8C9A1825EF6116E5C80E0ED3BC09DF178FBE1C6D28BAA73E8492380E14FDB44EFCAF61",
+    "identity_type": "provisioned",
+    "iv": "6A91D4D5C4DFDDFC880B73A3B7240702",
+    "key_seed": "EB30836609013EE83889ED5ABF6FC302F243144E118A2965AADDCC8C3987566F",
+    "metadata_key": "0BC8A5D803D9916D0BA83CBC5E0D3F30",
+    "section_mic_hmac_key": "D89DB6FD35D1A9A236C7B32B2713282376AB727EE4D22775E9A6E7AB64719479",
+    "section_salt": "40B91207E7595A02CAF00DACEEB36222"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EA9BCBE55A09A0AD1993D33AACDCEF3F",
+    "aes_key": "D480AB0495AC86543854653CF7AF5605",
+    "data_elements": [
+      {
+        "contents": "5743AE7D722BF57D",
+        "de_type": 59
+      },
+      {
+        "contents": "254368832881E13E4BCD68DD622D7B27BF77F0B248799E3F6BCF903334",
+        "de_type": 42
+      },
+      {
+        "contents": "172233F269FC283AFE876265C41CF433148DB69C743C8965E791",
+        "de_type": 792
+      },
+      {
+        "contents": "C007E7BC097140AA592C287EAA90479BCE00838A84B7D529",
+        "de_type": 531
+      },
+      {
+        "contents": "9678CB4436B9DB612DF2BEA08AD619C84DDF8B58DA67CBA0CC491D",
+        "de_type": 177
+      }
+    ],
+    "encoded_section": "B69013EB88670C74254B7E3124F568EAB21AB39110003CD98524158254D763A056D3D7B95EB890028EAD7A637F8D0F6CAF0D74B4A65BFC4C6DF88868FA11D9F5A5B179A5D884CD2C8693AA26F7AD7A949830EDBC504133BE5D5DA8317E74CEFC303FE55553BA1734B63ECDDEE36D3E90127BD85DFF414089E19356CC288B316AD5C88F7237EFA35AF07DC32C636D7DA300C8ED550F4409BD32BCEEC5CCEED448C4C049C19AB21C3E2FBA27F94F7C8402C98F5E60E23783",
+    "identity_type": "trusted",
+    "iv": "EBD45E06E481E15D113570B3CD3A690C",
+    "key_seed": "99F26C755B35B9E8F02471B50155868AD1B5415A36A8A09AEF2CC16B23E93484",
+    "metadata_key": "98AE7741589B65DC2BF7D9A9F725F908",
+    "section_mic_hmac_key": "66C7980C46970BE68B05B5263A65D5E3401D4E91DCC084AAF19D401694607A57",
+    "section_salt": "3CD98524158254D763A056D3D7B95EB8"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6F9CFB4554053A39150CCBCFE3D0AF1E",
+    "aes_key": "9D3541DE5EF0E257E4B8321145F57B4C",
+    "data_elements": [
+      {
+        "contents": "A43F33AE23920C0423748C754B99D99129E9DB",
+        "de_type": 37
+      },
+      {
+        "contents": "729C9F3BFCA94ACFEF114794B2",
+        "de_type": 109
+      },
+      {
+        "contents": "AC",
+        "de_type": 730
+      },
+      {
+        "contents": "5559BAE1D900",
+        "de_type": 729
+      },
+      {
+        "contents": "2EB49A44A2641ABDF0CDDC03EF43B7F3F52C449A892F",
+        "de_type": 44
+      }
+    ],
+    "encoded_section": "8090134F6688FA1A2E7BA04ECB6DDCB44035359110006AD7D11C0944CB91DB95B631C734D8949004E082EDC66A42BB6B05378C26D87B38BA4186497644057393408F087328EC5885E174BFFBD7466E158C474C51F5D524FF92A558F10761A4844FF9F9E1BDCC1C6E0AEEAB7E74BF4D04F79D6366857D63E74633C326B74396A4D9",
+    "identity_type": "provisioned",
+    "iv": "BFA35B0ADEC12C33F4A25CE69E314D44",
+    "key_seed": "585B91BAE582CFCA04B2CB0F4EF6228BF9D3ED8757858BC946567C7C056452D1",
+    "metadata_key": "ADD1DD5D5AFBD1297CB46459564779B8",
+    "section_mic_hmac_key": "3CC8495681BD196A59435B9E92678852F7229B3A17222A46F35AEB19872E8736",
+    "section_salt": "6AD7D11C0944CB91DB95B631C734D894"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0D008FD70A96D4922781509DC8233AC3",
+    "aes_key": "B6597B106536DB997B33270C1FBBFD01",
+    "data_elements": [],
+    "encoded_section": "37901319D976A449635BF9366F08B28550A32A911000540F306324634FD806109D2FA0F888719002A37EF91C879233705329EB6E1C7C1F3B",
+    "identity_type": "trusted",
+    "iv": "1F610FE4CEBFFBF09ECAB7001A9715FB",
+    "key_seed": "F000887AE6054C5ED93C14654F9CCB540E4ABD072E4A03C741D446809FB90C61",
+    "metadata_key": "F774AD3779D9F9C3CAFD222AA8FC1791",
+    "section_mic_hmac_key": "C5CA0D48EB97535C6759CC5851C60CCC59EFD96218C3AF81E97AF2A492C9DB42",
+    "section_salt": "540F306324634FD806109D2FA0F88871"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A0697BBCB8D71C0E3CBBF61383BBA0AF",
+    "aes_key": "2F302DFBB66FACFA11C38E4437398B74",
+    "data_elements": [
+      {
+        "contents": "247B14830A72CDBE2687D79D9216D81F4E3E545B01D75A5B75E29756E4",
+        "de_type": 20
+      },
+      {
+        "contents": "387C2B46942623D8615696845A90B3DE25FF253A159C89A2A3C340",
+        "de_type": 793
+      },
+      {
+        "contents": "F45668C015DDA58C872A0171AA605889E691398726",
+        "de_type": 252
+      },
+      {
+        "contents": "1474A3653170C9",
+        "de_type": 181
+      },
+      {
+        "contents": "E49C82D1F206",
+        "de_type": 10
+      }
+    ],
+    "encoded_section": "9D90138CFDF8CCDED054C4D7003AD4CB75765F911000C8C6351ECBBE018D1CAB2041141387E9900264E5A396E06459D7AD5061A8D1E6D6DB9A4DABC2338C9D39F291289A3948F91D3BAB928C47FE7503089FBEB195056064D7893AB1F884E7637AD93079312F00D1DAD71FE98C10370C42C1707C48358951AAFBD6F72889E26C67D846D13273A21E244DC751C76197BB577738B327CC39F017F56D4753BD",
+    "identity_type": "trusted",
+    "iv": "E73D0D0D01F12F05E954418529D9F056",
+    "key_seed": "E7513A0CF82FE239A9CC581240AD1BF40C7546506BAD18C1A754B8A50F190FFA",
+    "metadata_key": "094D5377650F8BFD60DDFC55521E1C61",
+    "section_mic_hmac_key": "7FAD140CC4B335530A8754A5CCD4A423AA3EC678ED3CA3D817906EE925AA90F0",
+    "section_salt": "C8C6351ECBBE018D1CAB2041141387E9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "66AB56CCB8DCF4E02102C595173AE0AE",
+    "aes_key": "080E3256F009193CFC48DBECD6A596ED",
+    "data_elements": [
+      {
+        "contents": "5FFE88F1F3AD43AC0BD206FB1261",
+        "de_type": 554
+      },
+      {
+        "contents": "C5C5120C2AD8114C0D7223CA0D4B",
+        "de_type": 376
+      },
+      {
+        "contents": "AC57EE249B96DD8F426FE4F02031E48B3AB4A248",
+        "de_type": 74
+      },
+      {
+        "contents": "1CF30B1E1C519ABDCED6",
+        "de_type": 358
+      }
+    ],
+    "encoded_section": "7C90137CF07245A7C2E4D9159C8C517CA1336691100063F671E6C1543317418A20C1BA7C01319002F7A70A1BD5393866D2E1E43D580C3C81FD09C428377BC94E8125F1ABAA938A5CB37C29DC9C9232679D1BDE10E8C586905A2EB8CBD52CDD1A50ABE0633360F0311BE2C3E60F32CA5ADDA8212D0D820A5442CBF1F122",
+    "identity_type": "trusted",
+    "iv": "6686516893FC3245873F63E6FFCFCBC7",
+    "key_seed": "226D0D4CBF82EF7C5636C8D21ADE2455DA18017EF11D9855A1C6623D7F52C49D",
+    "metadata_key": "B24F2E75B0207CA3039D2627726F15BC",
+    "section_mic_hmac_key": "DFCBCF569269B4C4C73D69E96B0589931C3BE5F7B5CC80B473A68ACB0D036DF3",
+    "section_salt": "63F671E6C1543317418A20C1BA7C0131"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A11C310F925DDFD146F831393D6D0FB9",
+    "aes_key": "1AE54656FB14E83D942075C749E2115B",
+    "data_elements": [
+      {
+        "contents": "BD45361322D9A02B2048A177A0103CF3",
+        "de_type": 926
+      },
+      {
+        "contents": "2A214CB5FBCA350A5BB0CB335B9FEA40CDEB6455C037B6821A599F17",
+        "de_type": 708
+      },
+      {
+        "contents": "2680C9A00A375A0A9DCE72BA1CE694B2E29CA12A",
+        "de_type": 273
+      },
+      {
+        "contents": "B79A1762E7073C6A46BA17EC05",
+        "de_type": 988
+      }
+    ],
+    "encoded_section": "909013FD6CFE2EE955035DE89C9F166B3E5EA4911000D1B1FB53397FE51B93F74900975CD47E9002924278101267E2D8E228B4C34D0A648C8A6B294E3CC9D07B62D1EF749C7BE05103940D261EC73D1F1C12C99A4B4F8ED3F468AA17CAE45B46E532F632012B8EE8E5C99014BAC4E2B5E20FBD1ED9DC6C6CB2D755E1FED2D3D8A5ACABF57ABF0D012C45D94137FB93592D",
+    "identity_type": "trusted",
+    "iv": "892E1A354B6DE952C5B014C7907EC182",
+    "key_seed": "FAAEE89538A2E2D5786C8946E6A0CEF832F309174B38DF73E4F84A99F15935E5",
+    "metadata_key": "0DB3D13A2E4FD91A299522F1D8119843",
+    "section_mic_hmac_key": "99CB5D0E2B02142282326CBFF5F9DA1E0233F2CFFC8C28BE12CEB87B9CC6FE6C",
+    "section_salt": "D1B1FB53397FE51B93F74900975CD47E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8CD7AD20B2C8317FFA8C35639F74A2BE",
+    "aes_key": "04A4C39B860940DCBE6D31E645C6C979",
+    "data_elements": [],
+    "encoded_section": "3790130B2D888B589284B7A0756A14D057BA899110005EB69F216C556E3154B71449355FEEF590012148C3FFABD2C9E7021C7025F13AF42D",
+    "identity_type": "private",
+    "iv": "82B3040C024A93C9E9FA070F5751EF54",
+    "key_seed": "44A25B92833732691F61F166743F7EC9F9BED95D496117FB2C0D5FE8ADF243B9",
+    "metadata_key": "58D26BDAFC8C232C9AE6BD1466626518",
+    "section_mic_hmac_key": "15F5A03411DE20F46038D7081E95D728EF120D4DD04A6D17A89E2BC7EA240C6E",
+    "section_salt": "5EB69F216C556E3154B71449355FEEF5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9ACA1AFA24CCE7E90657920FB0F97ABC",
+    "aes_key": "C6114A9A61EBAA0683432F07A306BAAC",
+    "data_elements": [
+      {
+        "contents": "67F0136B918AA30006",
+        "de_type": 450
+      },
+      {
+        "contents": "3A54424FDE3D",
+        "de_type": 210
+      },
+      {
+        "contents": "BC4E6711DB9D574C249ADB",
+        "de_type": 362
+      },
+      {
+        "contents": "DD7AB44C2783A1",
+        "de_type": 994
+      }
+    ],
+    "encoded_section": "64901398942DA061F73AD3DAC7FE04713E897F91100075C50E7D6DFA055F5967BDA20F6011D59002528E07C9E1AB8195BED4404ACF13B5C463F7F522DD45BA62C382337A18053527ECB87D1190488DB8FA1CAFD71DAE0F337F1F27E30405F2B3AA562A4000",
+    "identity_type": "trusted",
+    "iv": "C8D5BEDD1D514F4163FDC162E170E8E5",
+    "key_seed": "0E2E25E5F01089D937936CC39D8D004DC28C1F10D75552A9F66E98D510282092",
+    "metadata_key": "481B6CCAD1368A7FB57B226F25C5CD38",
+    "section_mic_hmac_key": "B9E11ECDC5E537C1669EC49389B73866E18AF8E13A0B6934CDD0B50154662368",
+    "section_salt": "75C50E7D6DFA055F5967BDA20F6011D5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3D78B4DA01181538E9901A89BCEB17DD",
+    "aes_key": "79793A9EED14B1E7431C0B803ACE76D6",
+    "data_elements": [
+      {
+        "contents": "1A14E4524B490E8107DACC2F7FF359791012B7BD73F680",
+        "de_type": 889
+      },
+      {
+        "contents": "7F4DD2AE08BEF6906DA8",
+        "de_type": 173
+      },
+      {
+        "contents": "F8559AE2EDEEC96166AE99",
+        "de_type": 718
+      },
+      {
+        "contents": "EA7FBF2AD229DD26D55B6E4A69B5720BEC80F14221",
+        "de_type": 447
+      },
+      {
+        "contents": "6F72657C",
+        "de_type": 217
+      }
+    ],
+    "encoded_section": "8B90134FCA585270ECB11CA2D19FCD187E629391100076B4769D60E7810AF314C92E4F4AD22D90010CBA514F61328A8DF741F39426A6414A35993D0ED3645543ADCFC7F60039A16AA7B7544789824A630C6FAE0338828514A802D34E22F2677F5EF92D21B245E2C6BE89E118332EF6820C9298D64708D7E84C0E5A688C13EF9AF0139916E1ADE41C038EA24C",
+    "identity_type": "private",
+    "iv": "06676937E3AC4BB809DB29D5D0A0D238",
+    "key_seed": "13176067BCE094304F0D3D7B34200618EEB8338DC62F8B93B6DF1568D10892EB",
+    "metadata_key": "867EDB530C4387B741E3F8D5A90297BE",
+    "section_mic_hmac_key": "35533CF432DA85D9C9C797381EE7F410A1ACA2FAFAC320336E538C4CBC21973A",
+    "section_salt": "76B4769D60E7810AF314C92E4F4AD22D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "024C6620A23F3720DD27159A314223D9",
+    "aes_key": "FAAFC4270BFEF0C1B99EE28F255DF188",
+    "data_elements": [
+      {
+        "contents": "B748E7AFEF028374C9FEDACA76",
+        "de_type": 172
+      },
+      {
+        "contents": "85CFCC",
+        "de_type": 913
+      }
+    ],
+    "encoded_section": "4D901386135E41C81BF815C35F82210AA987D2911000FDBB2C065FECBF1CC2EE41B51CB6E636900217D0F0543708CCCAE565509D685542ED3F434A7B4CFFDC00B0FDD4A704B31768296C7783A0FC",
+    "identity_type": "trusted",
+    "iv": "5F7CCCFC3E69E1B0A4A75BCD2DDCC596",
+    "key_seed": "6B3B7B151F380162B9E0B70910ECDC784ED5397B3A10BDDE199A7A94BC6D8D75",
+    "metadata_key": "E138A6D9CD4C8852E08ED89542C192A8",
+    "section_mic_hmac_key": "42942C5BA5773295A61EC1C494BBA596E1F2E382026FED016C73CF9CCD6CC3E8",
+    "section_salt": "FDBB2C065FECBF1CC2EE41B51CB6E636"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "26E8D6DCAF6B89C14D2967CD2F996C3E",
+    "aes_key": "F93420FD82E0E4006F5BCD4BCAEE619F",
+    "data_elements": [
+      {
+        "contents": "DCC21604B26103BF2FF0DA36696709C57DD113AE10",
+        "de_type": 167
+      },
+      {
+        "contents": "CAB2EAF5F472143204",
+        "de_type": 996
+      },
+      {
+        "contents": "EF46C11CC5D0B3D06BC6001DF168281A0FB050B2EFE53D191E68D555D7C1",
+        "de_type": 635
+      },
+      {
+        "contents": "8DDE68F7309765DFF675",
+        "de_type": 575
+      }
+    ],
+    "encoded_section": "899013EA913BF87D8BB4054C1A63591555992D91100097BE3649478AA55F3B0F450D35B50306900432491F1FBEC83775BC41FC1166D59DE10EF12EB01455B22479FC697A8B2B10B7A56C289D21C2AA3E8DB4FFF376ED4B1AC9C8874F0A99E32E2803F7E745244F53B47EE60BB3581AD954B33BE2DE4807AE5D39CCF10C5A38616AB4A17799ECDB7C895D",
+    "identity_type": "provisioned",
+    "iv": "48710ADDD5BF6C5BA7557EF8363238C5",
+    "key_seed": "90C710688CFB0274A65B1A98B01C42367DB55644917B4590AC7D20BE4045E96C",
+    "metadata_key": "88E7BD8F22B0BCF3E7017B889AB3BDF4",
+    "section_mic_hmac_key": "93370F2F5EE939E87A903BEF02707B3AC8C0D39716C741D8D513552EA0EA451E",
+    "section_salt": "97BE3649478AA55F3B0F450D35B50306"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "57D01240BF129C429A6CF751CC3D53F9",
+    "aes_key": "AA74FA6AF836204298237570AC35EB9B",
+    "data_elements": [],
+    "encoded_section": "379013E8FB0C142819D59A85D20CE6346FC4C59110000F0472D2D144D008039AECA7226B8B49900139DFE67E4EE80F46A9B96D3AA6194470",
+    "identity_type": "private",
+    "iv": "B6E84BB2A3014E5614393F4DEF92C247",
+    "key_seed": "CEFEE1454C0BB63E85B73102F7323B441AD6589E484827D94DB7F50B158CC225",
+    "metadata_key": "18446FD698B121EFD552FB4D893FE1E7",
+    "section_mic_hmac_key": "E88F3731EEB10ACC952F79D2CFE41D9387D5544317EA307E0E929786E80184F9",
+    "section_salt": "0F0472D2D144D008039AECA7226B8B49"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BFF12B5AC3846F17A4F2671DD201DB7B",
+    "aes_key": "80165990CF33C6AEE8F5D706CA9C16B8",
+    "data_elements": [
+      {
+        "contents": "1D",
+        "de_type": 225
+      }
+    ],
+    "encoded_section": "3B901383873E9BB7C281BED884A6BC9D81E2F491100008BC6FA4DAC8237B4FCA4D351D456A8C900173A35B84F1311BDB48EEEDF03B44AB0A30DEDF0F",
+    "identity_type": "private",
+    "iv": "E79024DAB46DC39BF1C41E950EF68F0A",
+    "key_seed": "0191678E34EB80CC23F8BE780AFA6A323757EE2357B81903F0A11F586A343D74",
+    "metadata_key": "76BA1F4EE04F37541F620FF3CB0E341D",
+    "section_mic_hmac_key": "590C297824EBFCEC438E2227989EC334BD8549944587C0EF0CE8647D0CA733E8",
+    "section_salt": "08BC6FA4DAC8237B4FCA4D351D456A8C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8D64601B3CEDFC33A6EB41F2A57273FB",
+    "aes_key": "EDC4F0B53EDEC5D458373413BA40EF91",
+    "data_elements": [
+      {
+        "contents": "FB",
+        "de_type": 843
+      },
+      {
+        "contents": "78B36066A5E407DD1DBE7E3592273857C096A23CB16EE780DC5E",
+        "de_type": 996
+      },
+      {
+        "contents": "66BD25982401D8BA12065C6FE90A2EB5964D62038F03E23FBC1145AF5F29",
+        "de_type": 723
+      },
+      {
+        "contents": "7CA1830470E3E82A",
+        "de_type": 601
+      },
+      {
+        "contents": "D40D41F3E365762AFC055B",
+        "de_type": 437
+      }
+    ],
+    "encoded_section": "929013782EBB1DAC3CB17A3F3640824931823E91100064AFBAFD7BC4C4E2CA5BAFA2431EAFC290016E594B07A92708C2BD85FF96A3D9AFA5094F73F05E2BB84CAA0DF5ABDC504C9DFAF179F3DA8206A8DD374E6EEC568B1EDA5A194AA461C4685800FE4E512788300E64D570FF745A9E108CDA5912EBE36316E1856DF794B73B40A53C5B179094622859204F1F22606CD1A94B",
+    "identity_type": "private",
+    "iv": "D1317E1FAA030298FF8C5AB6BA81773A",
+    "key_seed": "62B5DBB64DFFAC377EA82F2D42A7377853DEA50F09D3DAFC4B412B687A66B8C5",
+    "metadata_key": "1427037C5581AF92467699C6A6751E32",
+    "section_mic_hmac_key": "213813B05FE7AAF9777E792FF12E2B5A66055002E83ECC0AC7FD46A652AAB8E0",
+    "section_salt": "64AFBAFD7BC4C4E2CA5BAFA2431EAFC2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "373BF3D6F965BB823E05E5F7BD3078A1",
+    "aes_key": "5CCBD9E3100D52C9CD11F35654668482",
+    "data_elements": [
+      {
+        "contents": "22E0417B",
+        "de_type": 599
+      }
+    ],
+    "encoded_section": "3E90139A0E4A93DA7F646DE9A87E125128EE8A911000AD455E1C688FF04A371C03BF7796CD7690019F04EE8F7762B6F109719AEC910F1942B2F58CF6A6686A",
+    "identity_type": "private",
+    "iv": "B2B8D3700005E09ECD4FE23F302E100C",
+    "key_seed": "57A38204ACF2ED7C4C7CBA7C9546BAA0F9FCCCF9BA57335938A4965281FE65B0",
+    "metadata_key": "86405D9921CAB755B452C98A0C6CA34A",
+    "section_mic_hmac_key": "DDBAE43D3E5B9D620B2FC4E64C02035A75DA47DFD0805E0C2E5BAD62793C712D",
+    "section_salt": "AD455E1C688FF04A371C03BF7796CD76"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1A1D7E95B4475678CE4A355E6D120EBB",
+    "aes_key": "29D17ED2A3D5BFB193E169120EE20B3F",
+    "data_elements": [],
+    "encoded_section": "3790135990E82336FE3240D282B7BADCBD28A4911000A9F95C7985EF9A9EE72717C842A698F79002CACF57FE3D1D585998EA9C305C48D2B4",
+    "identity_type": "trusted",
+    "iv": "F6DBFADE261C4E9A73026B059AEC9D34",
+    "key_seed": "7B750CDCFE6B606CA494110409A4EE9860FF6544C8EA98C11F5335546FAFBB15",
+    "metadata_key": "7635C7A2DE6BF4015EF7903C840EECD9",
+    "section_mic_hmac_key": "0566AC9D4AB6EC0FA38115AEE5A469D65014629D8E68DFAC42419EEB722ADB1A",
+    "section_salt": "A9F95C7985EF9A9EE72717C842A698F7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "30FBABC3717AEA2AA0477BD6A3E1E475",
+    "aes_key": "DED9CC135A79C82BA7FBFB0C96B046BE",
+    "data_elements": [
+      {
+        "contents": "2A350BE1BA1985F4",
+        "de_type": 111
+      },
+      {
+        "contents": "307AD47A1F29D017ACAAE833FAC539D70D1BC0",
+        "de_type": 417
+      }
+    ],
+    "encoded_section": "579013871E5F454397F1878BB4CF0647E411F4911000DDED3531E375331992E98F425EB86541900416A66E5A7082A9FBBB4099EE5F0B9A4A92DDB5C2EC4579C5D9948DABEDA010AEE1A7A0472B542C390C7FB6B3C0AA529F",
+    "identity_type": "provisioned",
+    "iv": "CB385978490958F65666D5C60B05EF91",
+    "key_seed": "F429DB5FE75E0AA2E9F2A14A68A3E15458A719C5E4558AE46C00A665BA452154",
+    "metadata_key": "D8AA437E16803D5F18FCC89767240901",
+    "section_mic_hmac_key": "0BE552F6D9EC8E01B4E870E90566D0B774B5C26DA534D86AAFB5D2920BC8BEEA",
+    "section_salt": "DDED3531E375331992E98F425EB86541"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EF01B4E820D20AE81C749A58C3DDFEE1",
+    "aes_key": "F0E49A06F5B9AC50E7421833A986FA98",
+    "data_elements": [
+      {
+        "contents": "41E065F83C",
+        "de_type": 299
+      },
+      {
+        "contents": "B680D15D9511D833860DE3CB6F2F6743FDF449",
+        "de_type": 908
+      },
+      {
+        "contents": "871078FFADADD8D86DEB9029E47B2031AC1A2BD31E1F5467C46B81F4",
+        "de_type": 3
+      },
+      {
+        "contents": "E8EB3A2427E5BC1225A8CF35D067D3B9CD241CB40066D6C6695B214E45",
+        "de_type": 138
+      }
+    ],
+    "encoded_section": "93901384E18167330C033B062C2369F35593D5911000D42B13BDC2120ED6935DA267E6E0757890043CF778DB9F3A7B9C9B0C798274C1C554F3C741D7F939836D65A1052A504CD928FD797216793071AC4B25B292BD19E3C5C47DC5907D29BB01B90C8E923E297B519EE368E979319E6017C6A69D938F638C61803CE45536CA0DD754E846E6ECCFB1AA7A93547FAC69C50663EA8F",
+    "identity_type": "provisioned",
+    "iv": "DC1E3FB599A1E7D1608626E6E17C2521",
+    "key_seed": "3A8FB9BF059E71E53718B02FE78E571CF44AB722527298D272420F549676859A",
+    "metadata_key": "1F44220ECB96C20C54640633D69DCAD1",
+    "section_mic_hmac_key": "E91278BE56B332D705A53E313E1DF4E490511699296BD4B60E121E66585D69C3",
+    "section_salt": "D42B13BDC2120ED6935DA267E6E07578"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "782D32501734250795AC4AF93A4300A4",
+    "aes_key": "D50EF6CEC2A54EF8B77C4EDA8F36BD32",
+    "data_elements": [],
+    "encoded_section": "379013F040E084112EDBDC93B5FCCB7448296F911000805E7F20E7FA28F518264F5E082CAF04900441FD6FCD160E311319C10A6893D3C924",
+    "identity_type": "provisioned",
+    "iv": "EAF6D250FC4F0A6672101E0674B06BCB",
+    "key_seed": "7620AA14EE8667D1EC09FAAA941346DF595B47B3BE63CB04D4641F6A8D5C760C",
+    "metadata_key": "B09416A05A492EC78D6F64669DA3402E",
+    "section_mic_hmac_key": "68601BACC6F7B0E429AC7C1EA88FF78605C1230693A2FA9B3CA393A64CD30A53",
+    "section_salt": "805E7F20E7FA28F518264F5E082CAF04"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FC449A50721817F66C05B8EF876F9E78",
+    "aes_key": "A1318CC4CE689EF7FBD7FE22B21E9ADC",
+    "data_elements": [
+      {
+        "contents": "D8D569D2CD36FEFEFECF0358CE1EB87EA9BB533B36B46EA7",
+        "de_type": 372
+      },
+      {
+        "contents": "06AE898607F5596FA8AD05475ECA2E9640BF3305527F30D4",
+        "de_type": 863
+      }
+    ],
+    "encoded_section": "6D901349CA53B009B567A031F330D4606450FF911000DC9E659B8BBB254934876CC5D008CBC090049ABF95152E79A7E59C2B1D293B3A354ABEB1ECBEE2CCCC5FF05D49FC9899F2126FEB50C3DD45B7E2693BF171BAAB2987301A1192D902834A4A90D24B18972DF864945E535828",
+    "identity_type": "provisioned",
+    "iv": "1EBF95D7139416EC9B1818FD5F97EF91",
+    "key_seed": "F02A2F8CD34C8A8B257B87ED39B6E9ACB1E27980726732B9E5D6B01FFD7876DD",
+    "metadata_key": "0F8F4189804AE28E4A464E7F3980FE8C",
+    "section_mic_hmac_key": "6FD39C4C89A6ACAF5AD70F154C3A597DBA3EE96C2F596420AE8776AFF63FD62B",
+    "section_salt": "DC9E659B8BBB254934876CC5D008CBC0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3A9206D9C925FC35391F2CCB66843BB6",
+    "aes_key": "B164F108D4101003D41F5A265069E16C",
+    "data_elements": [],
+    "encoded_section": "379013E56300B4C0E142D630D8BF19AF1E5B0F911000BB25DB4C1E1998DC75AB7738E7A0C00990018AE9A810448A770F700B86CB37C14F74",
+    "identity_type": "private",
+    "iv": "1093DDCAD240A78B323FEEDF79291D33",
+    "key_seed": "BE17A1F7DE7B872D67ED89E58DEE8899E9786A71ED62E797F590B3DE30905966",
+    "metadata_key": "548B24FD91CE28150F24118488E8C650",
+    "section_mic_hmac_key": "73F14DB10E850262C42FE6527C0E5A26F62203277C1F4AF40C12356CF1639732",
+    "section_salt": "BB25DB4C1E1998DC75AB7738E7A0C009"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "419DC54AAA22D76C4FAA100A8B597761",
+    "aes_key": "B0C19ADDA557D389AEA1D65BA47DE9A2",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 970
+      },
+      {
+        "contents": "791EDC67",
+        "de_type": 186
+      },
+      {
+        "contents": "42EBC555C54FC8AB0241758981E329839EC9B543E9",
+        "de_type": 47
+      },
+      {
+        "contents": "42EAE840E0F23077AAC76B4FDABB671F",
+        "de_type": 237
+      }
+    ],
+    "encoded_section": "6B90131A017BAB4BEC196E0F84C5E587C025D7911000686C4845F376C37C9C3C443EF4E29E9290024E453EB1A34E995C296614A6993FF632E9F97B2DE3D624825569175BD0A9C96B5B9B87531A9FACAAAC69833461463E3C5FCB1D89B23086CA868D4303B56DCE0339C156B9",
+    "identity_type": "trusted",
+    "iv": "5321A3B70C166516A62ECAA30FB2AC90",
+    "key_seed": "404A64651191A344B06BA775AB47A6D961042C751B62DFAFBD4F05C6B692A75A",
+    "metadata_key": "F8C1EC9CDC2C188F4A9F599CF84E07A8",
+    "section_mic_hmac_key": "47AE068E71F04816286AAA0F28FF01D4F2271EF59E4A3A37E4B1ADFF9A028BC5",
+    "section_salt": "686C4845F376C37C9C3C443EF4E29E92"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F1B3435490631CC0996A289568DDA5E5",
+    "aes_key": "B66949CE919A7F877E207F57739276BE",
+    "data_elements": [
+      {
+        "contents": "CC223F25545F",
+        "de_type": 109
+      },
+      {
+        "contents": "E80181074A42346CB9CD0787A2D568",
+        "de_type": 780
+      },
+      {
+        "contents": "03",
+        "de_type": 733
+      }
+    ],
+    "encoded_section": "5590132B1C10D0A90A025571E857B2E49A4054911000837E16BED64DBA81BEE53BE1DBB1DA679001A44E99184E6B16B0499F2E19314E25CF83C93DC0D4B5AF1E140BC3EE578092057599F5C716FA6042D492852F68AF",
+    "identity_type": "private",
+    "iv": "3FDFFB73C30D8BC45F8126A86D889C43",
+    "key_seed": "5D36273BC56672627108B613CB0C12EC04806C65D019A6FE4DB8C8B20DC0963C",
+    "metadata_key": "BCFE519169AEFCC4E6986C8D370FBA39",
+    "section_mic_hmac_key": "11A4EF7B955F8050A56C65D331E17EEB0299EE364DF3B99109523110D2018E01",
+    "section_salt": "837E16BED64DBA81BEE53BE1DBB1DA67"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "712EAEC308AE64A4ED14E1F7DCB13C43",
+    "aes_key": "98F6C204DA7BAC2C924E2511E15FBC44",
+    "data_elements": [
+      {
+        "contents": "9D35F9D040F2AC28D7A81524EDB41589771336127BF26D70AF503DC2",
+        "de_type": 380
+      }
+    ],
+    "encoded_section": "569013B73F41BD53CBC78A6861EB9435FA5EBC91100023BDF35A690FDB5ECF141A3899D22F42900246967897B21A2DE7A7F9D49A25BCD939FDBAEF13807F0FF86E4F1BF007728E98849A3FE70D206C883DDC097E1EFE8A",
+    "identity_type": "trusted",
+    "iv": "078ABCE52C402BFFE7A5EB49C4AFB40F",
+    "key_seed": "40D30613640F1FA84C9F670F63C9394E0464C6FED6CA7C3F2CE787B11CCB085A",
+    "metadata_key": "10DD3208F3A5D1CE9E5FAEA859F84C40",
+    "section_mic_hmac_key": "D8EF775C6AAFB173BD2956F817257FA3A5A6F4318439ED4E78BC5B95D9B18290",
+    "section_salt": "23BDF35A690FDB5ECF141A3899D22F42"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1F407B57564489497A0CC7E672852C63",
+    "aes_key": "AFE6419A004892A3074D6F302B525CCB",
+    "data_elements": [
+      {
+        "contents": "0BC923FB8124E54605284885D20FEA3B0531ED991206A7E1E66A0D3A",
+        "de_type": 366
+      }
+    ],
+    "encoded_section": "56901342667136A1FA39944C42FA485384005A9110008916195D190EFCC6885AA87B1C7346CE9001A0FDD44366F8DEDC29560EA4943979E58082609D7F54CD6D6FDD694E5D75F1C8ED256ADD1D96425321273A8C6B484D",
+    "identity_type": "private",
+    "iv": "833FAB9A4D9EFA4B9D4A8A68DBC2905E",
+    "key_seed": "E9F13B36B01E9571788A504A9AFA132B9E57EDE7F29BDC43EE5E8AFB81CE8928",
+    "metadata_key": "88BC13E7EAE2D056BEB2093A95BD5064",
+    "section_mic_hmac_key": "2E07197705F025A3E7D117E721682E8D2C3931076CD3E0FB3CA04C4D63BBDB29",
+    "section_salt": "8916195D190EFCC6885AA87B1C7346CE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D22AC6AF30509C332CFA4656125E4FDE",
+    "aes_key": "278ADF6744B1BEA0A5E31953A0A25A08",
+    "data_elements": [
+      {
+        "contents": "DF4143D4A169A64ECC8904D569296CDA879F48",
+        "de_type": 801
+      },
+      {
+        "contents": "DD214F021EDE84B893813CA1B0F66B98AEBB5FF094",
+        "de_type": 820
+      },
+      {
+        "contents": "066A6F1A28BF90A3000A56399A0145BC",
+        "de_type": 867
+      }
+    ],
+    "encoded_section": "789013F978EE7FC9B30B192FD29EDE12023D9E91100053AD38BC511698060EC41429F1B120C590014E843B18ACC329051B5DC84693336EE6692A3865FF84858AF8E0D10C37F25DF9765DAF75F880A98656987FF6D40A4F1B4A908C1BDA79667F29FC2922AB4B512749BC50DA3E20E2E6736C501006BDDE1026",
+    "identity_type": "private",
+    "iv": "EA05DCAF6A26E50E57F282173E8D6C5C",
+    "key_seed": "B58DCFEC3705289C33368810E98B7E70368EDE274184B1E2CC42DFD597F4E874",
+    "metadata_key": "F412B16221AE5038F4C5112C7D1EFC57",
+    "section_mic_hmac_key": "552EC08151491F3DFF44DB0B5D13F691E064B4E8F09AE41CB98FFC17A607D4AC",
+    "section_salt": "53AD38BC511698060EC41429F1B120C5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "36D0C4D6C12715D7287FE97F02251BE2",
+    "aes_key": "FAD2E4C7807F81D34D2491ADBA670024",
+    "data_elements": [
+      {
+        "contents": "434F8FFE447B6BD8FA9CAA8653928D6BE5E8D3",
+        "de_type": 853
+      },
+      {
+        "contents": "57B611D2196D0DAE89249493C060AB27EA4377DF",
+        "de_type": 652
+      },
+      {
+        "contents": "433B21A811",
+        "de_type": 648
+      },
+      {
+        "contents": "ECB728637AC60A94BDC4EDCBAADF7782CDD4031A18B3F3",
+        "de_type": 172
+      }
+    ],
+    "encoded_section": "869013E40676A01D66A6DEB421518859371BFE91100055020FF3DB29354D80E8E03397C0E74D9001FCEB97DFB9567B4C57BA8061A646B54559230AF6CCE3CCE6871C4C767C42C70208035162D535FC3B9565AC7FCA3A9D8019AF94D65C38CC7564AF0AD3339822C939570E57181E5CDD40AEB04E64130E4C44A7A4B3C0EDAB655451F585C19750",
+    "identity_type": "private",
+    "iv": "4C44E4C5CB13EFA82A8785FB1C4064E0",
+    "key_seed": "7DB299F572F69A530306BFFD37D3AA1D5702DDE5E8D295A1EE1A89964B2664BE",
+    "metadata_key": "0BA1602DB4E23F70EEAC5ADD65D9EBDE",
+    "section_mic_hmac_key": "3B6687807F35C44E71AC08178485BBE20ECACA722061443ED733077FE09812A1",
+    "section_salt": "55020FF3DB29354D80E8E03397C0E74D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6A0271AA5747B448F81BA095AE218E9F",
+    "aes_key": "FE81F30B457DB3B5A2B12C9E62126168",
+    "data_elements": [],
+    "encoded_section": "3790132CA2D928B14971ABFD0410DCBFEC710D9110006ED067EB08676C51C40F3C1848F89858900418EF11F7818FB2284E8261AAB63CA532",
+    "identity_type": "provisioned",
+    "iv": "463F849F17AE15B5D63FC3AD59728ACF",
+    "key_seed": "BBFC469077C9725D263D54D042C203F6356D60F55F050050CF10928BFA8EF48D",
+    "metadata_key": "632558DBBDBDE655DB4FDB6CB0280AB1",
+    "section_mic_hmac_key": "DE884F0B125AD4F4AEBFBB562EC79A8556AAC9C1654E75E79E59C874DB4C554A",
+    "section_salt": "6ED067EB08676C51C40F3C1848F89858"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D0CBA45C99E9FA404A4B0CCE1750C1BA",
+    "aes_key": "D5F6E5822FD550CD3592877794A9FA54",
+    "data_elements": [],
+    "encoded_section": "3790135A82DE2CAC2C840A7A525B98295A2B0E911000C8A8DC0A221A9E73736816B12FADEE9990012AD90295A4695F2AA1CDCE65858F6319",
+    "identity_type": "private",
+    "iv": "CE0AE01F467A25649172788288036955",
+    "key_seed": "1EF3F6BFA77940DECF68C92C4916DB9DDCF12D2FC671F80F133A0E64CE643CC4",
+    "metadata_key": "1DD57E55893D8C7C66F30AB5BE78E5E0",
+    "section_mic_hmac_key": "6C18E5729C77197AA709F37CC196DDEBE97CBF5109E6AD8B686F6A193E7B839A",
+    "section_salt": "C8A8DC0A221A9E73736816B12FADEE99"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F33D12D40B9C8B9AE1C47C8AADCC0CAA",
+    "aes_key": "1E64FCFA53A6CEE7E20F1C616A672CA7",
+    "data_elements": [
+      {
+        "contents": "081EC010879E34E2E36E07DF44D5",
+        "de_type": 686
+      },
+      {
+        "contents": "ABB15E5E47C51C9C5247E1256387260BB0E688",
+        "de_type": 184
+      },
+      {
+        "contents": "71DF0AF4F9666A099E6DF57EDBEB",
+        "de_type": 797
+      },
+      {
+        "contents": "",
+        "de_type": 866
+      },
+      {
+        "contents": "A1D4",
+        "de_type": 57
+      }
+    ],
+    "encoded_section": "76901346AEBDCA4CD4F32C73CFA95B0152AAEA91100019C67F054994EBF76B86A9910B24442590020889DA34F813D8ED74273096EC54618EBC62DDBBB2001CF6F1EA30C6FCC4082B55FC170EA5144776585B7D30E0C4CF9C54318C7115E41490ACE3849B79499C829F5EE6F63D5CD6F725FD7DFB2F0AC8",
+    "identity_type": "trusted",
+    "iv": "D3CEEDC1A3009457FF17D6F2C2C6CC45",
+    "key_seed": "FE080591FBA4B25B2326713AA17FFD1B64C32B4B7D1746571C01D6F23931EE37",
+    "metadata_key": "6FBB76CBC7FF309E679EB284FC5001F3",
+    "section_mic_hmac_key": "A72DB4B90E985E04BAF697CC358CC84BC077BF0E863DFDE644E829A40F72C0D3",
+    "section_salt": "19C67F054994EBF76B86A9910B244425"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D67DAFD17744D0F8241D3DD1F3A1B14A",
+    "aes_key": "8A065DADD8CB1CC9967868C01070DE8D",
+    "data_elements": [
+      {
+        "contents": "3310FE973462496D27BD963268D98A27A6F848",
+        "de_type": 506
+      },
+      {
+        "contents": "FBEB9691FC08C103F9E7E74092DF32C3DA848F",
+        "de_type": 947
+      },
+      {
+        "contents": "",
+        "de_type": 942
+      }
+    ],
+    "encoded_section": "669013A84927C93EF891F3684515177D57F56E91100075EE531A506096BA0F5C07F1123C5CA990025FF39825FC892166579828672F8D9953F02014743C0B7CA7ED00C694A5BC3BF1C3BBBC16C1FEB9489022CB014A97A6E7077B52BD521E811D78A3C3733517D9",
+    "identity_type": "trusted",
+    "iv": "75518BA2DDD3E7B3DB43F868ADFE2A20",
+    "key_seed": "26B3A85EECA4EC7AC1B7855ACBD28EBA1B0E9F96E9198A15078172407708C268",
+    "metadata_key": "3E9E3098DF63D01ED466C1870EC6B4F3",
+    "section_mic_hmac_key": "646D3C3381952F4E489A408AFFD2586981B31E9470339C0A196F02D7724A5349",
+    "section_salt": "75EE531A506096BA0F5C07F1123C5CA9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EC458F9E453AE59CE56316C9A18F2698",
+    "aes_key": "E4C77487A10D78704F4FA0678EACDC3D",
+    "data_elements": [
+      {
+        "contents": "4DE4C93DCD045609E8C0D59A5D232BEA345A8805",
+        "de_type": 106
+      }
+    ],
+    "encoded_section": "4D90135B2E85AEDCA13DBF678DBD9A491899F89110006EE872C19FAC3E06FF7B1087D7DA70CD9001524A8CCEB50207DD133EE928A16AFDA97AB9D56B798C15BEC3A8878F9CB23FC0A9F1DA69E868",
+    "identity_type": "private",
+    "iv": "39EB9D090BBD36CF20FEE1A7B383170C",
+    "key_seed": "E571F9737891BF4B91A55DECAF950FC0C3C14AFCBCB578BA64369691004CD99B",
+    "metadata_key": "78DABB32CF166CBF9340B1B6F566A91B",
+    "section_mic_hmac_key": "26C2433BF4859BDBFDE86F9B14CE9A166C8003185F3C606D58C6F865670F3B63",
+    "section_salt": "6EE872C19FAC3E06FF7B1087D7DA70CD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "91E89D93CAD7F35D9AB9C6BF4325A2E8",
+    "aes_key": "70EFA33873D2E345D1F56CCA9665054A",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 649
+      },
+      {
+        "contents": "9EE549A8C30E5CB17E60804FF9F7885BA0DE9AD888AD102A4F40E3675A57",
+        "de_type": 267
+      },
+      {
+        "contents": "E3F347E2C9170891B6437DA81E",
+        "de_type": 594
+      },
+      {
+        "contents": "CB572B98DDD51E9122EDF481FF59D3A692BF43",
+        "de_type": 642
+      },
+      {
+        "contents": "A3CCC2D85DE09207CE8CFA88FBC2A27F5032A9661B89340EB2B45F54",
+        "de_type": 712
+      }
+    ],
+    "encoded_section": "A09013053B0E55A309DB4CBBFB63F693F097C1911000C252DDB368B81DF337A9E6C22C1AB1E29002E8784CA2E7E1C22823BD8C71E457C78618A334565C5A4931F291603EF5F5DA43C2E791D65FE4029AD8BC8AF31CCB9FC66300C80CB4A7A026C7F5FCDA97D406D8891C8E36B5DE49F57F4843C0EC57CC01A303C6989D0779114255B7357EC89BDE5935AE4ABF2245A13E0540FFDA726C4BBF33BA356F3FB52B5F",
+    "identity_type": "trusted",
+    "iv": "4AAD555F0E8B2B0BD7F8B5B3288EFBB8",
+    "key_seed": "235725D5AF71A8B364F576DDF5FDE5794F379B1157FFCEF16E0962ED9E7C69F0",
+    "metadata_key": "221424FDAF49E89693F960537A19185F",
+    "section_mic_hmac_key": "BF1850DF168537FD74F15A0D907D2205509C03DF1E0B2D3C9C659DA296FBBA12",
+    "section_salt": "C252DDB368B81DF337A9E6C22C1AB1E2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5F21199702D08F17E8C31D8CACC752B7",
+    "aes_key": "78055B5877F2DC9100DCC8C026FEAE01",
+    "data_elements": [
+      {
+        "contents": "0C9E929580674F44BCA192B4988E1186E73C0553339E077DDC537C2F7CFF",
+        "de_type": 49
+      }
+    ],
+    "encoded_section": "579013B616F28CC69FE4BD9566BC9C28E7997A91100005F57B353ACC660C1C893CE24C2AB4139002C3B30303F662EF836D765C8CF334F356DD1A214E25294934896D0E54AF12F9740FE06684DBE3E9BB01CF1DADCAE0DD25",
+    "identity_type": "trusted",
+    "iv": "5CCF9429D65B8856E1D1DC0F0600DAAD",
+    "key_seed": "49EDD7CBD630CF1EB36750CF0B84887F9B9036350EBCF09EBD36E1B1D6C412A0",
+    "metadata_key": "34875210235E1D2D25478D12066C155C",
+    "section_mic_hmac_key": "45FC0D8B7794850569590818996D2E7F2EDA7E38A2090D37B5D6A5E7A4C24B4F",
+    "section_salt": "05F57B353ACC660C1C893CE24C2AB413"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "ADDC564B44D0313C8BE7BB31D9591C73",
+    "aes_key": "E89A463D3116A6596F4E0E20AAE69439",
+    "data_elements": [
+      {
+        "contents": "24C93D94C0",
+        "de_type": 130
+      },
+      {
+        "contents": "EB7F3A5D86354B56D639609F502BAC8A292026254288A116C2",
+        "de_type": 608
+      }
+    ],
+    "encoded_section": "5B90137D5718E198489D40D7EF03459A4336B0911000BD284D68208CDB356CFDE5EBE234902D900279864896227AE76218FAD91C906B62334298BA923DE515265337355814BB2FB2AB4A9969C34EBFF5F396EB39ED8A605FD7241A5D",
+    "identity_type": "trusted",
+    "iv": "36208616A6E3B31472F125A2DC4F51E5",
+    "key_seed": "B7C8C5EC411AA108CE8EE9B6BBDEAF9CCADA1252DD7C7929E20D12F8E09541D4",
+    "metadata_key": "CC1BAD820BD0B97A8B5A5FAA4419DBF0",
+    "section_mic_hmac_key": "2DCD3B2806A4F52453EDE021A1C167C5BBC3FFA9E8BD14C7D1FEEA9EDDACBA1D",
+    "section_salt": "BD284D68208CDB356CFDE5EBE234902D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5E8E972BE173F38D85F411A2ED26003E",
+    "aes_key": "9FD558DA6B7A1A5184EB545BF703858F",
+    "data_elements": [
+      {
+        "contents": "194E56962B21A139D89B79A1509FF3E0DCE71684B72DF74416848286A710",
+        "de_type": 278
+      },
+      {
+        "contents": "C1276C6B7402",
+        "de_type": 575
+      },
+      {
+        "contents": "A64FC3",
+        "de_type": 589
+      },
+      {
+        "contents": "5CF1B952B38E5CAA8E",
+        "de_type": 883
+      },
+      {
+        "contents": "DBA4F3AB1BF2A6F5D325FB9130D5391AFAED7B0792F2DF430F50",
+        "de_type": 122
+      }
+    ],
+    "encoded_section": "8F90138745AC668A56139F98DE7B63F8E75D55911000A91454CAB75AB191C1EFCD50DA1C31A490018019E926591F29A634CB84E2B5852C661047B96EB0522EF34BCEA20C8148CBE779FB9FB95AF044F20A6532804C303DEAE0D287D40D2D0050ACE7923A2116360B7F1FA82E888316057B56112C26C1D49865EA7357A73308415CF1CF17D7874D442103DCF4969FE59F",
+    "identity_type": "private",
+    "iv": "CC6E95261D63DBDA7B9A379984AC5860",
+    "key_seed": "D767BD6AAA4F821C12CFDAD0839649B26DE111C270B746948DD3816B42361F6E",
+    "metadata_key": "99B29D708B6AC3929AD7860847ADF25B",
+    "section_mic_hmac_key": "7F566273E7867C6044B63B51B1FDD564EB972A1DA7ED441739396A15C85870CB",
+    "section_salt": "A91454CAB75AB191C1EFCD50DA1C31A4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "890508C1E419677CE3D82C8C634D9A8D",
+    "aes_key": "B58487F205E25C8FFC6BF799D7123167",
+    "data_elements": [
+      {
+        "contents": "9DBDF9ECBCE565A86F0316355BBAE4",
+        "de_type": 729
+      },
+      {
+        "contents": "894E7DCE8E717CCB6BE7A2B727AE1F038FD81F2D",
+        "de_type": 556
+      }
+    ],
+    "encoded_section": "609013BCDC003EF848E2552698FEEF4B5BE538911000FEC9A473F042542F1594E8374E690CD790019456A748B13AE47C66888BFDD3BF5D69259E33B8223572975CFDBEC12D566C8516182DEDDE70B61A0C83091AA7D675C516AC6426395265023B",
+    "identity_type": "private",
+    "iv": "3266A4DD70BF6DE22B52D786A665139A",
+    "key_seed": "1F19488144728397A56FEDF8EF3C71F1C784BF98A8FC5DD3EFC14B733322AB5F",
+    "metadata_key": "B15E02D56B9062FD82C73E2F1DF3DDDD",
+    "section_mic_hmac_key": "A3096941E32118FFBA5B57A5A151D49CC0C0E4CBB74658669C6E1C9024FDEDE4",
+    "section_salt": "FEC9A473F042542F1594E8374E690CD7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8298F26DF0ACD9B9784CF50C1FA31CD5",
+    "aes_key": "32599218CF7379D323531C4BBAFC94A0",
+    "data_elements": [
+      {
+        "contents": "BCF691D7FF954D04836873F6822A",
+        "de_type": 458
+      },
+      {
+        "contents": "4F0E8EBC44028D314F3BA98B806DDF652722",
+        "de_type": 177
+      },
+      {
+        "contents": "9B4173AC",
+        "de_type": 242
+      },
+      {
+        "contents": "7F5213584393",
+        "de_type": 204
+      },
+      {
+        "contents": "5C77CCF36304E367291A1B2A3F7F58",
+        "de_type": 585
+      }
+    ],
+    "encoded_section": "7F9013102BD6F16710F91D224A7DAE68FC3A2A91100071658BD652281D3C02E63780F9FB687A9001C61A8B00D08E33EDEA32453B605CE6AC3259641D1E0DF3726A164491FBAEE8BC4EB237178E1F55C6C811F14BBB32764330185DAFAF2B3495FBF8AE3368F46DD21D46F0C670448F9D517731F0F7F2118762CADB6E306F2C8C",
+    "identity_type": "private",
+    "iv": "75FB79B913CCB164010CEB9C2F003B79",
+    "key_seed": "FC02A056FAE91FA6DE95CEEBA9EADB65777603F77F123004515D21B281FD1AC3",
+    "metadata_key": "9B055D228F084D0BEB418876908EC39F",
+    "section_mic_hmac_key": "58E406BFD5609A7642B7B19AE11FA144D53BB56B583C55694665F8265C09E9B2",
+    "section_salt": "71658BD652281D3C02E63780F9FB687A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8DE8CF158AF393D2993F59D151D92FE7",
+    "aes_key": "C3ED1758DD53889D70F1D523EA467752",
+    "data_elements": [],
+    "encoded_section": "379013F55E075DEADB5808B48E3D7520302EF991100084AF13307448C2326837E2A2760876A290017A8BE69D8EF995E77620EBED461B2AE2",
+    "identity_type": "private",
+    "iv": "58A62B7FDF9BC814F3209DB583F52017",
+    "key_seed": "60F7A17633D7D73127CECC969609F9AE6638C0E00B95C4464B686A5FCEDD3E2E",
+    "metadata_key": "A4A17957FC404BF5D50A42BDC3D4857D",
+    "section_mic_hmac_key": "B1D557333696A1E1AD29866C78BC4086C8C6ED43711A3FF4862709A08F62E214",
+    "section_salt": "84AF13307448C2326837E2A2760876A2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D767403957E9D3E90C2C17EE950E7122",
+    "aes_key": "041C51D75D894A63E83E7D6862723202",
+    "data_elements": [
+      {
+        "contents": "423FE65EEEC743FB7781376641FD9CB31D5E37480D5313BDA90A7A",
+        "de_type": 623
+      },
+      {
+        "contents": "8B5DC36EE664C72FC16840A0CEB5BCAAEBAEF09694",
+        "de_type": 250
+      },
+      {
+        "contents": "CBD97F852E7BA0",
+        "de_type": 633
+      },
+      {
+        "contents": "B2E5FDFFCA6859D1",
+        "de_type": 230
+      }
+    ],
+    "encoded_section": "829013CA3F3F33B038546D0583551F01CED15A91100014C5C9F74FFA4509A87523AB284DE2AD9001E09EA5B8DB9CAE3E53DC93FE2CE7669CDE9FD349982E2744F9700745E409F926C1568C527923BE14BB9356179E1F36E072A08EB2BB6559D460BEB251F5C8179DB02B903655D54043000FD1A9A272EE8849391915C9B5E27CCFF6FC",
+    "identity_type": "private",
+    "iv": "404AB007A1717B22258CCDADA622C4A6",
+    "key_seed": "6E0ADE4BB6B948EA0412A3BFE1B3D8F97CC95BF9F8531E91632E6393378F12BA",
+    "metadata_key": "D211AF1D1753DC34098F73AE56F188D7",
+    "section_mic_hmac_key": "0CE5B2335330EE0DF2491432539E311627A00E59FA3A6B8858BE6124AEEA67C3",
+    "section_salt": "14C5C9F74FFA4509A87523AB284DE2AD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EAA4670B96668CC6F80D1C5879AE3AE7",
+    "aes_key": "B001298B920AD8FFA727BBD08983DB33",
+    "data_elements": [
+      {
+        "contents": "2C5BD7EE8B257AF6D9F3BAA45266B450",
+        "de_type": 676
+      },
+      {
+        "contents": "6A87A498F333D0EA885BE02FCAAB20A7848264ADF1C536E1",
+        "de_type": 24
+      },
+      {
+        "contents": "5C7816C6CB0D3513FAA77CAC05568E8BFEC1D5338799A27FC5",
+        "de_type": 275
+      },
+      {
+        "contents": "93356AF6AE0C944E5276",
+        "de_type": 93
+      },
+      {
+        "contents": "D6EFB581D317A392",
+        "de_type": 946
+      }
+    ],
+    "encoded_section": "9790131ECC1BB30CD53E32B1D49E2C3F686D3D91100013EC472339FE487D5C13C57B3DFED24A9004F8431796FC123097DCDF156B695ED780A62033B4FEF0EB38807631D6C1409B6176694B32A5439E8433393B9354782C64DEEDD9B243521963FDBDF13B9CAB502654981751782EAA352313FC17503998C0F31C20833424AE008FBC003BFF7EFAA0CEFBD144744BE7B55963F9EDAA6F06CB",
+    "identity_type": "provisioned",
+    "iv": "CC88BD5D473FFBD1B9E8C25D278E8DB0",
+    "key_seed": "A0AF2537313F70D3C9ACF9C3670093A73F6DD52E775814785A459C99D925D1F1",
+    "metadata_key": "5A91F28B272C105013A774EFE06F2D21",
+    "section_mic_hmac_key": "1D5897008DEDDF91DC33C812DB0D7FF20D32F21A22011CA4AE01E27DD46A71B9",
+    "section_salt": "13EC472339FE487D5C13C57B3DFED24A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "94BC22D840D0F083167EDCFC6AEF8C49",
+    "aes_key": "1A26CB30822972EE2ABE2791A009C412",
+    "data_elements": [
+      {
+        "contents": "B72CE5E1E1C2",
+        "de_type": 692
+      },
+      {
+        "contents": "47",
+        "de_type": 287
+      },
+      {
+        "contents": "1DDEC34D828DDB5CC0F84CD20B5DB7B19EF25F95DB123AD9",
+        "de_type": 86
+      },
+      {
+        "contents": "CACCBF6A6B8EAB0047",
+        "de_type": 314
+      }
+    ],
+    "encoded_section": "6A9013F5710533AE4FCCEF7B5ADE33EFE5239991100005533C388684983561E9177E61EF12A790043935815AA283938A76A1C359BCB9F4A227EE4D5C756C2FE0E784A728D7A1E04D67778E7AD79C64701C3F5BDC0E9A630BEAA2BDEBC0A6C70B81F289EB1A8EEF6AC534CB",
+    "identity_type": "provisioned",
+    "iv": "AE327DDA6E6F62742E607A4D558165F5",
+    "key_seed": "4F26D99EC0F6EAAD77C9A99A96BAE0433F7CF061701FA46D9694E85F8A53E3C2",
+    "metadata_key": "8F5507A58C555112EF53DC37B8B35299",
+    "section_mic_hmac_key": "E5B47398C87A33856D04E6D5DE9FD03830179BBD0B441A0308B6D2D5B0D4C693",
+    "section_salt": "05533C388684983561E9177E61EF12A7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D3E0E38F22BB30B42170FE476EAAF4A7",
+    "aes_key": "4E1CFC0FDB6BBB26913B5A0EC39B018C",
+    "data_elements": [
+      {
+        "contents": "4E9E5BB8C4F9751BAD57AC939AC519FC688076F39FE424",
+        "de_type": 861
+      },
+      {
+        "contents": "9DE1BC6BC8",
+        "de_type": 315
+      },
+      {
+        "contents": "",
+        "de_type": 995
+      },
+      {
+        "contents": "FE3A1A1793B12DC2E2CBEA6DC461",
+        "de_type": 722
+      }
+    ],
+    "encoded_section": "6D901328E5F50CDF08199DCDA8953EC535073B911000B629F236825E4F1DAA2A828FAD8B10139001DB295D2AD40736D82A98069FEA37D688BD2D602F52E02554AEBEACBE7BD00AA0E553253B44F645A0BF6F6602583A2ECC26390107D5E1E3832A31784B5E0FB83F74FFFA23F0B2",
+    "identity_type": "private",
+    "iv": "512C19498A4E6BBA5958FF68EF833524",
+    "key_seed": "AAF59E43323B8E5BC14542E4E4B1D6FED664FFA9C4565FC137C53D9F234F687C",
+    "metadata_key": "E96E09BE304022E2062E3309FBEE197B",
+    "section_mic_hmac_key": "D4A3BEB6ACBC8497213299435EB3BD8504DB6C82979374D7F918C1D41AECC7E8",
+    "section_salt": "B629F236825E4F1DAA2A828FAD8B1013"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "36B6EBFC8957EE9D957D592B1C0293C6",
+    "aes_key": "EF8A7FB2585A093B212749546DDE83E7",
+    "data_elements": [],
+    "encoded_section": "379013FEE47BCD621E2BA1966989BC933A8789911000DD18243E63B52FC8BD6E6237FAC5C0939001FC37D819D217F558FC19D2DDC5A7AC12",
+    "identity_type": "private",
+    "iv": "209F0DA89053E84ED00F71B53155B760",
+    "key_seed": "D82BA7F2F0A36BC58334EC711E2AEDA662999D22F7D7D9B07564C73CDC51E282",
+    "metadata_key": "226F121645E6F4EC151AA15B31382A13",
+    "section_mic_hmac_key": "D2906FD8EC224CDA8FE20EB4F77A1FCBC0494238E7BE0FDE3575184CCF2CD5F7",
+    "section_salt": "DD18243E63B52FC8BD6E6237FAC5C093"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "99A6BB55ABC4CC161FAD1CB8DE6AC727",
+    "aes_key": "4DDEDCC1BDABD7190C999F9F5F239FC6",
+    "data_elements": [],
+    "encoded_section": "37901348313C15FC6D0809D5C003E835396037911000C62DFB45DF8452EF58E761232FF95ACA9004924D826FEED7FDE6BCC4585637AE50BC",
+    "identity_type": "provisioned",
+    "iv": "CA78EFA5E951531B543EC499C60D48B7",
+    "key_seed": "CC3937AB3F6ADBCCD479ECC12AB4C648EDAF2D715FC61272D90285E2051270AF",
+    "metadata_key": "249790EE67EA75470D5CA38274206943",
+    "section_mic_hmac_key": "1720B0888207C03723165DA9C7F2BE23F19DCCF3666947E208F6F1E4D61BF28F",
+    "section_salt": "C62DFB45DF8452EF58E761232FF95ACA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CF9AFE50ADA0A3975C49A50CA4592CD0",
+    "aes_key": "8309EFC8132EEB8924884C37F023FAFD",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 930
+      }
+    ],
+    "encoded_section": "3A9013E3B37AB96E385112C61C57C59E5AA4789110008C658E80B19AA3F9A91CF5CAB5EDE9FB900194F75F6B920DFAEDC253BEE8CD72586B3A55A7",
+    "identity_type": "private",
+    "iv": "1F9A54370AF4AA8257003C4083115700",
+    "key_seed": "B180DADD23E531D4693AF1361DEE2B82CB4EAD3CCB7B440822C791DE23808B24",
+    "metadata_key": "5B70CB9828BF7082D582E80BF68A95D0",
+    "section_mic_hmac_key": "C7151B084FF92A1D77EB527978F3341F4E26C888AFA801DBD5AD66FEAA09A886",
+    "section_salt": "8C658E80B19AA3F9A91CF5CAB5EDE9FB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0AE4ACDBB6B969EA9C655FBDFAB3BD24",
+    "aes_key": "9C721D6592B96CC3EC1A069C8257D53C",
+    "data_elements": [
+      {
+        "contents": "D6E933C73088AF72DC86CDD2B472AF67C0EF9BF2485481930DD803C8F0",
+        "de_type": 646
+      },
+      {
+        "contents": "C85DDB36AF2574",
+        "de_type": 692
+      }
+    ],
+    "encoded_section": "61901310131C4E228092D296F758A3526A9A5391100034B70164C7A05EB4D4166BC4F4CC16BD9001D717BE347A4DB6CB0DBEF2D099D6883842035FD21A6B9D7C92A7D3848E7C64388913DF0AD468382D17EB97C0264F457DE26298EE9729E2551EEE",
+    "identity_type": "private",
+    "iv": "1830392917044736F4ED55A186631167",
+    "key_seed": "BD733DC39589B1AAEDD1C0AF32E3F1D0C67C85A426C76DC1C436F5FBCB4CB8F8",
+    "metadata_key": "A65E981CDB9BFACB2FAC9048FB5F86AA",
+    "section_mic_hmac_key": "9A95A15A85545A8F5BF3BF598C68C6B1DD8B717A1C860B306D2C56260D3D144F",
+    "section_salt": "34B70164C7A05EB4D4166BC4F4CC16BD"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CF43BA7DB832370445F2B85CC9DC0820",
+    "aes_key": "1510B1459D6070F66F102C553E6BB690",
+    "data_elements": [
+      {
+        "contents": "44D8251E75FF1AC54A2EFB7738044961C77736CF6D",
+        "de_type": 460
+      }
+    ],
+    "encoded_section": "4F9013827424047389DEE800447D83ADA0BA13911000DC2F440F30E53E4B029CCFF297104D479004BFB36E2F23E45F49E6C7101D5C1A95B530019C645BE8ED2455D28D7DE4F01D2349EB0AD6EFD768EE",
+    "identity_type": "provisioned",
+    "iv": "FBF5782EFC3F038150A57A003453B289",
+    "key_seed": "0597F824745D4FCA4922A4A641E27C7F0DF3E3754F18229CDC11ABB6731C1E0C",
+    "metadata_key": "3D982630FB96976DEF7CC0D1DAFD1B80",
+    "section_mic_hmac_key": "09AFB1227469C31F3FD01CFEE970327FD85AE9557364DC7BDBABDD3E0AD596B7",
+    "section_salt": "DC2F440F30E53E4B029CCFF297104D47"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4BF365A1E62CB517ADF3C96EC86A695C",
+    "aes_key": "06773F17BF41CFC952BC520FA06E907A",
+    "data_elements": [
+      {
+        "contents": "F1897D930A5877FA1CD661DCDF2C9225B1ABCB3EB937D674B3E1C444",
+        "de_type": 404
+      }
+    ],
+    "encoded_section": "5690136721E5046A5398712F086DCFCCFEBB4E9110009C3172327BA6B8B09FC3AD2A285A4FF09004DD9D9AEE9370F474D9EBEA89CC7BC5EDE99547F14269862FFE642BFA9C51216EB10EC71B5D462DBF155E7F9282ABEB",
+    "identity_type": "provisioned",
+    "iv": "2039CD9D8979F45554A8165952138CD0",
+    "key_seed": "74C768D045E9145CA61115534306A970AD184F166A1DFCAE8FA44019E9274F94",
+    "metadata_key": "94E9F6F9C99423A6352CCC6D1689BC8A",
+    "section_mic_hmac_key": "CB0A779AD5C3F5514E1A2D4094600DD5AA50C3756958F80BAD2229A87F170D38",
+    "section_salt": "9C3172327BA6B8B09FC3AD2A285A4FF0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1CDBA11F9479A51F6C7F5A892FDBF196",
+    "aes_key": "EE83B59FF4FE53B13B348E8BB40B5B54",
+    "data_elements": [
+      {
+        "contents": "9E6AF7AFA04A",
+        "de_type": 60
+      },
+      {
+        "contents": "4CA08F4DD378B99F005502048E577335307332",
+        "de_type": 69
+      }
+    ],
+    "encoded_section": "54901361D8AD4F0C8E4E18A1D898278B2BC137911000AC75C0FEA579E3F958E4395F9CBEE3B39004C88B0EA35E1F251FA0CA9AA6E42EFA999D69E852E0CAB982BB1A974486BD912507617D5F7F70195010ACCBF83C",
+    "identity_type": "provisioned",
+    "iv": "6E4B7653CBB755ECC8927EFE06CABB64",
+    "key_seed": "D029E2ED3571789462F357D5C3755AFD6D3B91FBA2D2BE1B9AD671E370F9056D",
+    "metadata_key": "2E36E40B8B0155FF11B92A8077932CA2",
+    "section_mic_hmac_key": "90D1EE3CC14FCD4F7B5734A40CA42AD27EEE5892C2CF5B26729C34D3C2B143C4",
+    "section_salt": "AC75C0FEA579E3F958E4395F9CBEE3B3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3690113DBB16570F0CBF9C3A2716C6CF",
+    "aes_key": "FEFF29107072AAA0681873034994F017",
+    "data_elements": [
+      {
+        "contents": "2C4DA1F7E021E1354FAC8A76445E1283BB22D1A47DA113",
+        "de_type": 426
+      },
+      {
+        "contents": "AF46",
+        "de_type": 241
+      },
+      {
+        "contents": "C12A5AE9835106753CDF5C961EA2B3A09E5345C15A8BF2878B05",
+        "de_type": 131
+      },
+      {
+        "contents": "021A8B90BA962F",
+        "de_type": 628
+      },
+      {
+        "contents": "4065CC7C14A9A1",
+        "de_type": 956
+      }
+    ],
+    "encoded_section": "879013651C94A1F7CFDA39FE974613772127A4911000FC81D58B27C193143B37E79A070730019001AC6EF8D82E470B38CB13558B2F2E0A0E7E28E0D70630BACD41B508B19550BC2301B46B8A64B8BFA3099D2DC6AAED4F125EFCE470FB97D8166834239B1B55880E969318422EBD021FB94EEC47F9602181B9F19A983926D42F185E1B3007D899CA",
+    "identity_type": "private",
+    "iv": "80342BF18D7C5776BD7FDE0A2F8AC447",
+    "key_seed": "5FBD9471E75E2C59F62A8B341120BE518410FBC2DC9C73E01B0892A6BBB6390F",
+    "metadata_key": "070C25B363FB7C308E15D378FE49E66A",
+    "section_mic_hmac_key": "811B501ECD17C5CA3483A7B2CB4DBDA18DA36A8A0070A336FA4D4EC7AD617C4D",
+    "section_salt": "FC81D58B27C193143B37E79A07073001"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C108BD4A771CAD2F6E7814121E2ACF0D",
+    "aes_key": "C842C0FAD03E38DED3004C68FDE4FF7C",
+    "data_elements": [
+      {
+        "contents": "37F07E9ABF51F94A2FEDCA5EB096BBB6A2C98BF5D792EC10B8",
+        "de_type": 86
+      }
+    ],
+    "encoded_section": "529013AAE6FEC854ECB31E4A0638F9C3459BD4911000D314E0A6FADC0C898CFC47B121C5D0439001D0049C43DE3BB4FC114A4E261443B33B87E3D0CDE141BEEE14A6B252BFE7654A53C6F5E087D7871E936406",
+    "identity_type": "private",
+    "iv": "9B140F556904B7BB90D90FE1D7053837",
+    "key_seed": "C422D717FF3CFFB8A1799B7EBE928C327C3C6CECD0EB6F6A5ADDAE450C2E4A43",
+    "metadata_key": "FA01F1000E65A2B4CF29A61C94B48C0E",
+    "section_mic_hmac_key": "346DA5C873307F1DE6B6D50DDA7565FD3B64D62BEE8FA5449878CB9B04B8219A",
+    "section_salt": "D314E0A6FADC0C898CFC47B121C5D043"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "195580FBA34790E8277954C3BC9D2082",
+    "aes_key": "E2803B4903235BA7D86D3148185D8CC5",
+    "data_elements": [],
+    "encoded_section": "3790132C00FD339FEFDA9A33EA05F0B61C1C559110009E3B063ABD78AACCBA9411EBED90BF029002569640B7F099D81C9F82A9C45AB8F38E",
+    "identity_type": "trusted",
+    "iv": "6CB76A799DA3B1D880221B61FCD13BB2",
+    "key_seed": "85F01432030780C4EF09D81B8B7F3E6F6181AE5E35818A9327B90B513B18D39E",
+    "metadata_key": "CF225E1482E9DDC1EC23BEE3830BB297",
+    "section_mic_hmac_key": "E59C266F44177561A92FAD0E914787F91B75102D557AFDD8A90E15E4C517870C",
+    "section_salt": "9E3B063ABD78AACCBA9411EBED90BF02"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6E020398D55EFAAE4811261EDA98FD6D",
+    "aes_key": "116A369A261D68D0CCBC42A18C347ED3",
+    "data_elements": [],
+    "encoded_section": "379013DE1AC91E9B00462A9A9BA642DC5849799110006116C6CF4A3C7D6BA18B8D226D2301C890049ABE79E404D562A6885996894ED53AD0",
+    "identity_type": "provisioned",
+    "iv": "1D018BD16FD2DE9E649CEBABD581DD2B",
+    "key_seed": "F7826F803023E18562041D581E30C68B18F3BD079ED331AB08959EA9D6A4BFD5",
+    "metadata_key": "7B3DFC9C93D7749184D6D74358823E85",
+    "section_mic_hmac_key": "CB330A1CF99F0FF314EA31874A09A1C7160318E971FA13D268337D59814C7B1A",
+    "section_salt": "6116C6CF4A3C7D6BA18B8D226D2301C8"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "567D9E7C592385238EAE53144E8BA230",
+    "aes_key": "136470023C70C08029F4DFBAE9F95B7B",
+    "data_elements": [
+      {
+        "contents": "A561C92ACC2252C6C62DFEFA992BC2C5A9C48D04F9",
+        "de_type": 248
+      },
+      {
+        "contents": "683961187D5DB39339DF9785A2C45271D1CD68611D",
+        "de_type": 816
+      },
+      {
+        "contents": "B56F",
+        "de_type": 910
+      },
+      {
+        "contents": "6166018060BFB398E173C269377CED91731BBD70",
+        "de_type": 507
+      }
+    ],
+    "encoded_section": "839013A7C4F33A2ECDC37D6C1CF6252071A5AB911000935A35412D351D8B3D41105173987C0A900266AE9A51DBD974D99670EC791804347809108459DE0B339FBF2C78B1B283B5D47C3B890744DB38733464E8125F101CC220E1BFA52CE6E8871A2E40FBC4E9F7619175B7E3903D7FEEC02B5571A874F22785BE608D844AD1E62A3CD1E1",
+    "identity_type": "trusted",
+    "iv": "B2FA1B41C649211A7EDE06841F5BB38F",
+    "key_seed": "76761CBE3E4C5C59C635770D6712FE9DA60F3EC7DB730C2A2E269D022F253043",
+    "metadata_key": "4ECF0D1A14561713F994E2DD7B685FC0",
+    "section_mic_hmac_key": "E05AAD376A660745E2DAA4552147B6301FE2D8BF56586011AC28893DB5856E96",
+    "section_salt": "935A35412D351D8B3D41105173987C0A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "21A510F6CE3823A53764724B62FD6B7C",
+    "aes_key": "05C066DCB8F0B98888E96B567579C868",
+    "data_elements": [
+      {
+        "contents": "C15CB0D22F013348DD0E70231A556608480E31D9E890D830B3A553415DAE",
+        "de_type": 37
+      }
+    ],
+    "encoded_section": "5790135C827FF620A9B1F9F152963942D6E026911000FEC1DBF803354DC1673A835893AED9DE9004A715F76EFCE834E20F88537CF36933F54809CEF7842962A6DAC2D1D3AF22CAB9E5E855FA6D5F7BBFEC371F21056A8A1A",
+    "identity_type": "provisioned",
+    "iv": "B758108B3902E3BCA1ED0C889CC5FA60",
+    "key_seed": "2F56D486D5C63D844C2FDEEE2180803AD2D1EE5905BA717461135123670C399D",
+    "metadata_key": "D468A60519C50394C3162E0E02BEE109",
+    "section_mic_hmac_key": "250E47FD6AEBEB5E33DF17AE8F5819EF98D0839A011BA4FEC04AFB39E75D9F79",
+    "section_salt": "FEC1DBF803354DC1673A835893AED9DE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "80B928DB65B720EE90833AA09FD5DC89",
+    "aes_key": "EF85E00C15787C5B8CFA20A31C1EE64B",
+    "data_elements": [],
+    "encoded_section": "379013023A8AF0E5E41435B4DE9FD9229166A49110009C4B81AEB3D407915348130AF8B9D1609004E4309CF504F37E93F69C559457182D38",
+    "identity_type": "provisioned",
+    "iv": "BDE415E1EBCFE566354779AA734A0F9C",
+    "key_seed": "70F30CBE76BDBF3E99847FFE02242A380D50E2A9C444696C62790E927665196C",
+    "metadata_key": "0777B0D07118272EF18915210E67D4B6",
+    "section_mic_hmac_key": "67978F51212E8DB9187E5EF52DBE96714EED071C716D8FC27905A138C597FB6E",
+    "section_salt": "9C4B81AEB3D407915348130AF8B9D160"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "DE84590AD5159AE889FE5191762775ED",
+    "aes_key": "58AE0ED041CB11626C1E135A8FDA418B",
+    "data_elements": [
+      {
+        "contents": "787F",
+        "de_type": 864
+      },
+      {
+        "contents": "D1F4A82599F6",
+        "de_type": 876
+      }
+    ],
+    "encoded_section": "459013A9C4AFAD3ADB46F107137C6E33B1BEE7911000039933B91DD5D7C409512651661B032990014642BBCF512BA6F71FD38D6E73BAEF600156F6FB689FE5BC6943B6A121EE",
+    "identity_type": "private",
+    "iv": "D961D3EFC14523C97BCCF93C47DE7AE9",
+    "key_seed": "D29C5FF82F0D66CE956927333836E3354CB86DD41EAAAB8392225693E897A2EA",
+    "metadata_key": "B544F56E3A995CCEDFA8549780BC793B",
+    "section_mic_hmac_key": "D5833BC069C1B314C6A3F7D67320098E72CD93F3770F1E45EBBA5742AF3EC288",
+    "section_salt": "039933B91DD5D7C409512651661B0329"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2FF79874212D7CDA93645F988AF6421B",
+    "aes_key": "9BEABC1D25ECDB374914B8700638C7D9",
+    "data_elements": [
+      {
+        "contents": "F9B8FB6EC10F68",
+        "de_type": 896
+      },
+      {
+        "contents": "C08B48B41244100DE3CD2B0DD489",
+        "de_type": 32
+      }
+    ],
+    "encoded_section": "5190133A88E7EB3645A94ED695EBA85F75AD1B91100037608F6EBDF46AAE033ACF587848E6639004B805DD3CA0249ED6FA1EAE1244D8E3A49F354370746BE13814E00D5839741ABE795D2752CCB57897FD07",
+    "identity_type": "provisioned",
+    "iv": "217FB82980A6995AEC010E921FAC6243",
+    "key_seed": "DFCB8691CEFEB4ECF09ED9F0719E45C25B4AF43AA8DD405801D670610F508F65",
+    "metadata_key": "0917CF2905CE9FB3113357F3963AC8C1",
+    "section_mic_hmac_key": "B797F2EAF9EC7F43CE59E70D7456B0B487AE6A428BF133FF7EDF35C16C2522B5",
+    "section_salt": "37608F6EBDF46AAE033ACF587848E663"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BC78512327F1C8471CF01C0AA4FDEF2A",
+    "aes_key": "7CD9D0ECED9B92B058C164C72DAA07A0",
+    "data_elements": [
+      {
+        "contents": "0FE510DCD7D804",
+        "de_type": 739
+      },
+      {
+        "contents": "7C23D2D6EB1B8B3BC85F16DCCB34459904D415F286",
+        "de_type": 217
+      },
+      {
+        "contents": "4CD0B17F3AD93405736BC91F9C4DE76669F2",
+        "de_type": 763
+      },
+      {
+        "contents": "E91721441BA575F21A84CF4DD20B61FA14C6",
+        "de_type": 938
+      }
+    ],
+    "encoded_section": "839013AC1DD11822478EA0E8FE591CD90238209110004D8A533E493907664027DA6A4F3183F29001D65670948662735E7A7F129595196B44B94D1AFE368ADD6E5DAF03AACA8E3C4077F46A164F0BE076022417C86F21E8646A103E333AAAE689E33DF411784E6B7D48607C4C8FF6B977AE9F7C55B07DE52F88A54ABB35DC20F128D1E647",
+    "identity_type": "private",
+    "iv": "A706CDD672985D91B0CD4F308DE1CC70",
+    "key_seed": "EEAAE365B3DA449EEB6F25B891B7023EBC5FF1B9B675FA12DEA7525354773CF6",
+    "metadata_key": "88335D0BD8B53CF2FA24E5EB2D004E91",
+    "section_mic_hmac_key": "EEED7FAEA65FAAC630EEDE3F70681E796AC19D2E64EEEE5BED29F65BC5064E35",
+    "section_salt": "4D8A533E493907664027DA6A4F3183F2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D1573ED4ECDCE4A879E65C68B1165F45",
+    "aes_key": "4FED88141D37FF7790CEFDD9E5A7E9F2",
+    "data_elements": [
+      {
+        "contents": "430F28BC",
+        "de_type": 204
+      },
+      {
+        "contents": "32EE03B85DF71B06B43CC1C8AC17C3421756FA83ADF098CAB3",
+        "de_type": 518
+      },
+      {
+        "contents": "F0A965818855",
+        "de_type": 542
+      },
+      {
+        "contents": "",
+        "de_type": 390
+      },
+      {
+        "contents": "CADA0F0AB15928451A346544ABBF",
+        "de_type": 84
+      }
+    ],
+    "encoded_section": "7690138D3D5ACB2206D76CD2F0DD909F8D0DE69110005A4E8669652BD77496780CC8085FF28B9001B94FB713B235D2EB84DD453FAC955BA8994A4796E3ABC89E7D9BA85085AA727777981A901A11ED6E68F97EC32031FCCEC7BAAB22A20F4DD1E81D811CBACA821E4CD75266B386079896AB4EF9376970",
+    "identity_type": "private",
+    "iv": "DEDC56F368F3719F6507F18862DF2F21",
+    "key_seed": "7474B5856B73AA33803B8F16B5F9230EDDF0E805842BB2494A1F8FE87B8DD10E",
+    "metadata_key": "0989622EEDCA93001550750A77E81D52",
+    "section_mic_hmac_key": "88CA9441457FB574EBFC546DF423D2996213B2FE20674FB96BEC57B15E4802DC",
+    "section_salt": "5A4E8669652BD77496780CC8085FF28B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3379B3B44F19BBEFBAEAF20E742D9209",
+    "aes_key": "BC6242695C247BA13FB5E1B0A15B7F00",
+    "data_elements": [
+      {
+        "contents": "4E92C67ED663F28F0D1E3FBC3E295B",
+        "de_type": 891
+      },
+      {
+        "contents": "6D09BFCB10C38724315FA37FBD9F4B01169D5D2F",
+        "de_type": 497
+      },
+      {
+        "contents": "674AB7E0797190073A3AE9",
+        "de_type": 731
+      }
+    ],
+    "encoded_section": "6E901332F1F41C1274F02153C590E9582228A79110003A467B2E8A05693603A106F0CC3EFD2A9004CA7F77623D873F7E349A56A149DE733DBFD129501BF46EED93A56BCA17BC3DE92AF5ABFD1B340451D013535A4E939C2BFD78382ED9E661B3C906B20B9B5AF2A8B9C56C544DC7C7",
+    "identity_type": "provisioned",
+    "iv": "97CBFEE77A69EC3AB70CFA9DEC69D8B6",
+    "key_seed": "396536E9DF44FCADA1064F4571A5AAC5646FC8B3EDEE0D33A5DF52C7AE61876E",
+    "metadata_key": "74B5E5F9F6E2E1F4E23B9250CDBBD802",
+    "section_mic_hmac_key": "E10F34CE2FF4F91DEF8BCC12EFC3B9FEA40F02CBA57B0C714C3358862C9834EF",
+    "section_salt": "3A467B2E8A05693603A106F0CC3EFD2A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "27CDB6CBFC3BF4820E0A953BB46AE4EC",
+    "aes_key": "F2963BFFFB81BABEE97F57E2264B4D2E",
+    "data_elements": [
+      {
+        "contents": "2EC8FD8FAF7CF8B52193",
+        "de_type": 797
+      },
+      {
+        "contents": "DDEFB34CB3BB4D52ACBAC8602A8975FFA878FC21E99C",
+        "de_type": 715
+      },
+      {
+        "contents": "9A2F3ECD9492F6C8D7F5A38C4A213D895D",
+        "de_type": 46
+      }
+    ],
+    "encoded_section": "709013AF7171A0C034F3DA55BE657C572FBDFD91100079434D607EADF68D155698ED3AC192F49001A96F812E44AB68004FCF2B067BA95BBCA6CC41B11F4B8A99282FFB2A8BE34E170C129E1041CBA3F9E63B426C54D6A2221407494B54F373E2EC8A11421D6AADAC787180B6A076434327",
+    "identity_type": "private",
+    "iv": "93020ED0EF291C73688089CFCE540F62",
+    "key_seed": "64E35F579F6D8BEA4A3B9646779CC1C21EA2D2878266A7EBCB0773976DED9D26",
+    "metadata_key": "B913D7031986423EB7BF3339608702D3",
+    "section_mic_hmac_key": "DB938326214EDA6FB2FA5F84B9DD0ADAF589302CAED778C1A5155473CB9FAA61",
+    "section_salt": "79434D607EADF68D155698ED3AC192F4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "74D392DC20C0813FF03FB08EBEE968CD",
+    "aes_key": "C42393145979EE5678C0F02913E457C2",
+    "data_elements": [
+      {
+        "contents": "A249A3E9418CE41DC5B3EA515726B651DF5DC1A992B2",
+        "de_type": 786
+      }
+    ],
+    "encoded_section": "5090136279969B1461D2CC0840ACCCFAD1B3EE9110006A843ADF7B539F71779C57B18939E37B9002D14999977E208361FEFF91D231EB62DD0B461BBF47B33CE9F4DA9A5466D6FE7142E7A2536B9790A1B3",
+    "identity_type": "trusted",
+    "iv": "F2A0D1AF937909CC82BD391A38FB00BE",
+    "key_seed": "10FA3986A299426275917865D774D86FAD4AFA8D83E7A92FC11B2B454E90477A",
+    "metadata_key": "59C6C47FE675122BDA465398F91BA5B8",
+    "section_mic_hmac_key": "26150B11FE754225C2DFD776DA88595D6F59333D7DE50DF56ECC216FAB7BE68D",
+    "section_salt": "6A843ADF7B539F71779C57B18939E37B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "49709E72975E1423DA5EB84983796A68",
+    "aes_key": "8C3FEDC1AAF1E282DBFBE2A2826F593E",
+    "data_elements": [],
+    "encoded_section": "3790136B0AB5062670A1F2CFA73A8A0C3E2FC3911000E5070EE95C545EDF7C37A169D35F7A469001DB7F2B2790C2DCD64A7684D80219EEF7",
+    "identity_type": "private",
+    "iv": "52BE6FCAC177DB189EB7CBE873855789",
+    "key_seed": "E0C4131D54945581E0A6E7053C42B1C20483EB908F17B3F430745224648F0653",
+    "metadata_key": "2D6FCA5EA2F20F86394769CB9FC4F743",
+    "section_mic_hmac_key": "E27951578700D0C5D6BA74098639A6AC7EF5F10CE611AA0E490ACF9A21A07D00",
+    "section_salt": "E5070EE95C545EDF7C37A169D35F7A46"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1CDE5651C61DB529D7A871B8F2C0F913",
+    "aes_key": "E599DE7996E01F12260F13DF78E15B59",
+    "data_elements": [
+      {
+        "contents": "097A4A5AFB2B6CFDEDD5A15130",
+        "de_type": 749
+      },
+      {
+        "contents": "3D15EB4E149B5A",
+        "de_type": 478
+      },
+      {
+        "contents": "D6D18F999A8934363B5C8FF561A7A62597FED9C6D40A",
+        "de_type": 489
+      },
+      {
+        "contents": "",
+        "de_type": 952
+      },
+      {
+        "contents": "C20A8E031417669DC55C7B5A7E64BBBA59",
+        "de_type": 76
+      }
+    ],
+    "encoded_section": "8090135046F9F1E83B423043631D49D56C9723911000B5BD5514A8DE674976FBAC499AAA9F529004B235B4809AACD74289EFFF94FE9DF1B36194DD4B93B2EFAB21D946571476CD1B1A07280EE656539DE4C54CF3E47D9A0C87A60D58EE613F49C5977750DE5011A6BB52C63C6E175695097AC3012E519D7FF2E18445DC2D063666",
+    "identity_type": "provisioned",
+    "iv": "6C3A04584261C50FC965FC088BCE4FC7",
+    "key_seed": "A0862227764FF19586A9C36D4D5EA8AA743ECCA8E0708995CAA04D3BEFED5A95",
+    "metadata_key": "F5F1E4D56284CBAC633932CAE89D0D4C",
+    "section_mic_hmac_key": "2D8B8B4C0356D9767D6EFF979E049A139571CA43F70C7FD08DE658501FAB0674",
+    "section_salt": "B5BD5514A8DE674976FBAC499AAA9F52"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B2FC3B369282CA10A016A4F84A430812",
+    "aes_key": "668D21A8160ABC3CE12BCF6175D086A5",
+    "data_elements": [
+      {
+        "contents": "5D3B4A3DBD0B402681",
+        "de_type": 933
+      },
+      {
+        "contents": "08666D6E86796DDDD4C185D7CD3B9C4BAAB698D7154302D0",
+        "de_type": 239
+      }
+    ],
+    "encoded_section": "5E90134107A4267522159AB8C37627D144A05F91100049DB288036A3BC3695F0F55D0BE639A19002557A8352F4128B631F38921E110A33279C46B3A97E74B9E4537062A4E23BC831A8866394105243C1EC880F62EE49F7E5E4D65BBB01B4BE",
+    "identity_type": "trusted",
+    "iv": "924712790182ECC211328405178D9EFB",
+    "key_seed": "BAB08FAE6AE8EC56D52961D055D99713CF5BC3742FBCA0F5B5DB63ED6D33F088",
+    "metadata_key": "BF508276E08064CD62E2DDD3CE52419E",
+    "section_mic_hmac_key": "C0AC82805FD560115A26DADE1F4ACA30E680503F73A730B9573F039B1A8D1E48",
+    "section_salt": "49DB288036A3BC3695F0F55D0BE639A1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7A1D241939F1129FC8A7BA9692CC15B0",
+    "aes_key": "02D06DE435FAC2E542496072E93B32BE",
+    "data_elements": [
+      {
+        "contents": "0FF9683813B3ADB28F18966B3BF4",
+        "de_type": 221
+      }
+    ],
+    "encoded_section": "489013E0D22FB9284C2AE55EE6E93EDF4AA41E9110002F2750ECF08560F8382C78B66352FA359001151B5F5F92C8382D02BAFA80C1205644F2A858A39F0576CA5C41ED6FC8F620D78A",
+    "identity_type": "private",
+    "iv": "CB1AE27FC7370085ACC737B2D16C3ADE",
+    "key_seed": "560A88DA8D8D99F0AA9B78F5C717070E814F73513DD8404D2842023C704E5F61",
+    "metadata_key": "2FCE6A6844717E567B6453D433C396C4",
+    "section_mic_hmac_key": "3110C125D838A53C13AA866C2BEA9BE4665D3E9917D780C44E06EBB679F0FCD0",
+    "section_salt": "2F2750ECF08560F8382C78B66352FA35"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "92318118DA2EEE83E2EF5E45DFB5DCAC",
+    "aes_key": "6BDD0921765C3F1BBC2A777EFCBCA39E",
+    "data_elements": [
+      {
+        "contents": "C5F864769C033B1C4C908B1B9486DDA0DEACFEF5C8AAC5088A4B89",
+        "de_type": 246
+      }
+    ],
+    "encoded_section": "5590131C9D39D7CA06A454FB1963E0CD54B457911000250CCCF922CFB098C5A4B835742B50D290027433FF5EC8DC7CDCF92F5A5E299F359427BC71F6BCE090A69A8B3FB71149E628FC8F8414C225D8A9884CCE9C3E05",
+    "identity_type": "trusted",
+    "iv": "CBDC742C7977835B4958757B70C41CB5",
+    "key_seed": "7605F725592CA87DE9BAAAEE0E22182AF0623EF1E43BF7C69C3E1B1600A31BAD",
+    "metadata_key": "52235475342B8095F3E5DB1A9DAD23AD",
+    "section_mic_hmac_key": "3298422E72C9D0E74C2F9A62D0B2061D7CCDF4C57728AC803D56E327C937A62A",
+    "section_salt": "250CCCF922CFB098C5A4B835742B50D2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F26D981FC5BAD9D1E76BF8F50E8B6A34",
+    "aes_key": "6AFA08461D980105081BEFC1BED15573",
+    "data_elements": [
+      {
+        "contents": "6C3FF38F38B1E556419512BAE94A24293321886158ACB54AB4F606F3",
+        "de_type": 925
+      },
+      {
+        "contents": "13E28EBBFA5679",
+        "de_type": 685
+      },
+      {
+        "contents": "12220C039D132FFA3F990A8800",
+        "de_type": 189
+      },
+      {
+        "contents": "BE1C6812",
+        "de_type": 825
+      },
+      {
+        "contents": "F65EA4C141184E27B5",
+        "de_type": 536
+      }
+    ],
+    "encoded_section": "8390134D53E258FB8B450831D776B4843DE2C691100013ED736F16EE6A2CED580FC6659D24E9900115C96C37DF9232D13C0A77058FD38C7904318CCC73B59DDE8D698753D1A81242B9F2D4988F75BD49B1EB7669ADEBB5C943C2B622790D8DDE98ED5CE2F6CE54E24BE94DE1B9DE3702CC611AECECB6124E6A4A8E78F077BFBBEDF1246C",
+    "identity_type": "private",
+    "iv": "6CFC6056865E1D43A9F198D6CB5DEB0A",
+    "key_seed": "2E66473794E7D76F52E4F4EC27BC04B52DD0878E4AE728E030DBA17ED1BF5165",
+    "metadata_key": "645B2EAEE90C3EDD564BD70CAC5EA05E",
+    "section_mic_hmac_key": "80802998858AE3DF52E4C02A934CC27B218CB1B83BAF7AB7545B0A3D1A4A1559",
+    "section_salt": "13ED736F16EE6A2CED580FC6659D24E9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BDD3E6E05FC1EF8F97B872F320EA5EC5",
+    "aes_key": "C955629D757D92E065B1C843B3E62502",
+    "data_elements": [],
+    "encoded_section": "3790134859D4915A9669BAD25DBD6612C483539110007DB7203CE87A8753D5DF7D7B3B9548B390048800DFAFB1AE182D1F43A11B68CD9964",
+    "identity_type": "provisioned",
+    "iv": "7379BD491B8D004FD0BF5E572E1086BB",
+    "key_seed": "BAA5B1933026681281A49FE55D3D359FF8A37B171836604BFD789EB52978C2F2",
+    "metadata_key": "472C0CE0246A17A1F29A4083C8680C88",
+    "section_mic_hmac_key": "81106F3E642560B70CAF5243B430480127CA1B1025C1E9EE45E9600429C81EE5",
+    "section_salt": "7DB7203CE87A8753D5DF7D7B3B9548B3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0324729B74E497693C66C538B8E377F7",
+    "aes_key": "6A0FD2D178986806E8D99448C6E03D39",
+    "data_elements": [
+      {
+        "contents": "E779A71A22F13932159115D92842A7432D9273B15F9EFC0E",
+        "de_type": 5
+      },
+      {
+        "contents": "5AB6447296CE47957BEA513C4A78D7DB718DF085A3C5B6056313C5E97A3E",
+        "de_type": 164
+      },
+      {
+        "contents": "9BE2E0FEE14367E5F9904AD071327559AE351FF343",
+        "de_type": 492
+      }
+    ],
+    "encoded_section": "8A90130B1EAC69A3BBA0198791DFD7ABD975CE911000504754FB80080D08BDF20CFB89BAE2F4900232633668B94BD4B723F1A0C2F64D15F01A1121E86CB529C8C08D097252B3A5CBD6B1EA4797372EE51F4C8E0C11F6C7B15957C920FD00950144724D287E5A45893315E3E6613BF0A55F55E6F7E156A879A6EB7F31136810B1F31252E60E4EE8AB54D529",
+    "identity_type": "trusted",
+    "iv": "1EA7A7228D5E0B9BC2C467DE0F3E8D7C",
+    "key_seed": "DE985E83ED8102B2850B579CB045EB10DCDB95A908CD2C11A3EC2AFB5C65D264",
+    "metadata_key": "43C47B2AEFE02C363B05E235A6BD410A",
+    "section_mic_hmac_key": "81B93FE732216DCD0036BBFD425D451A502DE7BF6834110FC665CD07E90806B7",
+    "section_salt": "504754FB80080D08BDF20CFB89BAE2F4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "ECDD1DC8D4FD989DB4580FFFFD4EAF58",
+    "aes_key": "26343238F4AE3E3E5F07808B3B012394",
+    "data_elements": [
+      {
+        "contents": "19EEE80B7E463D4FA91175C1201E05ED27AD",
+        "de_type": 418
+      },
+      {
+        "contents": "138E9FFB3689657E3D2C4504596445",
+        "de_type": 313
+      },
+      {
+        "contents": "C96F4E4F9DF91F8DC2EA8AB25A49D112F5",
+        "de_type": 272
+      },
+      {
+        "contents": "3BF1B1D5B80FD33B4E13EA34AFD2B04997",
+        "de_type": 607
+      },
+      {
+        "contents": "60E79858BE9E3880F5840B8EDFA2AED9A1",
+        "de_type": 657
+      }
+    ],
+    "encoded_section": "9A9013C071629B70BA9DEDE2D6BE7C3EE50A89911000CFBC29C1DB6233359093D46F6B6268729002AA827CE8FB3E7D10578627C549FC3EDAFC546CF7FA5C5B8774321832389BC08CF65BF7008E138B2229C21112326A972D327C3FCEC4A5E447465FB6FB2A3D65F7C53D0BC3A7DE1664B0113E3E3F05DAFACF935775E1D7CEE288220BDF2920F1C0B6F0DBF2B7300EDAAC262A35D2207A9159F577",
+    "identity_type": "trusted",
+    "iv": "5D4306FF65CEFE2E7C434BB00E18B020",
+    "key_seed": "509ED43FECE08BE6BF6379CD1778649C806AB7266610F065B2A6365442DCC4A6",
+    "metadata_key": "A36A66D7F731890EF9193D882DE89F1B",
+    "section_mic_hmac_key": "FBBE31414827EFDAD0A31F4BDDD281C958AD680F43AA856DD0319B01961F2E6B",
+    "section_salt": "CFBC29C1DB6233359093D46F6B626872"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "876404A488F733AFF2480B84937DC32B",
+    "aes_key": "F9AD44914D756A3E46E6BAFDD137CDA6",
+    "data_elements": [
+      {
+        "contents": "804E497B2E573E7F2E93CE434493E636",
+        "de_type": 446
+      },
+      {
+        "contents": "70E3CFF3391999B63BB8F6FBF914969C40AC6A8B69A388CBFD5B5667BE8B",
+        "de_type": 144
+      }
+    ],
+    "encoded_section": "6B90133B3BC844AE809C69DD3FDABBAD762AA49110000330AE82E82A5CFCD43DD63947D7B25D9001D96A4D7255C420618CE01331413D4D7428210A004EAF8BA0A2B41DE9129DF151FF58CFD9BD8626FD3201CA27F55156CAE585EC593FA08E260A9591962B7F7F6A28FFFAB2",
+    "identity_type": "private",
+    "iv": "F4D1BB95A18F23894E8E694B2C95FDCF",
+    "key_seed": "E1B4FF787998B33BD7E33250E2386F2BB8A0491EEC4CDF640A2879D09DA19E8D",
+    "metadata_key": "048E9FBB34067F84D69B4D14ECAEA6D5",
+    "section_mic_hmac_key": "D606CEE9D49A0D1DBA0E7F07022FF962F6F6DB04608FF2437F2AB436C4BD007F",
+    "section_salt": "0330AE82E82A5CFCD43DD63947D7B25D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "68E03983FBB92FD3B3ABFFA9B536FAEC",
+    "aes_key": "79F938C4FA735CA8FF0AB1C65AFA5116",
+    "data_elements": [
+      {
+        "contents": "F2E5FF2AB3237D9375F716D5",
+        "de_type": 490
+      },
+      {
+        "contents": "9D808B5A5BBC1473FFB8DAAB95FD4D9FF675A1DE9A40",
+        "de_type": 905
+      },
+      {
+        "contents": "B90F45006C8FBC5A50DAF69EC332341C8FF71168EE6970523C6C548D6371",
+        "de_type": 128
+      },
+      {
+        "contents": "E541744FDDA8A39D91664C22A2C359BB8EDB4DE026",
+        "de_type": 496
+      }
+    ],
+    "encoded_section": "989013DFA3B7763EB39454DE5B2D1F11C74D459110004E4E42F39F331D403DAAC6FD2012DF5890026C8B35E350004277C3C63E5791CE1D8DF6EAF71F950F24A66EABE93ECA5E8BCD39470A09686924CC844A27FF303F73F9EBC2F1D8B15BB2844F4BE645F215E58105A6AF75A88234FEC0E4E83257FB377F595BE77CA1ED1735F929F928138D0AE987E2B094CAD8C91D20C349B2291D54397F",
+    "identity_type": "trusted",
+    "iv": "0EB2E5BAE1992B95A34004153725D67A",
+    "key_seed": "BF2D76E1C94D308C2E27207081573B6C5B18749DCEEAE1CC6858E044396DAD75",
+    "metadata_key": "766DDCDA99EAC37E0B6715030718F389",
+    "section_mic_hmac_key": "65F998A2F910AC50F14613F0025A14062D5FD55D2BE2445E01DDF2AD3AFD4CB3",
+    "section_salt": "4E4E42F39F331D403DAAC6FD2012DF58"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F512FD19534C6D30B3D6B6C64F735252",
+    "aes_key": "C919354EE8916B537AF0C80B01CDFE3A",
+    "data_elements": [
+      {
+        "contents": "97FF5DD7CF10CA400439FAD93E73DF7BF31C0840B47CC8625908F64F9D",
+        "de_type": 884
+      },
+      {
+        "contents": "E17E6D5BF307A79257F432B833BED7631896236A77DC8991244F02BF28F1",
+        "de_type": 773
+      },
+      {
+        "contents": "128F4E5BF9574E0C5D3E0C287DCBEFA2146ED9",
+        "de_type": 43
+      },
+      {
+        "contents": "F19F873AC214CF412446FCF92FC26F4F96",
+        "de_type": 989
+      },
+      {
+        "contents": "0090C56C3B45810987944B0D74EF0CE7BF771A24A4",
+        "de_type": 996
+      }
+    ],
+    "encoded_section": "B99013C5864027C79888996629813A4E22D8FE9110005A6F75A015A7BD183C08ED51EA3406A890022FF7107FDCB387636B67554BA545F04F63A89E41B3547AC27E871BA24BED6B4E347E83DCA86FBB188B18EFEB48E6CAA8923090905BC4974559534DB81313EB69E94BDDC2F397E1CE6247259C046D724DB1AE74ADAAD252F57E477A3C5FD472690839152E8D8571B70C0CF9F486E0125BD74B3E5535D456C966B61E6045995F384D61A2CCD360DF06CB3408A43BC9EF24F861",
+    "identity_type": "trusted",
+    "iv": "AC1E6DEE532335A11CC00AA26D211142",
+    "key_seed": "0654E589CAC8FDDD66324A9E33795A884AB11FDA325C6A1FFC9184981B547C11",
+    "metadata_key": "BFCD84710DFB3F2C3BF10DFFF9E1DEFE",
+    "section_mic_hmac_key": "FE6CC88BE6EBD51916AADCB0525D7C7F817DFB061781676C1C5258D466DF7CD6",
+    "section_salt": "5A6F75A015A7BD183C08ED51EA3406A8"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1020365708197FA134F58032B0736A93",
+    "aes_key": "23C5D746F33EA244CD01AAA605FC0D12",
+    "data_elements": [
+      {
+        "contents": "D6D87CC0",
+        "de_type": 969
+      },
+      {
+        "contents": "F19C90FB",
+        "de_type": 138
+      }
+    ],
+    "encoded_section": "4590130680B536392B1C55C8A39F7575ECD678911000AB790910EBD2510A516A52F216386F5690024C190A81E7249A478324EAD802CC0A72F631AB3ED55CBBC330E0CA3ED6FB",
+    "identity_type": "trusted",
+    "iv": "18E15943B98E5BE79E0726008C289E41",
+    "key_seed": "E7ADE77256E2288534314126F088557EBC87BD3E0034FA36B5E2E414B2BD3089",
+    "metadata_key": "243CFFF6C8ED39CCE1D20ACEE1E8C6F8",
+    "section_mic_hmac_key": "90DC367708ADA4748D498E819BC4218C62FA48A828308197F421D9B13B3402F4",
+    "section_salt": "AB790910EBD2510A516A52F216386F56"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F3F2711088CD0EE74DC97A20DAF1C2D8",
+    "aes_key": "71FF934D1E8D517FBE367CD46BBB17F8",
+    "data_elements": [
+      {
+        "contents": "A302",
+        "de_type": 512
+      },
+      {
+        "contents": "01F2F27578CA1CB5AEA3747DCE36EEB290376B14E08854",
+        "de_type": 770
+      },
+      {
+        "contents": "C712547AEAA2158286610804E3EEA4C1071F90B9178F4E93E6F8",
+        "de_type": 622
+      },
+      {
+        "contents": "8338102992C864649A9D8A78C497490CC8EE5750E12EF9",
+        "de_type": 962
+      },
+      {
+        "contents": "BC3B3A70C610A20D7C",
+        "de_type": 754
+      }
+    ],
+    "encoded_section": "999013DC39E4693F8C1317955AA5920150891A911000B7A64ACC26B3A13A6E1EAF8566807D159004E9CD0DFC4280A635682B3A8DC254119A26AD228C86A032FFBFE926391FD32C81741EF29655A09920EA7FB7090E73359C6B1E61D67D4ADA3BC78F124E1829F6C877453C1200F4FBCA32D7514AC9C2A98F5CC300760F2B114FA5A39701AC236A8E15FC028169E8A7EE42A72EF54829AAB35F5D",
+    "identity_type": "provisioned",
+    "iv": "A4AF64AE89D6ED2187780610289F118D",
+    "key_seed": "9A118BA5B630A910A034F4CF3B9244F57A23BFD59FC0E4934F672CD63E020145",
+    "metadata_key": "9815FBD7BB8FA24AF2053C9D01F8862B",
+    "section_mic_hmac_key": "AD345DE497CD73EAEA71EA56EC7098FFD71E65A87FC7B01247643435342EF5C4",
+    "section_salt": "B7A64ACC26B3A13A6E1EAF8566807D15"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "420F8EDDBCEF536ECFE0823E0A64150E",
+    "aes_key": "3E58CA6C9C2E9494CDFDED070763FB07",
+    "data_elements": [
+      {
+        "contents": "C41B59CE2AD957CA07959684FB6D5E3FDE89D31EDAE877",
+        "de_type": 280
+      },
+      {
+        "contents": "D0DDD13D28FB08B9C19C290C3347",
+        "de_type": 120
+      },
+      {
+        "contents": "1834",
+        "de_type": 45
+      },
+      {
+        "contents": "A3BFD5AEA1634D500CD9D436",
+        "de_type": 896
+      }
+    ],
+    "encoded_section": "749013C498F161B727AABCE678B9D94DFEBB0D911000873C3CADAF81A693213597DBD9C53D8690019FD0E7986B2509A457A42866D34E0A892FE47105171A1CE2A245193130B6A1FEC7A6F485EE8AF0FC67ED58B9B732DC93C2671F682805343994C0CDECB5D6E725698F135192C657C569FD81F0CF",
+    "identity_type": "private",
+    "iv": "22BCDB28787B9F7343729B59C9F06F87",
+    "key_seed": "5D3AA5329E3AD5BC9A4C16E276FED94699221C782DBFDCEDEDFFB81FB32FFAFF",
+    "metadata_key": "CDB698B8C76457DA2631586E44409C35",
+    "section_mic_hmac_key": "81392F1B099B77B1D7DD7EF7B8C9E58CB4A2444C56CB40D955E238A2BBA5C39E",
+    "section_salt": "873C3CADAF81A693213597DBD9C53D86"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D2F959AAB5DE3FD53094D768D669B969",
+    "aes_key": "DBE6CC0A7A07592FEBAD3CFF364A5ED5",
+    "data_elements": [],
+    "encoded_section": "379013D2960FA7CD8C566FB6722FE0AFB4BDA1911000C5272B1D1A6B168B77D90348D5A8F11E9002FF37EC6DB5FFE7B653EC43A49A0F079E",
+    "identity_type": "trusted",
+    "iv": "98C8F75EB86F93E39301FB09266AB286",
+    "key_seed": "4CB698ADA80C2A298CE7F3C7AC4EE3DEA2E3152F314DBFE595FD550E8895383F",
+    "metadata_key": "EB0F5B5FB454BA99B963BBC853069E33",
+    "section_mic_hmac_key": "37E1AFAC60FE9EB5B3976AD6DE229A72890F74395CEB0354DA6E39E24251F5D4",
+    "section_salt": "C5272B1D1A6B168B77D90348D5A8F11E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "14E183839363D1DC8DD63971B165D847",
+    "aes_key": "15A23D3D9E70A3323BE7E5E0ACF62EAD",
+    "data_elements": [],
+    "encoded_section": "3790138678FBDD1D4B2FED10D2044D7E75F2D1911000E67C5ACF5A491028D74192897BE7C8C89004FD23DE541F708C9F0E8412122769EF79",
+    "identity_type": "provisioned",
+    "iv": "853E925894CF1B53548A9547B9D5D2BB",
+    "key_seed": "59DCCE265D17F292C21FDAB1AE190050BE79B24CA9598F341CF3CF28B54C65C0",
+    "metadata_key": "CA9C149B9147EADE4FDDA3483B5CD694",
+    "section_mic_hmac_key": "AFE7942059529B6761E08237FD3DFD1B1E5375AB75D993318B04F92DF26CF4A8",
+    "section_salt": "E67C5ACF5A491028D74192897BE7C8C8"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0EF53E475C49FF12FFFAD62075DC0D5D",
+    "aes_key": "E7EC797302AEE2AE931B498246B49B27",
+    "data_elements": [
+      {
+        "contents": "03BC28F6",
+        "de_type": 538
+      },
+      {
+        "contents": "78",
+        "de_type": 119
+      },
+      {
+        "contents": "7E",
+        "de_type": 436
+      },
+      {
+        "contents": "140001B5FD493CCB4EF775",
+        "de_type": 67
+      },
+      {
+        "contents": "A82250F3EF3A3EC7AD986144C53E1385FDD7E32920DA628A36E7C4EC40",
+        "de_type": 177
+      }
+    ],
+    "encoded_section": "729013E7032F673DF5F16041DDECC78F5ADCA691100099970A2BE5CA4702AB5F94CD52BA12D29004856D9D48E7BA32C0E1D609F1077585A0386531F8456FD5716E5B16E5025A50A2866307253B298F8FEE9FD51C4E2C15FFBDA0FDA07F1B72402FDB1021BDEAFC707FF2E398B0125E73C43D08",
+    "identity_type": "provisioned",
+    "iv": "9A6B50EE556D600EBFED50255A635666",
+    "key_seed": "3CD3990FBBFE4A88391309E9A3314A987602DB087E403C9AB34E5EDEF94E20D8",
+    "metadata_key": "4A1BA5934FF66FB454D46083D338B99A",
+    "section_mic_hmac_key": "357EBA3A7167F44A6BE8E10DBF1EB509A0DA2F1998FA8DD0338BD2DFC20CD716",
+    "section_salt": "99970A2BE5CA4702AB5F94CD52BA12D2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9E5270F2FD83C70EC6A8316A5B3DA3F7",
+    "aes_key": "BC2F869516A306EAB00FC86189F94B33",
+    "data_elements": [],
+    "encoded_section": "379013994A578360FD876E664C89C68C4B4A94911000029A499D61FE555DCE2FD9B72E293E7590025902F37B71C8D6336FB581272FC20E0E",
+    "identity_type": "trusted",
+    "iv": "EFACD81C00A66A18B186EDD153827783",
+    "key_seed": "132CECE9A4A70E8BA66CC013D3A7802E0C394E2CB6FF70934B7FE0793D87D365",
+    "metadata_key": "2D71D02CB1BB8194F317CB46FE0F91EE",
+    "section_mic_hmac_key": "6BD9C9248FEB3255BB7A215A55E5A75B6E6BD1D2DB77CAE09E0A7082042CDA56",
+    "section_salt": "029A499D61FE555DCE2FD9B72E293E75"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "21C3D6A19DFF28652E68CCF2EB17B6DF",
+    "aes_key": "03C7A896A16535EEC2C6A351C3C17401",
+    "data_elements": [
+      {
+        "contents": "1F896905",
+        "de_type": 229
+      }
+    ],
+    "encoded_section": "3E9013756F991A26E044E25C8F3A005852033F91100068CBC39EBC593EF92F0A7852D4CFAB2E9002385D85A14F31B33F8EFA86FABAE5B8CDF1302D8D83AB8B",
+    "identity_type": "trusted",
+    "iv": "54BD3DC6A8F78CEDF672FF5722264019",
+    "key_seed": "313399F9F3EBA494B79B76AB2EC128CA4F090DEB39FAA941B6BF1C5D64C3D21F",
+    "metadata_key": "E975C7A248514BB2EA89E1F61CCAB17C",
+    "section_mic_hmac_key": "CA509CB5DE76153AB5AB8605FF2B18119515FEC7667E42D1EB783847D9E7BFCF",
+    "section_salt": "68CBC39EBC593EF92F0A7852D4CFAB2E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "98BFB3E0F0510DFE082F97B7179DA50C",
+    "aes_key": "5494153569CE0A4AE2EC9504E949F5C1",
+    "data_elements": [
+      {
+        "contents": "893281811CA83052DCA1F09C4BB9F66B979F",
+        "de_type": 891
+      },
+      {
+        "contents": "DB4CBE98092EB7FA4E53",
+        "de_type": 679
+      }
+    ],
+    "encoded_section": "5990137998FC158FECFA5BA42953873097E86091100031BFE75E39CC61D315D73D7D17637BB59002E498BFC92B873AD59BF1A8B4D00F2E3C223B9D764D32AE999EB9407B7C5E10ED655EFA33CA62B9AD7FABBD760AB4046F32C0",
+    "identity_type": "trusted",
+    "iv": "71319F6EE32F01F7442755A48314D90F",
+    "key_seed": "DE2E4CE127E2C5B34556CF992FBD5A97A9ACB072210657E6D7234CECEA835947",
+    "metadata_key": "28AA7545DCF4B6861C4379FCC6A51547",
+    "section_mic_hmac_key": "86A9DFAEF782CF536B2BCA2E2B70280C6D001D6E79C7E1286DBD3BDF0B273EA2",
+    "section_salt": "31BFE75E39CC61D315D73D7D17637BB5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F792CC0735D975CBDAA95FDEED64CC34",
+    "aes_key": "6CFA85E9D7E5F331492B7B7EA0FEC8F7",
+    "data_elements": [],
+    "encoded_section": "37901374CC86109CA20F39080D2176D95C0A399110008CFBEA96CDC8317DFC83180AEB0E3781900294B9DD5B5BBBE70EBDBEF59583D9DEFA",
+    "identity_type": "trusted",
+    "iv": "F2BD046CD8B55DE3DA138D23F2836888",
+    "key_seed": "217BC510C941A4F4CED29FC8918C5DA9446B947D15241150D615386A80A5DA07",
+    "metadata_key": "2E50D416BDCF795FD7B5543B26FAEB27",
+    "section_mic_hmac_key": "7CDCB29ED9C12538B161F13A6E8CC784700FB5FFC7E2DA4F6F34FD933DBB5D77",
+    "section_salt": "8CFBEA96CDC8317DFC83180AEB0E3781"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0459E861ED82466586CB38BA820A08F0",
+    "aes_key": "E2A53ACBF8D874D7E3446A77DAB8C00B",
+    "data_elements": [
+      {
+        "contents": "73C550",
+        "de_type": 154
+      }
+    ],
+    "encoded_section": "3D901386F0FA8E4C1631979E805860E37B810791100053C835177E42543EA07364331BDB0B9D90026DBC4D371F252DEB9EC232757C0FFF54B0AA5AA7D4CC",
+    "identity_type": "trusted",
+    "iv": "42A1D51EFAE859C62164F4D13EFBB665",
+    "key_seed": "0BF7A81876C2775C3D1A8BF926D2B32C6EA0BFEA2C677DECECA4D82A40627CE5",
+    "metadata_key": "DA02A311B1BE6E2FF7F35ED04F2BA935",
+    "section_mic_hmac_key": "C224D779048C9F41DC725298EDC634A13F54D0726070153C90AF7747543ABB7C",
+    "section_salt": "53C835177E42543EA07364331BDB0B9D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "716BD818239FEC609FD83E0E655D99DB",
+    "aes_key": "E510FAB4977C76912B8A434666935A8E",
+    "data_elements": [
+      {
+        "contents": "36B8E05F3ADFC6EB9748E93DA4CAA90DFBA993E4A623B5387F",
+        "de_type": 773
+      },
+      {
+        "contents": "32DA679152",
+        "de_type": 979
+      }
+    ],
+    "encoded_section": "5B9013DA850EE1EE94DF5815178A410C55BE0C911000E78A10BE08D7C230574BD056D8478F8C900496535593BB99B5FF19FA00B4673B4EDA76BFA04DB8DF0CBCD14807D518F0B500206AAD90F34FFC1A1CC22F37C9057C4642D732AE",
+    "identity_type": "provisioned",
+    "iv": "96F876599B14A21FC060A042F5E134E6",
+    "key_seed": "F9A248BAE31270E5C543E5EAE28C6552E62BF7DD99F7BE518B5CE78D52C535A8",
+    "metadata_key": "41CE67094AA58CB68886D68D0193E9FC",
+    "section_mic_hmac_key": "ED41BD675FE9FC9D386D5F7BDF85A090E0CDD06C654B74F9A925466A616B314F",
+    "section_salt": "E78A10BE08D7C230574BD056D8478F8C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7F3CC424F187398A9D04E051B12744F9",
+    "aes_key": "32FE6B6BFDC54C7C3D190731779B9BDE",
+    "data_elements": [
+      {
+        "contents": "9F8CAF983F9440011F44B7C1E739BD66CA201CD553ECD202C61CC3",
+        "de_type": 597
+      },
+      {
+        "contents": "86636F77095B43A7D8CF9409D3FB56CB184EF894C68733",
+        "de_type": 351
+      }
+    ],
+    "encoded_section": "6F901363F63944D3D3B62852E1C29317DC53B4911000D1CD81A105ACF9921968705EAEE9D92A9001DF86E28C415ED0E45F886965EE16475E0C63561C5D876E9F6E5B24E64419C905FCABB21DF8039EB945DC929888A4C7AF8F4729023C726132918DAD5603E12E1A152D57961025B1D9",
+    "identity_type": "private",
+    "iv": "5FEB88C9EE2B3558BD1E1CACF0CE8DB7",
+    "key_seed": "8D82AA87D9535AC9B95629FF003748F0D846D09DCF4577EEAD0F46351AB74B41",
+    "metadata_key": "4B7CD0359387387945A934B6DF464C8B",
+    "section_mic_hmac_key": "ADAA329E70F13AE3122A74DF74E84A7C6F1EEFC966617408BE3FC279AC4BB8F6",
+    "section_salt": "D1CD81A105ACF9921968705EAEE9D92A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FB3D9837C28AC67707ACFE168B79802F",
+    "aes_key": "DE1ECC3710EE70A72F458CCCBE684022",
+    "data_elements": [
+      {
+        "contents": "311806935DDC",
+        "de_type": 932
+      },
+      {
+        "contents": "941A",
+        "de_type": 262
+      },
+      {
+        "contents": "4B70C0E6758C665694CEF8D27E2169098693AEA61570C940FBC453",
+        "de_type": 20
+      },
+      {
+        "contents": "BDF524A91132073481B23A0D20C19E3E57D365C37A90FFBA8E41",
+        "de_type": 474
+      },
+      {
+        "contents": "9C36B683253A6AADD79843",
+        "de_type": 965
+      }
+    ],
+    "encoded_section": "8D9013794200979A65FAFD9C31FEBA2DACE1B29110001C6B6EF087BAD3E1CF545DF1A9A9CE99900432FAD109DF59A7DEC426A1DB051FCC95F420A321410D13AA0FDCA4E22DC7A7D6873AE13CC3173D14B2BB9CE969E9B0A8B6745D7E913D03BA9031E8EE7A09BDB9689C80DD630CF7D193B233F3F3F1ED1054D9939D8EAFB7EC55BA71A7103F7961A29A1C26B888",
+    "identity_type": "provisioned",
+    "iv": "4EF171E764B3E218255391C9D368765E",
+    "key_seed": "FAF02B1CF86D9A97BCF9E2C0FE5850688E3D49E53616224ADE0238C91860371F",
+    "metadata_key": "07D64CAB902E683E5C6B3BDC257F2ECB",
+    "section_mic_hmac_key": "01108F72B3239D936073126F7DA309D55A68509567CABF6F7742DE6B12154D8C",
+    "section_salt": "1C6B6EF087BAD3E1CF545DF1A9A9CE99"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "38E22156A8185E55F335A47037F8E2F7",
+    "aes_key": "6CF70F3F165CE847A9C63F50D8547C21",
+    "data_elements": [
+      {
+        "contents": "4D8D46ACD86C6961C4094DCB13D4E916F3A83CF8",
+        "de_type": 508
+      },
+      {
+        "contents": "C4688F335D",
+        "de_type": 78
+      }
+    ],
+    "encoded_section": "559013CFE4D705FD9D6A0D8079500CE2E92B14911000C625AEF2F9BD3C56372C63173571103D9002D5600B9D26063F4622FC6CECBAB259B3BBD63F3B3E304465A897B891B7DB0039B8BFEF525691FA300DC955A09E17",
+    "identity_type": "trusted",
+    "iv": "33820EA628D605D7F5DF12E15E0F202A",
+    "key_seed": "401411AE44BA8795773F4EF0049F07051344BFE4C7255D4E7D975C63738B27E6",
+    "metadata_key": "1B003DF5AFD3B438F2D367697DEBFCEA",
+    "section_mic_hmac_key": "23BD2994A6DC828B1115E7CF2D7A2197ACDFDA21D8030167F845E9A42461EF51",
+    "section_salt": "C625AEF2F9BD3C56372C63173571103D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4A5CE7E83CA2E1C0B57C8E06D0E6F742",
+    "aes_key": "F085865AF5C9A124298272AAC0C459F4",
+    "data_elements": [
+      {
+        "contents": "EA412396D4",
+        "de_type": 360
+      },
+      {
+        "contents": "5B36B6971907900EA4D176E7F96C99C6075CB81A",
+        "de_type": 151
+      },
+      {
+        "contents": "7672075A67196562CFA6A05A1C9A803FAC914E665661",
+        "de_type": 669
+      }
+    ],
+    "encoded_section": "6F90135C5E8470AB022D8D60D1362A898BB18C91100072034CD97D55545F76310C999D548F7190014D3248EE4C4B1A52F45BD578C3AFDDDC2F3213EDF205D719FCFDD964A9B580DE8DCF620F5E3B7386389CD569E2CB17B8BA70FF1B739080481A336376DC599322D9952717784ACDA5",
+    "identity_type": "private",
+    "iv": "6890DDE4612EEFF53CF9BAA9A0A57B20",
+    "key_seed": "86589F54F57C9F0AB5245C0F6635B611F802EA256A94441B12160C2605AA2D1D",
+    "metadata_key": "DDFA0DD062ABE2CD427A72F1C1F81DC4",
+    "section_mic_hmac_key": "0FD9C77FE8E953E2B8526DA6414A2857E02A4A3213F2BB484799E9CC977A2219",
+    "section_salt": "72034CD97D55545F76310C999D548F71"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4ECC54C7A3A3EA811EB6C2D753C41C19",
+    "aes_key": "5EE028B37AE8B25ADD419427E31E23AB",
+    "data_elements": [],
+    "encoded_section": "3790139322D0756986F1FD123C6B04CDF3EAF091100057FFD16AA68473D0582E5BEEE3868910900201234FC414E25E21A3EFACA4A5E5A999",
+    "identity_type": "trusted",
+    "iv": "87F0BB8A2FCD03EFEE2AC5C1453F55F0",
+    "key_seed": "598FF7D9FD66BA3E660DAEB8B3E5C6C82FA6AB758D3D1076691C4D0542EF067F",
+    "metadata_key": "9857B87C8DFE289C01F9F9708B692FBC",
+    "section_mic_hmac_key": "1F7BC70DC4FB9665A7E21929DBC300EE2F91AA7A7AA775222A26149F60EB5345",
+    "section_salt": "57FFD16AA68473D0582E5BEEE3868910"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C73AD85B0EF01E161F1E7764010C1EA5",
+    "aes_key": "79E30C89ED65C6F40882254563A75E17",
+    "data_elements": [
+      {
+        "contents": "18609C222BA9D3D5DB036F555AB0CCEC09ADE5179EC2CA9F",
+        "de_type": 99
+      },
+      {
+        "contents": "EC187ACF3F4C481BDF000D552EB3",
+        "de_type": 658
+      },
+      {
+        "contents": "BF556150F61584A4CF7A5C624E",
+        "de_type": 383
+      }
+    ],
+    "encoded_section": "7290139ED0E2B0FDC39CD26D661DFFF11234169110001E20C1E816FA9F2D34542BD1BCF7ED9F9004EAACB664A85B0349C8431A0EA7D7E87FEB22B32F30C074D0285840584A1026F19E1DCD4BF133020C1550E42725C77B4E6E60DEEB1A354FEF5E481E41075F40D790546805FDB5F0CF6EB7D4",
+    "identity_type": "provisioned",
+    "iv": "C430A8DCAED7C039B0E33CA4FD4F093B",
+    "key_seed": "EF0BC6EE51E35093FA4C893AAD43B1951B91C650EF6D401C7C03975AA916A507",
+    "metadata_key": "0FCBFF2F8DA457F6279FB66C50203DF3",
+    "section_mic_hmac_key": "BC9E4B32DAB0A23BF9FBC776DD2AD5530E1AE56337FB5DCBDA1FC45E5C34598C",
+    "section_salt": "1E20C1E816FA9F2D34542BD1BCF7ED9F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2B287CE2F08F4BCCBC505B6FB2ABEC15",
+    "aes_key": "A2391D2B8D95B3B22079BAE241145DF8",
+    "data_elements": [
+      {
+        "contents": "2A6C741FAC614B55AB5B",
+        "de_type": 746
+      },
+      {
+        "contents": "B82E6D8CFF3DEC1962D2CF4134A7D30C04F4A3",
+        "de_type": 972
+      },
+      {
+        "contents": "A03D72AC4A8A200BAF89714A92FC5BC3753529",
+        "de_type": 271
+      },
+      {
+        "contents": "C89C68F269FCE8",
+        "de_type": 462
+      }
+    ],
+    "encoded_section": "7A901325D43FF30DB60387156458D420A2551C911000F8647C38B6266104D6ECE9E5CE7E879190015383810EBB8184B419130D8EABE9C911D7EDF89EA2A9008D98C5EAA9E8D2B550252267595D53A0BC8E7AB281846867F6A54FE0A048F208D38F660D69E6341DE617223D80A2D2B96947630EBD69EDE868FBF659",
+    "identity_type": "private",
+    "iv": "FE04A94DEBB042153B2C96CF5D4DE41F",
+    "key_seed": "F37257303C8330286B67468749200BD24155F76D9EAE8CF6F4A1B11632F9461E",
+    "metadata_key": "7216F11C49F946FEF51139ABE587B632",
+    "section_mic_hmac_key": "4C21C99F1C75A9641AE865D73D38BAD22B11A67009ACDFD40F8003D80CB6ECC6",
+    "section_salt": "F8647C38B6266104D6ECE9E5CE7E8791"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A1133D9CB487CF507E85AB45A5225A3B",
+    "aes_key": "E2BE917DE14406C0FCF09FC4FDEE1FF5",
+    "data_elements": [
+      {
+        "contents": "71238E",
+        "de_type": 839
+      }
+    ],
+    "encoded_section": "3D90132C5CB47E0A288D59348CA9F66DC3AF9A911000523C6B069BD40FBB9C6BF1C8E10865E69002AC2424CD59DA02E42EF7E44168236A9C325B591A7DE3",
+    "identity_type": "trusted",
+    "iv": "FBC8CDB92CE0F89BBFF8C1BFD00F6541",
+    "key_seed": "F7982DAFD3732E72F79D778A65DB2174686D0AFC94A8FDD356DE6B74B0917497",
+    "metadata_key": "ABDAA0345C02A6AF84BBCCE12BDBB38E",
+    "section_mic_hmac_key": "55EEAD0385A2BF321ADCB7C14075438ABB04AC96A68B93A9F2C53490431561EE",
+    "section_salt": "523C6B069BD40FBB9C6BF1C8E10865E6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BB53EC5F4F7ED20F852C88CAE0D7D2FD",
+    "aes_key": "27166277389D14C33C6EC6FCF087D4DB",
+    "data_elements": [
+      {
+        "contents": "8CAD688B88D91C820CC9DDE89763",
+        "de_type": 976
+      },
+      {
+        "contents": "8430D62B44C83C85BDB6697D00A8A53518CD8DA7FCA68AA1AD6E",
+        "de_type": 166
+      },
+      {
+        "contents": "7A0FFFA6068B33AF9AEB4798863FCF",
+        "de_type": 957
+      },
+      {
+        "contents": "7AEF9A74325D4192B1B99E704D9FBDEAD1C027388D8F3B0E7FC72BE44A",
+        "de_type": 533
+      },
+      {
+        "contents": "0AD6320E89875A983E2B1507A7F212C5AFE5",
+        "de_type": 177
+      }
+    ],
+    "encoded_section": "AC901330A161EB463AD006A1F925054A3A0F8A911000BB38DF610A30BC926FC6C4582D37660D9004243511EB4B95CC7EFF1E37F4559CBE73254459AB1A8AC32FDE866F96C56D5299D575FEEC58639D153EB6466758D10465A65674923DD5BAAE80B5D400AC70B2965FBA05961B31D9C3CE295361741B5DA19C60A13C103B0DEC97C664FC391A1A105F6E8A4FC70CA84EC842DFDBF8B6A86B21DA28E828F78F23DD27F8EC040A6D26309D9BCFB3",
+    "identity_type": "provisioned",
+    "iv": "E5930F69FFAF33C673D10B1BCF790387",
+    "key_seed": "928F3472A71D094F7842799035E83349496DD9963F46E4587FC0BEC618BC68FC",
+    "metadata_key": "0B9BF0598FA164D48423A5A07C65D3FD",
+    "section_mic_hmac_key": "FBCAF9F7E6996F5EFF05649E26A30814CF72CA895BC9B6B19B21BD433845D247",
+    "section_salt": "BB38DF610A30BC926FC6C4582D37660D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "D0BA76FCD350C9F9F7951F23F2C51481",
+    "aes_key": "35C13E514AD41A4D733FE99E7D1AD0D8",
+    "data_elements": [
+      {
+        "contents": "1D84D057F7999067EA441E2ED2E55BAAA302AD",
+        "de_type": 651
+      },
+      {
+        "contents": "D2C79A4B046101959D",
+        "de_type": 695
+      },
+      {
+        "contents": "1B1C33AF7CD34DAA62A8B03451EAB120EF9BD2B9CE24D8240CFEBEE8ED",
+        "de_type": 566
+      },
+      {
+        "contents": "8C874DFF95B449C595963601D5FDB2",
+        "de_type": 315
+      },
+      {
+        "contents": "E805B80A4D8759A73DEBFF39B881152CE26BC2D440",
+        "de_type": 42
+      }
+    ],
+    "encoded_section": "A2901311EB79E0E8D59F0B3C047B92D8CA72BF9110009A2C839A95308FA66A28E37D5346161F90015F33031A6C9AAC27A4B2179E39E69DC705D70EAC406CC05F02C776643CC00D087180158DE32FE190D0DEB2D2DE6D2DEA033605D6CCF77D5207F406C872A1CA1DC19D97DC4FF2D4C3B6CA4548C31DE16C35EEF910818B982851FCF6DEBE5C4C9BA458D2AA51F3B55A5A909E2268580D8AAAAC6FD0ADFC16FCD8BADB",
+    "identity_type": "private",
+    "iv": "14105F10774008066E6F963762594EE2",
+    "key_seed": "6D3436A21EC875EE57134E1DECAE0C2A3B1496945F8D1E11BB96B92F7D47246C",
+    "metadata_key": "888F65EDB3AB4C3A68E0823136F3D256",
+    "section_mic_hmac_key": "A7498162FC9BD07510499868B87AFF66AEB0536EF48116381D1CD09EEED03935",
+    "section_salt": "9A2C839A95308FA66A28E37D5346161F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "08B3CEC91E020D1D4484B0343BAAAFE3",
+    "aes_key": "B32745DAAEA6C4E7D467DCC28E7BDB1A",
+    "data_elements": [
+      {
+        "contents": "DE5A73510005E7983B15546A1C8978D6",
+        "de_type": 238
+      },
+      {
+        "contents": "6551FCA60C84C5227D009AE786796634EF3DE920CDF7CC",
+        "de_type": 993
+      }
+    ],
+    "encoded_section": "64901365E99B278344696A56F13E914616080F911000E05F4117821F694AC893206AE14EF9C69002F00FA0F6E4F18BA8AE1B88AFFED9C59347B2777757E02B7763BB589A19E1718B87E0E429B4602770861BAD7938B0A6AB0394EFA1E5D06492404993B0CF",
+    "identity_type": "trusted",
+    "iv": "2931F4D5430BD5F2392929FFD93A2BDE",
+    "key_seed": "0BA7DFFE886190D25ABCE6232E5CBCF588F071DFA0899C9F145BC5480061F522",
+    "metadata_key": "5B1CA7665FA68A63D48E11A291B13E15",
+    "section_mic_hmac_key": "871BEA00E0DE1FDF73CE65FDDC64963FAFB2DB32842BA39D1B98C0B326C08CFB",
+    "section_salt": "E05F4117821F694AC893206AE14EF9C6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "526A3175C83BD7923662BE998A0D026C",
+    "aes_key": "48DBA531822D93F3D6FEDA0CE7FF67DE",
+    "data_elements": [
+      {
+        "contents": "8B52817C4B3FAFEF79A65D",
+        "de_type": 670
+      },
+      {
+        "contents": "46",
+        "de_type": 801
+      },
+      {
+        "contents": "E1F3439D0AEAD4CB9F77",
+        "de_type": 671
+      },
+      {
+        "contents": "6DF3745B08B4FEF27F336A",
+        "de_type": 288
+      }
+    ],
+    "encoded_section": "649013AE841A17AE95BD4355024766953D137291100031E1FF9DC6275DE2D6CFFDFBD4ABF2BA9004DBA83D7B18E1768B0A74F4540B159871FB9C14BE48F656157533EAD1E5ECC8228A55124E283885BC099481EEF4F1913D09B1E3D5B603D420D5E41EB331",
+    "identity_type": "provisioned",
+    "iv": "D4B8B04708827F5B94AD1C4B4AAD0502",
+    "key_seed": "65F30FB0C0DBE40E8B6DB35012BD4AE37FEF2C62A90EAD5F367CD41D0B4D06E2",
+    "metadata_key": "E4FBEF567E6D11D3A9C21CEF8687354F",
+    "section_mic_hmac_key": "61B7897EC3760B6EE3E94E7EC85D1BAC7891D62B9C958EB6754F349DF51B56F3",
+    "section_salt": "31E1FF9DC6275DE2D6CFFDFBD4ABF2BA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "607FCD5903490C79A012D2CC218C8E14",
+    "aes_key": "1B4926A4AE50E442685876D28E738DC5",
+    "data_elements": [
+      {
+        "contents": "92193507655A3CFC554D76AB",
+        "de_type": 703
+      },
+      {
+        "contents": "3E93C4EF1F7BB3773E6DF1A44C64A63EBBB84CC12DB6704A2512",
+        "de_type": 863
+      },
+      {
+        "contents": "281F78E0212C7ABB",
+        "de_type": 785
+      },
+      {
+        "contents": "D605E7E6548983FBC54C139E2792F218A1",
+        "de_type": 674
+      },
+      {
+        "contents": "56C18EA4A5CB10EC724D6017F192CC06763AB5",
+        "de_type": 874
+      }
+    ],
+    "encoded_section": "989013929D8225107A0F13E5F33951FFF57792911000BC967854BE9AE8680BF37D35FC3247879002F417C437991FCD5F8830F88C9CC8ABD364588908090C416784CB0784383558C9DB80A3EC0945B122D09DDCE9718ECA2DE69F0A4E444DAF5432ABC60AE72624996EBCF0D5D4B3FEEBD7C93DB5DE4FF19BC16971B4BD672738994696EE1EB9020448360ECB9E5B4D14BEDDAACDDDECCD2ECB",
+    "identity_type": "trusted",
+    "iv": "18EE01B860AD7549AD1C27D0D1719333",
+    "key_seed": "BC65AB7D447AED92E7AF15FBA242DE64F51CB5505C7538DF7606E5BBCFF251FD",
+    "metadata_key": "4EC192FA9236683FB8EE6098F5AB2058",
+    "section_mic_hmac_key": "0BC73A07FD0D047E1F83EEF451E5FBA8DBAACB166B8BB3200AF94CF39BC391F7",
+    "section_salt": "BC967854BE9AE8680BF37D35FC324787"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "1F4428A4B286CB63540A9B96DD5755C6",
+    "aes_key": "E7AD8FAE2DD846979CF83C2925603C18",
+    "data_elements": [
+      {
+        "contents": "5FB025BDB59D9975EFC6EF5E4F77",
+        "de_type": 266
+      },
+      {
+        "contents": "A3ECE156745E1E9DDBB39696F06D01B045E3A4A0948C27B5B38F2F",
+        "de_type": 293
+      }
+    ],
+    "encoded_section": "6690132001AABFE31D558D81FB2EACCB49044B91100055A992A831E3F554842A50CC1A0F6FD59001B2D52D0A60F5AAA760A47640C2A4BA9F66739355B0A13BFDF1262EB114C6582CDC7186A33416FB0DD4A59F72E83A6913259F07029F9A9B17C79B1CE9286DAC",
+    "identity_type": "private",
+    "iv": "3C257D68DE3391B34584EF9F5617E9BA",
+    "key_seed": "67F1DE60563E3E0DECE3191A8B38107DD8AFC36AE838AC1667D9FA2ABA01B192",
+    "metadata_key": "5DA221E4FBF5632037F2C38760158865",
+    "section_mic_hmac_key": "80F62DA2E814A7FC4A5729E1347BC6E0E1ECBCC2A69E94A31201CBC9CA264C71",
+    "section_salt": "55A992A831E3F554842A50CC1A0F6FD5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0B6FAB3C87525BE1EF6338CC7B44586B",
+    "aes_key": "9D8AA7E968ED807E12A1BFCB358B2500",
+    "data_elements": [
+      {
+        "contents": "A8F4C5FF",
+        "de_type": 250
+      },
+      {
+        "contents": "393C6F0B53FCB39895D4673589995BAD266D8C1F37B8EFAEDF715C5E",
+        "de_type": 891
+      },
+      {
+        "contents": "897DD504C7FB519F408359177CA09EBB3285A8D07C047DAEFCAAA9",
+        "de_type": 195
+      },
+      {
+        "contents": "223F0E3959FFFA4BA2C2EF990BE541",
+        "de_type": 109
+      }
+    ],
+    "encoded_section": "8C901388894975700558396618D4C5B6DD75AA911000976919A685F1DB72B863D392566395789001BEDDCCFBF8B26CDCCEDF6FDDDDFEF284781D90CF4C669B8E712ADE147F3A055C6927205B7751438812A0AC612BACC422F753A248C921F763A4834D260F66D4C3BEE187B5059BA90DF97BB8D88B8D5EB57B349AD5A5A2C0F4E8048A3903495296C0946F8FBA",
+    "identity_type": "private",
+    "iv": "4EB6A4C8E8AD7A198198AF5B3F157ED6",
+    "key_seed": "7FF31B2DD4EF85589AC7E8DBAF320DF047DFD5383F762946277B9514C19B957A",
+    "metadata_key": "6DD18E7B8BB136DAF7A00E03A68BA11D",
+    "section_mic_hmac_key": "32596C515AB3091AC5C0892934243A0E134A5DE300B5934134ED4EDF0551CE41",
+    "section_salt": "976919A685F1DB72B863D39256639578"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4840B5430E2C99864061A0B7BC506FAC",
+    "aes_key": "305CBBB94EC7BF4B1575082301513A20",
+    "data_elements": [],
+    "encoded_section": "3790139F09A81379D3DD32A26A50B29B791D7C9110003BAC436861F7119425262BA2F41ABA479002871FBCB559E18575502D8A4E205CD26B",
+    "identity_type": "trusted",
+    "iv": "9523644A9EC5EB4D03F9682F6B71EAFF",
+    "key_seed": "B7AAD921C1C4B99238DF4FA3E2799F6AAE57B1189D6E886D38DEE52DBAF17272",
+    "metadata_key": "6159AC2C4F82C220C822A0B02382AC52",
+    "section_mic_hmac_key": "B0B2F95C1E37B287F9CDC028DEBB10B717883252404112A6E2A0884F4A39E2B3",
+    "section_salt": "3BAC436861F7119425262BA2F41ABA47"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B0DD88926A85214061D588D046C40D39",
+    "aes_key": "0A9D24DA0E9CD688FEE88EEF7105D736",
+    "data_elements": [
+      {
+        "contents": "E1CC37DC8F60ABE02709940B49FF8CB7B467E95F",
+        "de_type": 706
+      },
+      {
+        "contents": "1E743AE7B4E54237E661B287998DC1303A",
+        "de_type": 87
+      }
+    ],
+    "encoded_section": "61901372401FC11144842B442B965C2F4409749110004E00BE0F929E9D09AC9DD996314507AB90015154576D8110400CD950E8FA2AF870E462D4FDF664B7F9E099BA14A7683B729FEFBAEA36A0B1D1F76A2D4149FF198765456514682E5CDB01F75F",
+    "identity_type": "private",
+    "iv": "A061006730444D3FE601B1B9A96D5582",
+    "key_seed": "C7E8A62C5DB5B1E6B07C55D4A3171C26B346BFD476CC4D835F52C40FE4FACF9A",
+    "metadata_key": "C88A3F7A29198F2E0BA655DEAA8192B2",
+    "section_mic_hmac_key": "9BDF103979B01A474F89368E167707AFF7C35913263B5709CFB61FA4BC63732F",
+    "section_salt": "4E00BE0F929E9D09AC9DD996314507AB"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3E57C49387523CFE6CDAC323282CB768",
+    "aes_key": "828E644A59749E1081F44C309EF285B5",
+    "data_elements": [],
+    "encoded_section": "379013461457D7D8208806838F38643B30805C911000602E288251DC86DB4FC88DD50BDBB5B79004E1385E22902422B0DAA09CFE046D4480",
+    "identity_type": "provisioned",
+    "iv": "984B98EAAB7855E8E58B90BE045A98D4",
+    "key_seed": "B2DD1B6846A6C730D35C7DD5F7E66EF0DECC00BC6FC4BCDE5AF7B7A8CA29927F",
+    "metadata_key": "5F47855ABC1C9E6F40C278922556F9B9",
+    "section_mic_hmac_key": "2F811707CCF2E89920CCD2E8AF5712BC621F3ADD42AC4C4E945D667BF519E7B0",
+    "section_salt": "602E288251DC86DB4FC88DD50BDBB5B7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FAA87B7470D9B709BA24C03C0556B201",
+    "aes_key": "AD00E01086C81CD4ADF2F225D4EC40CF",
+    "data_elements": [
+      {
+        "contents": "C6710B42",
+        "de_type": 259
+      },
+      {
+        "contents": "B775BA2BC90617E3A1D053C887C95D93928D732E01C596B085",
+        "de_type": 518
+      },
+      {
+        "contents": "C1902A",
+        "de_type": 542
+      }
+    ],
+    "encoded_section": "6090136EC2E8301A171621686D256328800A5391100086D384F2BE92C175DBC065A4441DB88C900412860361D567258D47AD2373ED132B0D455A36D52E13E8A60A4D14137633019A9376150FF9C5C3E876A665940CBC3159D26A6DB2A7C726FB7B",
+    "identity_type": "provisioned",
+    "iv": "4019E22DE255D0AE7010AD5142D1BFB5",
+    "key_seed": "45C69BCAE63391CA52F9D2C1C04E9699727876ABE5041DCC006A68270893A46C",
+    "metadata_key": "CEB8DAB98EC23439D98C713AF4F2D4D7",
+    "section_mic_hmac_key": "C2DD8B720D968C3A290A9C2038070F134A91E53C09F6214682B7C8D40A0FF543",
+    "section_salt": "86D384F2BE92C175DBC065A4441DB88C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "185871AE8F13E0BC01646BBE8CD93E7D",
+    "aes_key": "3F4388DB5F2E556979CE2D22B9FF45E5",
+    "data_elements": [
+      {
+        "contents": "659643C0F6B85BF24446E841",
+        "de_type": 119
+      }
+    ],
+    "encoded_section": "459013A62C3DC6BD3EFFBEE575BE8D47E584E6911000C87758744B4E7C881111F2CD34F4D7F79001DCA97B6125D1DAC4E21D5D0D2E7A986FC7867F78551EC031B808FE7D331D",
+    "identity_type": "private",
+    "iv": "715E94C49314243FB3D9438BE0B5FC4B",
+    "key_seed": "B19545CBC53FECBF01DF0794B5E2BBE1FB077D963E6B5AAF7BF3B41B09655E55",
+    "metadata_key": "8A571C405199BDEBC9E0A996C066BC98",
+    "section_mic_hmac_key": "EE32E0FF4AE8937E99101C31545DF832EB4424E20F6FFC90DCF47610EC6D4B1F",
+    "section_salt": "C87758744B4E7C881111F2CD34F4D7F7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C4C2159CFB937F5A7A2FFE48D07C7C70",
+    "aes_key": "E616EA700DE6B20016EFD092679337E6",
+    "data_elements": [],
+    "encoded_section": "379013F8000289CA6BA6E4115BAD0BAE228BDC9110002F0E0B5A5A511C3B0DD2E02FD72510DE90013F4EFCB8C2CB33A2696F2D5405E460D3",
+    "identity_type": "private",
+    "iv": "26BC1ECC5F5D6B109307FFEA76907026",
+    "key_seed": "B872DAA9F9DA74E0D37859F20901854233A6C6E66F537D404A6CDF32863413DB",
+    "metadata_key": "B86BB6F2B8B3E89B4A3E2672BE4DE433",
+    "section_mic_hmac_key": "DF0F2BDA3016890F67FA244C72A22AAD605BC9C8732B812826B39C729DFD2858",
+    "section_salt": "2F0E0B5A5A511C3B0DD2E02FD72510DE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FB11A8102A3D19E567CC0EA7A856BB99",
+    "aes_key": "D8F09716F9CA40B2576E70575E6788D4",
+    "data_elements": [
+      {
+        "contents": "7489EF6D168E7528A568454A79B13C99051EFA8CB54D790A676B2E",
+        "de_type": 144
+      },
+      {
+        "contents": "3D489FBBD523E0F6545E9FCABE2FABD575CB66",
+        "de_type": 278
+      }
+    ],
+    "encoded_section": "6B90137A6B943C979446674641A75443D0FD539110001445E273F719B3991BC855505C7524CA9002936D5265ABC1014D62D7A0AE1232524F648A170154BB721C65A99DCD7D3B8B31118047E8071AF25223AC9DA6DA3275B5AEC1DC81074FA85C3EA6BE8568E008793268E231",
+    "identity_type": "trusted",
+    "iv": "C41905D73CF82367AFDA74A2171728F6",
+    "key_seed": "3D0D1F01B8DDA465B6B3C07A589C94E3A1272651DB2CAE2038B1DAC1265418CC",
+    "metadata_key": "B5948EB880BE8DF16056872DDB37723E",
+    "section_mic_hmac_key": "86D2D4079CB6D1A6E43AA9CEF8B9830580749A245457F823096FE7B72BF9E7AC",
+    "section_salt": "1445E273F719B3991BC855505C7524CA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B6EC9A6945B754FAB8D7FF959F03997F",
+    "aes_key": "9B4980C3EE6BE117259F7B1377A31A75",
+    "data_elements": [
+      {
+        "contents": "2A966E923416C51DE8CD04D2FFBD7129FA00F9B0",
+        "de_type": 367
+      },
+      {
+        "contents": "0953BDEEC1AD8F034790",
+        "de_type": 452
+      },
+      {
+        "contents": "5734C9069ADCEFD63F6DF5E815",
+        "de_type": 21
+      }
+    ],
+    "encoded_section": "6A9013D8A4420DA699AA047DA37216590D7361911000193B30E46CAAD820AAED6A871B0DDE3D9002E1DDBA0DC773691E6F5E35467C16D5B90BE6B4794FADFFB35D17D5959F7DA4E0508BA05C7A0E75D733827A23241815076553276D897F9D7F9857C88BCD15251B6A59FD",
+    "identity_type": "trusted",
+    "iv": "7596E4CF2D76B0B7B6D57BB31536794D",
+    "key_seed": "10CDC0E8F2081B6383B5E770324E8A2A0EE7BCD33A06F4AB1C13CC441B1576AA",
+    "metadata_key": "8B6C66FB4F911DD9D302B58389A38E2F",
+    "section_mic_hmac_key": "02435909F7FC7DCF6AD2C5782C4454EDDA6825A3F03E2FAE631827EF23C75802",
+    "section_salt": "193B30E46CAAD820AAED6A871B0DDE3D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3BE86057455C4EAF637B2E2D5A3D203D",
+    "aes_key": "E49BA1CF3158EBD91ABCD623CF652A88",
+    "data_elements": [
+      {
+        "contents": "1D",
+        "de_type": 789
+      }
+    ],
+    "encoded_section": "3B90134A40A37A0F1F7FFA41DBA69CF401562B911000FF2F1817375B764380DAE5464D94377890017B523500C616F3CC02DB071A8FEDF8A4A77EEF03",
+    "identity_type": "private",
+    "iv": "D0B1E3FD976AEF6BC9764DD4C2C77D9F",
+    "key_seed": "F6C21731E2A651A2A3E69BDB7628AE4D170E03F1290FF07E6B5D53EC4B3A9E07",
+    "metadata_key": "A67ADD8BB31728F1CBAB049EA30784D0",
+    "section_mic_hmac_key": "32D1CADC23733164A58E0DFD391F62623DF7CBA2B2C482B97E824837F126A2EF",
+    "section_salt": "FF2F1817375B764380DAE5464D943778"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F835784D7AB18BA808A7F69B57D4815E",
+    "aes_key": "1BA538EB97A7B39A85A8AE30F3E7F74E",
+    "data_elements": [
+      {
+        "contents": "3EF58FCB910F",
+        "de_type": 471
+      },
+      {
+        "contents": "B7A97511C7241A87D93CEC34DBE0",
+        "de_type": 781
+      },
+      {
+        "contents": "3B7873329F6042E0",
+        "de_type": 591
+      },
+      {
+        "contents": "4D",
+        "de_type": 155
+      },
+      {
+        "contents": "8B19AB",
+        "de_type": 459
+      }
+    ],
+    "encoded_section": "669013321C3BAAF7D8D726DA7B24CB448A7CEF91100060BAA8C3E9B5DE735AB5E20549288EEF900459F48BF2DA6EC0C9509A54CD9EAB469FAEABDB1C0469C4AAE88E000102F20F0410588ADC95DC5CB9F1E618CD9B5D7282AE636F046F0BAF41CB330F90231371",
+    "identity_type": "provisioned",
+    "iv": "61B4EC1132186567C1992B337414B65A",
+    "key_seed": "82DB684D3D3EAAB31A410F59959F697C1A3F06F0225400F7F93973B38E900F48",
+    "metadata_key": "670D421A6387FAE7387E7687E683FF91",
+    "section_mic_hmac_key": "4B60F9DB5B3A4C383A3F7D15A90CC70496A30476D9158CD07832E3B34430A386",
+    "section_salt": "60BAA8C3E9B5DE735AB5E20549288EEF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "97AC9B949680B2F11F1C07562473BC5D",
+    "aes_key": "8893DA49A2A51A183F1A99A688B11CBF",
+    "data_elements": [
+      {
+        "contents": "B7CFBC4A38F6E5C1EF5529C01E0EC57DEF14",
+        "de_type": 487
+      },
+      {
+        "contents": "76F12E3859EAFC1C47332C188435203DA7BAA2C11219B3287FDB",
+        "de_type": 699
+      },
+      {
+        "contents": "CEAA9D",
+        "de_type": 474
+      }
+    ],
+    "encoded_section": "6F901300C1D813793E3D565D7BDF96D4729AD1911000D87C74058CEB77E6047D8FB6FCDE2A84900462BC3ACC414A1075616F631658C6F59BD8313C6D040F237912A83C8391E481F8260C25C001E842C5CF8C9899A39E81497CD14AE3B95C42D4613D5B94AD5A43FCD06FFBBB880771D4",
+    "identity_type": "provisioned",
+    "iv": "31692EECD347BB8B790FFE491DC6AA03",
+    "key_seed": "D7DB5F3D01EB449493F604FC7625AEA837CF2B59C099BBA604A4289E7D130F3A",
+    "metadata_key": "5B0B450F9073E98F2713D56B6F8B6F45",
+    "section_mic_hmac_key": "8CCD7DE04D0D174F4071227616AE28B1541FD3DCB20559E49DDB9D7E1E61DF5C",
+    "section_salt": "D87C74058CEB77E6047D8FB6FCDE2A84"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E702551D59055A4C268DE48352D1D471",
+    "aes_key": "B2C74066FA0433B54D2C41E23E6EF2A1",
+    "data_elements": [
+      {
+        "contents": "C87DA9FA2AE6",
+        "de_type": 753
+      },
+      {
+        "contents": "0F09EBD5E1FB0403D5FB6EC758FD99969CD51B",
+        "de_type": 938
+      },
+      {
+        "contents": "68",
+        "de_type": 659
+      },
+      {
+        "contents": "EE7C4403DFDF257703D7307BD90FA19F1234",
+        "de_type": 367
+      }
+    ],
+    "encoded_section": "6F901313354100352D54F8E69864F4D81E5F40911000D31E9F9EB135D9B417465F14DD616CAE900241F17700C7C522B251D69077C5D83A57C91C76E9608FF7AEBAA9E6D6DEB4FBB4C0FA7A846161B449867B0DEF8857575DB871772C1A32A50C3FC8B5B7BFCE1F9E863B0B3BB540A538",
+    "identity_type": "trusted",
+    "iv": "E9CE72D40C0AD1AB24A01A82F2A07826",
+    "key_seed": "53B877350CAB817BBD44D7EEB318798EA7BBA2D4A1A71D89D36716AE92749BA2",
+    "metadata_key": "99976B723F002988F4F55EB36FEEF71D",
+    "section_mic_hmac_key": "99808417006A0BC9AEEB5E57189464625982B170D83E339770A664DA612A8FA2",
+    "section_salt": "D31E9F9EB135D9B417465F14DD616CAE"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2ED0C092724864890A6F1F704D800668",
+    "aes_key": "DE9D2AF9D5E73B5DCB99478AB10596E8",
+    "data_elements": [
+      {
+        "contents": "C60493B51521D08E1301A6BA8DDCB0B8C80EB593EE",
+        "de_type": 626
+      }
+    ],
+    "encoded_section": "4F9013FB0AF3D967DD7A4DB45338A490E57ED3911000955B8212E6D3B3D51F527D3FA95E5A7D900137E439BCDE00D86C1F7636F036F39C1E747B84D893FF30148A60A0FED2A9630C05074B851C56CFBB",
+    "identity_type": "private",
+    "iv": "0C778E8BBE426243CCFAB25E5FAD4AB1",
+    "key_seed": "E52C0B2498CB2E81CA1D7826956E5CA96643FF387FBCEC351EB3E573E8267E6B",
+    "metadata_key": "89100169ABB76A810E0689FF4E1CB32C",
+    "section_mic_hmac_key": "1AE31170876F62388380093D8BBCF2C7EE39CBBFEB704B3FACB3AB58FA218A0F",
+    "section_salt": "955B8212E6D3B3D51F527D3FA95E5A7D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "97D8796AAFFFF0391918C4D843EC7182",
+    "aes_key": "2DB81BBEEF3CB201FED12F870DD1A6D4",
+    "data_elements": [
+      {
+        "contents": "AC7A11",
+        "de_type": 42
+      },
+      {
+        "contents": "47F36D",
+        "de_type": 476
+      }
+    ],
+    "encoded_section": "42901334B6E677BB68B303430CBE489918DD1A9110004FC550638C733514F55D80678B35E8BF9001D6527838298D839E0AFB36258BC8CBDA19AC72F0C0F1C1D21D1FEB",
+    "identity_type": "private",
+    "iv": "88D3B3269364CFD877B4B349E5232F78",
+    "key_seed": "D2721BAEDB71C77EAD4016BE0B47482E6FE7ED6D8BE89ECBF2874DC8379532B7",
+    "metadata_key": "E6CF02F6881821F85F695322B753C232",
+    "section_mic_hmac_key": "23BCDEBB78C2D48D14441FDF8E69E3419DED64FF26E80707BC4D74C23E9985EC",
+    "section_salt": "4FC550638C733514F55D80678B35E8BF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E29DEA8F8EB14530304F3980D3B1D734",
+    "aes_key": "36FCBB41B48F5DE8FAFE45582F12BCAD",
+    "data_elements": [
+      {
+        "contents": "BF2DD9987F4FFF036F7EBEA0",
+        "de_type": 648
+      },
+      {
+        "contents": "F6739557F6F35CC9D3",
+        "de_type": 600
+      },
+      {
+        "contents": "7A461FEDFE239F482570B8",
+        "de_type": 773
+      },
+      {
+        "contents": "755576B7F701C110D30DE8A8A6055E861330AD3038B48369",
+        "de_type": 910
+      }
+    ],
+    "encoded_section": "7B90134C1E3F6ECC9F2A87270584D6B556739B91100000B42582A3DDC746C8C72882FC1E3CF29001E801CB59638B55AD760247985729C427C701BF1FC270D0846820E3F3CDAF26FE33F9C42DCCE3B580CD8ED52C8C84A1497C02B8CF858E82598DE51CAE0A9222FC649F0F74FDEAB2980ABB47259919E6AD0E5BF8CD",
+    "identity_type": "private",
+    "iv": "45B269C614463C479DAFE5D92A9EA559",
+    "key_seed": "C35089F1053EEE4A91E2931F7A8AC693D00AAE4A81E7175018BEE21CBAE51145",
+    "metadata_key": "A458B645925159650706A2E4C8BFCB64",
+    "section_mic_hmac_key": "668DDB981A4777D6A00612FC5AC0B10287C5E786DEE8A47BC127A87734A51AB8",
+    "section_salt": "00B42582A3DDC746C8C72882FC1E3CF2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "2A1A6C8D295ECF8C0202668F1489A414",
+    "aes_key": "28CC2DD441CA8E4B7BB065E70D54F066",
+    "data_elements": [],
+    "encoded_section": "3790132CE9BA72A592AFC9A154431AD9BF678A9110006F7AFAA6E74352E98FC6F26F271B53A79001C1E8B3BC3B1DC537843A058B3CFC77CE",
+    "identity_type": "private",
+    "iv": "CEB816A49DA26AB4B8D0DA3F35D84FD4",
+    "key_seed": "33ED4D742A7EF0E3B7A7A3A6DFC520B17D56970B3882F8CE0093A65364F26BAB",
+    "metadata_key": "D013A0446A6D5925AEB112989FCF8B6A",
+    "section_mic_hmac_key": "A5C57E34BFE28F270E4D4DBFEE7B2B439825F138CE6246EF84DD1A1B362ACD34",
+    "section_salt": "6F7AFAA6E74352E98FC6F26F271B53A7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C57C5AEC61B254B68BFA1263F09D08ED",
+    "aes_key": "37606EE34F9AA21C044064B8C1A2886C",
+    "data_elements": [
+      {
+        "contents": "B11514CC76AABC274DF8F8C6CFC2ACB4E22B53",
+        "de_type": 472
+      },
+      {
+        "contents": "",
+        "de_type": 457
+      },
+      {
+        "contents": "508791F872F0B674D72C29",
+        "de_type": 688
+      }
+    ],
+    "encoded_section": "5E9013C8A8A7AFFD886F274CC65659F5A059E1911000B4610CB1B2740CD7D6BA48AE95773889900401416AF0F3FF6BE99E89149A173F289199DB5ADBE086901F6BB884EFE7B8F26B8447A95553BADBA369BFA1FC97FA8253CE897B05AF5679",
+    "identity_type": "provisioned",
+    "iv": "7745CE454FFD689BA9F97F294D8A88A8",
+    "key_seed": "0E252068D453031E6D3E8512F54A93023AB47D40DF65477E1799169584D49A34",
+    "metadata_key": "ADD4C2CE5C0675D81B04C0CBA49C24F8",
+    "section_mic_hmac_key": "A1BE55F257B3AEC15DB0CBEFE6B8C9EDF5EC2D5D5D80A2B8365C62E03A18FAF3",
+    "section_salt": "B4610CB1B2740CD7D6BA48AE95773889"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "010247C596F6FE045EC36550B5CF9BE0",
+    "aes_key": "56D59B20C8A02E3EA56FEC1F085E6B43",
+    "data_elements": [
+      {
+        "contents": "71885D121CE06D7983CE03903E41",
+        "de_type": 749
+      },
+      {
+        "contents": "6429B148C4524881",
+        "de_type": 197
+      },
+      {
+        "contents": "0C10",
+        "de_type": 915
+      }
+    ],
+    "encoded_section": "589013A6678EE465A615810F963BC8524823C49110005A5B7E64F50792684B2A8F6A79718EA7900406B7D7E7FCA48BD47114CFD66F0847C883DF7FD6782B352737A61D21EB05EFAF560E2E0CD50D9FD1E940752E6EB6E2D2D7",
+    "identity_type": "provisioned",
+    "iv": "F5A4C94B269FA033FE14BFA63ACBED1D",
+    "key_seed": "B69E0F9C1C0B1F48E8670D5DE996DEEF779C2DD31BA96E3D40FC6A91E97F5CD8",
+    "metadata_key": "DEA55C1AA38639015CE0CA62436712FE",
+    "section_mic_hmac_key": "2342FF7DB9270407FAC870A89EC58DA18193CD6761B4A6A186F1DFC8F5097EBB",
+    "section_salt": "5A5B7E64F50792684B2A8F6A79718EA7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "202E08A90937C2075EAD5A59F7E1F826",
+    "aes_key": "85AD6EF749C1F3785582882A509D2A38",
+    "data_elements": [
+      {
+        "contents": "5BC965A20DFA04542BEC2459E2BD3E6C124C1E6CF676ABDD2B9C",
+        "de_type": 722
+      }
+    ],
+    "encoded_section": "5490135A9C9FEAABD949E8780F74645F6A3C8E911000822CC18C14AD885BC2B6450890F27E1090046DA21AA7BBABC3DBB63EE5653FA4B3CC619F4000A1E82649C1F516F162FB6AE4CB3975928A5E12E27A7E5A47B1",
+    "identity_type": "provisioned",
+    "iv": "48D37CB313151B5A637562436E0AD944",
+    "key_seed": "1BED4881AA77F955F19F3E02484DC66EE385DB9780DBE97D61F72285EAC8C886",
+    "metadata_key": "3EE77F6213BD622E7A7FC71A63DF2F41",
+    "section_mic_hmac_key": "789EAE25B10C4671328052CF168517ED74AC64002E81384E4C27F676EBAFBD94",
+    "section_salt": "822CC18C14AD885BC2B6450890F27E10"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "25E36ADBBF4FE51E8692897477FBDF1E",
+    "aes_key": "E820954AF8A47313941F0DFF6F7D8E56",
+    "data_elements": [
+      {
+        "contents": "F0E521B07A2BA4632B7522FFCBC8868A84B596E0E788",
+        "de_type": 308
+      },
+      {
+        "contents": "BC1B944236DAA3",
+        "de_type": 650
+      },
+      {
+        "contents": "9DD55DF02A53DCF3EAC75B805A2E468FDE7293E8D033456CD75B84B2C2",
+        "de_type": 202
+      }
+    ],
+    "encoded_section": "7A901374488D1F21525687674574AC556A759D911000B989B1E6C00C664909F417385FC3184690015D885FA6EABFC8A8AF8155D6022A502AA86FF128A90F7E92CF2E05A9FD1AAA7572DC42D5EB157D8845E144108D4E528D1B247732774F1C7EEBA1441EFBEBC97B3B550F520D4A31AFBB7D94C248BC9883889333",
+    "identity_type": "private",
+    "iv": "2A718490018706C03F9A6E4D1058369A",
+    "key_seed": "0674E67302C41BA299713DE1C1EA641C82F9345120CFFBD8705C8CF1D99D9F24",
+    "metadata_key": "DF696B20166A8F6C89A3A4999ACC7E66",
+    "section_mic_hmac_key": "2230661E0FE82FC883CA43379DB99B5F867AC35A6C854FA271576E91DFD44FCD",
+    "section_salt": "B989B1E6C00C664909F417385FC31846"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "77A50A93AD1DE5BD21FBA890648EA0F6",
+    "aes_key": "A5C13EBB1931A7ECCB4D1FFC456D950D",
+    "data_elements": [
+      {
+        "contents": "F248E8798E08955BB2B8C739C290BB910A2876078AF4E2FC3EBC839080EE",
+        "de_type": 299
+      },
+      {
+        "contents": "",
+        "de_type": 115
+      },
+      {
+        "contents": "6E863CFDE1C1B9EC5C5CE6",
+        "de_type": 207
+      },
+      {
+        "contents": "A78CBD078A98045B5CA79E19",
+        "de_type": 62
+      }
+    ],
+    "encoded_section": "769013B2E1239BB6FEFB97B6EA19C9619129D191100030FE3722857D4340D20F7C483E37F2DC900249E2354F02B0D9DAFBE5ECB30730C4A70236F4C59860A3633EEF571C2A024510BD9EEA4A46C1604CE18E0EE914A6B9001FC07FB1FDDA5807E075E7F594DC16D60E86B75246E93F301F7595583BE980",
+    "identity_type": "trusted",
+    "iv": "FF98DAB9B88B46C4982566F95B068A02",
+    "key_seed": "E56913363141DD1C2F0D5F93FB6A9EA6CE5212D0DA2FDCAC3CCE6BB15097283E",
+    "metadata_key": "661BF758E6697E46F133979F25395A26",
+    "section_mic_hmac_key": "EE035FE53ADF345F73E4AE77C4BA8FFF96D12CE39F3924939DB827E14ABB715B",
+    "section_salt": "30FE3722857D4340D20F7C483E37F2DC"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "EA8DA1BDB85D6AE965D351EE9B8EB881",
+    "aes_key": "042F1CC32A48B7714A58BB51469C260F",
+    "data_elements": [
+      {
+        "contents": "C24EE733EAC66F8A54A814A1",
+        "de_type": 708
+      },
+      {
+        "contents": "C24D41A652EC0E16DC1E23A473850585795417447B",
+        "de_type": 565
+      },
+      {
+        "contents": "CC8DA80690986563A3815792",
+        "de_type": 594
+      },
+      {
+        "contents": "5C279B02235F4678698B16545905C95D121FC57EE7B68A387F",
+        "de_type": 549
+      }
+    ],
+    "encoded_section": "899013132CE522524AD6D5864DC7C43C07D4EB911000EE856613E81A2B970A62219E03CC698E900172071B9F49F539C94EECF7B8736EE09CFEE8A70BA28CC824951769B286E21B889B408D20E9EEE2A57E93E0CFFCE13E3093224880C88EC85C6B253363B24BCD2CCA07129487B2552240BC7C99C3469521F171065D3F14DC9F02E282DC03185849325A",
+    "identity_type": "private",
+    "iv": "55654AA16120C9192CF4251DB48F6811",
+    "key_seed": "87EAA9BF3F195F050804C1E9CC5A29E15FA3D409EE515096E4AB412F341F63EC",
+    "metadata_key": "25C515A0D455F2EADF60C5CFD02F5704",
+    "section_mic_hmac_key": "0B106484613F91290A8AF8552F4FE3E517AB03AD99C7B49884E75E13D6A2F03D",
+    "section_salt": "EE856613E81A2B970A62219E03CC698E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "C83B117035EA70F9B5EE8514818D9563",
+    "aes_key": "5786A3D45C88BC5BF15E63BEABECC7DD",
+    "data_elements": [
+      {
+        "contents": "96DFAF82E5E8",
+        "de_type": 722
+      },
+      {
+        "contents": "1A52EE0785ED4F5E",
+        "de_type": 529
+      },
+      {
+        "contents": "4070E0708BEB0EC5715AE4BBC7614AE65D6EC5",
+        "de_type": 220
+      },
+      {
+        "contents": "078FDF57A9D79648DF0C6AE6650D3745B4E5AB8F4230328BFCFD2CFDE8",
+        "de_type": 534
+      },
+      {
+        "contents": "2A683899E3C29BE4296CD5E63F156DD06650B98B6C",
+        "de_type": 434
+      }
+    ],
+    "encoded_section": "999013C17A273FC6F3CC1726484BB95C107A5A91100087114931992E6A90DA25ECA40CAA7FA090028868628BFA23AA55C7CE84DC579C73667AE77FD0519B69DD4D27F5F7E274C52807FA63E8BD0646F5317F7109770240A53B3EE772E019E226051DFD5274D641EBCBD1CD122A2222FA5769A2DB47B0C351AFF6F70394D3D39472981534D00428DB1ED731882A0D746990A730B5BD00A15E0729",
+    "identity_type": "trusted",
+    "iv": "F9A836CAA147035106E7454E9DD33840",
+    "key_seed": "CCA2DEE077D57B7BD51A23F80E6E2B4E8CF22B489B31D50DFC0E2C8A51323DEB",
+    "metadata_key": "2DB7D7E9F6C9CC9ADB3CDA79F1A17A7D",
+    "section_mic_hmac_key": "0C0C3FBB7B4382A1965F1A0D21B0B76C80E9F5311D048B80C6279E53A9E59F0F",
+    "section_salt": "87114931992E6A90DA25ECA40CAA7FA0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "CB188E83DDB89D62C114F1F1360015DF",
+    "aes_key": "7BE45751AD3A8B7E49BE27F2D6247688",
+    "data_elements": [
+      {
+        "contents": "560C374E10F3B1004D6BDA",
+        "de_type": 930
+      }
+    ],
+    "encoded_section": "459013537088C101C2FB104B6D3769B2211B1A9110005A675076A273B1935CA8836A8F568EBC90040DDCEEB9121864F9364571A4765FF4B14ABC63F8816880AFAAE4DD3CACCE",
+    "identity_type": "provisioned",
+    "iv": "494F76CEC4C372BA61E09E832CA023D7",
+    "key_seed": "A6DB88D2495FD0F4DA2DDE97BFCF5799017DD7BFC5BB1AF9FB92B365D4690335",
+    "metadata_key": "45C398B6E4E8B0A5540E19300C0913E4",
+    "section_mic_hmac_key": "28FC3EAEEBD68AA836A746C2BBF26DE3ECB6AB774440232E986203C9D0F1DC77",
+    "section_salt": "5A675076A273B1935CA8836A8F568EBC"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E2F803555E499AB4ADD6E1BE05823C79",
+    "aes_key": "5B23E3C06BE7BC3F4ED4E25348249AB1",
+    "data_elements": [
+      {
+        "contents": "DCAEF3A98B4FC0",
+        "de_type": 539
+      },
+      {
+        "contents": "D4D1",
+        "de_type": 417
+      },
+      {
+        "contents": "CC7A7E6C0801E825F2CF606643C8B4E1",
+        "de_type": 96
+      },
+      {
+        "contents": "C3695CBF18E06D255425E2210E6A0072109062A4883EB67E",
+        "de_type": 553
+      },
+      {
+        "contents": "B426A715DABAF6CDE325699E12F3488EC0B0AD4CC23BBE641DEE",
+        "de_type": 334
+      }
+    ],
+    "encoded_section": "9090137453B44CAD941E40F0B10F59070543CA9110006ABC65E438219705DA90C55843E268F590042B17F2F7D33F64EF416A906477269B3EB1E98B647E497F07BEEBE093B0439D16F08DA3AEDA48CB30BA4B1324432337A801C89DBA6DB87CB7335E34663B29B7AFC589B0B18EB82E60B39D235F1143458AD5A0D7CFD18CD4154F180F840BB20CAF7CA5F701428934279A",
+    "identity_type": "provisioned",
+    "iv": "0D1E0A06889E8F9607C7BFD987F16DCC",
+    "key_seed": "0442221D74C5BD01B2274C2A7C37280A192CC1D12208DC72B7DED708CAA5FCFA",
+    "metadata_key": "53DDA5FB2357A599D7650F5B3F3344EB",
+    "section_mic_hmac_key": "D56A4747E6404C01FFE0BCD9F85B7D99B07046CFDF5F6B9330F09161AD207FF5",
+    "section_salt": "6ABC65E438219705DA90C55843E268F5"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4B5EA533159CE934C52A8AED1C7FA66D",
+    "aes_key": "6979C3C75DF7004EE8EB62C5AFD4EB6B",
+    "data_elements": [
+      {
+        "contents": "4E3FB80E",
+        "de_type": 151
+      },
+      {
+        "contents": "4E637AC7ECFB76369C9B878CEA3EEB802A",
+        "de_type": 105
+      },
+      {
+        "contents": "34A2A98FE7C7EE",
+        "de_type": 134
+      },
+      {
+        "contents": "698C29A5FB482A7ED59214E49F2C2295F8",
+        "de_type": 992
+      },
+      {
+        "contents": "09B28A3CA96A72",
+        "de_type": 1
+      }
+    ],
+    "encoded_section": "7790134C59AE20A1D6653BEBD70DC858E3D81E911000D0329D85697985F6E05E42949541149690043EE28E5F836FC134AE452135DBE0EF28E3C8B01718233AAC3699D43C79AD0FF0FD315FFCBC70477A534EE60C7D0006B6B0098838A7A33E2C2D240CB7A38E5340268EA91D9A9A017B8499F5E4B5218F9D",
+    "identity_type": "provisioned",
+    "iv": "3356ED13FC96C65324E87673693A1432",
+    "key_seed": "8EC14F57AE7137067103789D1C2CC872D5F784DB8CFA491CA57D6EED842185F1",
+    "metadata_key": "969E204773BA54E9F873D6EB28624AE9",
+    "section_mic_hmac_key": "B502F11F87DAFE0E3700EF8AB8AD420D74DE34FE550E300E899D850C4DF5EC04",
+    "section_salt": "D0329D85697985F6E05E429495411496"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "17A088DCDAF83A58AF2753313613B039",
+    "aes_key": "1F2E0EE3496322D7D8D365E67EA1A0B9",
+    "data_elements": [
+      {
+        "contents": "62DD2615146476EDDBDA10A1D1F2FCC03BD164C53AFF75DE",
+        "de_type": 144
+      }
+    ],
+    "encoded_section": "529013C7B81E1AE9557999FD71E2ECE5F7663F911000749DC9438016B9B31672E361489B94D29002F0D3FDD1FB26395746C6E8145821FEF4DE853AF48008677E47057EA33AEAE5AFDD8A6815A57B9A5B58625A",
+    "identity_type": "trusted",
+    "iv": "DA09A3AA5D1AACBA826AFB2E549BFC80",
+    "key_seed": "EFB6CA23E03746A98605BBC2B163B08507D83D86AAFF789D08CA6DB1225F7D72",
+    "metadata_key": "E590519575ACD07B7CA73CE1A80E30CE",
+    "section_mic_hmac_key": "4241619E81FC51B75394A479F56F007762E3CEDC5722CA93375EC5B3FFA44124",
+    "section_salt": "749DC9438016B9B31672E361489B94D2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9A580D81461EAADF79556203CA735C95",
+    "aes_key": "4045DA22088C072BF80A09B8C2BCE1F6",
+    "data_elements": [
+      {
+        "contents": "FEBDF44538E9E70781B5B0E283DF4C13BAB1E49B6DC8242EDBEEA1",
+        "de_type": 68
+      },
+      {
+        "contents": "350B4FB802500AFB0D769352F8A6B9DFCEC2BA61",
+        "de_type": 318
+      },
+      {
+        "contents": "A9ABA29AA6E72DEB67C8E824171876C26CD1",
+        "de_type": 379
+      },
+      {
+        "contents": "3D84",
+        "de_type": 212
+      },
+      {
+        "contents": "DFBA842E5EC56C53390D21A019801B6F0D",
+        "de_type": 431
+      }
+    ],
+    "encoded_section": "99901366302C66D9F00F5C3C65DEF7C64F0BE1911000CA70480E790B6FA473C74E3A4E003D269002D07BC8320C3B78FDEE1D1F68E4DCA09AE32B16573455513DEA228C33E7926D26BDCCA638518BF9CB2FD36566D9DB0D6ACD64D0A6F8B2B5EE6F3DB463FF3FDDC485D5BCAEC66F1E982ECC008D3A45A36CE1F81049F95AD6BB6309326428220E8E59EEBAF4AE38A5863886056B57E25D682A7E",
+    "identity_type": "trusted",
+    "iv": "D70E519F3DA3F2668D9F8AABB50810BA",
+    "key_seed": "AFD5C0D98921E1D241A7906F68D8A04F3AD3E81B1A0550D35EE4C6C8DB57DDFF",
+    "metadata_key": "DC273523F44A001AFA17F0F4FFE6057A",
+    "section_mic_hmac_key": "DD78AFB4D983C325EFDE1FE20D9BC988335CF2C9B37A75AB9A519DBF0776E6E9",
+    "section_salt": "CA70480E790B6FA473C74E3A4E003D26"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5033210306BA9AB77E2D3EA6B2A88AEE",
+    "aes_key": "58ABC0465E84B9EC15FCD58D2E34A481",
+    "data_elements": [
+      {
+        "contents": "D9485F980546BB684977FEE260590F8C94F3DBC5A4D5ABAF3CA68FE902C7",
+        "de_type": 891
+      },
+      {
+        "contents": "CEE448E265CD2D5B240D0389A1D19CC70C39",
+        "de_type": 962
+      }
+    ],
+    "encoded_section": "6D9013975E455A5A9DE86D218DF7B84D5B1D549110001B4A179B3A4048FDA263D917D21145EF9001B30134E7DF109B194C1342F0B49E2769BBDA370C5D76748EB77A583F75248CDD1A20CAC314C29429B88FB99979BE4B468B6A9EA4DBF9C3CED9AFBE95FE44E4761A501D8505BF",
+    "identity_type": "private",
+    "iv": "9DDE36E1B51C439ECB53A803239075B4",
+    "key_seed": "FBBA5082E277FF50246090C3607AE6B59192F350244A4E1B38F1F737E1297AAC",
+    "metadata_key": "078882BA8177D36A63C48E4FB81487D0",
+    "section_mic_hmac_key": "73B3E2977B6A0722AE497D1F9B52ECB47BF0AD7B0C53C91F66F27F0C4464B4BE",
+    "section_salt": "1B4A179B3A4048FDA263D917D21145EF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "24560C643ACF024603DBC6745F73BBFD",
+    "aes_key": "96648935E3EA6534930CCEF9FF46157C",
+    "data_elements": [
+      {
+        "contents": "E9F020541040899D",
+        "de_type": 609
+      },
+      {
+        "contents": "192E2705B3ED51257DE39187071CBE006F59FE797A380C690B7361",
+        "de_type": 884
+      },
+      {
+        "contents": "EA",
+        "de_type": 284
+      }
+    ],
+    "encoded_section": "6490130799AC2E188C075DE6FAFFFEB23E085F91100050AC82B4D7F3A6BBC2114DA1F733ACF2900469467DF82CC82A6C8D02AD6C485973D1DE960AEC200EC2925C15CC0AF18C59EF8A21F16C6247F07032029F42F727AAE4F0C0A02E8B92824556A6588409",
+    "identity_type": "provisioned",
+    "iv": "C369FA65B5EB270813A60DD29E99F52C",
+    "key_seed": "75B90F739FC2B807804A7D201D758B8F2CFA5023BC95546EB70AF106B3EFD2AF",
+    "metadata_key": "0FDB27FCE4A6AEBD5CF6440316B299E5",
+    "section_mic_hmac_key": "455CE9502152FC7EB6BB721DA5BD1095DB8A8581F1B3F893B5D5FDDF98DCDF55",
+    "section_salt": "50AC82B4D7F3A6BBC2114DA1F733ACF2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F18489FDCD6520D71418C0A0E7636910",
+    "aes_key": "C6A5270EE01BAD049F2823A3FB9B3B60",
+    "data_elements": [],
+    "encoded_section": "379013450221F90903BE11C937E8F2518999B691100078488DBF62F4D446B6213AB3AFD286AF9001D1AF3AF9D2172A123E854A9564EE1A80",
+    "identity_type": "private",
+    "iv": "2C15E2EDEABE3742E25A9EC8E8288C48",
+    "key_seed": "EFDC60A5D965B43E0181ACDEF1073D8C9CAEA8EB1133CE5538D17D00987411B5",
+    "metadata_key": "BFD25D2E0822E743638D21199C657DE0",
+    "section_mic_hmac_key": "12F2F8446F6E90B917D3453DD1543FECD35B7E35D16FE8B966E95A50221FCB88",
+    "section_salt": "78488DBF62F4D446B6213AB3AFD286AF"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "DD8077D99C25E5AD861B96702256EF3B",
+    "aes_key": "4C007FBF6A6921EF95877D207A61EE5B",
+    "data_elements": [
+      {
+        "contents": "78B194E3A0895DC7",
+        "de_type": 835
+      },
+      {
+        "contents": "EFFC63F96EB172632387FB9B0AAAE82514388876D62D1B4C03",
+        "de_type": 419
+      },
+      {
+        "contents": "00945CF6A5A4",
+        "de_type": 585
+      }
+    ],
+    "encoded_section": "679013E41F6BF179F1F1AE413826061C017577911000EFB6DBDE8071C59CD70D626D43FECFE990013F29BDE37417ED94EC2EE33631A7B72D39ECB033BD9B6E12D923E007A716DC8A48BD159DCF6CB77C304394CFD2E198D43DA39B0E37870FB6F5AE1CE44FCE153A",
+    "identity_type": "private",
+    "iv": "3DC0231F80F3F2B132B09BDE9CC40759",
+    "key_seed": "7562411D7931D839A229013E52C55F4DC5A3EEFF1117E408AFA3F4AC426F10C5",
+    "metadata_key": "ED09172ECDC74F027C0AA0E418BB4AA7",
+    "section_mic_hmac_key": "CD75F9BE138CDC579730D22DF33B653D0250CC0747B1702A4878DE8302DB7C44",
+    "section_salt": "EFB6DBDE8071C59CD70D626D43FECFE9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A288ED7E1B68D033C3F4690420B90D7C",
+    "aes_key": "675CED7A7336FEF07E17C17F959EA288",
+    "data_elements": [],
+    "encoded_section": "37901300926ED675109AF07704A987C309566591100015847DEC4B348DCCCA189D05D7D5174C90019395E4BDFD6A6B7A68215CE58AF169AF",
+    "identity_type": "private",
+    "iv": "F2B76940B657CD501B1B9D188E69B582",
+    "key_seed": "C3D8A38ECF7392E4879D99A8C9E21759E23B95860D04E10C33D0F4FC988D219C",
+    "metadata_key": "B8A8C3055E2FDD6D00A905324E758F5A",
+    "section_mic_hmac_key": "C6F39BC5C3EFF0F8F09FF1FB23728F5DB138B208032B91EDDCC2888C1405647E",
+    "section_salt": "15847DEC4B348DCCCA189D05D7D5174C"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "623E52E555A5421C80C40236F560973B",
+    "aes_key": "201A7FC4CF51C7C389EB70B4528F0A4F",
+    "data_elements": [
+      {
+        "contents": "E696D48DEBC719E0BC6B9BFAA01B37363F213EA19B2508E3F65CB81A44",
+        "de_type": 776
+      },
+      {
+        "contents": "F6A3106D966E9E033943DA151E9D520B",
+        "de_type": 699
+      },
+      {
+        "contents": "3822C8B9",
+        "de_type": 473
+      },
+      {
+        "contents": "286476C80CE4C19E40D7F7096A30B4E1AAB2F1AF07",
+        "de_type": 964
+      },
+      {
+        "contents": "801E59E8",
+        "de_type": 196
+      }
+    ],
+    "encoded_section": "9090131E9A577C252A33B78982AB45DC475FF091100025F94B814B7033833230BB2CD9C0132A90043C21957E1606423DB86A914AC7B2451502B5206DD412CBAA364FE638AAA8DF0C9AC173462492AB53726A000223D6F74047E9D784B4377D0DC5930404A4C4AE0E3598CCAF70608D9CA0973A8D71C683C163EA16A5D9944F24A510DA586058A498C61CDD9A278D970C82",
+    "identity_type": "provisioned",
+    "iv": "402E1DF4ABC0651C160A910297E96D42",
+    "key_seed": "755AE4BA0D148487644F6661D42583CC5710CBC0C35A1F0CA1013B33378665EE",
+    "metadata_key": "2C5769C63A6C4DEF4DB33A0FA7C96D5B",
+    "section_mic_hmac_key": "928C6F5D55ECE19FD96C26CCB0F30481962702DB2E33218E05B5849057BF0221",
+    "section_salt": "25F94B814B7033833230BB2CD9C0132A"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "BD9442F4DA1F1E45298431632FBCA1BA",
+    "aes_key": "C86D801FF7EE0765384862985B3A8FFF",
+    "data_elements": [
+      {
+        "contents": "940AF7EFA6B964475032932CA2C94F6455CAE937032FE323D9A1EBBFD2",
+        "de_type": 584
+      },
+      {
+        "contents": "9A84386F3D32F5F816B255",
+        "de_type": 722
+      },
+      {
+        "contents": "FA216768C3D6FE14E93C86AF8A45CF2A05BBA5",
+        "de_type": 722
+      }
+    ],
+    "encoded_section": "7B901306526801CFB4D0DCB662F3B77BBF1539911000847811E9F14841A70D3129366BC733F39001BDA5621D9D26B5F59BF25279EF7A6A4FC7CA64AFC8F15B42B765D498DACFC4087145C2E8D580B3DCF2F9B3F6E8CF495CE47BD4DF868479F3CA530D0A24B0998A23AF4DCBFE6B6E432FC7EA66491240CE29EDBA2B",
+    "identity_type": "private",
+    "iv": "AD35B9BB2AD04BFFAD8A635D7DCB26F4",
+    "key_seed": "C10655F54E87123FC6B537E38DA1212E290613C97285C4D28BE15593E506919A",
+    "metadata_key": "487166EB4E0DA027A655BD7D5D952894",
+    "section_mic_hmac_key": "23B54AE40FE38715E903223F80F2149346D9D34E2A24414ABD7B3933A4CB4337",
+    "section_salt": "847811E9F14841A70D3129366BC733F3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "95A1E9359B39032DFD81BFBEAFD092F8",
+    "aes_key": "C4A0945C3A1352D1B8D62904D7F9EE9A",
+    "data_elements": [
+      {
+        "contents": "DDB9062EEE56D10231CF606B139CB1E2AB77BE00F7F12B9E85358111",
+        "de_type": 939
+      },
+      {
+        "contents": "344F840369",
+        "de_type": 67
+      },
+      {
+        "contents": "09DF9B7F9F0CA5708F2D2EAA28",
+        "de_type": 807
+      },
+      {
+        "contents": "90025E283882C5255D19FFB273FBF7AE",
+        "de_type": 115
+      },
+      {
+        "contents": "2D268EF42716C19253E88FCC196D731E774E7472F16D5C",
+        "de_type": 541
+      }
+    ],
+    "encoded_section": "9990131968FC75E9DB7C11135F77963495199A911000B2A08BBED54FECC10AC797794F3EC4309002CE86072EC393E15DF60923BFF3977190C76EB76737DA68A858A1A21B956681334E67CAA59B11E0186BE23474A30F87138D238C37608F498F56B70548D984E57959B5AE73731F4F5E20AD34B80909739F891A5E493667E1C6B316F4E0CE6BDE3D397449AD77F1653B1A3E2C43B5ED711387A8",
+    "identity_type": "trusted",
+    "iv": "6B19CF9740AE6EB6EBD37FA0CB3D3902",
+    "key_seed": "F87D44A4D5B28B4BA5D73383B98268E3114BF761756D000E85274BAC3032AE9C",
+    "metadata_key": "17DFA18739929CE57D4B46B0BC5B0E66",
+    "section_mic_hmac_key": "274695928C408DA10D19DC3DB46FA78F29D51CB0DDFE304FC5182C785AA21F4A",
+    "section_salt": "B2A08BBED54FECC10AC797794F3EC430"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0CBE6D655846706C41AA38BA89A49466",
+    "aes_key": "D1217535D1A28CA4A79A5D361D10381A",
+    "data_elements": [
+      {
+        "contents": "715FD19363404B5B4BF8814D7D6F988BE275D43E4C935E",
+        "de_type": 257
+      },
+      {
+        "contents": "5FECCFADB93B95ECC6E8EDE452FA15B0FD1A96A67A9FAE898A15810CC6",
+        "de_type": 255
+      },
+      {
+        "contents": "40BE80BAFB55E63E12B9F5D5F15E7417DE",
+        "de_type": 924
+      },
+      {
+        "contents": "3D878AB8B130EE71B7A74387CA7AF3466AAF2F14",
+        "de_type": 259
+      },
+      {
+        "contents": "1D6A8D083172AE3E8702D0EE72E9E4D287A4D5E38C3A7E1495E401CCE3BF",
+        "de_type": 539
+      }
+    ],
+    "encoded_section": "BD90134CC217C0FBD454E2D3D0949340E43A9D911000EE29E650BBB7FBD251916DF635D491D290040E58986C5A7EAF8ABC13233D237727F371CA25E439F4EC85113F22A1976C74DEBF832FDEF351800FE7F2905DE22D101751999D5B7DE13736E3E77A2F2D07023F8E8FFCD09D1AF91F1688047ABE64023E386EB8883400886CB44B5FE43D6F93CE97A54AA75D277798754B4F1B5F3022095772463B1D354C89E943EBD608C6120B65DA030FFC13F78298E9BBAAFC12B24896A11A8F6F56",
+    "identity_type": "provisioned",
+    "iv": "BBCA152795FB88152D57F449CA9603B1",
+    "key_seed": "6F2DEADD30B4CCA84A011C445661F91CC6FF5786B49AE3F9154CC5841FD56555",
+    "metadata_key": "35D37C707ECA65275536D1236D349205",
+    "section_mic_hmac_key": "D83FE1496B06CD24079B117B21F94EF6603338EA01D295FFE274131046071F58",
+    "section_salt": "EE29E650BBB7FBD251916DF635D491D2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0F459E925172A519DD2828299C75FE2B",
+    "aes_key": "1B1249ED7D76FE4886B6E526C6C9282E",
+    "data_elements": [
+      {
+        "contents": "308DE47A8F42DEB39111A2096C20F7356B9839FE3AABA7",
+        "de_type": 399
+      }
+    ],
+    "encoded_section": "51901322B7BBBF38950918837234007AA875FF911000264878B5796B1E75ADFE1ED50D18D19F9001049CA71F9B829E07EA5B5F30E7C9B2BAEC9D27BC5038EAD21DF880707BFFD71D641B82DAB89CAEFEEE01",
+    "identity_type": "private",
+    "iv": "AF47AAA871EB40799888E96730D541A9",
+    "key_seed": "EF12CF54E077C01AD5E5B289415D4AFFA7F2221BADF1D898E6F18629A0F1D91F",
+    "metadata_key": "77C71712C8591629DADB5FAEC758CDF9",
+    "section_mic_hmac_key": "8EFA1E5AD01997162F01D27CED8DD1A3EE69A32B54C6BDA3E46952F49E418DE0",
+    "section_salt": "264878B5796B1E75ADFE1ED50D18D19F"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3A6690DC2DDD695AA5A9075341B084EC",
+    "aes_key": "34DFB2535A916D318BAB185BF9A35783",
+    "data_elements": [
+      {
+        "contents": "F06FA2",
+        "de_type": 506
+      },
+      {
+        "contents": "D4CB2D400A28",
+        "de_type": 335
+      },
+      {
+        "contents": "6DCEC9E8A721AC77680D2F1662",
+        "de_type": 831
+      },
+      {
+        "contents": "D17C7919F930699E",
+        "de_type": 762
+      }
+    ],
+    "encoded_section": "619013C7CFFF40F84A407D614398DA241E9E4D911000D32C0F73924D558D708BEBB99A3EB0609002E22E4C8ADB99837CC58EC7E97001719A89E37F9B92E37168434E56311EBF0E5EBB3F9EE662EE2DFE006FDF44EE75196FA08CC8CC3D33B6CF236F",
+    "identity_type": "trusted",
+    "iv": "04F8366E46600D1C30CD191211A750DE",
+    "key_seed": "647DB8957DA90BA5FF55CF490C364BAA8C056638C1BD1D3D5F70302C92CD3A2A",
+    "metadata_key": "CD662BBD791D7F8C1E30395AF98E5D04",
+    "section_mic_hmac_key": "1A53E143075E92DE50221DF59303E82CB35533DD879EBFED762B353AFDBA1B5A",
+    "section_salt": "D32C0F73924D558D708BEBB99A3EB060"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6D431878AF6AC725647D2A3932D48049",
+    "aes_key": "05EE18F99215AD48B14552410229A4BF",
+    "data_elements": [],
+    "encoded_section": "37901341A817093CF4C8AAE012B9A9F6B79BB6911000290931A59120D1286A389550AAB835209002C91C9ADD7B5DC4E51AC8DAA513E4A209",
+    "identity_type": "trusted",
+    "iv": "4713233E1B8526CBDF59EBDAF4DF2A9F",
+    "key_seed": "2B25BBCB002C26DEBDAFF430909946F7B022041043BFC5232AFB086B348F1F42",
+    "metadata_key": "35BCFCCEEE33537EEDF1853BF0378767",
+    "section_mic_hmac_key": "0B1B7CEC50A244D8A31571BD3E1CCEDB22981CFE1AF50CA57626C072F9CD14C7",
+    "section_salt": "290931A59120D1286A389550AAB83520"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "07510B91F77CAE102F146FC8BE46C659",
+    "aes_key": "779622B3641D512BDEDF2AE0650BC794",
+    "data_elements": [],
+    "encoded_section": "379013993CC70660FF52F2412FFC739C7453679110000FD5F8913D590B72580DE20C140E88809002190029DE26AE807D727B820A4AF588A4",
+    "identity_type": "trusted",
+    "iv": "91B96C70926C3FB16CE4CAFE91CD827B",
+    "key_seed": "4F81B6AD805AC41891E439D788B1D5C1FD33F97457AA12D6CA697E328584A24A",
+    "metadata_key": "9F62C8E787A9B44783A738A566E1FE23",
+    "section_mic_hmac_key": "87ADAA31C70470F253F408E88D004DBC4B99B7BD22C0159DF93A1C268BB84B45",
+    "section_salt": "0FD5F8913D590B72580DE20C140E8880"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7C1B9BDF63664F7A78C8FF842A3E5BE5",
+    "aes_key": "B14C39586FEC0DA3E623173EDF55E246",
+    "data_elements": [
+      {
+        "contents": "68EB2518D2D2DC509CD7",
+        "de_type": 364
+      },
+      {
+        "contents": "A78A0427BF54D74DC902EC",
+        "de_type": 1000
+      },
+      {
+        "contents": "F234",
+        "de_type": 882
+      },
+      {
+        "contents": "E7",
+        "de_type": 916
+      }
+    ],
+    "encoded_section": "5B90137644015B5C1628811212B508B4EF15829110003826BEB04A106A0C2B31C1EDC4B1A3389002C812F2014CFFBE215C1E0E1B040ABE8141945625C65300B5D2BF5564AF2E364C119C51EDAD83D99F339C21E6DE0F64C6B9F15C2A",
+    "identity_type": "trusted",
+    "iv": "1A7EEEE592C2E95079FCC1C2DB5B3C87",
+    "key_seed": "2F9AD59747B7A30E2D1D22E49F0A80F5FF8BAD5A540E65970CF0A9E9158A9CC3",
+    "metadata_key": "178A25DC5E2BFB2F016763C039CAA9DA",
+    "section_mic_hmac_key": "98B93838BF427995042BF3FEBE6F53DE0BB0A01C400E80E6215E16ED3C8BD32B",
+    "section_salt": "3826BEB04A106A0C2B31C1EDC4B1A338"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "DFBE483FF56C948B67B543FA3C3B6810",
+    "aes_key": "0546270E29B03208CCF711096350B437",
+    "data_elements": [
+      {
+        "contents": "4938A69A3826",
+        "de_type": 976
+      },
+      {
+        "contents": "AD51E90DCE",
+        "de_type": 985
+      },
+      {
+        "contents": "50D528C99515",
+        "de_type": 915
+      }
+    ],
+    "encoded_section": "5190130C8A041604CB78FBD9BA86C48BDA6F5E9110001BF3E6C8ED3648CAAB9137B09117BF8E9001ED1A785EB628A70EBA116E5DB97F8D30605A40CC18B0D7493863758CD712B26F782CB123E25ACD13FBA1",
+    "identity_type": "private",
+    "iv": "8E27D6BD840DF5E03F5D9CF83E10A51F",
+    "key_seed": "BB595D62CC6E3A83C3CEB9FFC054E1EED6F7665F233FFE054DD17F93FB2DCB6A",
+    "metadata_key": "66E246479EF32D514A6203715F97CCA6",
+    "section_mic_hmac_key": "151D73D770876023679FB2AF853C5AC6180690F91A5464A8105025F6E963BF43",
+    "section_salt": "1BF3E6C8ED3648CAAB9137B09117BF8E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "993426DE3C76F95E6AE6EAF16EE882B1",
+    "aes_key": "23FF6D33822767F47C6EA2E7A3659F5A",
+    "data_elements": [
+      {
+        "contents": "9F4B62",
+        "de_type": 40
+      },
+      {
+        "contents": "DD75CCA8B6EE91CA96B0F660DA7AEA0C787B6E4DD0BB8C0D68BF63",
+        "de_type": 250
+      }
+    ],
+    "encoded_section": "5A901310EAAF5CC6F82AED3F7018345C326FED91100094461B35D320D920CFE92855684DC0889002752E76A47C2FFDC9C86586181F3AD4DEF62B1F4AD8AB6FD7832F108CA27D96405ED31670CE51A9582C2005E275A97EF3936F6E",
+    "identity_type": "trusted",
+    "iv": "908A568A36D18A8151DB2E23FEA891A6",
+    "key_seed": "891B77B866BC1361E8A953BF5776A9AEB8CE7AA8B34C48D0FD44EAE0C08137F0",
+    "metadata_key": "F7CE950ABACD4CC08649F5D72141AFAE",
+    "section_mic_hmac_key": "D948570C35BBC468884A3C9BF04ADB86D30132BAE6F39F4C6F6E4060D788AF43",
+    "section_salt": "94461B35D320D920CFE92855684DC088"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7EA92251924B66DF513A5012A6C6D568",
+    "aes_key": "7AF5D9EB8C289F13007A8024AA3E0954",
+    "data_elements": [
+      {
+        "contents": "1D5E12A67C6225BD455705E9C6D5AB253A",
+        "de_type": 56
+      }
+    ],
+    "encoded_section": "4A90130C02BBD5A0B4584C65E3B7D88A9EC7CA911000DD5511FCD7D808F50FF0080A6A41B3F99002965B9AA07C06770BDB145D5CC2C5D535D99E30DFD043BD92E9A89D29A0699B5F09A200",
+    "identity_type": "trusted",
+    "iv": "3A2CB91A70F515B1F1B9290FB1F0809E",
+    "key_seed": "25B553E985E762AA9F3B03F4B89BAC1FD0A3E9F7F9CCF586FF47F3F1E83DAD34",
+    "metadata_key": "980DE36843A6418160C53B68085FDBF7",
+    "section_mic_hmac_key": "D674880D748C81B5C248BF6EC8608323A5EE2F6E916E5AD2C24823C569492A0E",
+    "section_salt": "DD5511FCD7D808F50FF0080A6A41B3F9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E84BF8A1E7FBDA1FCAB241D541A4B647",
+    "aes_key": "5B21560F602267F7E7DB688C69B10A5E",
+    "data_elements": [
+      {
+        "contents": "BBD418E93E17C83B5AF5E67F2203094C",
+        "de_type": 667
+      },
+      {
+        "contents": "009A5DA2492D6E5DD01DED55B7A9BE695A",
+        "de_type": 849
+      },
+      {
+        "contents": "FB321D91",
+        "de_type": 529
+      },
+      {
+        "contents": "6D1B46C2935B79287C75EB347FEE52DD196F03B98188DFF4",
+        "de_type": 971
+      },
+      {
+        "contents": "D9299E84D9B7E84D3682BA",
+        "de_type": 68
+      }
+    ],
+    "encoded_section": "8D9013F0B3089838810E7704B15BD78D08A685911000295591FB4D665C4B3388BFAAF769AFD09004E208729A8980B56196049A6C2B389E7EEFDC1842D4B0738B62C6C9E4A00D7C998A329B13A54F7741EFD8C22B34E996ECAB49B5B3D8A549EFA1EFBABCC4B90C45D434DDDA3C0A19D2BFEAEEF1103BC0D5925BC692A04C1E7A7BF76EE82785D75507448921F48F",
+    "identity_type": "provisioned",
+    "iv": "960F4158B1AEBCA6DB066F0B48984889",
+    "key_seed": "9BA51AB24D27BEF6575942CBE58DE2795F2D6A9C67EBBA56F938C23C15531A48",
+    "metadata_key": "A174838932FD40B5E30FCCA95BC31E0F",
+    "section_mic_hmac_key": "2680C01C16E0EFEEE4C602D9AAAB80FE3B83D8F85A2CE1D52EBCC2C0A48DAB09",
+    "section_salt": "295591FB4D665C4B3388BFAAF769AFD0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0D89ECCEEE97F4AE796752548C4477B0",
+    "aes_key": "CB51E81286DECD8DABC11341AAF565E5",
+    "data_elements": [
+      {
+        "contents": "7B3636268051172202DBCB2BEF58FFB325",
+        "de_type": 125
+      },
+      {
+        "contents": "6BE1759110F2DE04CA9F033B49E2E5ADCEE66BC5",
+        "de_type": 383
+      }
+    ],
+    "encoded_section": "619013C9EBFF7BA86B7D87A821163495CD75AF91100063ECCD115CEE939180370ABB6AADB8E09004B8E73E111A704D49A74051C8D5A88261C3BBC9C79500E9F54203007442BB22C0C23AE735D4B462D85A6B31E0A77015E386C713DEFCC331C87688",
+    "identity_type": "provisioned",
+    "iv": "40553B60D6076492812FE60B01CA6804",
+    "key_seed": "26CB810DCB795E439A93DEEE6BB911B1F636B556FD8C53F23459F6302275C7C8",
+    "metadata_key": "8832629DC35BBB214C9B90ED4AC52608",
+    "section_mic_hmac_key": "107F6753902D9632AD49A70B0F9872D374E15B4FC9ACD9A4DD077550E73787C0",
+    "section_salt": "63ECCD115CEE939180370ABB6AADB8E0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8980475911C04D64CB9BBBE789A8ED79",
+    "aes_key": "8F48B997309C0264316824863B46A5E5",
+    "data_elements": [
+      {
+        "contents": "",
+        "de_type": 955
+      },
+      {
+        "contents": "85F677EB8010B1E049BBE2750E744709740338",
+        "de_type": 849
+      },
+      {
+        "contents": "545399ECE6558120CAC6843E616D2A66C625B46CAF51",
+        "de_type": 175
+      }
+    ],
+    "encoded_section": "699013F558FE32291733B23028F005263532F19110003532D026D9F6B2293231174EF173744390028FBEF73FC61522088993E06CCEB4BBDEA63ACA01E37D68A8241A8BD29CE0C58A17D7C278B9AB5D1BCE16FBD9489B8BFC30AFA25A2042DB00F97BB0DF285544B6D66D",
+    "identity_type": "trusted",
+    "iv": "29D344C509673521133F5850EA86AF2E",
+    "key_seed": "F2EA3582730BDFE282331B42AE97121E21BDF182DBD69B91727A205BAA579037",
+    "metadata_key": "99E2FF341D58AB75D0127FDD2D425200",
+    "section_mic_hmac_key": "881AAE5C6151C026780977F62A81903441024E55B9F186791CC3E38B63AB6056",
+    "section_salt": "3532D026D9F6B2293231174EF1737443"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "3D35695472AF0B0EABB5D2C51648E491",
+    "aes_key": "FA32718DEE6BCF406BBF3ED62D576156",
+    "data_elements": [
+      {
+        "contents": "8CEEA14D",
+        "de_type": 890
+      }
+    ],
+    "encoded_section": "3E9013BEA8415E76EB477D7CC18D98804303C19110001EE74524224EF14F78BFFFECEE148AD8900257A6CAABEBAE9381D8760C36858DACC5C915E94E62BB4C",
+    "identity_type": "trusted",
+    "iv": "C4E5EB3B1C38A64D16F6D998AEEA72ED",
+    "key_seed": "5F46CCC0833C98CC451ADD9220D928E9CE89E58D26DC1A0A2E33764B39B9F870",
+    "metadata_key": "2D5B9A4F7AFD2191247BBA150037597C",
+    "section_mic_hmac_key": "7730037D7F614061B40B893A02995EB25A63E4EC8AAC72DD8B8CEF2B461F3BC5",
+    "section_salt": "1EE74524224EF14F78BFFFECEE148AD8"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A5ECCE03A7C2509BAA2AB1D6BE71E928",
+    "aes_key": "0B587FBC29C6D813154219CCE15116F5",
+    "data_elements": [
+      {
+        "contents": "DF191813F52A",
+        "de_type": 647
+      },
+      {
+        "contents": "725563C23F3804C841FDE67E6E51461F0F2DC9F840",
+        "de_type": 899
+      },
+      {
+        "contents": "1B5D86F0D9C956574F6A3A27C2044B10AB81A255377D7D8AA9",
+        "de_type": 364
+      },
+      {
+        "contents": "D63DA88FC2DBD10C8A92B0",
+        "de_type": 256
+      }
+    ],
+    "encoded_section": "829013AD8991F88073B5CA5DAFB2FE708649929110006B0F8560F8FFD0C6E71A028CDDE232F390010E56B36364E1D87122920F29C303A359319472A2B83A3FB385359CFF3F51E2C87F1ECD965F036D359DC840E1B104E530C8F35B796C2E72447468E7219900C8484FAC302632DA4A8F447CE411CAFFFACF26066F40CB9BBA739C8A36",
+    "identity_type": "private",
+    "iv": "00429B2681196B02A26C1C02684BB3ED",
+    "key_seed": "78060E15116E06B5825588FB3C02A33BF1FA963E58CE8DA6C99E7C70137FA362",
+    "metadata_key": "0ABCAA033AE39B19FB9D30501F5819B8",
+    "section_mic_hmac_key": "09CA0501CD4C4E1C040C4BC108ABB945485B06655D749FB7793D11139657FC89",
+    "section_salt": "6B0F8560F8FFD0C6E71A028CDDE232F3"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B60D3EADB0A155E05F9BBE78238857EA",
+    "aes_key": "6FEEE0BCCBDB7BC1D3082DDE80DCF582",
+    "data_elements": [
+      {
+        "contents": "AAD964BBFDF41816E109E9A6A9C2B9FFEB5B08C45E2039",
+        "de_type": 271
+      },
+      {
+        "contents": "27F1E36F467A1DF69F379F26AF8C26652BF1189B33D2860620AD",
+        "de_type": 724
+      },
+      {
+        "contents": "D77DB60BA95D50366DAF4E0B23",
+        "de_type": 329
+      },
+      {
+        "contents": "C1C4B4CAA02C898493DDF5B8C0159C199A3AC2E3A50C",
+        "de_type": 528
+      }
+    ],
+    "encoded_section": "9790131AEB7D53743A85CDDA3D06FD34E5D30B911000F3F0F371BA25F95A5604E8812C8E2D819001A09AB5DA90086A8CFB40E9C57E544CD80CE73710CB80D8A4AF0B284883866397C4E741F4F16EDC191CBEA93E8F9C8C94AD22DD699741F68704B6CEE74C61CC59B07FA970378357BE11F4DAAB1157C045AACCF979342D934D5A7154574C5FAC9C522D0F8228BAF6F82D5AB851CEADED82",
+    "identity_type": "private",
+    "iv": "411A5DB92AEFACD6A6B37B000586D0AC",
+    "key_seed": "A04AD3E70302B99AEF07906B2B762047B970EF8A200D1ED6CBD28476BD85A331",
+    "metadata_key": "A023B5E00CA83ADAA212B1D64A5D06A1",
+    "section_mic_hmac_key": "3C1DEF68478B281B581A8747F7D8A5B2ADF5FB49A495EF554110685F2B7DC5D2",
+    "section_salt": "F3F0F371BA25F95A5604E8812C8E2D81"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5661C7B50F7399E237F33E4766620EF6",
+    "aes_key": "386BA145F32F66CDAF5F1216248C4FBE",
+    "data_elements": [
+      {
+        "contents": "12C2775438394CAC486D9352543D4F28970AB925AE",
+        "de_type": 708
+      },
+      {
+        "contents": "08FD1092CCC12B09D300519B0CDC6401DD",
+        "de_type": 706
+      },
+      {
+        "contents": "618B6E2DF482703D2CE2C8DAF386B929F8DABEB0CB7B203EA0",
+        "de_type": 395
+      },
+      {
+        "contents": "84DA0F232629",
+        "de_type": 95
+      },
+      {
+        "contents": "D8EFB0C07BB7F632E268EAEECBFD5580EC1A5B0EF432C03DD861A5",
+        "de_type": 570
+      }
+    ],
+    "encoded_section": "A5901317309D406C29FEF9E2B0625DF0610CFC9110000B472B8FBFFC54950637585AFA22D5509004FF43D777C9F0350F5CC37D073CCE92BF1304DA2FA06451DA01A1E1741040FCF892BE87A46E3599ED878980B2618C7877DFD0CF1D805062677CE60BF8EF94376E283B17D6BFD2B3E47A14B183E0A8DA63E193F90FA0C5B3A5CF88274725414FDE243394B596BD72CFF6764A983AC46FFF3E66EE489B2C480F63AE1D2A6672",
+    "identity_type": "provisioned",
+    "iv": "BC345684E602976E5451D5F182330582",
+    "key_seed": "8FB21F7DA6D21B3C74FA79DA8B1D2C1C9F08C6D5D92A788EBFBE686CDA2363F7",
+    "metadata_key": "BD24EEB64110C56897A7526D714C1B9D",
+    "section_mic_hmac_key": "966F0302B8CB8BA4C588CC61A8C613212E5AB8AA530C3FDE9956F4675D188453",
+    "section_salt": "0B472B8FBFFC54950637585AFA22D550"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "E8AC69F87CD8D8E7AC003EB05319318C",
+    "aes_key": "4762F0AF4F9DBE629D3FA4E7F5EF69ED",
+    "data_elements": [
+      {
+        "contents": "584B9E443F799CF5A237ED1A90BC64A5347D4CF5B6F6",
+        "de_type": 700
+      }
+    ],
+    "encoded_section": "5090133125A01F41198B89512B2E6789D97CBC9110009DEEFC57FD2CC2691604CDB0037C5ADA90011ED9AEBD11CDF10F03FA38E223D5EEB742C6A1FE96FCA9D8E574B3AFC3B23E9009B06F25DE8FA9149C",
+    "identity_type": "private",
+    "iv": "9E710005012C74225422BD12E64463A3",
+    "key_seed": "9E86D7D3AA5528D0D529681C941AEC12D605868B4D8504402A0E871AF45C0E72",
+    "metadata_key": "68DC6B506A83F52A9376958D6528B4AD",
+    "section_mic_hmac_key": "877EE9AAB694D7C9CFE7A28C7EFC208047CD35B6F802E0A4804C4ADB877037E8",
+    "section_salt": "9DEEFC57FD2CC2691604CDB0037C5ADA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "661FCB47FA67B5328E1C07086CF91032",
+    "aes_key": "4A67204896566D0EA552408DEFE37A2B",
+    "data_elements": [
+      {
+        "contents": "C6DEE49C7944A768E00242ECD44129EAD078153F7F5128B3",
+        "de_type": 825
+      },
+      {
+        "contents": "7951",
+        "de_type": 998
+      },
+      {
+        "contents": "8779555409E658B45F916687961397D88E2484D4",
+        "de_type": 21
+      },
+      {
+        "contents": "",
+        "de_type": 289
+      },
+      {
+        "contents": "77246DD4865D6982E24BA67FAAF627E5BE8370FF91ED97F2EA97DF",
+        "de_type": 75
+      }
+    ],
+    "encoded_section": "8D9013DEECEA5F0980DFE5FF791C6B9D245BA3911000995E99F9B9E2BDD3036ED14D6904D6B19004056DB3CDC392922A66EE7CB5AB5966BC3C8970EC5DDEA9A88237BC7BBBCFB6F30FD944F7820BD45CF5D63334BD3A5F392CAAC8BFC8460F60C17CEC1CE0D56839FCC1F9D412E47BB2E7B4D1C49908ABEBE1DD7BFE99D4F1C09116B47DB746E5D67A015B46908A",
+    "identity_type": "provisioned",
+    "iv": "A37E4E6E61BEF6E55B309AE5C746F5AC",
+    "key_seed": "FA6D33246E99E41066ACFD0381D778B908A0E298D510508C8238161EB9FB57C9",
+    "metadata_key": "A9E99B3DB7BC2DC0861959FA9EABA87F",
+    "section_mic_hmac_key": "532A8F76A3BBE0711005A126C8A63A59A76702A80372D6AA08301BBEA5878019",
+    "section_salt": "995E99F9B9E2BDD3036ED14D6904D6B1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "6C1F3486166215C3D44981140FA00E7E",
+    "aes_key": "03D881B6A9D22AE7E5393547A0AF68BD",
+    "data_elements": [
+      {
+        "contents": "93C31033E2",
+        "de_type": 236
+      },
+      {
+        "contents": "8516881D4AE2302077E4226597AE397845E301EDC63AF3DBBF254F3D84",
+        "de_type": 350
+      }
+    ],
+    "encoded_section": "5F9013BF2225F68FCF6A2A9CF8F08DC7BDE6559110005A42B78DFE6ECD8495FD94FFC5218D9B90041E49AC53C6D6FB0CD1B59CE9AA0FC8B5E584EF2AC261B30354675A04BA9CDD34C665732CA32F8BF64CA7A9E44A8D1BA0EADE42A4C2C7CCE9",
+    "identity_type": "provisioned",
+    "iv": "738D2E87250EBA0133B45061C943FD51",
+    "key_seed": "8A91F91C0C7164722766182BEFE0C7676AE00DEF732D440FAC83E1C046BE96F8",
+    "metadata_key": "C373EBB8A7AE60D0845F6D3E3DB0F466",
+    "section_mic_hmac_key": "A67E1FCB4BE3644D1F8B613607C1AA671F9271C33E463569600D799F07B6D557",
+    "section_salt": "5A42B78DFE6ECD8495FD94FFC5218D9B"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A4F5D9BA01D3BE606F216EBAD7775C60",
+    "aes_key": "A9ED3079B7139B65069F9D03015280B3",
+    "data_elements": [],
+    "encoded_section": "3790130E4539939983645FFCD1D23BA41A0C7B911000EC62B07DEFAAD4E56591479BEFBE6224900422DC0DE0453B7C022EA9CA53AE356878",
+    "identity_type": "provisioned",
+    "iv": "4E934E8CD83DF483CA10D638290AA616",
+    "key_seed": "44C2B3506DCEB5A58E373F469167188F4F806E5543358C29CF8A3BCEC1DD5722",
+    "metadata_key": "D2B68CCA820BEEBBD9F539D605DF3DCA",
+    "section_mic_hmac_key": "8D76FBB29C7430E47F34C044AFFFEB3F3BDFFD257B8DD69AA4F5C3FBC9E8A923",
+    "section_salt": "EC62B07DEFAAD4E56591479BEFBE6224"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5F6FB995D7CC9770A1045F3A9F40CA81",
+    "aes_key": "242F9B8083541ED747A8BBDFCA8ECDA9",
+    "data_elements": [
+      {
+        "contents": "0F12B68A338AAFA90DE62513B994AB5F8F1494C7079FFDF1",
+        "de_type": 233
+      }
+    ],
+    "encoded_section": "529013E54379FA3C4A05471414BB4A36EBAB09911000145B207075C013CA154C2913861B1AA09002ABC9352B5B4386BFC54CDF208613E44078F3A071B32DD27ED6033ACC3FA4C1FD4F207FF131DC16D300F123",
+    "identity_type": "trusted",
+    "iv": "F98E66FF52AB84CFA560C55213C7F797",
+    "key_seed": "E36464273854858918F264C2C20998686BBC15865B7800265D4CA044BCEDAFA4",
+    "metadata_key": "64DE8C2420A8C35F2790555177AD2FB5",
+    "section_mic_hmac_key": "2B5B7C883EDE52F3F0CDBB631C818C4F979DF1A577716C1F2DC06F5F187B66BD",
+    "section_salt": "145B207075C013CA154C2913861B1AA0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F87B918636F2CCA6489523D683C7794A",
+    "aes_key": "42C6CC3C0F38EF9F9F90D66FCE0E7F2A",
+    "data_elements": [
+      {
+        "contents": "CA17436867B321AB43AEDC6B17B5F7E2B70F",
+        "de_type": 287
+      },
+      {
+        "contents": "3F3980E7C64BEDC344F09E8A38EC428699F46B4730",
+        "de_type": 1000
+      },
+      {
+        "contents": "425DE4D96BE2CC3BC3157FDA90E79329D55A475866",
+        "de_type": 960
+      }
+    ],
+    "encoded_section": "7C901313F5E405835EFB18227A9A724CBDF2CB911000C071FB4FBFAD007203E02441A50CF9E7900408F48FC18E9E5AB227158F46527D2DF1E3E8B5860EF2B8D15F4267B131735E0E883A0EE7F9702CB3BB73EEB51FCC3086D903053EE88C2B19D0DA3D7854ACB4DF69317530486D18ED42617F74FD5820C7A1B33229E7",
+    "identity_type": "provisioned",
+    "iv": "EF3F84E7847D4B31B3FF9B5B0428550D",
+    "key_seed": "F486B9021DA5ED704CFDBD9825F6D70A5906482EDEABF0226FB45DD75FB969A8",
+    "metadata_key": "C5D3486E302957ADD4338FEFBE46B3D6",
+    "section_mic_hmac_key": "96D349AEC4ADB8D9510E3A3093A0C782CF8EA7B6FCF1CC8ED7B5EE269DB1948C",
+    "section_salt": "C071FB4FBFAD007203E02441A50CF9E7"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "A7711441846DEA01B5B115B07EE0E586",
+    "aes_key": "DF79F55B1148D2412CE4907F5017A956",
+    "data_elements": [],
+    "encoded_section": "37901336311674D31A1B1ABCA412E87C7206BF91100000E2924EE1771AC6B83C73EE8A6EF9C690013F081118E055F4F4DAA14FBC14EC82BA",
+    "identity_type": "private",
+    "iv": "18A45DB774486000FB318F4D68FC75DD",
+    "key_seed": "02F2C8B3CDA9BC0D8B46B5ABFF653966E444DB5F5A2471474CFB15D5F8D0FE64",
+    "metadata_key": "23BDAA88D6A6ABEB5C52575E903B68DE",
+    "section_mic_hmac_key": "55730CBE224F5744D3ABC9666FAFAE3075A3AB1BA891CA8D050E32BB644A4479",
+    "section_salt": "00E2924EE1771AC6B83C73EE8A6EF9C6"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "77A40860E9F2D85C18352FE4DA31AE6E",
+    "aes_key": "F7EB2CE11EE2C72B3E98A799AE37B71D",
+    "data_elements": [
+      {
+        "contents": "60ABBA2292C2",
+        "de_type": 249
+      },
+      {
+        "contents": "A4870338A81FFC6CEAE2C7",
+        "de_type": 779
+      },
+      {
+        "contents": "B63A10F37A861B79084AA7C6F0C79BE8DBE1B308C7A01C0ABC2A",
+        "de_type": 711
+      },
+      {
+        "contents": "640CDFF15C509989A5BFA77595B5CE348F4E31F6FD34027B08",
+        "de_type": 410
+      }
+    ],
+    "encoded_section": "8790133735FEFE7C6C40C0AE2247E7E636393191100025B25F70B4E9701CD2E3D445FBAE117890018D0D255253A4086BE0770494720E0660480571F5F2218A4DAC55FB99D9D18AC77ECD3E4D6C73B27443D8FD663193029BDA29F6394E6F93DB00C33C8F4FF3CC95AD718972008088394F42C6E7A13B8C1374D4F666D6B8179B1AFAAF9BB23E80A4",
+    "identity_type": "private",
+    "iv": "7A1B11E2E1BBFC21137D5DB6812BECF8",
+    "key_seed": "71564841B0C867D87B9EDCB4BD520E0697AF8F85E3782D3430B8BC37DD23B43D",
+    "metadata_key": "3A3DCC0C22746DF5545BDD3BA1684B67",
+    "section_mic_hmac_key": "5CC0B01B3F01D3099CBF99A7D3F71F0A91E6FDB26818353271F1B455763BCBAD",
+    "section_salt": "25B25F70B4E9701CD2E3D445FBAE1178"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "4F1859CAFEFC8C2B5658B634D7678C20",
+    "aes_key": "CFCE78B7C4624ADD1507D3D9A63EF82F",
+    "data_elements": [
+      {
+        "contents": "DE41EA88487B4999D93602",
+        "de_type": 499
+      },
+      {
+        "contents": "48C8543DF38BB0CB7A4B439160",
+        "de_type": 22
+      },
+      {
+        "contents": "35210282",
+        "de_type": 730
+      },
+      {
+        "contents": "75BD",
+        "de_type": 338
+      },
+      {
+        "contents": "92668CFD5C1B",
+        "de_type": 956
+      }
+    ],
+    "encoded_section": "69901392227E7E09CD7396BFBD624A49AABC7E9110000DB9529357BB517E42EDFDC2FE4DC8B090013B4FEF7464D942431636A3E5860668B2FED6C3283B785E83A3BC45B1512C66F382BF7AD7868A9CAB33ABB4D335035B21D1E4396C945F1B8066E8568CC40BCE5D9A5C",
+    "identity_type": "private",
+    "iv": "2259C71FC8CDC81D9403EF089F159308",
+    "key_seed": "7C22FDE6E42BEF50DB73033774ADC18BAF2A3C0A53CA30D36ACFC5582EB25100",
+    "metadata_key": "DB170CBF39A5D48D3F6B0D40140A4257",
+    "section_mic_hmac_key": "35235B50A5E921ABEFF4BF621956CA22F581D42BB3325A39C8C2D102F75D333E",
+    "section_salt": "0DB9529357BB517E42EDFDC2FE4DC8B0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "0985A4C1FC767EF248AFAA00E0ED2E47",
+    "aes_key": "0CE73306D8D0AB56045815F2AD20B25A",
+    "data_elements": [
+      {
+        "contents": "D3D3905C6BEA12C7123B74AB40858D04",
+        "de_type": 792
+      },
+      {
+        "contents": "713F3EB42E57458D4038D809B35106DFF259EA4C4F1F17819E96",
+        "de_type": 720
+      }
+    ],
+    "encoded_section": "6790130FC5A44C70B4AD43316DD6D38C4A4845911000026C2E6E34CC1156B5E7EE8221D4A7F290043DD0DB3E9C9BF801CB74473C77DDE2D6329F38BFBD336FE971057F3D2C8C8EF610AFCBF1A5D8C24EFDA93762195F1A863CDC617CB8D317746EA52A7BB0961F3F",
+    "identity_type": "provisioned",
+    "iv": "D732D335C908BBF51DFFC3F80FBC75C7",
+    "key_seed": "F72828A9E550CCB3EE653BEA22E097839072D8D60280AFC2FBE2435D5095979F",
+    "metadata_key": "ADC1B18C69F7FD30DAC6EC2696F70EAE",
+    "section_mic_hmac_key": "0F64E025E91492D0AC4434D844FF48CD98C61BCD3E25F9CCC8E1333A81D27A9D",
+    "section_salt": "026C2E6E34CC1156B5E7EE8221D4A7F2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F753952E84F321276818619F5E2DB7A5",
+    "aes_key": "BA5479576FEC84060B7986F71751215E",
+    "data_elements": [
+      {
+        "contents": "174BFD",
+        "de_type": 274
+      },
+      {
+        "contents": "99B7C0C5CE238C6F963A4722865CFACADBBA8B95B18C70AD4267727F81",
+        "de_type": 212
+      },
+      {
+        "contents": "2EF69250213CDA930A85A93BA85F087B9780",
+        "de_type": 81
+      },
+      {
+        "contents": "87",
+        "de_type": 13
+      }
+    ],
+    "encoded_section": "739013700384F06906581AC9BCFBCBC2AD496491100096C7B1C5DEFCAFC64251AC87CDCEFCED9001D2B0215328C8DB53DECBDB25F97DBA53A67D02E1DC1F83D6E91AC7B2CF8DCCA4277ED359F6838431E078A50199B4310AEA200307AB216B82348B0024206A6D0A3C79E89CBD254D8426E7BEC1",
+    "identity_type": "private",
+    "iv": "FFA79DBF3BA0EBDE530A72A2D8018930",
+    "key_seed": "132DDE0DAAAC4F4A03CF1CB2B8F4A8FE41327C212AC3CE1B1C854EFA2EE3060B",
+    "metadata_key": "E61C0407C95D18D5DA193C062801B3F2",
+    "section_mic_hmac_key": "65CF0A0155EEC7EAABA2C02875F773696CECBDC64FB57E0BB9B7884B174EAF42",
+    "section_salt": "96C7B1C5DEFCAFC64251AC87CDCEFCED"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "7C6A90B2F9FAC1C86AEFF121052D076C",
+    "aes_key": "E73FDA1B40CF93E9561E963B728E2D8B",
+    "data_elements": [
+      {
+        "contents": "B4F512F3B1639C980A124C94E365",
+        "de_type": 848
+      }
+    ],
+    "encoded_section": "489013E7D5DEA0D3B68FCB72D18D623072BDE991100089D76603BB207098A3E6631BFBEF7C329004FB1B665EBA76ACCCE96C07AD83F4BC53948171B9D2DD42122AAAEBF0827973918D",
+    "identity_type": "provisioned",
+    "iv": "7B8C0BE7E83DFE973D0817AEB6CB6F63",
+    "key_seed": "67E08A4FC51867E3A0F57543149D05A2B1DD58C2B77B39F5F4EC5B707007E46A",
+    "metadata_key": "AF5A1254567F43ED18CCC0C024010B4B",
+    "section_mic_hmac_key": "8914563971948EA279A2189CDC04749B53E5DA3429FDA1C6F161E96465A76413",
+    "section_salt": "89D76603BB207098A3E6631BFBEF7C32"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "FB3EAE2C571C503CED9B656B14BFD0B8",
+    "aes_key": "30A2ECDA5B5CADF19936D88CD6078144",
+    "data_elements": [
+      {
+        "contents": "908D4CC782C9EC6222B92FEF8662DF086B",
+        "de_type": 816
+      },
+      {
+        "contents": "2E23352D",
+        "de_type": 290
+      }
+    ],
+    "encoded_section": "5290131C34CA643645201E9143E49FEFFBC4C29110000290E81B48B49A315AF4EB0A583B626E9004D8209185C733910032E4252CF793BAD9F4F50FEFC22E595EF0FABD10B50361B7AEF6780F22A2AB9E82D359",
+    "identity_type": "provisioned",
+    "iv": "83D6520D6383658D1BCEE9223496A13B",
+    "key_seed": "C33B862F2494CC516A5CB13A5B8F8905E854AD720F4AEB3C2A0788B194920AC5",
+    "metadata_key": "1170B8A823A46A9F89D03AB849A8B6C7",
+    "section_mic_hmac_key": "618F13964E241E73FE3D19F653606FD22DC35E8B402BBE581766F12918B2C749",
+    "section_salt": "0290E81B48B49A315AF4EB0A583B626E"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "8CD348B153FFFF829FF59CE087B45052",
+    "aes_key": "0BA7C51985112928B9DC28E7F65425F1",
+    "data_elements": [
+      {
+        "contents": "5749",
+        "de_type": 817
+      },
+      {
+        "contents": "F5B9E550C46360EC4810134DAA69B4775E96F03AE0",
+        "de_type": 10
+      },
+      {
+        "contents": "C213FC8E1F6F5335E8",
+        "de_type": 937
+      }
+    ],
+    "encoded_section": "5F9013088BC9173D4977CA45D6A1C619348876911000C5D9A37193D9E39A5EDB0F67163977C49001D8FEA804E8BC4013FD7B414D7FEF6ECE162DB0B42893FFBC581ED0B3A3AEABD9530827277802B92E4C2C55F628405E6EA653E237A672ADB1",
+    "identity_type": "private",
+    "iv": "A135C384B47C184EC4482051FF8C2E31",
+    "key_seed": "07B091E071F437A31B8703BBC3936997184E61121AD4F7EB5F492E3DF8DCEA53",
+    "metadata_key": "01A9B84A7827975243E7B3B2003D084A",
+    "section_mic_hmac_key": "77B8E093C3E828051F2B2518EDEA3011F482628A8ADA7746887F96E340F412AE",
+    "section_salt": "C5D9A37193D9E39A5EDB0F67163977C4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "B40F18FA69C0FC048DFB0AAA5B0AF0BF",
+    "aes_key": "3709DF5F4E0A2AAE14602A75EF722DC2",
+    "data_elements": [
+      {
+        "contents": "B753D510831709EA0C3D738C6033D01A271601AD5978633E9D",
+        "de_type": 48
+      },
+      {
+        "contents": "8367AFEE3BBC94F736A29A7E2714845B5360021AD4FC68FE97E0DF36",
+        "de_type": 263
+      },
+      {
+        "contents": "05D52FCEF6F06D00BF235214C2207E8FB73E3574515D1325A0F8",
+        "de_type": 595
+      },
+      {
+        "contents": "4958A61B59ECC3D66E",
+        "de_type": 573
+      },
+      {
+        "contents": "C4E5F7EA67D7A3F95CF318762C89",
+        "de_type": 276
+      }
+    ],
+    "encoded_section": "AB901366A1922F253CFA26D8D248EC4A83156A911000664460D3622578B621D4F753C362904090041092245FE1A57603009BC851D8758A0C7BAEC65F18C94BEE0C0CF6B209BF24B4EC66421EADC280BF1E943750125723D6D59E2B4E0325F9D439BEC4C630B1BC28613DD0F07C2BCDEE6F0A87E8C503B0A4DB22EA76CCA4D86815FA48A96D034570E6CC5FD1E888AE0435D5B784012AA6F0B2E32A10FEC8E2365DBE2A379355E3D65553E2BB",
+    "identity_type": "provisioned",
+    "iv": "6F4B43F8D4FABA78459CD81AA33BE4CC",
+    "key_seed": "BACC0678BD1412CE8F69457D531543891E60D6D28FEA990794BFB40D21AA0949",
+    "metadata_key": "884C8032F452425CDD66B638C8FB39F6",
+    "section_mic_hmac_key": "3CEDAF60E90EA68B0E4B4FE3D631A93C699417513FCEC675EB4B0F685EC4BAD8",
+    "section_salt": "664460D3622578B621D4F753C3629040"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "83E1288467CC4B24710B345A19B062D5",
+    "aes_key": "3872F4A171D57E391B108FC34280941E",
+    "data_elements": [
+      {
+        "contents": "FE41644BF9217FC149AE426A3A110D8684EB",
+        "de_type": 837
+      },
+      {
+        "contents": "CEA178B6B05E1B76FAB7B6C490BC2EAC7704BFD6",
+        "de_type": 284
+      },
+      {
+        "contents": "BF",
+        "de_type": 363
+      },
+      {
+        "contents": "A08F2A4028CEAD4E909837",
+        "de_type": 141
+      },
+      {
+        "contents": "DD907152A5",
+        "de_type": 296
+      }
+    ],
+    "encoded_section": "7D90135402E36E007ECD6B8F063C2AF686CEC59110006EC04E6CB0B5DCBCCA90417478CA71FA90010CE62BF979B4123E409ACD9785748E8A30110CD82591D58B1090BCAE8031E1EBCB0B50B914F9C3A616D670ADBBEACF2DA6D5A9E7903EA5A285EAB9FC52D80D54B98576FDEDA10E108BBCE4A44725D5D11AB69EDB3A11",
+    "identity_type": "private",
+    "iv": "948B1C0AEFF273FA05E61AB83A67B1E7",
+    "key_seed": "948CFB8CE79FE0285B4F35335C83A9C12BE88049A60CDDA8A54F03EC5E8B188D",
+    "metadata_key": "14FB446FDF7BC2DB3BB63D91B78835ED",
+    "section_mic_hmac_key": "A50B781DE993B3D37EEED3B5957AF0A16DE356C4E5EA6206E010B8542B8180B8",
+    "section_salt": "6EC04E6CB0B5DCBCCA90417478CA71FA"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "F7FA2B1220E713D37D5D4219E841D866",
+    "aes_key": "6C09B48D2E9252886CB8476628E49EA6",
+    "data_elements": [
+      {
+        "contents": "FE93A34B0B728ECB4A1A23B7",
+        "de_type": 938
+      }
+    ],
+    "encoded_section": "469013713B65A9B2834CC302E660F1516FDC529110004BAED26B52E7D85BAD585AACA26600A990012172B89B62912AE533F371A8CE4F587B90B48A534F119A5F6CB20BDD6FCD32",
+    "identity_type": "private",
+    "iv": "A6AD44BD75DDB36D3E11CA72047ED68C",
+    "key_seed": "47690302DC37FEBF9C4D5CC6453DCEFC40DBB204E5A7A81D0B30E74247BCDA80",
+    "metadata_key": "C114855EDA0E56FA324577137E531FEC",
+    "section_mic_hmac_key": "B4904367A2141DBFE77167BAC1FE7D508DC07B7496B26448682FD7FF3215B8AB",
+    "section_salt": "4BAED26B52E7D85BAD585AACA26600A9"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "397B5F51522DFEA7E1B243BC5D947FDA",
+    "aes_key": "7BF127F44E510A7B407A4C35B82172B8",
+    "data_elements": [
+      {
+        "contents": "9E3AD15489CC97EFA791DBD20D6D59F1D9A1D055F080076C9E0849",
+        "de_type": 313
+      },
+      {
+        "contents": "0F8046",
+        "de_type": 262
+      },
+      {
+        "contents": "3A76F640ADDA98B2009266BAEC469C8F33D2991D9AE4F48D13E5",
+        "de_type": 693
+      },
+      {
+        "contents": "B98E5D7725F819C7860151C7C6E0B6",
+        "de_type": 970
+      },
+      {
+        "contents": "8E497812B532C1731A1E42BB0D",
+        "de_type": 131
+      }
+    ],
+    "encoded_section": "9A9013623FFEC846FA4EC80AEEE5874F724150911000E4DCFCC4EE61C6352DF5285906A7ACA19002CE3757CF407DBA7A4AC984C7CE89DC1E5E88F6B6DE50085A04894DD3DDB94DBACD840C7744A81D9273C6D6B389314C7DE82B39FA0EEA7F9EF932B412F2B43EF444E59722BA59A51E54162417D4D510FFF996861298FC0346008F9A960744495B72F646ACA5B3607F8EA4C345AFD418DFE65A5F",
+    "identity_type": "trusted",
+    "iv": "DC4BBB79EC29CCC02C79BEBD45C7BB70",
+    "key_seed": "874471CC674DCC5A5BD7E8207CB62F4862C69B6FB28F86BE947A8249F8AD45CA",
+    "metadata_key": "B8420F0DC2CAD8BE94C2878461F62CA7",
+    "section_mic_hmac_key": "A60A350281B1B0C59E0F9E44DE3F139D4D5278D21E9325B60A0C1099981C4D47",
+    "section_salt": "E4DCFCC4EE61C6352DF5285906A7ACA1"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "14A4E23F310594A923AC2B00CD26FDDF",
+    "aes_key": "033A7FAED90FD1A0FF7080EDC2D150AD",
+    "data_elements": [],
+    "encoded_section": "379013EE55550B8DB3B2D0626ABA7D899DCB1B911000F83C0914EC025DD986BF39B9AA4633D090018687E96989F94FF3D2365FB2CDB89BEF",
+    "identity_type": "private",
+    "iv": "E4838E64DC9F04328312FC0952FE1955",
+    "key_seed": "32AC43A2C4F720EA7255D9B5025B7219801F4A728DAD5DE4C841480BFC6CAF0B",
+    "metadata_key": "DCD150DA1D4622EA1FB364C64CC56352",
+    "section_mic_hmac_key": "5713D6A91073B3FC250693CF7608174F7B5C8BB0B89717849AF78745F4BB74FA",
+    "section_salt": "F83C0914EC025DD986BF39B9AA4633D0"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9A5A6E11C1791C48E6BC440FD2B275BC",
+    "aes_key": "54D9612F2A7BE396A390954DFD2F2DB0",
+    "data_elements": [],
+    "encoded_section": "37901371B7C653BFB0E41F1BDA3228F707E39E91100058E26761B259F743F644564A6B23A0CC900155CA0E1E76DF190C54E9142FDBE55CFE",
+    "identity_type": "private",
+    "iv": "6B14BB04BBC14392A524A69EB6316F51",
+    "key_seed": "965BB1781732640C7237DDD1679D07C089927C6A869442EBB23960B536262A9F",
+    "metadata_key": "7FA623CCF685E489F680D2898580DD72",
+    "section_mic_hmac_key": "D3FC8D9843906152A789A16A150C0BAACA74BB5AF33A886552CBFA7C6D529029",
+    "section_salt": "58E26761B259F743F644564A6B23A0CC"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "64006DB572776637FD097DE973732A7B",
+    "aes_key": "669E44E9F98F153D8179E44A19F25623",
+    "data_elements": [
+      {
+        "contents": "7B",
+        "de_type": 638
+      },
+      {
+        "contents": "F00D4AB2C34F139458F1AF9265FA9EA175ED4EE85167",
+        "de_type": 958
+      },
+      {
+        "contents": "87417FB6114F",
+        "de_type": 499
+      },
+      {
+        "contents": "683ED3E93B91EB3FAED44E29457BE80D878415985D41B5F460",
+        "de_type": 129
+      }
+    ],
+    "encoded_section": "7990133E374729219551A1BB61EFF4D5AD6B6791100034159DC9EEC690F4ECD6A20A569E8CD29002A28031BC640DEB07E8AC9C7F941289B1327A5247718B0AD60B2A8769AF9749567EAF8A236425CDDF878FE17A735BF4AAB4ECCC4FC34AF217238857F87A06AE9EFAEC7C85452D2439BC5E9E08CF568AB5C7FD",
+    "identity_type": "trusted",
+    "iv": "26F5D4D8B5EB6069AEF2B6E435D30DB8",
+    "key_seed": "15A1B8E687F0DF912101CE373495959EE40D2D1FECB951B41C87DB9A0B4C3EF2",
+    "metadata_key": "4ED47FC3167C69F90160E2A9BDDC6A8B",
+    "section_mic_hmac_key": "7DE079745790A823A62470384F692A5CE4AD1C757AFE96917811EF13AD2CC8BC",
+    "section_salt": "34159DC9EEC690F4ECD6A20A569E8CD2"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5DDB5AA2FA3F0A61D18C52E9DE22CDE6",
+    "aes_key": "E60C3ACE2E521468137DAE60C115B3F5",
+    "data_elements": [
+      {
+        "contents": "8DD936",
+        "de_type": 244
+      }
+    ],
+    "encoded_section": "3D90138C161B53E44488EDAE5C545A49CB632F9110007272DFA635A1B1F42A62BE9147CCC4429004CE40129E8D256DA63B8B6AFA1FD16791EB33FD546813",
+    "identity_type": "provisioned",
+    "iv": "C03127C86766B5299AA2A30C42931072",
+    "key_seed": "A0F876D63DFEBBBC68F52B9A52582992D53E8DBC84DCA86598DDD6B41F1994D8",
+    "metadata_key": "189A12F2813D0C3D6E6A852F1298AE8A",
+    "section_mic_hmac_key": "853A31A3BBD636810AE5DEA65BC5739408F9D7DC1661B56D0E54A60A9C59DFE8",
+    "section_salt": "7272DFA635A1B1F42A62BE9147CCC442"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "9D031FAD682DAA4BBCA6912CCBB83C09",
+    "aes_key": "E1B5FA0F1A67F72E01B807F6495C6393",
+    "data_elements": [
+      {
+        "contents": "BA0688D5",
+        "de_type": 327
+      },
+      {
+        "contents": "CB0502569855FDA6DDA289FB7CA7F8447CB118E542",
+        "de_type": 880
+      },
+      {
+        "contents": "99FF",
+        "de_type": 940
+      },
+      {
+        "contents": "",
+        "de_type": 195
+      }
+    ],
+    "encoded_section": "5E9013101E7BB804EC51155AFE647EF89D6FAB91100042441ECF37BAF5319477A42541165CE49001AB8ACECCD8F482909FBC48F308CE76945B74681CE578A664996962BF4F4960586B4D100A83BCEFC21C073BE5407B32F6FE37E4181A8416",
+    "identity_type": "private",
+    "iv": "006B7FFEC2A4BC7AF80376E12B9CF206",
+    "key_seed": "3FDC2376B9AA5ABAA54091F4C3D17E62453E5C4BCA3F7E97D02C087E3D3E56EC",
+    "metadata_key": "2A9A5CD0C8BBE65B4DA2AC93A3646ADB",
+    "section_mic_hmac_key": "409C1FA5A935DF46FD0B0BA1F4B6676DC8E53F92992C41B1E167DCAAF92C6B75",
+    "section_salt": "42441ECF37BAF5319477A42541165CE4"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "402E548FE3E9094AE8327C5D67323EF3",
+    "aes_key": "74A450709337C059E4B06AA7339A847A",
+    "data_elements": [
+      {
+        "contents": "DDEE0C575B876057217E9EBD9A54DC6DDEC5E09A7C8B5AF9B2699B2F4D",
+        "de_type": 370
+      },
+      {
+        "contents": "CD8ECC401DC9D100AB80772990FD586CD51C0F63BCC51C1BC1",
+        "de_type": 762
+      },
+      {
+        "contents": "D4219120DC8A3A5A31C38174E515",
+        "de_type": 447
+      },
+      {
+        "contents": "A7B56D78AA8970937A2B0E39A94148EFE9BE381F0B",
+        "de_type": 890
+      },
+      {
+        "contents": "4C4E4BB8BC53C76E9BDEDAAF9D853E00A0556A6A",
+        "de_type": 561
+      }
+    ],
+    "encoded_section": "B39013556E8D35D3BFBCC66BA7FE806642527C9110005AFB2CBC5F6FF709C77C5E5B44FEC2639001302F90C4EE1CC3A669EBC8C94F549755BCBC764D07AC7B44259C7E72BAD6B0603D2618A56A1D5D9D0F8F3361A4F4BA89B14F98D3E27F95F1CA5DB58B7C9710E5785C12C126D0199B28A6955E728FE9E0D56AEA4522B7289D149FFA9AC110B751ACC06CD17F40F3E0EE67191DAF9E12EF7897E526F0037E46E22CD772FFB6A8FA8A6075E7BD51BE635A620EE8",
+    "identity_type": "private",
+    "iv": "91B130A57119A917BE672E882CD24F0A",
+    "key_seed": "349BAC58EA19F4DFC1E615A8F712C39D4A8F9D9371C92914FF7FEB3273EAFA96",
+    "metadata_key": "ECB79F56C63D39774DA1093D67A2E2BE",
+    "section_mic_hmac_key": "EC055CD96AA83E58972330916292606A56E320F4078D3E37125FD521366D2C13",
+    "section_salt": "5AFB2CBC5F6FF709C77C5E5B44FEC263"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "5FC40591E60B01771FD86CA3E3EFBAA9",
+    "aes_key": "527134D81C8BB7C6BECF31F34C4FB7EF",
+    "data_elements": [
+      {
+        "contents": "342CFE0C131BCA582A2B7F241FDDC5ECF120E98493391304BAFA",
+        "de_type": 217
+      }
+    ],
+    "encoded_section": "5490131A3E437EC13FDD67C82E5A3E273E9CD391100014444BDF8E6863B041C4F0C1CDEC855D900484ADD7102010AF6513B7367DD4D398FC2D1670B31EB05EB75F6451ABC3AF64D23D067AD0B26AEDEC08DD6BF5F5",
+    "identity_type": "provisioned",
+    "iv": "B58720B7A9092A88B216BDC537A2C0C6",
+    "key_seed": "7795E9287DF02DB694AA5A17909EF3ABAF2B3A67D317F0BA403077B148680D3A",
+    "metadata_key": "719D474AF4AC20EA51773F7D689FCBC8",
+    "section_mic_hmac_key": "CA2941EF019C602CD34C2D7A728687EBB9D640E5DFA764616AB435EF32B4955E",
+    "section_salt": "14444BDF8E6863B041C4F0C1CDEC855D"
+  },
+  {
+    "adv_header_byte": "30",
+    "adv_salt": "64E4BB1721EA0A79B18FA4CF2DFCF10C",
+    "aes_key": "4FC66B746D81042C4012C9CA05EB0F52",
+    "data_elements": [
+      {
+        "contents": "F3F4EFB14E81119C7C2E98F2",
+        "de_type": 608
+      },
+      {
+        "contents": "C41DD9601061BB775DBC3608789A30523E95B3B05B",
+        "de_type": 966
+      },
+      {
+        "contents": "B33460D6D8E3DF0ADF19BDD666E4",
+        "de_type": 973
+      },
+      {
+        "contents": "CDE289B7ECC9B6CDE5EA6BB595AC3019FE7F",
+        "de_type": 480
+      }
+    ],
+    "encoded_section": "849013AACDF54AA823590AF5804916E75A4517911000EF56099BC3FE4347649E0E59527C7A6190015C377B56675F536A451BF7CCFB4F79940DFE2ACB47AFB42B017C572E08DF98CFA55C5EC810CBEC57BC340A59E1F3414E7FCA6E17CD675EC950EFCCA7F589D4187557EA6AEA5F0E752B32C9540691FA07A9904598AE2FF4703638729108",
+    "identity_type": "private",
+    "iv": "9862F303568F4CEEEE16790805706ADC",
+    "key_seed": "790EEE3F64023DF0E967BECC5F9C1881A0E23AABE20BF85D35F0CA9E212D4C9B",
+    "metadata_key": "5C624608CAB1BE8DE5DF6A058AC025AE",
+    "section_mic_hmac_key": "F6216E6FCE355E0BD447D8B39A621A566767EEC8EE2F3AF3E86777DCC894B63B",
+    "section_salt": "EF56099BC3FE4347649E0E59527C7A61"
+  }
+]
+
diff --git a/nearby/presence/np_adv/tests/examples_v0.rs b/nearby/presence/np_adv/tests/examples_v0.rs
new file mode 100644
index 0000000..e30e12f
--- /dev/null
+++ b/nearby/presence/np_adv/tests/examples_v0.rs
@@ -0,0 +1,101 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use crypto_provider_default::CryptoProviderImpl;
+use ldt_np_adv::*;
+use np_adv::legacy::data_elements::TxPowerDataElement;
+use np_adv::{
+    credential::{
+        simple::SimpleV0Credential, source::SliceCredentialSource,
+        v0::MinimumFootprintV0CryptoMaterial,
+    },
+    de_type::*,
+    deserialize_v0_advertisement,
+    legacy::deserialize::*,
+    shared_data::*,
+    *,
+};
+
+#[test]
+fn v0_deser_plaintext() {
+    let creds =
+        SliceCredentialSource::<SimpleV0Credential<MinimumFootprintV0CryptoMaterial, ()>>::new(&[]);
+    let adv = deserialize_v0_advertisement::<_, _, CryptoProviderImpl>(
+        &[
+            0x00, // adv header
+            0x03, // public identity
+            0x15, 0x03, // Length 1 Tx Power DE with value 3
+        ],
+        &creds,
+    )
+    .unwrap();
+
+    match adv {
+        V0AdvContents::Plaintext(p) => {
+            assert_eq!(PlaintextIdentityMode::Public, p.identity());
+            assert_eq!(
+                vec![&PlainDataElement::TxPower(TxPowerDataElement::from(
+                    TxPower::try_from(3).unwrap()
+                )),],
+                p.data_elements().collect::<Vec<_>>()
+            );
+        }
+        _ => panic!("this example is plaintext"),
+    }
+}
+
+#[test]
+fn v0_deser_ciphertext() {
+    let key_seed = [0x11_u8; 32];
+    let metadata_key: [u8; NP_LEGACY_METADATA_KEY_LEN] = [0x33; NP_LEGACY_METADATA_KEY_LEN];
+
+    let hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+    let metadata_key_hmac: [u8; 32] =
+        hkdf.legacy_metadata_key_hmac_key().calculate_hmac(&metadata_key);
+
+    // output of building a packet using AdvBuilder
+    let adv = &[
+        0x00, // adv header
+        0x21, // private DE w/ a 2 byte payload
+        0x22, 0x22, // salt
+        // ciphertext for metadata key & txpower DE
+        0x85, 0xBF, 0xA8, 0x83, 0x58, 0x7C, 0x50, 0xCF, 0x98, 0x38, 0xA7, 0x8A, 0xC0, 0x1C, 0x96,
+        0xF9,
+    ];
+
+    let credentials: [SimpleV0Credential<_, [u8; 32]>; 1] = [SimpleV0Credential::new(
+        MinimumFootprintV0CryptoMaterial::new(key_seed, metadata_key_hmac),
+        key_seed,
+    )];
+    let cred_source = SliceCredentialSource::new(credentials.as_slice());
+
+    let matched = match deserialize_v0_advertisement::<_, _, CryptoProviderImpl>(adv, &cred_source)
+        .unwrap()
+    {
+        V0AdvContents::Decrypted(c) => c,
+        _ => panic!("this examples is ciphertext"),
+    };
+
+    assert_eq!(&key_seed, matched.matched_credential().matched_data());
+    let decrypted = matched.contents();
+
+    assert_eq!(EncryptedIdentityDataElementType::Private, decrypted.identity_type());
+
+    assert_eq!(&metadata_key, decrypted.metadata_key());
+
+    assert_eq!(
+        vec![&PlainDataElement::TxPower(TxPowerDataElement::from(TxPower::try_from(3).unwrap())),],
+        decrypted.data_elements().collect::<Vec<_>>()
+    );
+}
diff --git a/nearby/presence/np_adv/tests/examples_v1.rs b/nearby/presence/np_adv/tests/examples_v1.rs
new file mode 100644
index 0000000..fbda763
--- /dev/null
+++ b/nearby/presence/np_adv/tests/examples_v1.rs
@@ -0,0 +1,181 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use crypto_provider::{CryptoProvider, CryptoRng};
+use crypto_provider_default::CryptoProviderImpl;
+use np_adv::extended::data_elements::TxPowerDataElement;
+use np_adv::extended::serialize::SingleTypeDataElement;
+use np_adv::shared_data::TxPower;
+use np_adv::{
+    credential::{
+        simple::SimpleV1Credential, source::SliceCredentialSource,
+        v1::MinimumFootprintV1CryptoMaterial,
+    },
+    de_type::*,
+    deserialize_v1_advertisement,
+    extended::{
+        deserialize::{Section, VerificationMode},
+        serialize::{AdvBuilder, SignedEncrypted},
+        NP_V1_ADV_MAX_SECTION_COUNT,
+    },
+    PlaintextIdentityMode, *,
+};
+use np_hkdf::v1_salt;
+
+#[test]
+fn v1_deser_plaintext() {
+    let mut adv_builder = AdvBuilder::new();
+    let mut section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+    section_builder
+        .add_de(|_salt| TxPowerDataElement::from(TxPower::try_from(6).unwrap()))
+        .unwrap();
+    section_builder.add_to_advertisement();
+    let adv = adv_builder.into_advertisement();
+
+    let creds =
+        SliceCredentialSource::<SimpleV1Credential<MinimumFootprintV1CryptoMaterial, ()>>::new(&[]);
+    let contents =
+        deserialize_v1_advertisement::<_, _, CryptoProviderImpl>(adv.as_slice(), &creds).unwrap();
+
+    assert_eq!(0, contents.invalid_sections_count());
+
+    let sections = contents.sections().collect::<Vec<_>>();
+
+    assert_eq!(1, sections.len());
+
+    let section = match &sections[0] {
+        V1DeserializedSection::Plaintext(s) => s,
+        _ => panic!("this is a plaintext adv"),
+    };
+    assert_eq!(PlaintextIdentityMode::Public, section.identity());
+    let data_elements = section.data_elements().collect::<Vec<_>>();
+    assert_eq!(1, data_elements.len());
+
+    let de = &data_elements[0];
+    assert_eq!(v1_salt::DataElementOffset::from(1), de.offset());
+    assert_eq!(TxPowerDataElement::DE_TYPE, de.de_type());
+    assert_eq!(&[6], de.contents());
+}
+
+#[test]
+fn v1_deser_ciphertext() {
+    // identity material
+    let mut rng = <CryptoProviderImpl as CryptoProvider>::CryptoRng::new();
+    let metadata_key: [u8; 16] = rng.gen();
+    let key_pair = np_ed25519::KeyPair::<CryptoProviderImpl>::generate();
+    let key_seed = rng.gen();
+    let hkdf = np_hkdf::NpKeySeedHkdf::<CryptoProviderImpl>::new(&key_seed);
+
+    // prepare advertisement
+    let mut adv_builder = AdvBuilder::new();
+    let mut section_builder = adv_builder
+        .section_builder(SignedEncrypted::new_random_salt(
+            &mut rng,
+            EncryptedIdentityDataElementType::Private,
+            &metadata_key,
+            &key_pair,
+            &hkdf,
+        ))
+        .unwrap();
+    section_builder
+        .add_de(|_salt| TxPowerDataElement::from(TxPower::try_from(7).unwrap()))
+        .unwrap();
+    section_builder.add_to_advertisement();
+    let adv = adv_builder.into_advertisement();
+
+    let cred_array: [SimpleV1Credential<_, [u8; 32]>; 1] = [SimpleV1Credential::new(
+        MinimumFootprintV1CryptoMaterial::new(
+            key_seed,
+            [0; 32], // Zeroing out MIC HMAC, since it's unused in examples here.
+            hkdf.extended_signed_metadata_key_hmac_key().calculate_hmac(&metadata_key),
+            key_pair.public(),
+        ),
+        key_seed,
+    )];
+    let creds = SliceCredentialSource::new(&cred_array);
+    let contents =
+        deserialize_v1_advertisement::<_, _, CryptoProviderImpl>(adv.as_slice(), &creds).unwrap();
+
+    assert_eq!(0, contents.invalid_sections_count());
+
+    let sections = contents.sections().collect::<Vec<_>>();
+    assert_eq!(1, sections.len());
+
+    let matched_credential = match &sections[0] {
+        V1DeserializedSection::Decrypted(d) => d,
+        _ => panic!("this is a ciphertext adv"),
+    };
+
+    assert_eq!(&key_seed, matched_credential.matched_credential().matched_data());
+    let section = matched_credential.contents();
+
+    assert_eq!(EncryptedIdentityDataElementType::Private, section.identity_type());
+    assert_eq!(VerificationMode::Signature, section.verification_mode());
+    assert_eq!(&metadata_key, section.metadata_key());
+
+    let data_elements = section.data_elements().collect::<Vec<_>>();
+    assert_eq!(1, data_elements.len());
+
+    let de = &data_elements[0];
+    assert_eq!(v1_salt::DataElementOffset::from(2), de.offset());
+    assert_eq!(TxPowerDataElement::DE_TYPE, de.de_type());
+    assert_eq!(&[7], de.contents());
+}
+
+#[test]
+fn v1_deser_no_section() {
+    let adv_builder = AdvBuilder::new();
+    let adv = adv_builder.into_advertisement();
+    let creds =
+        SliceCredentialSource::<SimpleV1Credential<MinimumFootprintV1CryptoMaterial, ()>>::new(&[]);
+    let v1_deserialize_error =
+        deserialize_v1_advertisement::<_, _, CryptoProviderImpl>(adv.as_slice(), &creds)
+            .expect_err(" Expected an error");
+    assert_eq!(
+        v1_deserialize_error,
+        AdvDeserializationError::ParseError {
+            details_hazmat: AdvDeserializationErrorDetailsHazmat::AdvertisementDeserializeError
+        }
+    );
+}
+
+#[test]
+fn v1_deser_plaintext_over_max_sections() {
+    let mut adv_builder = AdvBuilder::new();
+    for _ in 0..NP_V1_ADV_MAX_SECTION_COUNT {
+        let mut section_builder = adv_builder.section_builder(PublicIdentity::default()).unwrap();
+        section_builder
+            .add_de(|_salt| TxPowerDataElement::from(TxPower::try_from(7).unwrap()))
+            .unwrap();
+        section_builder.add_to_advertisement();
+    }
+    let mut adv = adv_builder.into_advertisement().as_slice().to_vec();
+    // Push an extra section
+    adv.extend_from_slice(
+        [
+            0x01, // Section header
+            0x03, // Public identity
+        ]
+        .as_slice(),
+    );
+    let creds =
+        SliceCredentialSource::<SimpleV1Credential<MinimumFootprintV1CryptoMaterial, ()>>::new(&[]);
+    assert_eq!(
+        deserialize_v1_advertisement::<_, _, CryptoProviderImpl>(adv.as_slice(), &creds)
+            .unwrap_err(),
+        AdvDeserializationError::ParseError {
+            details_hazmat: AdvDeserializationErrorDetailsHazmat::AdvertisementDeserializeError
+        }
+    );
+}
diff --git a/nearby/presence/np_c_ffi/Cargo.lock b/nearby/presence/np_c_ffi/Cargo.lock
new file mode 100644
index 0000000..ca23800
--- /dev/null
+++ b/nearby/presence/np_c_ffi/Cargo.lock
@@ -0,0 +1,1207 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "aead"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
+dependencies = [
+ "bytes",
+ "crypto-common",
+ "generic-array",
+]
+
+[[package]]
+name = "aes"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
+dependencies = [
+ "cfg-if",
+ "cipher",
+ "cpufeatures",
+]
+
+[[package]]
+name = "aes-gcm-siv"
+version = "0.11.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ae0784134ba9375416d469ec31e7c5f9fa94405049cf08c5ce5b4698be673e0d"
+dependencies = [
+ "aead",
+ "aes",
+ "cipher",
+ "ctr",
+ "polyval",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "ahash"
+version = "0.8.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "version_check",
+]
+
+[[package]]
+name = "allocator-api2"
+version = "0.2.16"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0942ffc6dcaadf03badf6e6a2d0228460359d5e34b57ccdc720b7382dfbd5ec5"
+
+[[package]]
+name = "array_ref"
+version = "0.1.0"
+
+[[package]]
+name = "array_view"
+version = "0.1.0"
+
+[[package]]
+name = "atty"
+version = "0.2.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
+dependencies = [
+ "hermit-abi 0.1.19",
+ "libc",
+ "winapi",
+]
+
+[[package]]
+name = "autocfg"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
+
+[[package]]
+name = "base16ct"
+version = "0.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4c7f02d4ea65f2c1853089ffd8d2787bdbc63de2f0d29dedbcf8ccdfa0ccd4cf"
+
+[[package]]
+name = "bitflags"
+version = "1.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
+
+[[package]]
+name = "block-buffer"
+version = "0.10.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "block-padding"
+version = "0.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93"
+dependencies = [
+ "generic-array",
+]
+
+[[package]]
+name = "bytes"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "89b2fd2a0dcf38d7971e2194b6b6eebab45ae01067456a7fd93d5547a61b70be"
+
+[[package]]
+name = "cbc"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "26b52a9543ae338f279b96b0b9fed9c8093744685043739079ce85cd58f289a6"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "cbindgen"
+version = "0.24.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4b922faaf31122819ec80c4047cc684c6979a087366c069611e33649bf98e18d"
+dependencies = [
+ "clap",
+ "heck",
+ "indexmap",
+ "log",
+ "proc-macro2",
+ "quote",
+ "serde",
+ "serde_json",
+ "syn 1.0.109",
+ "tempfile",
+ "toml",
+]
+
+[[package]]
+name = "cc"
+version = "1.0.79"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "50d30906286121d95be3d479533b458f87493b30a4b5f79a607db8f5d11aa91f"
+
+[[package]]
+name = "cfg-if"
+version = "1.0.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
+
+[[package]]
+name = "cipher"
+version = "0.4.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "773f3b9af64447d2ce9850330c473515014aa235e6a783b02db81ff39e4a3dad"
+dependencies = [
+ "crypto-common",
+ "inout",
+]
+
+[[package]]
+name = "clap"
+version = "3.2.25"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
+dependencies = [
+ "atty",
+ "bitflags",
+ "clap_lex",
+ "indexmap",
+ "strsim",
+ "termcolor",
+ "textwrap",
+]
+
+[[package]]
+name = "clap_lex"
+version = "0.2.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
+dependencies = [
+ "os_str_bytes",
+]
+
+[[package]]
+name = "const-oid"
+version = "0.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6340df57935414636969091153f35f68d9f00bbc8fb4a9c6054706c213e6c6bc"
+
+[[package]]
+name = "cpufeatures"
+version = "0.2.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "crypto-bigint"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15"
+dependencies = [
+ "generic-array",
+ "rand_core",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "crypto-common"
+version = "0.1.6"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
+dependencies = [
+ "generic-array",
+ "rand_core",
+ "typenum",
+]
+
+[[package]]
+name = "crypto_provider"
+version = "0.1.0"
+
+[[package]]
+name = "crypto_provider_default"
+version = "0.1.0"
+dependencies = [
+ "cfg-if",
+ "crypto_provider",
+ "crypto_provider_rustcrypto",
+]
+
+[[package]]
+name = "crypto_provider_rustcrypto"
+version = "0.1.0"
+dependencies = [
+ "aead",
+ "aes",
+ "aes-gcm-siv",
+ "cbc",
+ "cfg-if",
+ "crypto_provider",
+ "ctr",
+ "ed25519-dalek",
+ "hkdf",
+ "hmac",
+ "p256",
+ "rand",
+ "rand_chacha",
+ "rand_core",
+ "sec1",
+ "sha2",
+ "subtle",
+ "x25519-dalek",
+]
+
+[[package]]
+name = "ctr"
+version = "0.9.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835"
+dependencies = [
+ "cipher",
+]
+
+[[package]]
+name = "curve25519-dalek"
+version = "4.0.0-rc.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "436ace70fc06e06f7f689d2624dc4e2f0ea666efb5aa704215f7249ae6e047a7"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "curve25519-dalek-derive",
+ "digest",
+ "fiat-crypto",
+ "platforms",
+ "rustc_version",
+ "subtle",
+]
+
+[[package]]
+name = "curve25519-dalek-derive"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.23",
+]
+
+[[package]]
+name = "der"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c7ed52955ce76b1554f509074bb357d3fb8ac9b51288a65a3fd480d1dfba946"
+dependencies = [
+ "const-oid",
+ "zeroize",
+]
+
+[[package]]
+name = "digest"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
+dependencies = [
+ "block-buffer",
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "ed25519"
+version = "2.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5fb04eee5d9d907f29e80ee6b0e78f7e2c82342c63e3580d8c4f69d9d5aad963"
+dependencies = [
+ "signature",
+]
+
+[[package]]
+name = "ed25519-dalek"
+version = "2.0.0-rc.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "faa8e9049d5d72bfc12acbc05914731b5322f79b5e2f195e9f2d705fca22ab4c"
+dependencies = [
+ "curve25519-dalek",
+ "ed25519",
+ "rand_core",
+ "sha2",
+]
+
+[[package]]
+name = "elliptic-curve"
+version = "0.13.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b"
+dependencies = [
+ "base16ct",
+ "crypto-bigint",
+ "digest",
+ "ff",
+ "generic-array",
+ "group",
+ "hkdf",
+ "rand_core",
+ "sec1",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "errno"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4bcfec3a70f97c962c307b2d2c56e358cf1d00b558d74262b5f929ee8cc7e73a"
+dependencies = [
+ "errno-dragonfly",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "errno-dragonfly"
+version = "0.1.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf"
+dependencies = [
+ "cc",
+ "libc",
+]
+
+[[package]]
+name = "fastrand"
+version = "1.9.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e51093e27b0797c359783294ca4f0a911c270184cb10f85783b118614a1501be"
+dependencies = [
+ "instant",
+]
+
+[[package]]
+name = "ff"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ded41244b729663b1e574f1b4fb731469f69f79c17667b5d776b16cda0479449"
+dependencies = [
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "fiat-crypto"
+version = "0.1.20"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e825f6987101665dea6ec934c09ec6d721de7bc1bf92248e1d5810c8cd636b77"
+
+[[package]]
+name = "generic-array"
+version = "0.14.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
+dependencies = [
+ "typenum",
+ "version_check",
+ "zeroize",
+]
+
+[[package]]
+name = "getrandom"
+version = "0.2.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
+dependencies = [
+ "cfg-if",
+ "libc",
+ "wasi",
+]
+
+[[package]]
+name = "group"
+version = "0.13.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0f9ef7462f7c099f518d754361858f86d8a07af53ba9af0fe635bbccb151a63"
+dependencies = [
+ "ff",
+ "rand_core",
+ "subtle",
+]
+
+[[package]]
+name = "handle_map"
+version = "0.1.0"
+dependencies = [
+ "crypto_provider",
+ "hashbrown 0.14.0",
+ "lock_api",
+ "portable-atomic",
+ "spin 0.9.8",
+]
+
+[[package]]
+name = "hashbrown"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
+
+[[package]]
+name = "hashbrown"
+version = "0.14.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2c6201b9ff9fd90a5a3bac2e56a830d0caa509576f0e503818ee82c181b3437a"
+dependencies = [
+ "ahash",
+ "allocator-api2",
+]
+
+[[package]]
+name = "heck"
+version = "0.4.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
+
+[[package]]
+name = "hermit-abi"
+version = "0.1.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
+dependencies = [
+ "libc",
+]
+
+[[package]]
+name = "hermit-abi"
+version = "0.3.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "443144c8cdadd93ebf52ddb4056d257f5b52c04d3c804e657d19eb73fc33668b"
+
+[[package]]
+name = "hkdf"
+version = "0.12.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "791a029f6b9fc27657f6f188ec6e5e43f6911f6f878e0dc5501396e09809d437"
+dependencies = [
+ "hmac",
+]
+
+[[package]]
+name = "hmac"
+version = "0.12.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e"
+dependencies = [
+ "digest",
+]
+
+[[package]]
+name = "indexmap"
+version = "1.9.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
+dependencies = [
+ "autocfg",
+ "hashbrown 0.12.3",
+]
+
+[[package]]
+name = "inout"
+version = "0.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5"
+dependencies = [
+ "block-padding",
+ "generic-array",
+]
+
+[[package]]
+name = "instant"
+version = "0.1.12"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
+dependencies = [
+ "cfg-if",
+]
+
+[[package]]
+name = "io-lifetimes"
+version = "1.0.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "eae7b9aee968036d54dce06cebaefd919e4472e753296daccd6d344e3e2df0c2"
+dependencies = [
+ "hermit-abi 0.3.2",
+ "libc",
+ "windows-sys",
+]
+
+[[package]]
+name = "itoa"
+version = "1.0.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "62b02a5381cc465bd3041d84623d0fa3b66738b52b8e2fc3bab8ad63ab032f4a"
+
+[[package]]
+name = "lazy_static"
+version = "1.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
+dependencies = [
+ "spin 0.5.2",
+]
+
+[[package]]
+name = "ldt"
+version = "0.1.0"
+dependencies = [
+ "crypto_provider",
+ "ldt_tbc",
+]
+
+[[package]]
+name = "ldt_np_adv"
+version = "0.1.0"
+dependencies = [
+ "array_view",
+ "crypto_provider",
+ "ldt",
+ "ldt_tbc",
+ "np_hkdf",
+ "xts_aes",
+]
+
+[[package]]
+name = "ldt_tbc"
+version = "0.1.0"
+dependencies = [
+ "crypto_provider",
+]
+
+[[package]]
+name = "libc"
+version = "0.2.147"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
+
+[[package]]
+name = "linux-raw-sys"
+version = "0.3.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ef53942eb7bf7ff43a617b3e2c1c4a5ecf5944a7c1bc12d7ee39bbb15e5c1519"
+
+[[package]]
+name = "lock_api"
+version = "0.4.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c1cc9717a20b1bb222f333e6a92fd32f7d8a18ddc5a3191a11af45dcbf4dcd16"
+dependencies = [
+ "autocfg",
+ "scopeguard",
+]
+
+[[package]]
+name = "log"
+version = "0.4.19"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4"
+
+[[package]]
+name = "memchr"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d"
+
+[[package]]
+name = "minimal-lexical"
+version = "0.2.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
+
+[[package]]
+name = "nom"
+version = "7.1.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
+dependencies = [
+ "memchr",
+ "minimal-lexical",
+]
+
+[[package]]
+name = "np_adv"
+version = "0.1.0"
+dependencies = [
+ "array_view",
+ "crypto_provider",
+ "lazy_static",
+ "ldt",
+ "ldt_np_adv",
+ "nom",
+ "np_ed25519",
+ "np_hkdf",
+ "rand",
+ "sink",
+ "strum",
+ "strum_macros",
+ "tinyvec",
+ "xts_aes",
+]
+
+[[package]]
+name = "np_c_ffi"
+version = "0.1.0"
+dependencies = [
+ "cbindgen",
+ "crypto_provider_default",
+ "np_ffi_core",
+ "spin 0.9.8",
+]
+
+[[package]]
+name = "np_ed25519"
+version = "0.1.0"
+dependencies = [
+ "array_view",
+ "crypto_provider",
+ "sink",
+ "tinyvec",
+]
+
+[[package]]
+name = "np_ffi_core"
+version = "0.1.0"
+dependencies = [
+ "array_view",
+ "crypto_provider",
+ "crypto_provider_default",
+ "handle_map",
+ "np_adv",
+ "spin 0.9.8",
+]
+
+[[package]]
+name = "np_hkdf"
+version = "0.1.0"
+dependencies = [
+ "crypto_provider",
+ "ldt",
+ "xts_aes",
+]
+
+[[package]]
+name = "once_cell"
+version = "1.18.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
+
+[[package]]
+name = "opaque-debug"
+version = "0.3.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5"
+
+[[package]]
+name = "os_str_bytes"
+version = "6.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d5d9eb14b174ee9aa2ef96dc2b94637a2d4b6e7cb873c7e171f0c20c6cf3eac"
+
+[[package]]
+name = "p256"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
+dependencies = [
+ "elliptic-curve",
+ "primeorder",
+]
+
+[[package]]
+name = "platforms"
+version = "3.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e3d7ddaed09e0eb771a79ab0fd64609ba0afb0a8366421957936ad14cbd13630"
+
+[[package]]
+name = "polyval"
+version = "0.6.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "opaque-debug",
+ "universal-hash",
+]
+
+[[package]]
+name = "portable-atomic"
+version = "1.3.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "767eb9f07d4a5ebcb39bbf2d452058a93c011373abf6832e24194a1c3f004794"
+
+[[package]]
+name = "ppv-lite86"
+version = "0.2.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
+
+[[package]]
+name = "primeorder"
+version = "0.13.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3c2fcef82c0ec6eefcc179b978446c399b3cdf73c392c35604e399eee6df1ee3"
+dependencies = [
+ "elliptic-curve",
+]
+
+[[package]]
+name = "proc-macro2"
+version = "1.0.63"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7b368fba921b0dce7e60f5e04ec15e565b3303972b42bcfde1d0713b881959eb"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
+name = "quote"
+version = "1.0.29"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "573015e8ab27661678357f27dc26460738fd2b6c86e46f386fde94cb5d913105"
+dependencies = [
+ "proc-macro2",
+]
+
+[[package]]
+name = "rand"
+version = "0.8.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
+dependencies = [
+ "rand_core",
+]
+
+[[package]]
+name = "rand_chacha"
+version = "0.3.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
+dependencies = [
+ "ppv-lite86",
+ "rand_core",
+]
+
+[[package]]
+name = "rand_core"
+version = "0.6.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
+dependencies = [
+ "getrandom",
+]
+
+[[package]]
+name = "redox_syscall"
+version = "0.3.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "567664f262709473930a4bf9e51bf2ebf3348f2e748ccc50dea20646858f8f29"
+dependencies = [
+ "bitflags",
+]
+
+[[package]]
+name = "rustc_version"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "rustix"
+version = "0.37.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4d69718bf81c6127a49dc64e44a742e8bb9213c0ff8869a22c308f84c1d4ab06"
+dependencies = [
+ "bitflags",
+ "errno",
+ "io-lifetimes",
+ "libc",
+ "linux-raw-sys",
+ "windows-sys",
+]
+
+[[package]]
+name = "rustversion"
+version = "1.0.13"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "dc31bd9b61a32c31f9650d18add92aa83a49ba979c143eefd27fe7177b05bd5f"
+
+[[package]]
+name = "ryu"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fe232bdf6be8c8de797b22184ee71118d63780ea42ac85b61d1baa6d3b782ae9"
+
+[[package]]
+name = "scopeguard"
+version = "1.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
+
+[[package]]
+name = "sec1"
+version = "0.7.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f0aec48e813d6b90b15f0b8948af3c63483992dee44c03e9930b3eebdabe046e"
+dependencies = [
+ "base16ct",
+ "der",
+ "generic-array",
+ "subtle",
+ "zeroize",
+]
+
+[[package]]
+name = "semver"
+version = "1.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bebd363326d05ec3e2f532ab7660680f3b02130d780c299bca73469d521bc0ed"
+
+[[package]]
+name = "serde"
+version = "1.0.166"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d01b7404f9d441d3ad40e6a636a7782c377d2abdbe4fa2440e2edcc2f4f10db8"
+dependencies = [
+ "serde_derive",
+]
+
+[[package]]
+name = "serde_derive"
+version = "1.0.166"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dd83d6dde2b6b2d466e14d9d1acce8816dedee94f735eac6395808b3483c6d6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.23",
+]
+
+[[package]]
+name = "serde_json"
+version = "1.0.100"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0f1e14e89be7aa4c4b78bdbdc9eb5bf8517829a600ae8eaa39a6e1d960b5185c"
+dependencies = [
+ "itoa",
+ "ryu",
+ "serde",
+]
+
+[[package]]
+name = "sha2"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
+dependencies = [
+ "cfg-if",
+ "cpufeatures",
+ "digest",
+]
+
+[[package]]
+name = "signature"
+version = "2.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5e1788eed21689f9cf370582dfc467ef36ed9c707f073528ddafa8d83e3b8500"
+
+[[package]]
+name = "sink"
+version = "0.1.0"
+dependencies = [
+ "tinyvec",
+]
+
+[[package]]
+name = "spin"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d"
+
+[[package]]
+name = "spin"
+version = "0.9.8"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67"
+dependencies = [
+ "lock_api",
+]
+
+[[package]]
+name = "strsim"
+version = "0.10.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
+
+[[package]]
+name = "strum"
+version = "0.24.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "063e6045c0e62079840579a7e47a355ae92f60eb74daaf156fb1e84ba164e63f"
+
+[[package]]
+name = "strum_macros"
+version = "0.24.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1e385be0d24f186b4ce2f9982191e7101bb737312ad61c1f2f984f34bcf85d59"
+dependencies = [
+ "heck",
+ "proc-macro2",
+ "quote",
+ "rustversion",
+ "syn 1.0.109",
+]
+
+[[package]]
+name = "subtle"
+version = "2.5.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
+
+[[package]]
+name = "syn"
+version = "1.0.109"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "syn"
+version = "2.0.23"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "59fb7d6d8281a51045d62b8eb3a7d1ce347b76f312af50cd3dc0af39c87c1737"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "unicode-ident",
+]
+
+[[package]]
+name = "tempfile"
+version = "3.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "31c0432476357e58790aaa47a8efb0c5138f137343f3b5f23bd36a27e3b0a6d6"
+dependencies = [
+ "autocfg",
+ "cfg-if",
+ "fastrand",
+ "redox_syscall",
+ "rustix",
+ "windows-sys",
+]
+
+[[package]]
+name = "termcolor"
+version = "1.2.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "be55cf8942feac5c765c2c993422806843c9a9a45d4d5c407ad6dd2ea95eb9b6"
+dependencies = [
+ "winapi-util",
+]
+
+[[package]]
+name = "textwrap"
+version = "0.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
+
+[[package]]
+name = "tinyvec"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
+
+[[package]]
+name = "toml"
+version = "0.5.11"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f4f7f0dd8d50a853a531c426359045b1998f04219d88799810762cd4ad314234"
+dependencies = [
+ "serde",
+]
+
+[[package]]
+name = "typenum"
+version = "1.16.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba"
+
+[[package]]
+name = "unicode-ident"
+version = "1.0.10"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "22049a19f4a68748a168c0fc439f9516686aa045927ff767eca0a85101fb6e73"
+
+[[package]]
+name = "universal-hash"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
+dependencies = [
+ "crypto-common",
+ "subtle",
+]
+
+[[package]]
+name = "version_check"
+version = "0.9.4"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
+
+[[package]]
+name = "wasi"
+version = "0.11.0+wasi-snapshot-preview1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
+
+[[package]]
+name = "winapi"
+version = "0.3.9"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
+dependencies = [
+ "winapi-i686-pc-windows-gnu",
+ "winapi-x86_64-pc-windows-gnu",
+]
+
+[[package]]
+name = "winapi-i686-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
+
+[[package]]
+name = "winapi-util"
+version = "0.1.5"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
+dependencies = [
+ "winapi",
+]
+
+[[package]]
+name = "winapi-x86_64-pc-windows-gnu"
+version = "0.4.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
+
+[[package]]
+name = "windows-sys"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
+dependencies = [
+ "windows-targets",
+]
+
+[[package]]
+name = "windows-targets"
+version = "0.48.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05d4b17490f70499f20b9e791dcf6a299785ce8af4d709018206dc5b4953e95f"
+dependencies = [
+ "windows_aarch64_gnullvm",
+ "windows_aarch64_msvc",
+ "windows_i686_gnu",
+ "windows_i686_msvc",
+ "windows_x86_64_gnu",
+ "windows_x86_64_gnullvm",
+ "windows_x86_64_msvc",
+]
+
+[[package]]
+name = "windows_aarch64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "91ae572e1b79dba883e0d315474df7305d12f569b400fcf90581b06062f7e1bc"
+
+[[package]]
+name = "windows_aarch64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "b2ef27e0d7bdfcfc7b868b317c1d32c641a6fe4629c171b8928c7b08d98d7cf3"
+
+[[package]]
+name = "windows_i686_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "622a1962a7db830d6fd0a69683c80a18fda201879f0f447f065a3b7467daa241"
+
+[[package]]
+name = "windows_i686_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "4542c6e364ce21bf45d69fdd2a8e455fa38d316158cfd43b3ac1c5b1b19f8e00"
+
+[[package]]
+name = "windows_x86_64_gnu"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ca2b8a661f7628cbd23440e50b05d705db3686f894fc9580820623656af974b1"
+
+[[package]]
+name = "windows_x86_64_gnullvm"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "7896dbc1f41e08872e9d5e8f8baa8fdd2677f29468c4e156210174edc7f7b953"
+
+[[package]]
+name = "windows_x86_64_msvc"
+version = "0.48.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "1a515f5799fe4961cb532f983ce2b23082366b898e52ffbce459c86f67c8378a"
+
+[[package]]
+name = "x25519-dalek"
+version = "2.0.0-rc.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ec7fae07da688e17059d5886712c933bb0520f15eff2e09cfa18e30968f4e63a"
+dependencies = [
+ "curve25519-dalek",
+ "rand_core",
+]
+
+[[package]]
+name = "xts_aes"
+version = "0.1.0"
+dependencies = [
+ "array_ref",
+ "crypto_provider",
+ "ldt_tbc",
+]
+
+[[package]]
+name = "zeroize"
+version = "1.6.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"
diff --git a/nearby/presence/np_c_ffi/Cargo.toml b/nearby/presence/np_c_ffi/Cargo.toml
new file mode 100644
index 0000000..1dd9f32
--- /dev/null
+++ b/nearby/presence/np_c_ffi/Cargo.toml
@@ -0,0 +1,18 @@
+[package]
+name = "np_c_ffi"
+version = "0.1.0"
+edition = "2021"
+publish = false
+
+[dependencies]
+# TODO: We need to make this configurable for this crate and for np_ffi below it.
+crypto_provider_default = {path = "../../crypto/crypto_provider_default", features = ["rustcrypto"]}
+np_ffi_core = {path = "../np_ffi_core"}
+spin = "0.9.8"
+
+[build-dependencies]
+cbindgen = "0.24.5"
+
+[lib]
+# boringssl and bssl-sys are built as a static lib, so we need to as well
+crate-type = ["staticlib"]
\ No newline at end of file
diff --git a/nearby/presence/np_c_ffi/build.rs b/nearby/presence/np_c_ffi/build.rs
new file mode 100644
index 0000000..b282709
--- /dev/null
+++ b/nearby/presence/np_c_ffi/build.rs
@@ -0,0 +1,63 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use cbindgen::ItemType::*;
+use std::vec;
+
+const C_CONFIG: &str = "cbindgen_configs/c_config.toml";
+const C_OUTPUT_HEADER_FILE: &str = "include/c/np_c_ffi.h";
+
+const CPP_CONFIG: &str = "cbindgen_configs/cpp_config.toml";
+const CPP_INCLUDE_DIR_BASE: &str = "include/cpp/";
+const CPP_PUBLIC_HEADER_FILE: &str = "np_cpp_ffi_types.h";
+const CPP_INTERNAL_HEADER_FILE: &str = "np_cpp_ffi_functions.h";
+
+fn main() {
+    let crate_dir = std::env::var("CARGO_MANIFEST_DIR").unwrap();
+
+    let config_file = format!("{crate_dir}/{C_CONFIG}");
+    let config = cbindgen::Config::from_file(config_file).expect("Config file should exist");
+    generate_c_header(&crate_dir, config);
+
+    let config_file = format!("{crate_dir}/{CPP_CONFIG}");
+    let config = cbindgen::Config::from_file(config_file).expect("Config file should exist");
+    generate_private_cpp_header(&crate_dir, config.clone());
+    generate_public_cpp_header(&crate_dir, config);
+}
+
+fn generate_c_header(crate_dir: &String, config: cbindgen::Config) {
+    let output_header_file = format!("{crate_dir}/{C_OUTPUT_HEADER_FILE}");
+    generate_header(&output_header_file, crate_dir, config);
+}
+
+fn generate_private_cpp_header(crate_dir: &String, mut config: cbindgen::Config) {
+    config.export.item_types.append(&mut vec![Functions]);
+    config.includes.push(CPP_PUBLIC_HEADER_FILE.to_string());
+    let output_header_file =
+        format!("{crate_dir}/{CPP_INCLUDE_DIR_BASE}/{CPP_INTERNAL_HEADER_FILE}");
+    generate_header(&output_header_file, crate_dir, config);
+}
+
+fn generate_public_cpp_header(crate_dir: &String, mut config: cbindgen::Config) {
+    config.export.item_types.append(&mut vec![Enums, Structs]);
+    let output_header_file = format!("{crate_dir}/{CPP_INCLUDE_DIR_BASE}/{CPP_PUBLIC_HEADER_FILE}");
+    generate_header(&output_header_file, crate_dir, config);
+}
+
+fn generate_header(output_file: &String, crate_dir: &String, config: cbindgen::Config) {
+    let _ = cbindgen::generate_with_config(crate_dir, config)
+        .map_err(|e| println!("cargo:warning=ERROR: {e}"))
+        .expect("c header file generation failed")
+        .write_to_file(output_file);
+}
diff --git a/nearby/presence/np_c_ffi/cbindgen_configs/c_config.toml b/nearby/presence/np_c_ffi/cbindgen_configs/c_config.toml
new file mode 100644
index 0000000..88483b0
--- /dev/null
+++ b/nearby/presence/np_c_ffi/cbindgen_configs/c_config.toml
@@ -0,0 +1,50 @@
+language = "C"
+
+# Instead go through CPP generated header
+cpp_compat = false
+
+style = "type"
+header = """
+/*
+ Copyright 2023 Google LLC
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+"""
+pragma_once = true
+autogen_warning = """
+/*
+ WARNING: this file is autogenerated by cbindgen. Don't modify this manually.
+ Additionally, you should _not_ rely upon the layouts of the generated
+ structs and unions if you want your code to be forward-compatible,
+ unless a given type explicitly states in its documentation that it has
+ a guaranteed forward-compatible layout.
+ Instead, you should use _only_ the provided exported function symbols.
+*/"""
+include_version = true
+
+sort_by = "None" # Use order specified in Rust
+
+[export]
+# Prefix to add before the name of every item
+prefix = "np_ffi_"
+
+[enum]
+rename_variants = "QualifiedScreamingSnakeCase"
+
+[parse]
+parse_deps = true
+include = ["np_c_ffi", "np_ffi_core"]
+
+[parse.expand]
+crates = ["np_ffi_core"]
+default_features = true
diff --git a/nearby/presence/np_c_ffi/cbindgen_configs/cpp_config.toml b/nearby/presence/np_c_ffi/cbindgen_configs/cpp_config.toml
new file mode 100644
index 0000000..5a2ba2a
--- /dev/null
+++ b/nearby/presence/np_c_ffi/cbindgen_configs/cpp_config.toml
@@ -0,0 +1,44 @@
+language = "C++"
+
+style = "type"
+header = """
+/*
+ Copyright 2023 Google LLC
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+"""
+pragma_once = true
+autogen_warning = """
+/*
+ WARNING: this file is autogenerated by cbindgen. Don't modify this manually.
+ Additionally, you should _not_ rely upon the layouts of the generated
+ structs and unions if you want your code to be forward-compatible,
+ unless a given type explicitly states in its documentation that it has
+ a guaranteed forward-compatible layout.
+ Instead, you should use _only_ the provided exported function symbols.
+*/"""
+include_version = true
+namespaces = ["np_ffi", "internal"]
+
+sort_by = "None" # Use order specified in Rust
+
+[enum]
+rename_variants = "None"
+
+[parse]
+parse_deps = true
+include = ["np_c_ffi", "np_ffi_core"]
+
+[parse.expand]
+crates = ["np_ffi_core"]
+default_features = true
diff --git a/nearby/presence/np_c_ffi/include/c/np_c_ffi.h b/nearby/presence/np_c_ffi/include/c/np_c_ffi.h
new file mode 100644
index 0000000..03e5821
--- /dev/null
+++ b/nearby/presence/np_c_ffi/include/c/np_c_ffi.h
@@ -0,0 +1,890 @@
+/*
+ Copyright 2023 Google LLC
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+
+#pragma once
+
+/* Generated with cbindgen:0.24.5 */
+
+/*
+ WARNING: this file is autogenerated by cbindgen. Don't modify this manually.
+ Additionally, you should _not_ rely upon the layouts of the generated
+ structs and unions if you want your code to be forward-compatible,
+ unless a given type explicitly states in its documentation that it has
+ a guaranteed forward-compatible layout.
+ Instead, you should use _only_ the provided exported function symbols.
+*/
+
+#include <stdarg.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdlib.h>
+
+/**
+ * The possible boolean action types which can be present in an Actions data element
+ */
+enum np_ffi_BooleanActionType {
+  NP_FFI_BOOLEAN_ACTION_TYPE_ACTIVE_UNLOCK = 8,
+  NP_FFI_BOOLEAN_ACTION_TYPE_NEARBY_SHARE = 9,
+  NP_FFI_BOOLEAN_ACTION_TYPE_INSTANT_TETHERING = 10,
+  NP_FFI_BOOLEAN_ACTION_TYPE_PHONE_HUB = 11,
+  NP_FFI_BOOLEAN_ACTION_TYPE_PRESENCE_MANAGER = 12,
+  NP_FFI_BOOLEAN_ACTION_TYPE_FINDER = 13,
+  NP_FFI_BOOLEAN_ACTION_TYPE_FAST_PAIR_SASS = 14,
+};
+typedef uint8_t np_ffi_BooleanActionType;
+
+/**
+ * Discriminant for `CreateCredentialBookResult`
+ */
+enum np_ffi_CreateCredentialBookResultKind {
+  /**
+   * There was no space left to create a new credential book
+   */
+  NP_FFI_CREATE_CREDENTIAL_BOOK_RESULT_KIND_NO_SPACE_LEFT = 0,
+  /**
+   * We created a new credential book behind the given handle.
+   * The associated payload may be obtained via
+   * `CreateCredentialBookResult#into_success()`.
+   */
+  NP_FFI_CREATE_CREDENTIAL_BOOK_RESULT_KIND_SUCCESS = 1,
+};
+typedef uint8_t np_ffi_CreateCredentialBookResultKind;
+
+/**
+ * A result-type enum which tells the caller whether/not a deallocation
+ * succeeded or failed due to the requested handle not being present.
+ */
+typedef enum {
+  /**
+   * The requested handle to deallocate was not present in the map
+   */
+  NP_FFI_DEALLOCATE_RESULT_NOT_PRESENT = 0,
+  /**
+   * The object behind the handle was successfully deallocated
+   */
+  NP_FFI_DEALLOCATE_RESULT_SUCCESS = 1,
+} np_ffi_DeallocateResult;
+
+/**
+ * Discriminant for `DeserializeAdvertisementResult`.
+ */
+enum np_ffi_DeserializeAdvertisementResultKind {
+  /**
+   * Deserializing the advertisement failed, for some reason or another.
+   */
+  NP_FFI_DESERIALIZE_ADVERTISEMENT_RESULT_KIND_ERROR = 0,
+  /**
+   * The advertisement was correctly deserialized, and it's a V0 advertisement.
+   * `DeserializeAdvertisementResult#into_v0()` is the corresponding cast
+   * to the associated enum variant.
+   */
+  NP_FFI_DESERIALIZE_ADVERTISEMENT_RESULT_KIND_V0 = 1,
+  /**
+   * The advertisement was correctly deserialized, and it's a V1 advertisement.
+   * `DeserializeAdvertisementResult#into_v1()` is the corresponding cast
+   * to the associated enum variant.
+   */
+  NP_FFI_DESERIALIZE_ADVERTISEMENT_RESULT_KIND_V1 = 2,
+};
+typedef uint8_t np_ffi_DeserializeAdvertisementResultKind;
+
+/**
+ * Discriminant for possible results of V0 advertisement deserialization
+ */
+enum np_ffi_DeserializedV0AdvertisementKind {
+  /**
+   * The deserialized V0 advertisement was legible.
+   * The associated payload may be obtained via
+   * `DeserializedV0Advertisement#into_legible`.
+   */
+  NP_FFI_DESERIALIZED_V0_ADVERTISEMENT_KIND_LEGIBLE = 0,
+  /**
+   * The deserialized V0 advertisement is illegible,
+   * likely meaning that the receiver does not hold
+   * the proper credentials to be able to read
+   * the received advertisement.
+   */
+  NP_FFI_DESERIALIZED_V0_ADVERTISEMENT_KIND_NO_MATCHING_CREDENTIALS = 1,
+};
+typedef uint8_t np_ffi_DeserializedV0AdvertisementKind;
+
+/**
+ * Represents deserialized information about the V0 identity utilized
+ * by a deserialized V0 advertisement
+ */
+typedef enum {
+  NP_FFI_DESERIALIZED_V0_IDENTITY_PLAINTEXT,
+  NP_FFI_DESERIALIZED_V0_IDENTITY_DECRYPTED,
+} np_ffi_DeserializedV0Identity;
+
+/**
+ * Discriminant for `DeserializedV0Identity`.
+ */
+enum np_ffi_DeserializedV0IdentityKind {
+  /**
+   * The deserialized identity was a plaintext identity.
+   */
+  NP_FFI_DESERIALIZED_V0_IDENTITY_KIND_PLAINTEXT = 0,
+  /**
+   * The deserialized identity was some decrypted identity.
+   */
+  NP_FFI_DESERIALIZED_V0_IDENTITY_KIND_DECRYPTED = 1,
+};
+typedef uint8_t np_ffi_DeserializedV0IdentityKind;
+
+/**
+ * Discriminant for `DeserializedV1Identity`.
+ */
+enum np_ffi_DeserializedV1IdentityKind {
+  /**
+   * The deserialized v1 identity was plaintext
+   */
+  NP_FFI_DESERIALIZED_V1_IDENTITY_KIND_PLAINTEXT = 0,
+  /**
+   * The deserialized v1 identity corresponded
+   * to some kind of decrypted identity.
+   */
+  NP_FFI_DESERIALIZED_V1_IDENTITY_KIND_DECRYPTED = 1,
+};
+typedef uint8_t np_ffi_DeserializedV1IdentityKind;
+
+/**
+ * Discriminant of `GetV0DEResult`.
+ */
+enum np_ffi_GetV0DEResultKind {
+  /**
+   * The attempt to get the DE succeeded.
+   * The associated payload may be obtained via
+   * `GetV0DEResult#into_success`.
+   */
+  NP_FFI_GET_V0DE_RESULT_KIND_SUCCESS = 0,
+  /**
+   * The attempt to get the DE failed,
+   * possibly due to the requested index being
+   * out-of-bounds or due to the advertisement
+   * having been previously deallocated.
+   */
+  NP_FFI_GET_V0DE_RESULT_KIND_ERROR = 1,
+};
+typedef uint8_t np_ffi_GetV0DEResultKind;
+
+/**
+ * Discriminant for the `GetV1DEResult` enum.
+ */
+enum np_ffi_GetV1DEResultKind {
+  /**
+   * Attempting to get the DE at the given position failed,
+   * possibly due to the index being out-of-bounds or due
+   * to the whole advertisement having been previously deallocated.
+   */
+  NP_FFI_GET_V1DE_RESULT_KIND_ERROR = 0,
+  /**
+   * Attempting to get the DE at the given position succeeded.
+   * The underlying DE may be extracted with `GetV1DEResult#into_success`.
+   */
+  NP_FFI_GET_V1DE_RESULT_KIND_SUCCESS = 1,
+};
+typedef uint8_t np_ffi_GetV1DEResultKind;
+
+/**
+ * Discriminant for `GetV1SectionResult`
+ */
+enum np_ffi_GetV1SectionResultKind {
+  /**
+   * The attempt to get the section failed,
+   * possibly due to the section index being
+   * out-of-bounds or due to the underlying
+   * advertisement having already been deallocated.
+   */
+  NP_FFI_GET_V1_SECTION_RESULT_KIND_ERROR = 0,
+  /**
+   * The attempt to get the section succeeded.
+   * The wrapped section may be obtained via
+   * `GetV1SectionResult#into_success`.
+   */
+  NP_FFI_GET_V1_SECTION_RESULT_KIND_SUCCESS = 1,
+};
+typedef uint8_t np_ffi_GetV1SectionResultKind;
+
+/**
+ * Structure for categorized reasons for why a NP C FFI call may
+ * be panicking.
+ */
+enum np_ffi_PanicReason {
+  /**
+   * Some enum cast to a variant failed. Utilized
+   * for failed enum casts of all enums.
+   *
+   * (That is, this is the catch-all panic reason for enum
+   * casts where there is not a more specific reason
+   * in some other variant of this enum.)
+   */
+  NP_FFI_PANIC_REASON_ENUM_CAST_FAILED = 0,
+  /**
+   * The panic handler is used to assert conditions are true to avoid programmer errors.
+   * If a failed assert condition is hit, this panic handler is invoked with this reason.
+   */
+  NP_FFI_PANIC_REASON_ASSERT_FAILED = 1,
+  /**
+   * Error returned if action bits inside of a V0Actions struct are invalid. If the struct was
+   * created by this deserializer, the bits will always be valid, they are only invalid if
+   * a user reaches in and changes them to something invalid.
+   */
+  NP_FFI_PANIC_REASON_INVALID_ACTION_BITS = 2,
+};
+typedef uint8_t np_ffi_PanicReason;
+
+/**
+ * Discriminant for `V0DataElement`.
+ */
+enum np_ffi_V0DataElementKind {
+  /**
+   * A transmission Power (Tx Power) data-element.
+   * The associated payload may be obtained via
+   * `V0DataElement#into_tx_power`.
+   */
+  NP_FFI_V0_DATA_ELEMENT_KIND_TX_POWER = 0,
+  /**
+   * The Actions data-element.
+   * The associated payload may be obtained via
+   * `V0DataElement#into_actions`.
+   */
+  NP_FFI_V0_DATA_ELEMENT_KIND_ACTIONS = 1,
+};
+typedef uint8_t np_ffi_V0DataElementKind;
+
+/**
+ *A `#[repr(C)]` handle to a value of type `super::CredentialBookInternals`.
+ */
+typedef struct {
+  uint64_t handle_id;
+} np_ffi_CredentialBook;
+
+/**
+ * Result type for `create_credential_book`
+ */
+enum np_ffi_CreateCredentialBookResult_Tag {
+  NP_FFI_CREATE_CREDENTIAL_BOOK_RESULT_NO_SPACE_LEFT = 0,
+  NP_FFI_CREATE_CREDENTIAL_BOOK_RESULT_SUCCESS = 1,
+};
+typedef uint8_t np_ffi_CreateCredentialBookResult_Tag;
+
+typedef union {
+  np_ffi_CreateCredentialBookResult_Tag tag;
+  struct {
+    np_ffi_CreateCredentialBookResult_Tag success_tag;
+    np_ffi_CredentialBook success;
+  };
+} np_ffi_CreateCredentialBookResult;
+
+/**
+ *A `#[repr(C)]` handle to a value of type `super::V0PayloadInternals`.
+ */
+typedef struct {
+  uint64_t handle_id;
+} np_ffi_V0Payload;
+
+/**
+ * Represents a deserialized V0 advertisement whose DE contents may be read
+ */
+typedef struct {
+  uint8_t num_des;
+  np_ffi_V0Payload payload;
+  np_ffi_DeserializedV0Identity identity;
+} np_ffi_LegibleDeserializedV0Advertisement;
+
+/**
+ * Represents a deserialized V0 advertisement
+ */
+typedef enum {
+  NP_FFI_DESERIALIZED_V0_ADVERTISEMENT_LEGIBLE,
+  NP_FFI_DESERIALIZED_V0_ADVERTISEMENT_NO_MATCHING_CREDENTIALS,
+} np_ffi_DeserializedV0Advertisement_Tag;
+
+typedef struct {
+  np_ffi_DeserializedV0Advertisement_Tag tag;
+  union {
+    struct {
+      np_ffi_LegibleDeserializedV0Advertisement legible;
+    };
+  };
+} np_ffi_DeserializedV0Advertisement;
+
+/**
+ *A `#[repr(C)]` handle to a value of type `super::LegibleV1SectionsInternals`.
+ */
+typedef struct {
+  uint64_t handle_id;
+} np_ffi_LegibleV1Sections;
+
+/**
+ * Representation of a deserialized V1 advertisement
+ */
+typedef struct {
+  uint8_t num_legible_sections;
+  uint8_t num_undecryptable_sections;
+  np_ffi_LegibleV1Sections legible_sections;
+} np_ffi_DeserializedV1Advertisement;
+
+/**
+ * The result of calling `np_ffi_deserialize_advertisement`.
+ * Must be explicitly deallocated after use with
+ * a corresponding `np_ffi_deallocate_deserialize_advertisement_result`
+ */
+enum np_ffi_DeserializeAdvertisementResult_Tag {
+  /**
+   * Deserializing the advertisement failed, for some reason or another.
+   * `DeserializeAdvertisementResultKind::Error` is the associated enum tag.
+   */
+  NP_FFI_DESERIALIZE_ADVERTISEMENT_RESULT_ERROR,
+  /**
+   * The advertisement was correctly deserialized, and it's a V0 advertisement.
+   * `DeserializeAdvertisementResultKind::V0` is the associated enum tag.
+   */
+  NP_FFI_DESERIALIZE_ADVERTISEMENT_RESULT_V0,
+  /**
+   * The advertisement was correctly deserialized, and it's a V1 advertisement.
+   * `DeserializeAdvertisementResultKind::V1` is the associated enum tag.
+   */
+  NP_FFI_DESERIALIZE_ADVERTISEMENT_RESULT_V1,
+};
+typedef uint8_t np_ffi_DeserializeAdvertisementResult_Tag;
+
+typedef union {
+  np_ffi_DeserializeAdvertisementResult_Tag tag;
+  struct {
+    np_ffi_DeserializeAdvertisementResult_Tag v0_tag;
+    np_ffi_DeserializedV0Advertisement v0;
+  };
+  struct {
+    np_ffi_DeserializeAdvertisementResult_Tag v1_tag;
+    np_ffi_DeserializedV1Advertisement v1;
+  };
+} np_ffi_DeserializeAdvertisementResult;
+
+/**
+ * A byte-string with a maximum size of N,
+ * where only the first `len` bytes are considered
+ * to contain the actual payload. N is only
+ * permitted to be between 0 and 255.
+ */
+typedef struct {
+  uint8_t len;
+  uint8_t bytes[255];
+} np_ffi_ByteBuffer_255;
+
+/**
+ * Represents the raw contents of the service payload data
+ * under the Nearby Presence service UUID
+ */
+typedef struct {
+  np_ffi_ByteBuffer_255 bytes;
+} np_ffi_RawAdvertisementPayload;
+
+/**
+ * Representation of a transmission power,
+ * as used for the Tx Power DE in V0 and V1.
+ */
+typedef struct {
+  int8_t tx_power;
+} np_ffi_TxPower;
+
+/**
+ * The bitfield data of a VOActions data element
+ */
+typedef struct {
+  uint32_t bitfield;
+} np_ffi_V0ActionBits;
+
+/**
+ * Representation of the Actions DE in V0.
+ */
+typedef enum {
+  /**
+   * A set of action bits which were present in a plaintext identity advertisement
+   */
+  NP_FFI_V0_ACTIONS_PLAINTEXT,
+  /**
+   * A set of action bits which were present in a encrypted identity advertisement
+   */
+  NP_FFI_V0_ACTIONS_ENCRYPTED,
+} np_ffi_V0Actions_Tag;
+
+typedef struct {
+  np_ffi_V0Actions_Tag tag;
+  union {
+    struct {
+      np_ffi_V0ActionBits plaintext;
+    };
+    struct {
+      np_ffi_V0ActionBits encrypted;
+    };
+  };
+} np_ffi_V0Actions;
+
+/**
+ * Representation of a V0 data element.
+ */
+typedef enum {
+  NP_FFI_V0_DATA_ELEMENT_TX_POWER,
+  NP_FFI_V0_DATA_ELEMENT_ACTIONS,
+} np_ffi_V0DataElement_Tag;
+
+typedef struct {
+  np_ffi_V0DataElement_Tag tag;
+  union {
+    struct {
+      np_ffi_TxPower tx_power;
+    };
+    struct {
+      np_ffi_V0Actions actions;
+    };
+  };
+} np_ffi_V0DataElement;
+
+/**
+ * The result of `V0Payload#get_de`.
+ */
+typedef enum {
+  NP_FFI_GET_V0DE_RESULT_SUCCESS,
+  NP_FFI_GET_V0DE_RESULT_ERROR,
+} np_ffi_GetV0DEResult_Tag;
+
+typedef struct {
+  np_ffi_GetV0DEResult_Tag tag;
+  union {
+    struct {
+      np_ffi_V0DataElement success;
+    };
+  };
+} np_ffi_GetV0DEResult;
+
+/**
+ * Handle to a deserialized V1 section
+ */
+typedef struct {
+  np_ffi_LegibleV1Sections legible_sections_handle;
+  uint8_t legible_section_index;
+  uint8_t num_des;
+  np_ffi_DeserializedV1IdentityKind identity_tag;
+} np_ffi_DeserializedV1Section;
+
+/**
+ * The result of attempting to get a particular V1 section
+ * from its' index within the list of legible sections
+ * via `DeserializedV1Advertisement::get_section`.
+ */
+typedef enum {
+  NP_FFI_GET_V1_SECTION_RESULT_ERROR,
+  NP_FFI_GET_V1_SECTION_RESULT_SUCCESS,
+} np_ffi_GetV1SectionResult_Tag;
+
+typedef struct {
+  np_ffi_GetV1SectionResult_Tag tag;
+  union {
+    struct {
+      np_ffi_DeserializedV1Section success;
+    };
+  };
+} np_ffi_GetV1SectionResult;
+
+/**
+ * Representation of the data-element type tag
+ * of a V1 data element.
+ */
+typedef struct {
+  uint32_t code;
+} np_ffi_V1DEType;
+
+/**
+ * A byte-string with a maximum size of N,
+ * where only the first `len` bytes are considered
+ * to contain the actual payload. N is only
+ * permitted to be between 0 and 255.
+ */
+typedef struct {
+  uint8_t len;
+  uint8_t bytes[127];
+} np_ffi_ByteBuffer_127;
+
+/**
+ * FFI-transmissible representation of a generic V1 data-element.
+ * This representation is stable, and so you may directly
+ * reference this struct's fields if you wish.
+ */
+typedef struct {
+  /**
+   * The DE type code of this generic data-element.
+   */
+  np_ffi_V1DEType de_type;
+  /**
+   * The raw data-element byte payload, up to
+   * 127 bytes in length.
+   */
+  np_ffi_ByteBuffer_127 payload;
+} np_ffi_GenericV1DataElement;
+
+/**
+ * FFI-transmissible representation of a V1 data-element
+ */
+typedef enum {
+  /**
+   * A "generic" V1 data-element, for which we have no
+   * particular information about its schema (just
+   * a DE type code and a byte payload.)
+   */
+  NP_FFI_V1_DATA_ELEMENT_GENERIC,
+} np_ffi_V1DataElement_Tag;
+
+typedef struct {
+  np_ffi_V1DataElement_Tag tag;
+  union {
+    struct {
+      np_ffi_GenericV1DataElement generic;
+    };
+  };
+} np_ffi_V1DataElement;
+
+/**
+ * Represents the result of the `DeserializedV1Section#get_de` operation.
+ */
+typedef enum {
+  NP_FFI_GET_V1DE_RESULT_ERROR,
+  NP_FFI_GET_V1DE_RESULT_SUCCESS,
+} np_ffi_GetV1DEResult_Tag;
+
+typedef struct {
+  np_ffi_GetV1DEResult_Tag tag;
+  union {
+    struct {
+      np_ffi_V1DataElement success;
+    };
+  };
+} np_ffi_GetV1DEResult;
+
+/**
+ * Overrides the global panic handler to be used when NP C FFI calls panic.
+ * This method will only have an effect on the global panic-handler
+ * the first time it's called, and this method will return `true`
+ * to indicate that the panic handler was successfully set.
+ * All subsequent calls to this method
+ * will simply ignore the argument and return `false`.
+ *
+ * If the passed function pointer is non-null,
+ * then we will call it upon every panic,
+ * followed by the default panicking behavior for
+ * the platform (in the case where the user-specified
+ * function does not terminate or hang the running process.)
+ *
+ * Otherwise, we will resort to the
+ * default panicking behavior for the system, which
+ * is a printed stack trace followed by an abort
+ * when this crate is compiled with `std`,
+ * but a bare `loop { }` when this crate is compiled without.
+ */
+bool np_ffi_global_config_panic_handler(void (*handler)(np_ffi_PanicReason));
+
+/**
+ * Sets an override to the number of shards to employ in the NP FFI's
+ * internal handle-maps, which places an upper bound on the number
+ * of writing threads which may make progress at any one time
+ * when concurrently accessing handles of the same type.
+ *
+ * By default, this value will be set to 16, or in `std` environments,
+ * the minimum of 16 and the number of available hardware threads.
+ * A shard value override of zero will be interpreted the same
+ * as this default.
+ *
+ * Setting this value will have no effect if the handle-maps for the
+ * API have already begun being used by the client code, and any
+ * values set will take effect upon the first usage of _any_ non-`np_ffi_global_config_set`
+ * API call.
+ */
+void np_ffi_global_config_set_num_shards(uint8_t num_shards);
+
+/**
+ * Sets the maximum number of active handles to credential books
+ * which may be active at any one time.
+ * Default value: Max value.
+ * Max value: `u32::MAX - 1`.
+ *
+ * Useful for bounding the maximum memory used by the client application
+ * on credential books in constrained-memory environments.
+ *
+ * Setting this value will have no effect if the handle-maps for the
+ * API have already begun being used by the client code, and any
+ * values set will take effect upon the first usage of any API
+ * call utilizing credential books.
+ */
+void np_ffi_global_config_set_max_num_credential_books(uint32_t max_num_credential_books);
+
+/**
+ * Sets the maximum number of active handles to deserialized v0
+ * advertisements which may be active at any one time.
+ *
+ * Useful for bounding the maximum memory used by the client application
+ * on v0 advertisements in constrained-memory environments.
+ *
+ * Default value: Max value.
+ * Max value: `u32::MAX - 1`.
+ *
+ * Setting this value will have no effect if the handle-maps for the
+ * API have already begun being used by the client code, and any
+ * values set will take effect upon the first usage of any API
+ * call which references or returns a deserialized V0 advertisement.
+ */
+void np_ffi_global_config_set_max_num_deserialized_v0_advertisements(uint32_t max_num_deserialized_v0_advertisements);
+
+/**
+ * Sets the maximum number of active handles to deserialized v1
+ * advertisements which may be active at any one time.
+ *
+ * Useful for bounding the maximum memory used by the client application
+ * on v1 advertisements in constrained-memory environments.
+ *
+ * Default value: Max value.
+ * Max value: `u32::MAX - 1`.
+ *
+ * Setting this value will have no effect if the handle-maps for the
+ * API have already begun being used by the client code, and any
+ * values set will take effect upon the first usage of any API
+ * call which references or returns a deserialized V1 advertisement.
+ */
+void np_ffi_global_config_set_max_num_deserialized_v1_advertisements(uint32_t max_num_deserialized_v1_advertisements);
+
+/**
+ * Allocates a new credential-book, returning a handle to the created object
+ */
+np_ffi_CreateCredentialBookResult np_ffi_create_credential_book(void);
+
+/**
+ * Gets the tag of a `CreateCredentialBookResult` tagged enum.
+ */
+np_ffi_CreateCredentialBookResultKind np_ffi_CreateCredentialBookResult_kind(np_ffi_CreateCredentialBookResult result);
+
+/**
+ * Casts a `CreateCredentialBookResult` to the `SUCCESS` variant, panicking in the
+ * case where the passed value is of a different enum variant.
+ */
+np_ffi_CredentialBook np_ffi_CreateCredentialBookResult_into_SUCCESS(np_ffi_CreateCredentialBookResult result);
+
+/**
+ * Deallocates a credential-book by its handle
+ */
+np_ffi_DeallocateResult np_ffi_deallocate_credential_book(np_ffi_CredentialBook credential_book);
+
+/**
+ * Attempts to deserialize an advertisement with the given service-data
+ * payload (presumed to be under the NP service UUID) using credentials
+ * pulled from the given credential-book.
+ */
+np_ffi_DeserializeAdvertisementResult np_ffi_deserialize_advertisement(np_ffi_RawAdvertisementPayload adv_payload,
+                                                                       np_ffi_CredentialBook credential_book);
+
+/**
+ * Gets the tag of a `DeserializeAdvertisementResult` tagged-union.
+ */
+np_ffi_DeserializeAdvertisementResultKind np_ffi_DeserializeAdvertisementResult_kind(np_ffi_DeserializeAdvertisementResult result);
+
+/**
+ * Casts a `DeserializeAdvertisementResult` to the `V0` variant, panicking in the
+ * case where the passed value is of a different enum variant.
+ */
+np_ffi_DeserializedV0Advertisement np_ffi_DeserializeAdvertisementResult_into_V0(np_ffi_DeserializeAdvertisementResult result);
+
+/**
+ * Casts a `DeserializeAdvertisementResult` to the `V1` variant, panicking in the
+ * case where the passed value is of a different enum variant.
+ */
+np_ffi_DeserializedV1Advertisement np_ffi_DeserializeAdvertisementResult_into_V1(np_ffi_DeserializeAdvertisementResult result);
+
+/**
+ * Deallocates any internal data referenced by a `DeserializeAdvertisementResult`. This should only
+ * be used if into_V0 or into_V1, have not been called yet as it shares the same underlying
+ * resource.
+ */
+np_ffi_DeallocateResult np_ffi_deallocate_deserialize_advertisement_result(np_ffi_DeserializeAdvertisementResult result);
+
+/**
+ * Deallocates any internal data referenced by a `DeserializedV0Advertisement`
+ */
+np_ffi_DeallocateResult np_ffi_deallocate_deserialized_V0_advertisement(np_ffi_DeserializedV0Advertisement adv);
+
+/**
+ * Deallocates any internal data referenced by a `DeserializedV1Advertisement`
+ */
+np_ffi_DeallocateResult np_ffi_deallocate_deserialized_V1_advertisement(np_ffi_DeserializedV1Advertisement adv);
+
+/**
+ * Gets the tag of a `DeserializedV0Advertisement` tagged-union.
+ */
+np_ffi_DeserializedV0AdvertisementKind np_ffi_DeserializedV0Advertisement_kind(np_ffi_DeserializedV0Advertisement result);
+
+/**
+ * Casts a `DeserializedV0Advertisement` to the `Legible` variant, panicking in the
+ * case where the passed value is of a different enum variant.
+ */
+np_ffi_LegibleDeserializedV0Advertisement np_ffi_DeserializedV0Advertisement_into_LEGIBLE(np_ffi_DeserializedV0Advertisement adv);
+
+/**
+ * Gets the number of DEs in a legible deserialized advertisement.
+ * Suitable as an iteration bound for `V0Payload#get_de`.
+ */
+uint8_t np_ffi_LegibleDeserializedV0Advertisement_get_num_des(np_ffi_LegibleDeserializedV0Advertisement adv);
+
+/**
+ * Gets just the data-element payload of a `LegibleDeserializedV0Advertisement`.
+ */
+np_ffi_V0Payload np_ffi_LegibleDeserializedV0Advertisement_into_payload(np_ffi_LegibleDeserializedV0Advertisement adv);
+
+/**
+ * Gets just the identity information associated with a `LegibleDeserializedV0Advertisement`.
+ */
+np_ffi_DeserializedV0Identity np_ffi_LegibleDeserializedV0Advertisement_into_identity(np_ffi_LegibleDeserializedV0Advertisement adv);
+
+/**
+ * Deallocates any internal data of a `LegibleDeserializedV0Advertisement`
+ */
+np_ffi_DeallocateResult np_ffi_deallocate_legible_v0_advertisement(np_ffi_LegibleDeserializedV0Advertisement adv);
+
+/**
+ * Gets the tag of the `DeserializedV0Identity` tagged-union.
+ */
+np_ffi_DeserializedV0IdentityKind np_ffi_DeserializedV0Identity_kind(np_ffi_DeserializedV0Identity identity);
+
+/**
+ * Attempts to get the data-element with the given index in the passed v0 adv payload
+ */
+np_ffi_GetV0DEResult np_ffi_V0Payload_get_de(np_ffi_V0Payload payload, uint8_t index);
+
+/**
+ * Deallocates any internal data of a `V0Payload`
+ */
+np_ffi_DeallocateResult np_ffi_deallocate_v0_payload(np_ffi_V0Payload payload);
+
+/**
+ * Gets the tag of a `GetV0DEResult` tagged-union.
+ */
+np_ffi_GetV0DEResultKind np_ffi_GetV0DEResult_kind(np_ffi_GetV0DEResult result);
+
+/**
+ * Casts a `GetV0DEResult` to the `Success` variant, panicking in the
+ * case where the passed value is of a different enum variant.
+ */
+np_ffi_V0DataElement np_ffi_GetV0DEResult_into_SUCCESS(np_ffi_GetV0DEResult result);
+
+/**
+ * Gets the tag of a `V0DataElement` tagged-union.
+ */
+np_ffi_V0DataElementKind np_ffi_V0DataElement_kind(np_ffi_V0DataElement de);
+
+/**
+ * Casts a `V0DataElement` to the `TxPower` variant, panicking in the
+ * case where the passed value is of a different enum variant.
+ */
+np_ffi_TxPower np_ffi_V0DataElement_into_TX_POWER(np_ffi_V0DataElement de);
+
+/**
+ * Casts a `V0DataElement` to the `Actions` variant, panicking in the
+ * case where the passed value is of a different enum variant.
+ */
+np_ffi_V0Actions np_ffi_V0DataElement_into_ACTIONS(np_ffi_V0DataElement de);
+
+/**
+ * Return whether a boolean action type is set in this data element
+ */
+bool np_ffi_V0Actions_has_action(np_ffi_V0Actions actions, np_ffi_BooleanActionType action_type);
+
+/**
+ * Gets the 4 bit context sync sequence number as a u8 from this data element
+ */
+uint8_t np_ffi_V0Actions_get_context_sync_sequence_number(np_ffi_V0Actions actions);
+
+/**
+ * Return whether a boolean action type is set in this data element
+ */
+uint32_t np_ffi_V0Actions_as_u32(np_ffi_V0Actions actions);
+
+/**
+ * Gets the number of legible sections on a deserialized V1 advertisement.
+ * Suitable as an index bound for the second argument of
+ * `np_ffi_DeserializedV1Advertisement#get_section`.
+ */
+uint8_t np_ffi_DeserializedV1Advertisement_get_num_legible_sections(np_ffi_DeserializedV1Advertisement adv);
+
+/**
+ * Gets the number of sections on a deserialized V1 advertisement which
+ * were unable to be decrypted with the credentials that the receiver possesses.
+ */
+uint8_t np_ffi_DeserializedV1Advertisement_get_num_undecryptable_sections(np_ffi_DeserializedV1Advertisement adv);
+
+/**
+ * Gets the legible section with the given index in a deserialized V1 advertisement.
+ */
+np_ffi_GetV1SectionResult np_ffi_DeserializedV1Advertisement_get_section(np_ffi_DeserializedV1Advertisement adv,
+                                                                         uint8_t legible_section_index);
+
+/**
+ * Gets the tag of the `GetV1SectionResult` tagged-union.
+ */
+np_ffi_GetV1SectionResultKind np_ffi_GetV1SectionResult_kind(np_ffi_GetV1SectionResult result);
+
+/**
+ * Casts a `GetV1SectionResult` to the `Success` variant, panicking in the
+ * case where the passed value is of a different enum variant.
+ */
+np_ffi_DeserializedV1Section np_ffi_GetV1SectionResult_into_SUCCESS(np_ffi_GetV1SectionResult result);
+
+/**
+ * Gets the number of data elements in a deserialized v1 section.
+ * Suitable as an iteration bound for the second argument of
+ * `np_ffi_DeserializedV1Section_get_de`.
+ */
+uint8_t np_ffi_DeserializedV1Section_get_num_des(np_ffi_DeserializedV1Section section);
+
+/**
+ * Gets the tag of the identity tagged-union used for the passed section.
+ */
+np_ffi_DeserializedV1IdentityKind np_ffi_DeserializedV1Section_get_identity_kind(np_ffi_DeserializedV1Section section);
+
+/**
+ * Gets the data-element with the given index in the passed section.
+ */
+np_ffi_GetV1DEResult np_ffi_DeserializedV1Section_get_de(np_ffi_DeserializedV1Section section,
+                                                         uint8_t de_index);
+
+/**
+ * Gets the tag of the `GetV1DEResult` tagged-union.
+ */
+np_ffi_GetV1DEResultKind np_ffi_GetV1DEResult_kind(np_ffi_GetV1DEResult result);
+
+/**
+ * Casts a `GetV1DEResult` to the `Success` vartiant, panicking in the
+ * case where the passed value is of a different enum variant.
+ */
+np_ffi_V1DataElement np_ffi_GetV1DEResult_into_SUCCESS(np_ffi_GetV1DEResult result);
+
+/**
+ * Converts a `V1DataElement` to a `GenericV1DataElement` which
+ * only maintains information about the DE's type-code and payload.
+ */
+np_ffi_GenericV1DataElement np_ffi_V1DataElement_to_generic(np_ffi_V1DataElement de);
+
+/**
+ * Extracts the numerical value of the given V1 DE type code as
+ * an unsigned 32-bit integer.
+ */
+uint32_t np_ffi_V1DEType_to_uint32_t(np_ffi_V1DEType de_type);
diff --git a/nearby/presence/np_c_ffi/include/cpp/np_cpp_ffi_functions.h b/nearby/presence/np_c_ffi/include/cpp/np_cpp_ffi_functions.h
new file mode 100644
index 0000000..3361c5d
--- /dev/null
+++ b/nearby/presence/np_c_ffi/include/cpp/np_cpp_ffi_functions.h
@@ -0,0 +1,268 @@
+/*
+ Copyright 2023 Google LLC
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+
+#pragma once
+
+/* Generated with cbindgen:0.24.5 */
+
+/*
+ WARNING: this file is autogenerated by cbindgen. Don't modify this manually.
+ Additionally, you should _not_ rely upon the layouts of the generated
+ structs and unions if you want your code to be forward-compatible,
+ unless a given type explicitly states in its documentation that it has
+ a guaranteed forward-compatible layout.
+ Instead, you should use _only_ the provided exported function symbols.
+*/
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+#include "np_cpp_ffi_types.h"
+
+namespace np_ffi {
+namespace internal {
+
+extern "C" {
+
+/// Overrides the global panic handler to be used when NP C FFI calls panic.
+/// This method will only have an effect on the global panic-handler
+/// the first time it's called, and this method will return `true`
+/// to indicate that the panic handler was successfully set.
+/// All subsequent calls to this method
+/// will simply ignore the argument and return `false`.
+///
+/// If the passed function pointer is non-null,
+/// then we will call it upon every panic,
+/// followed by the default panicking behavior for
+/// the platform (in the case where the user-specified
+/// function does not terminate or hang the running process.)
+///
+/// Otherwise, we will resort to the
+/// default panicking behavior for the system, which
+/// is a printed stack trace followed by an abort
+/// when this crate is compiled with `std`,
+/// but a bare `loop { }` when this crate is compiled without.
+bool np_ffi_global_config_panic_handler(void (*handler)(PanicReason));
+
+/// Sets an override to the number of shards to employ in the NP FFI's
+/// internal handle-maps, which places an upper bound on the number
+/// of writing threads which may make progress at any one time
+/// when concurrently accessing handles of the same type.
+///
+/// By default, this value will be set to 16, or in `std` environments,
+/// the minimum of 16 and the number of available hardware threads.
+/// A shard value override of zero will be interpreted the same
+/// as this default.
+///
+/// Setting this value will have no effect if the handle-maps for the
+/// API have already begun being used by the client code, and any
+/// values set will take effect upon the first usage of _any_ non-`np_ffi_global_config_set`
+/// API call.
+void np_ffi_global_config_set_num_shards(uint8_t num_shards);
+
+/// Sets the maximum number of active handles to credential books
+/// which may be active at any one time.
+/// Default value: Max value.
+/// Max value: `u32::MAX - 1`.
+///
+/// Useful for bounding the maximum memory used by the client application
+/// on credential books in constrained-memory environments.
+///
+/// Setting this value will have no effect if the handle-maps for the
+/// API have already begun being used by the client code, and any
+/// values set will take effect upon the first usage of any API
+/// call utilizing credential books.
+void np_ffi_global_config_set_max_num_credential_books(uint32_t max_num_credential_books);
+
+/// Sets the maximum number of active handles to deserialized v0
+/// advertisements which may be active at any one time.
+///
+/// Useful for bounding the maximum memory used by the client application
+/// on v0 advertisements in constrained-memory environments.
+///
+/// Default value: Max value.
+/// Max value: `u32::MAX - 1`.
+///
+/// Setting this value will have no effect if the handle-maps for the
+/// API have already begun being used by the client code, and any
+/// values set will take effect upon the first usage of any API
+/// call which references or returns a deserialized V0 advertisement.
+void np_ffi_global_config_set_max_num_deserialized_v0_advertisements(uint32_t max_num_deserialized_v0_advertisements);
+
+/// Sets the maximum number of active handles to deserialized v1
+/// advertisements which may be active at any one time.
+///
+/// Useful for bounding the maximum memory used by the client application
+/// on v1 advertisements in constrained-memory environments.
+///
+/// Default value: Max value.
+/// Max value: `u32::MAX - 1`.
+///
+/// Setting this value will have no effect if the handle-maps for the
+/// API have already begun being used by the client code, and any
+/// values set will take effect upon the first usage of any API
+/// call which references or returns a deserialized V1 advertisement.
+void np_ffi_global_config_set_max_num_deserialized_v1_advertisements(uint32_t max_num_deserialized_v1_advertisements);
+
+/// Allocates a new credential-book, returning a handle to the created object
+CreateCredentialBookResult np_ffi_create_credential_book();
+
+/// Gets the tag of a `CreateCredentialBookResult` tagged enum.
+CreateCredentialBookResultKind np_ffi_CreateCredentialBookResult_kind(CreateCredentialBookResult result);
+
+/// Casts a `CreateCredentialBookResult` to the `SUCCESS` variant, panicking in the
+/// case where the passed value is of a different enum variant.
+CredentialBook np_ffi_CreateCredentialBookResult_into_SUCCESS(CreateCredentialBookResult result);
+
+/// Deallocates a credential-book by its handle
+DeallocateResult np_ffi_deallocate_credential_book(CredentialBook credential_book);
+
+/// Attempts to deserialize an advertisement with the given service-data
+/// payload (presumed to be under the NP service UUID) using credentials
+/// pulled from the given credential-book.
+DeserializeAdvertisementResult np_ffi_deserialize_advertisement(RawAdvertisementPayload adv_payload,
+                                                                CredentialBook credential_book);
+
+/// Gets the tag of a `DeserializeAdvertisementResult` tagged-union.
+DeserializeAdvertisementResultKind np_ffi_DeserializeAdvertisementResult_kind(DeserializeAdvertisementResult result);
+
+/// Casts a `DeserializeAdvertisementResult` to the `V0` variant, panicking in the
+/// case where the passed value is of a different enum variant.
+DeserializedV0Advertisement np_ffi_DeserializeAdvertisementResult_into_V0(DeserializeAdvertisementResult result);
+
+/// Casts a `DeserializeAdvertisementResult` to the `V1` variant, panicking in the
+/// case where the passed value is of a different enum variant.
+DeserializedV1Advertisement np_ffi_DeserializeAdvertisementResult_into_V1(DeserializeAdvertisementResult result);
+
+/// Deallocates any internal data referenced by a `DeserializeAdvertisementResult`. This should only
+/// be used if into_V0 or into_V1, have not been called yet as it shares the same underlying
+/// resource.
+DeallocateResult np_ffi_deallocate_deserialize_advertisement_result(DeserializeAdvertisementResult result);
+
+/// Deallocates any internal data referenced by a `DeserializedV0Advertisement`
+DeallocateResult np_ffi_deallocate_deserialized_V0_advertisement(DeserializedV0Advertisement adv);
+
+/// Deallocates any internal data referenced by a `DeserializedV1Advertisement`
+DeallocateResult np_ffi_deallocate_deserialized_V1_advertisement(DeserializedV1Advertisement adv);
+
+/// Gets the tag of a `DeserializedV0Advertisement` tagged-union.
+DeserializedV0AdvertisementKind np_ffi_DeserializedV0Advertisement_kind(DeserializedV0Advertisement result);
+
+/// Casts a `DeserializedV0Advertisement` to the `Legible` variant, panicking in the
+/// case where the passed value is of a different enum variant.
+LegibleDeserializedV0Advertisement np_ffi_DeserializedV0Advertisement_into_LEGIBLE(DeserializedV0Advertisement adv);
+
+/// Gets the number of DEs in a legible deserialized advertisement.
+/// Suitable as an iteration bound for `V0Payload#get_de`.
+uint8_t np_ffi_LegibleDeserializedV0Advertisement_get_num_des(LegibleDeserializedV0Advertisement adv);
+
+/// Gets just the data-element payload of a `LegibleDeserializedV0Advertisement`.
+V0Payload np_ffi_LegibleDeserializedV0Advertisement_into_payload(LegibleDeserializedV0Advertisement adv);
+
+/// Gets just the identity information associated with a `LegibleDeserializedV0Advertisement`.
+DeserializedV0Identity np_ffi_LegibleDeserializedV0Advertisement_into_identity(LegibleDeserializedV0Advertisement adv);
+
+/// Deallocates any internal data of a `LegibleDeserializedV0Advertisement`
+DeallocateResult np_ffi_deallocate_legible_v0_advertisement(LegibleDeserializedV0Advertisement adv);
+
+/// Gets the tag of the `DeserializedV0Identity` tagged-union.
+DeserializedV0IdentityKind np_ffi_DeserializedV0Identity_kind(DeserializedV0Identity identity);
+
+/// Attempts to get the data-element with the given index in the passed v0 adv payload
+GetV0DEResult np_ffi_V0Payload_get_de(V0Payload payload, uint8_t index);
+
+/// Deallocates any internal data of a `V0Payload`
+DeallocateResult np_ffi_deallocate_v0_payload(V0Payload payload);
+
+/// Gets the tag of a `GetV0DEResult` tagged-union.
+GetV0DEResultKind np_ffi_GetV0DEResult_kind(GetV0DEResult result);
+
+/// Casts a `GetV0DEResult` to the `Success` variant, panicking in the
+/// case where the passed value is of a different enum variant.
+V0DataElement np_ffi_GetV0DEResult_into_SUCCESS(GetV0DEResult result);
+
+/// Gets the tag of a `V0DataElement` tagged-union.
+V0DataElementKind np_ffi_V0DataElement_kind(V0DataElement de);
+
+/// Casts a `V0DataElement` to the `TxPower` variant, panicking in the
+/// case where the passed value is of a different enum variant.
+TxPower np_ffi_V0DataElement_into_TX_POWER(V0DataElement de);
+
+/// Casts a `V0DataElement` to the `Actions` variant, panicking in the
+/// case where the passed value is of a different enum variant.
+V0Actions np_ffi_V0DataElement_into_ACTIONS(V0DataElement de);
+
+/// Return whether a boolean action type is set in this data element
+bool np_ffi_V0Actions_has_action(V0Actions actions, BooleanActionType action_type);
+
+/// Gets the 4 bit context sync sequence number as a u8 from this data element
+uint8_t np_ffi_V0Actions_get_context_sync_sequence_number(V0Actions actions);
+
+/// Return whether a boolean action type is set in this data element
+uint32_t np_ffi_V0Actions_as_u32(V0Actions actions);
+
+/// Gets the number of legible sections on a deserialized V1 advertisement.
+/// Suitable as an index bound for the second argument of
+/// `np_ffi_DeserializedV1Advertisement#get_section`.
+uint8_t np_ffi_DeserializedV1Advertisement_get_num_legible_sections(DeserializedV1Advertisement adv);
+
+/// Gets the number of sections on a deserialized V1 advertisement which
+/// were unable to be decrypted with the credentials that the receiver possesses.
+uint8_t np_ffi_DeserializedV1Advertisement_get_num_undecryptable_sections(DeserializedV1Advertisement adv);
+
+/// Gets the legible section with the given index in a deserialized V1 advertisement.
+GetV1SectionResult np_ffi_DeserializedV1Advertisement_get_section(DeserializedV1Advertisement adv,
+                                                                  uint8_t legible_section_index);
+
+/// Gets the tag of the `GetV1SectionResult` tagged-union.
+GetV1SectionResultKind np_ffi_GetV1SectionResult_kind(GetV1SectionResult result);
+
+/// Casts a `GetV1SectionResult` to the `Success` variant, panicking in the
+/// case where the passed value is of a different enum variant.
+DeserializedV1Section np_ffi_GetV1SectionResult_into_SUCCESS(GetV1SectionResult result);
+
+/// Gets the number of data elements in a deserialized v1 section.
+/// Suitable as an iteration bound for the second argument of
+/// `np_ffi_DeserializedV1Section_get_de`.
+uint8_t np_ffi_DeserializedV1Section_get_num_des(DeserializedV1Section section);
+
+/// Gets the tag of the identity tagged-union used for the passed section.
+DeserializedV1IdentityKind np_ffi_DeserializedV1Section_get_identity_kind(DeserializedV1Section section);
+
+/// Gets the data-element with the given index in the passed section.
+GetV1DEResult np_ffi_DeserializedV1Section_get_de(DeserializedV1Section section, uint8_t de_index);
+
+/// Gets the tag of the `GetV1DEResult` tagged-union.
+GetV1DEResultKind np_ffi_GetV1DEResult_kind(GetV1DEResult result);
+
+/// Casts a `GetV1DEResult` to the `Success` vartiant, panicking in the
+/// case where the passed value is of a different enum variant.
+V1DataElement np_ffi_GetV1DEResult_into_SUCCESS(GetV1DEResult result);
+
+/// Converts a `V1DataElement` to a `GenericV1DataElement` which
+/// only maintains information about the DE's type-code and payload.
+GenericV1DataElement np_ffi_V1DataElement_to_generic(V1DataElement de);
+
+/// Extracts the numerical value of the given V1 DE type code as
+/// an unsigned 32-bit integer.
+uint32_t np_ffi_V1DEType_to_uint32_t(V1DEType de_type);
+
+} // extern "C"
+
+} // namespace internal
+} // namespace np_ffi
diff --git a/nearby/presence/np_c_ffi/include/cpp/np_cpp_ffi_types.h b/nearby/presence/np_c_ffi/include/cpp/np_cpp_ffi_types.h
new file mode 100644
index 0000000..4d66308
--- /dev/null
+++ b/nearby/presence/np_c_ffi/include/cpp/np_cpp_ffi_types.h
@@ -0,0 +1,456 @@
+/*
+ Copyright 2023 Google LLC
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
+
+
+#pragma once
+
+/* Generated with cbindgen:0.24.5 */
+
+/*
+ WARNING: this file is autogenerated by cbindgen. Don't modify this manually.
+ Additionally, you should _not_ rely upon the layouts of the generated
+ structs and unions if you want your code to be forward-compatible,
+ unless a given type explicitly states in its documentation that it has
+ a guaranteed forward-compatible layout.
+ Instead, you should use _only_ the provided exported function symbols.
+*/
+
+#include <cstdarg>
+#include <cstdint>
+#include <cstdlib>
+#include <ostream>
+#include <new>
+
+namespace np_ffi {
+namespace internal {
+
+/// The possible boolean action types which can be present in an Actions data element
+enum class BooleanActionType : uint8_t {
+  ActiveUnlock = 8,
+  NearbyShare = 9,
+  InstantTethering = 10,
+  PhoneHub = 11,
+  PresenceManager = 12,
+  Finder = 13,
+  FastPairSass = 14,
+};
+
+/// Discriminant for `CreateCredentialBookResult`
+enum class CreateCredentialBookResultKind : uint8_t {
+  /// There was no space left to create a new credential book
+  NoSpaceLeft = 0,
+  /// We created a new credential book behind the given handle.
+  /// The associated payload may be obtained via
+  /// `CreateCredentialBookResult#into_success()`.
+  Success = 1,
+};
+
+/// A result-type enum which tells the caller whether/not a deallocation
+/// succeeded or failed due to the requested handle not being present.
+enum class DeallocateResult {
+  /// The requested handle to deallocate was not present in the map
+  NotPresent = 0,
+  /// The object behind the handle was successfully deallocated
+  Success = 1,
+};
+
+/// Discriminant for `DeserializeAdvertisementResult`.
+enum class DeserializeAdvertisementResultKind : uint8_t {
+  /// Deserializing the advertisement failed, for some reason or another.
+  Error = 0,
+  /// The advertisement was correctly deserialized, and it's a V0 advertisement.
+  /// `DeserializeAdvertisementResult#into_v0()` is the corresponding cast
+  /// to the associated enum variant.
+  V0 = 1,
+  /// The advertisement was correctly deserialized, and it's a V1 advertisement.
+  /// `DeserializeAdvertisementResult#into_v1()` is the corresponding cast
+  /// to the associated enum variant.
+  V1 = 2,
+};
+
+/// Discriminant for possible results of V0 advertisement deserialization
+enum class DeserializedV0AdvertisementKind : uint8_t {
+  /// The deserialized V0 advertisement was legible.
+  /// The associated payload may be obtained via
+  /// `DeserializedV0Advertisement#into_legible`.
+  Legible = 0,
+  /// The deserialized V0 advertisement is illegible,
+  /// likely meaning that the receiver does not hold
+  /// the proper credentials to be able to read
+  /// the received advertisement.
+  NoMatchingCredentials = 1,
+};
+
+/// Represents deserialized information about the V0 identity utilized
+/// by a deserialized V0 advertisement
+enum class DeserializedV0Identity {
+  Plaintext,
+  Decrypted,
+};
+
+/// Discriminant for `DeserializedV0Identity`.
+enum class DeserializedV0IdentityKind : uint8_t {
+  /// The deserialized identity was a plaintext identity.
+  Plaintext = 0,
+  /// The deserialized identity was some decrypted identity.
+  Decrypted = 1,
+};
+
+/// Discriminant for `DeserializedV1Identity`.
+enum class DeserializedV1IdentityKind : uint8_t {
+  /// The deserialized v1 identity was plaintext
+  Plaintext = 0,
+  /// The deserialized v1 identity corresponded
+  /// to some kind of decrypted identity.
+  Decrypted = 1,
+};
+
+/// Discriminant of `GetV0DEResult`.
+enum class GetV0DEResultKind : uint8_t {
+  /// The attempt to get the DE succeeded.
+  /// The associated payload may be obtained via
+  /// `GetV0DEResult#into_success`.
+  Success = 0,
+  /// The attempt to get the DE failed,
+  /// possibly due to the requested index being
+  /// out-of-bounds or due to the advertisement
+  /// having been previously deallocated.
+  Error = 1,
+};
+
+/// Discriminant for the `GetV1DEResult` enum.
+enum class GetV1DEResultKind : uint8_t {
+  /// Attempting to get the DE at the given position failed,
+  /// possibly due to the index being out-of-bounds or due
+  /// to the whole advertisement having been previously deallocated.
+  Error = 0,
+  /// Attempting to get the DE at the given position succeeded.
+  /// The underlying DE may be extracted with `GetV1DEResult#into_success`.
+  Success = 1,
+};
+
+/// Discriminant for `GetV1SectionResult`
+enum class GetV1SectionResultKind : uint8_t {
+  /// The attempt to get the section failed,
+  /// possibly due to the section index being
+  /// out-of-bounds or due to the underlying
+  /// advertisement having already been deallocated.
+  Error = 0,
+  /// The attempt to get the section succeeded.
+  /// The wrapped section may be obtained via
+  /// `GetV1SectionResult#into_success`.
+  Success = 1,
+};
+
+/// Structure for categorized reasons for why a NP C FFI call may
+/// be panicking.
+enum class PanicReason : uint8_t {
+  /// Some enum cast to a variant failed. Utilized
+  /// for failed enum casts of all enums.
+  ///
+  /// (That is, this is the catch-all panic reason for enum
+  /// casts where there is not a more specific reason
+  /// in some other variant of this enum.)
+  EnumCastFailed = 0,
+  /// The panic handler is used to assert conditions are true to avoid programmer errors.
+  /// If a failed assert condition is hit, this panic handler is invoked with this reason.
+  AssertFailed = 1,
+  /// Error returned if action bits inside of a V0Actions struct are invalid. If the struct was
+  /// created by this deserializer, the bits will always be valid, they are only invalid if
+  /// a user reaches in and changes them to something invalid.
+  InvalidActionBits = 2,
+};
+
+/// Discriminant for `V0DataElement`.
+enum class V0DataElementKind : uint8_t {
+  /// A transmission Power (Tx Power) data-element.
+  /// The associated payload may be obtained via
+  /// `V0DataElement#into_tx_power`.
+  TxPower = 0,
+  /// The Actions data-element.
+  /// The associated payload may be obtained via
+  /// `V0DataElement#into_actions`.
+  Actions = 1,
+};
+
+///A `#[repr(C)]` handle to a value of type `super::CredentialBookInternals`.
+struct CredentialBook {
+  uint64_t handle_id;
+};
+
+/// Result type for `create_credential_book`
+union CreateCredentialBookResult {
+  enum class Tag : uint8_t {
+    NoSpaceLeft = 0,
+    Success = 1,
+  };
+
+  struct Success_Body {
+    Tag tag;
+    CredentialBook _0;
+  };
+
+  struct {
+    Tag tag;
+  };
+  Success_Body success;
+};
+
+///A `#[repr(C)]` handle to a value of type `super::V0PayloadInternals`.
+struct V0Payload {
+  uint64_t handle_id;
+};
+
+/// Represents a deserialized V0 advertisement whose DE contents may be read
+struct LegibleDeserializedV0Advertisement {
+  uint8_t num_des;
+  V0Payload payload;
+  DeserializedV0Identity identity;
+};
+
+/// Represents a deserialized V0 advertisement
+struct DeserializedV0Advertisement {
+  enum class Tag {
+    Legible,
+    NoMatchingCredentials,
+  };
+
+  struct Legible_Body {
+    LegibleDeserializedV0Advertisement _0;
+  };
+
+  Tag tag;
+  union {
+    Legible_Body legible;
+  };
+};
+
+///A `#[repr(C)]` handle to a value of type `super::LegibleV1SectionsInternals`.
+struct LegibleV1Sections {
+  uint64_t handle_id;
+};
+
+/// Representation of a deserialized V1 advertisement
+struct DeserializedV1Advertisement {
+  uint8_t num_legible_sections;
+  uint8_t num_undecryptable_sections;
+  LegibleV1Sections legible_sections;
+};
+
+/// The result of calling `np_ffi_deserialize_advertisement`.
+/// Must be explicitly deallocated after use with
+/// a corresponding `np_ffi_deallocate_deserialize_advertisement_result`
+union DeserializeAdvertisementResult {
+  enum class Tag : uint8_t {
+    /// Deserializing the advertisement failed, for some reason or another.
+    /// `DeserializeAdvertisementResultKind::Error` is the associated enum tag.
+    Error,
+    /// The advertisement was correctly deserialized, and it's a V0 advertisement.
+    /// `DeserializeAdvertisementResultKind::V0` is the associated enum tag.
+    V0,
+    /// The advertisement was correctly deserialized, and it's a V1 advertisement.
+    /// `DeserializeAdvertisementResultKind::V1` is the associated enum tag.
+    V1,
+  };
+
+  struct V0_Body {
+    Tag tag;
+    DeserializedV0Advertisement _0;
+  };
+
+  struct V1_Body {
+    Tag tag;
+    DeserializedV1Advertisement _0;
+  };
+
+  struct {
+    Tag tag;
+  };
+  V0_Body v0;
+  V1_Body v1;
+};
+
+/// A byte-string with a maximum size of N,
+/// where only the first `len` bytes are considered
+/// to contain the actual payload. N is only
+/// permitted to be between 0 and 255.
+template<uintptr_t N>
+struct ByteBuffer {
+  uint8_t len;
+  uint8_t bytes[N];
+};
+
+/// Represents the raw contents of the service payload data
+/// under the Nearby Presence service UUID
+struct RawAdvertisementPayload {
+  ByteBuffer<255> bytes;
+};
+
+/// Representation of a transmission power,
+/// as used for the Tx Power DE in V0 and V1.
+struct TxPower {
+  int8_t tx_power;
+};
+
+/// The bitfield data of a VOActions data element
+struct V0ActionBits {
+  uint32_t bitfield;
+};
+
+/// Representation of the Actions DE in V0.
+struct V0Actions {
+  enum class Tag {
+    /// A set of action bits which were present in a plaintext identity advertisement
+    Plaintext,
+    /// A set of action bits which were present in a encrypted identity advertisement
+    Encrypted,
+  };
+
+  struct Plaintext_Body {
+    V0ActionBits _0;
+  };
+
+  struct Encrypted_Body {
+    V0ActionBits _0;
+  };
+
+  Tag tag;
+  union {
+    Plaintext_Body plaintext;
+    Encrypted_Body encrypted;
+  };
+};
+
+/// Representation of a V0 data element.
+struct V0DataElement {
+  enum class Tag {
+    TxPower,
+    Actions,
+  };
+
+  struct TxPower_Body {
+    TxPower _0;
+  };
+
+  struct Actions_Body {
+    V0Actions _0;
+  };
+
+  Tag tag;
+  union {
+    TxPower_Body tx_power;
+    Actions_Body actions;
+  };
+};
+
+/// The result of `V0Payload#get_de`.
+struct GetV0DEResult {
+  enum class Tag {
+    Success,
+    Error,
+  };
+
+  struct Success_Body {
+    V0DataElement _0;
+  };
+
+  Tag tag;
+  union {
+    Success_Body success;
+  };
+};
+
+/// Handle to a deserialized V1 section
+struct DeserializedV1Section {
+  LegibleV1Sections legible_sections_handle;
+  uint8_t legible_section_index;
+  uint8_t num_des;
+  DeserializedV1IdentityKind identity_tag;
+};
+
+/// The result of attempting to get a particular V1 section
+/// from its' index within the list of legible sections
+/// via `DeserializedV1Advertisement::get_section`.
+struct GetV1SectionResult {
+  enum class Tag {
+    Error,
+    Success,
+  };
+
+  struct Success_Body {
+    DeserializedV1Section _0;
+  };
+
+  Tag tag;
+  union {
+    Success_Body success;
+  };
+};
+
+/// Representation of the data-element type tag
+/// of a V1 data element.
+struct V1DEType {
+  uint32_t code;
+};
+
+/// FFI-transmissible representation of a generic V1 data-element.
+/// This representation is stable, and so you may directly
+/// reference this struct's fields if you wish.
+struct GenericV1DataElement {
+  /// The DE type code of this generic data-element.
+  V1DEType de_type;
+  /// The raw data-element byte payload, up to
+  /// 127 bytes in length.
+  ByteBuffer<127> payload;
+};
+
+/// FFI-transmissible representation of a V1 data-element
+struct V1DataElement {
+  enum class Tag {
+    /// A "generic" V1 data-element, for which we have no
+    /// particular information about its schema (just
+    /// a DE type code and a byte payload.)
+    Generic,
+  };
+
+  struct Generic_Body {
+    GenericV1DataElement _0;
+  };
+
+  Tag tag;
+  union {
+    Generic_Body generic;
+  };
+};
+
+/// Represents the result of the `DeserializedV1Section#get_de` operation.
+struct GetV1DEResult {
+  enum class Tag {
+    Error,
+    Success,
+  };
+
+  struct Success_Body {
+    V1DataElement _0;
+  };
+
+  Tag tag;
+  union {
+    Success_Body success;
+  };
+};
+
+} // namespace internal
+} // namespace np_ffi
diff --git a/nearby/presence/np_c_ffi/rust-toolchain.toml b/nearby/presence/np_c_ffi/rust-toolchain.toml
new file mode 100644
index 0000000..271800c
--- /dev/null
+++ b/nearby/presence/np_c_ffi/rust-toolchain.toml
@@ -0,0 +1,2 @@
+[toolchain]
+channel = "nightly"
\ No newline at end of file
diff --git a/nearby/presence/np_c_ffi/src/credentials.rs b/nearby/presence/np_c_ffi/src/credentials.rs
new file mode 100644
index 0000000..6b60545
--- /dev/null
+++ b/nearby/presence/np_c_ffi/src/credentials.rs
@@ -0,0 +1,51 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//! Credential-related data-types and functions
+
+use crate::{unwrap, PanicReason};
+use np_ffi_core::common::*;
+use np_ffi_core::credentials::credential_book::CredentialBook;
+use np_ffi_core::credentials::*;
+use np_ffi_core::utils::FfiEnum;
+
+/// Allocates a new credential-book, returning a handle to the created object
+#[no_mangle]
+pub extern "C" fn np_ffi_create_credential_book() -> CreateCredentialBookResult {
+    create_credential_book()
+}
+
+/// Gets the tag of a `CreateCredentialBookResult` tagged enum.
+#[no_mangle]
+pub extern "C" fn np_ffi_CreateCredentialBookResult_kind(
+    result: CreateCredentialBookResult,
+) -> CreateCredentialBookResultKind {
+    result.kind()
+}
+
+/// Casts a `CreateCredentialBookResult` to the `SUCCESS` variant, panicking in the
+/// case where the passed value is of a different enum variant.
+#[no_mangle]
+pub extern "C" fn np_ffi_CreateCredentialBookResult_into_SUCCESS(
+    result: CreateCredentialBookResult,
+) -> CredentialBook {
+    unwrap(result.into_success(), PanicReason::EnumCastFailed)
+}
+
+/// Deallocates a credential-book by its handle
+#[no_mangle]
+pub extern "C" fn np_ffi_deallocate_credential_book(
+    credential_book: CredentialBook,
+) -> DeallocateResult {
+    deallocate_credential_book(credential_book)
+}
diff --git a/nearby/presence/np_c_ffi/src/deserialize/mod.rs b/nearby/presence/np_c_ffi/src/deserialize/mod.rs
new file mode 100644
index 0000000..9f2cea8
--- /dev/null
+++ b/nearby/presence/np_c_ffi/src/deserialize/mod.rs
@@ -0,0 +1,87 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use crate::{unwrap, PanicReason};
+use np_ffi_core::common::*;
+use np_ffi_core::credentials::credential_book::CredentialBook;
+use np_ffi_core::deserialize::v0::*;
+use np_ffi_core::deserialize::v1::*;
+use np_ffi_core::deserialize::*;
+use np_ffi_core::utils::FfiEnum;
+
+mod v0;
+mod v1;
+
+/// Attempts to deserialize an advertisement with the given service-data
+/// payload (presumed to be under the NP service UUID) using credentials
+/// pulled from the given credential-book.
+#[no_mangle]
+pub extern "C" fn np_ffi_deserialize_advertisement(
+    adv_payload: RawAdvertisementPayload,
+    credential_book: CredentialBook,
+) -> DeserializeAdvertisementResult {
+    deserialize_advertisement(&adv_payload, credential_book)
+}
+
+/// Gets the tag of a `DeserializeAdvertisementResult` tagged-union.
+#[no_mangle]
+pub extern "C" fn np_ffi_DeserializeAdvertisementResult_kind(
+    result: DeserializeAdvertisementResult,
+) -> DeserializeAdvertisementResultKind {
+    result.kind()
+}
+
+/// Casts a `DeserializeAdvertisementResult` to the `V0` variant, panicking in the
+/// case where the passed value is of a different enum variant.
+#[no_mangle]
+pub extern "C" fn np_ffi_DeserializeAdvertisementResult_into_V0(
+    result: DeserializeAdvertisementResult,
+) -> DeserializedV0Advertisement {
+    unwrap(result.into_v0(), PanicReason::EnumCastFailed)
+}
+
+/// Casts a `DeserializeAdvertisementResult` to the `V1` variant, panicking in the
+/// case where the passed value is of a different enum variant.
+#[no_mangle]
+pub extern "C" fn np_ffi_DeserializeAdvertisementResult_into_V1(
+    result: DeserializeAdvertisementResult,
+) -> DeserializedV1Advertisement {
+    unwrap(result.into_v1(), PanicReason::EnumCastFailed)
+}
+
+/// Deallocates any internal data referenced by a `DeserializeAdvertisementResult`. This should only
+/// be used if into_V0 or into_V1, have not been called yet as it shares the same underlying
+/// resource.
+#[no_mangle]
+pub extern "C" fn np_ffi_deallocate_deserialize_advertisement_result(
+    result: DeserializeAdvertisementResult,
+) -> DeallocateResult {
+    result.deallocate()
+}
+
+/// Deallocates any internal data referenced by a `DeserializedV0Advertisement`
+#[no_mangle]
+pub extern "C" fn np_ffi_deallocate_deserialized_V0_advertisement(
+    adv: DeserializedV0Advertisement,
+) -> DeallocateResult {
+    adv.deallocate()
+}
+
+/// Deallocates any internal data referenced by a `DeserializedV1Advertisement`
+#[no_mangle]
+pub extern "C" fn np_ffi_deallocate_deserialized_V1_advertisement(
+    adv: DeserializedV1Advertisement,
+) -> DeallocateResult {
+    adv.deallocate()
+}
diff --git a/nearby/presence/np_c_ffi/src/deserialize/v0.rs b/nearby/presence/np_c_ffi/src/deserialize/v0.rs
new file mode 100644
index 0000000..877cee5
--- /dev/null
+++ b/nearby/presence/np_c_ffi/src/deserialize/v0.rs
@@ -0,0 +1,149 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use crate::{panic, unwrap, PanicReason};
+use np_ffi_core::common::DeallocateResult;
+use np_ffi_core::deserialize::v0::v0_payload::V0Payload;
+use np_ffi_core::deserialize::v0::*;
+use np_ffi_core::utils::FfiEnum;
+
+/// Gets the tag of a `DeserializedV0Advertisement` tagged-union.
+#[no_mangle]
+pub extern "C" fn np_ffi_DeserializedV0Advertisement_kind(
+    result: DeserializedV0Advertisement,
+) -> DeserializedV0AdvertisementKind {
+    result.kind()
+}
+
+/// Casts a `DeserializedV0Advertisement` to the `Legible` variant, panicking in the
+/// case where the passed value is of a different enum variant.
+#[no_mangle]
+pub extern "C" fn np_ffi_DeserializedV0Advertisement_into_LEGIBLE(
+    adv: DeserializedV0Advertisement,
+) -> LegibleDeserializedV0Advertisement {
+    unwrap(adv.into_legible(), PanicReason::EnumCastFailed)
+}
+
+/// Gets the number of DEs in a legible deserialized advertisement.
+/// Suitable as an iteration bound for `V0Payload#get_de`.
+#[no_mangle]
+pub extern "C" fn np_ffi_LegibleDeserializedV0Advertisement_get_num_des(
+    adv: LegibleDeserializedV0Advertisement,
+) -> u8 {
+    adv.num_des()
+}
+
+/// Gets just the data-element payload of a `LegibleDeserializedV0Advertisement`.
+#[no_mangle]
+pub extern "C" fn np_ffi_LegibleDeserializedV0Advertisement_into_payload(
+    adv: LegibleDeserializedV0Advertisement,
+) -> V0Payload {
+    adv.into_payload()
+}
+
+/// Gets just the identity information associated with a `LegibleDeserializedV0Advertisement`.
+#[no_mangle]
+pub extern "C" fn np_ffi_LegibleDeserializedV0Advertisement_into_identity(
+    adv: LegibleDeserializedV0Advertisement,
+) -> DeserializedV0Identity {
+    adv.into_identity()
+}
+
+/// Deallocates any internal data of a `LegibleDeserializedV0Advertisement`
+#[no_mangle]
+pub extern "C" fn np_ffi_deallocate_legible_v0_advertisement(
+    adv: LegibleDeserializedV0Advertisement,
+) -> DeallocateResult {
+    adv.deallocate()
+}
+
+/// Gets the tag of the `DeserializedV0Identity` tagged-union.
+#[no_mangle]
+pub extern "C" fn np_ffi_DeserializedV0Identity_kind(
+    identity: DeserializedV0Identity,
+) -> DeserializedV0IdentityKind {
+    identity.kind()
+}
+
+/// Attempts to get the data-element with the given index in the passed v0 adv payload
+#[no_mangle]
+pub extern "C" fn np_ffi_V0Payload_get_de(payload: V0Payload, index: u8) -> GetV0DEResult {
+    payload.get_de(index)
+}
+
+/// Deallocates any internal data of a `V0Payload`
+#[no_mangle]
+pub extern "C" fn np_ffi_deallocate_v0_payload(payload: V0Payload) -> DeallocateResult {
+    payload.deallocate_payload()
+}
+
+/// Gets the tag of a `GetV0DEResult` tagged-union.
+#[no_mangle]
+pub extern "C" fn np_ffi_GetV0DEResult_kind(result: GetV0DEResult) -> GetV0DEResultKind {
+    result.kind()
+}
+
+/// Casts a `GetV0DEResult` to the `Success` variant, panicking in the
+/// case where the passed value is of a different enum variant.
+#[no_mangle]
+pub extern "C" fn np_ffi_GetV0DEResult_into_SUCCESS(result: GetV0DEResult) -> V0DataElement {
+    unwrap(result.into_success(), PanicReason::EnumCastFailed)
+}
+
+/// Gets the tag of a `V0DataElement` tagged-union.
+#[no_mangle]
+pub extern "C" fn np_ffi_V0DataElement_kind(de: V0DataElement) -> V0DataElementKind {
+    de.kind()
+}
+
+/// Casts a `V0DataElement` to the `TxPower` variant, panicking in the
+/// case where the passed value is of a different enum variant.
+#[no_mangle]
+pub extern "C" fn np_ffi_V0DataElement_into_TX_POWER(de: V0DataElement) -> TxPower {
+    unwrap(de.into_tx_power(), PanicReason::EnumCastFailed)
+}
+
+/// Casts a `V0DataElement` to the `Actions` variant, panicking in the
+/// case where the passed value is of a different enum variant.
+#[no_mangle]
+pub extern "C" fn np_ffi_V0DataElement_into_ACTIONS(de: V0DataElement) -> V0Actions {
+    unwrap(de.into_actions(), PanicReason::EnumCastFailed)
+}
+
+/// Return whether a boolean action type is set in this data element
+#[no_mangle]
+pub extern "C" fn np_ffi_V0Actions_has_action(
+    actions: V0Actions,
+    action_type: BooleanActionType,
+) -> bool {
+    match actions.has_action(&action_type) {
+        Ok(b) => b,
+        Err(_) => panic(PanicReason::InvalidActionBits),
+    }
+}
+
+/// Gets the 4 bit context sync sequence number as a u8 from this data element
+#[no_mangle]
+pub extern "C" fn np_ffi_V0Actions_get_context_sync_sequence_number(actions: V0Actions) -> u8 {
+    match actions.get_context_sync_seq_num() {
+        Ok(b) => b,
+        Err(_) => panic(PanicReason::InvalidActionBits),
+    }
+}
+
+/// Return whether a boolean action type is set in this data element
+#[no_mangle]
+pub extern "C" fn np_ffi_V0Actions_as_u32(actions: V0Actions) -> u32 {
+    actions.as_u32()
+}
diff --git a/nearby/presence/np_c_ffi/src/deserialize/v1.rs b/nearby/presence/np_c_ffi/src/deserialize/v1.rs
new file mode 100644
index 0000000..dc682a3
--- /dev/null
+++ b/nearby/presence/np_c_ffi/src/deserialize/v1.rs
@@ -0,0 +1,114 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+use crate::{unwrap, PanicReason};
+use np_ffi_core::deserialize::v1::*;
+use np_ffi_core::utils::FfiEnum;
+
+/// Gets the number of legible sections on a deserialized V1 advertisement.
+/// Suitable as an index bound for the second argument of
+/// `np_ffi_DeserializedV1Advertisement#get_section`.
+#[no_mangle]
+pub extern "C" fn np_ffi_DeserializedV1Advertisement_get_num_legible_sections(
+    adv: DeserializedV1Advertisement,
+) -> u8 {
+    adv.num_legible_sections()
+}
+
+/// Gets the number of sections on a deserialized V1 advertisement which
+/// were unable to be decrypted with the credentials that the receiver possesses.
+#[no_mangle]
+pub extern "C" fn np_ffi_DeserializedV1Advertisement_get_num_undecryptable_sections(
+    adv: DeserializedV1Advertisement,
+) -> u8 {
+    adv.num_undecryptable_sections()
+}
+
+/// Gets the legible section with the given index in a deserialized V1 advertisement.
+#[no_mangle]
+pub extern "C" fn np_ffi_DeserializedV1Advertisement_get_section(
+    adv: DeserializedV1Advertisement,
+    legible_section_index: u8,
+) -> GetV1SectionResult {
+    adv.get_section(legible_section_index)
+}
+
+/// Gets the tag of the `GetV1SectionResult` tagged-union.
+#[no_mangle]
+pub extern "C" fn np_ffi_GetV1SectionResult_kind(
+    result: GetV1SectionResult,
+) -> GetV1SectionResultKind {
+    result.kind()
+}
+
+/// Casts a `GetV1SectionResult` to the `Success` variant, panicking in the
+/// case where the passed value is of a different enum variant.
+#[no_mangle]
+pub extern "C" fn np_ffi_GetV1SectionResult_into_SUCCESS(
+    result: GetV1SectionResult,
+) -> DeserializedV1Section {
+    unwrap(result.into_success(), PanicReason::EnumCastFailed)
+}
+
+/// Gets the number of data elements in a deserialized v1 section.
+/// Suitable as an iteration bound for the second argument of
+/// `np_ffi_DeserializedV1Section_get_de`.
+#[no_mangle]
+pub extern "C" fn np_ffi_DeserializedV1Section_get_num_des(section: DeserializedV1Section) -> u8 {
+    section.num_des()
+}
+
+/// Gets the tag of the identity tagged-union used for the passed section.
+#[no_mangle]
+pub extern "C" fn np_ffi_DeserializedV1Section_get_identity_kind(
+    section: DeserializedV1Section,
+) -> DeserializedV1IdentityKind {
+    section.identity_kind()
+}
+
+/// Gets the data-element with the given index in the passed section.
+#[no_mangle]
+pub extern "C" fn np_ffi_DeserializedV1Section_get_de(
+    section: DeserializedV1Section,
+    de_index: u8,
+) -> GetV1DEResult {
+    section.get_de(de_index)
+}
+
+/// Gets the tag of the `GetV1DEResult` tagged-union.
+#[no_mangle]
+pub extern "C" fn np_ffi_GetV1DEResult_kind(result: GetV1DEResult) -> GetV1DEResultKind {
+    result.kind()
+}
+
+/// Casts a `GetV1DEResult` to the `Success` vartiant, panicking in the
+/// case where the passed value is of a different enum variant.
+#[no_mangle]
+pub extern "C" fn np_ffi_GetV1DEResult_into_SUCCESS(result: GetV1DEResult) -> V1DataElement {
+    unwrap(result.into_success(), PanicReason::EnumCastFailed)
+}
+
+/// Converts a `V1DataElement` to a `GenericV1DataElement` which
+/// only maintains information about the DE's type-code and payload.
+#[no_mangle]
+pub extern "C" fn np_ffi_V1DataElement_to_generic(de: V1DataElement) -> GenericV1DataElement {
+    de.to_generic()
+}
+
+/// Extracts the numerical value of the given V1 DE type code as
+/// an unsigned 32-bit integer.
+#[no_mangle]
+pub extern "C" fn np_ffi_V1DEType_to_uint32_t(de_type: V1DEType) -> u32 {
+    de_type.to_u32()
+}
diff --git a/nearby/presence/np_c_ffi/src/lib.rs b/nearby/presence/np_c_ffi/src/lib.rs
new file mode 100644
index 0000000..bd475ab
--- /dev/null
+++ b/nearby/presence/np_c_ffi/src/lib.rs
@@ -0,0 +1,221 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! NP Rust C FFI
+
+#![cfg_attr(not(test), no_std)]
+#![allow(dead_code)]
+extern crate alloc;
+extern crate core;
+
+pub mod credentials;
+pub mod deserialize;
+
+/// Structure for categorized reasons for why a NP C FFI call may
+/// be panicking.
+#[derive(Clone, Copy)]
+#[repr(u8)]
+pub enum PanicReason {
+    /// Some enum cast to a variant failed. Utilized
+    /// for failed enum casts of all enums.
+    ///
+    /// (That is, this is the catch-all panic reason for enum
+    /// casts where there is not a more specific reason
+    /// in some other variant of this enum.)
+    EnumCastFailed = 0,
+    /// The panic handler is used to assert conditions are true to avoid programmer errors.
+    /// If a failed assert condition is hit, this panic handler is invoked with this reason.
+    AssertFailed = 1,
+    /// Error returned if action bits inside of a V0Actions struct are invalid. If the struct was
+    /// created by this deserializer, the bits will always be valid, they are only invalid if
+    /// a user reaches in and changes them to something invalid.
+    InvalidActionBits = 2,
+}
+
+/// Structure which maintains information about the panic-handler
+/// for panicking calls in the NP C FFI.
+#[derive(Debug)]
+struct PanicHandler {
+    /// Optional function-pointer to client-specified panic behavior.
+    handler: Option<unsafe extern "C" fn(PanicReason) -> ()>,
+
+    /// Fuse to prevent setting the panic-handler more than once.
+    /// We do not use the presence/absence of `self.handler` for this,
+    /// since it's possible for the client to explicitly pass "NULL"
+    /// to set the panic-handler to the platform-default (and ensure
+    /// that the panic-handler never changes from the platform-default.)
+    handler_set_by_client: bool,
+}
+
+impl PanicHandler {
+    pub(crate) const fn new() -> Self {
+        Self { handler: None, handler_set_by_client: false }
+    }
+    pub(crate) fn set_handler(
+        &mut self,
+        handler: Option<unsafe extern "C" fn(PanicReason) -> ()>,
+    ) -> bool {
+        // Only allow setting the panic handler once
+        if !self.handler_set_by_client {
+            self.handler = handler;
+            self.handler_set_by_client = true;
+            true
+        } else {
+            false
+        }
+    }
+    pub(crate) fn panic(&self, panic_reason: PanicReason) -> ! {
+        if let Some(handler) = self.handler {
+            unsafe { handler(panic_reason) }
+        }
+        Self::system_handler(panic_reason)
+    }
+    #[cfg(feature = "std")]
+    fn system_handler(panic_reason: PanicReason) -> ! {
+        eprintln!("NP FFI Panicked: {:?}", panic_reason);
+        let backtrace = std::backtrace::Backtrace::capture();
+        eprintln!("Stack trace: {}", backtrace);
+        std::process::abort!();
+    }
+    #[cfg(not(feature = "std"))]
+    #[allow(clippy::empty_loop)]
+    fn system_handler(_: PanicReason) -> ! {
+        // Looping is the only platform-independent thing
+        // that we can really do in this scenario.
+        // (Even clippy's explanation for the empty-loop
+        // lint mentions platform-specific intrinsics
+        // as being the only true way to avoid this
+        // in a no_std environment.)
+        loop {}
+    }
+}
+
+static PANIC_HANDLER: spin::RwLock<PanicHandler> = spin::RwLock::new(PanicHandler::new());
+
+pub(crate) fn panic(reason: PanicReason) -> ! {
+    PANIC_HANDLER.read().panic(reason)
+}
+
+pub(crate) fn unwrap<T>(value: Option<T>, panic_reason: PanicReason) -> T {
+    match value {
+        Some(x) => x,
+        None => panic(panic_reason),
+    }
+}
+
+/// Overrides the global panic handler to be used when NP C FFI calls panic.
+/// This method will only have an effect on the global panic-handler
+/// the first time it's called, and this method will return `true`
+/// to indicate that the panic handler was successfully set.
+/// All subsequent calls to this method
+/// will simply ignore the argument and return `false`.
+///
+/// If the passed function pointer is non-null,
+/// then we will call it upon every panic,
+/// followed by the default panicking behavior for
+/// the platform (in the case where the user-specified
+/// function does not terminate or hang the running process.)
+///
+/// Otherwise, we will resort to the
+/// default panicking behavior for the system, which
+/// is a printed stack trace followed by an abort
+/// when this crate is compiled with `std`,
+/// but a bare `loop { }` when this crate is compiled without.
+#[no_mangle]
+pub extern "C" fn np_ffi_global_config_panic_handler(
+    handler: Option<unsafe extern "C" fn(PanicReason) -> ()>,
+) -> bool {
+    let mut panic_handler = PANIC_HANDLER.write();
+    panic_handler.set_handler(handler)
+}
+
+/// Sets an override to the number of shards to employ in the NP FFI's
+/// internal handle-maps, which places an upper bound on the number
+/// of writing threads which may make progress at any one time
+/// when concurrently accessing handles of the same type.
+///
+/// By default, this value will be set to 16, or in `std` environments,
+/// the minimum of 16 and the number of available hardware threads.
+/// A shard value override of zero will be interpreted the same
+/// as this default.
+///
+/// Setting this value will have no effect if the handle-maps for the
+/// API have already begun being used by the client code, and any
+/// values set will take effect upon the first usage of _any_ non-`np_ffi_global_config_set`
+/// API call.
+#[no_mangle]
+pub extern "C" fn np_ffi_global_config_set_num_shards(num_shards: u8) {
+    np_ffi_core::common::global_config_set_num_shards(num_shards)
+}
+
+/// Sets the maximum number of active handles to credential books
+/// which may be active at any one time.
+/// Default value: Max value.
+/// Max value: `u32::MAX - 1`.
+///
+/// Useful for bounding the maximum memory used by the client application
+/// on credential books in constrained-memory environments.
+///
+/// Setting this value will have no effect if the handle-maps for the
+/// API have already begun being used by the client code, and any
+/// values set will take effect upon the first usage of any API
+/// call utilizing credential books.
+#[no_mangle]
+pub extern "C" fn np_ffi_global_config_set_max_num_credential_books(max_num_credential_books: u32) {
+    np_ffi_core::common::global_config_set_max_num_credential_books(max_num_credential_books)
+}
+
+/// Sets the maximum number of active handles to deserialized v0
+/// advertisements which may be active at any one time.
+///
+/// Useful for bounding the maximum memory used by the client application
+/// on v0 advertisements in constrained-memory environments.
+///
+/// Default value: Max value.
+/// Max value: `u32::MAX - 1`.
+///
+/// Setting this value will have no effect if the handle-maps for the
+/// API have already begun being used by the client code, and any
+/// values set will take effect upon the first usage of any API
+/// call which references or returns a deserialized V0 advertisement.
+#[no_mangle]
+pub extern "C" fn np_ffi_global_config_set_max_num_deserialized_v0_advertisements(
+    max_num_deserialized_v0_advertisements: u32,
+) {
+    np_ffi_core::common::global_config_set_max_num_deserialized_v0_advertisements(
+        max_num_deserialized_v0_advertisements,
+    )
+}
+
+/// Sets the maximum number of active handles to deserialized v1
+/// advertisements which may be active at any one time.
+///
+/// Useful for bounding the maximum memory used by the client application
+/// on v1 advertisements in constrained-memory environments.
+///
+/// Default value: Max value.
+/// Max value: `u32::MAX - 1`.
+///
+/// Setting this value will have no effect if the handle-maps for the
+/// API have already begun being used by the client code, and any
+/// values set will take effect upon the first usage of any API
+/// call which references or returns a deserialized V1 advertisement.
+#[no_mangle]
+pub extern "C" fn np_ffi_global_config_set_max_num_deserialized_v1_advertisements(
+    max_num_deserialized_v1_advertisements: u32,
+) {
+    np_ffi_core::common::global_config_set_max_num_deserialized_v1_advertisements(
+        max_num_deserialized_v1_advertisements,
+    )
+}
diff --git a/nearby/presence/np_cpp_ffi/CMakeLists.txt b/nearby/presence/np_cpp_ffi/CMakeLists.txt
new file mode 100644
index 0000000..27c9132
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/CMakeLists.txt
@@ -0,0 +1,48 @@
+# Copyright 2023 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+# include ABSL third_party dir which will add it to the cmake build tree
+set(ABSL_PROPAGATE_CXX_STD ON)
+add_subdirectory(${THIRD_PARTY_DIR}/abseil-cpp ${THIRD_PARTY_DIR}/abseil-cpp/build)
+
+add_library(nearby_protocol nearby_protocol.cc)
+
+target_link_libraries(nearby_protocol
+        "${CMAKE_SOURCE_DIR}/np_c_ffi/target/release/${CMAKE_STATIC_LIBRARY_PREFIX}np_c_ffi${CMAKE_STATIC_LIBRARY_SUFFIX}"
+        absl::statusor)
+
+target_include_directories(nearby_protocol PUBLIC
+        include/
+        ${CMAKE_SOURCE_DIR}/np_c_ffi/include/cpp/)
+
+target_include_directories(nearby_protocol PRIVATE
+        ${CMAKE_SOURCE_DIR}/np_c_ffi/include/cpp/internal/)
+
+add_subdirectory(sample)
+
+# shared testing utilities between sample, tests, and fuzzers
+add_library(shared_test_util shared/shared_test_util.cc)
+target_include_directories(shared_test_util PUBLIC shared/)
+target_include_directories(shared_test_util PRIVATE include/)
+target_link_libraries(shared_test_util nearby_protocol absl::statusor)
+
+if (ENABLE_TESTS)
+    message(STATUS "Enabling np_cpp tests")
+    add_subdirectory(tests)
+    add_subdirectory(benchmarks)
+endif ()
+
+if (ENABLE_FUZZ)
+    add_subdirectory(fuzz)
+endif ()
diff --git a/nearby/presence/np_cpp_ffi/benchmarks/CMakeLists.txt b/nearby/presence/np_cpp_ffi/benchmarks/CMakeLists.txt
new file mode 100644
index 0000000..c7d8343
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/benchmarks/CMakeLists.txt
@@ -0,0 +1,32 @@
+# Copyright 2022 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+add_executable(np_ffi_bench np_ffi_bench.cc)
+
+target_link_libraries(
+        np_ffi_bench
+        nearby_protocol
+        benchmark::benchmark)
+
+if (UNIX)
+    target_link_libraries(
+            np_ffi_bench
+            dl -fsanitize=address
+    )
+elseif (MSVC)
+    target_link_libraries(
+            np_ffi_bench
+            bcrypt ntdll userenv ws2_32
+    )
+endif ()
diff --git a/nearby/presence/np_cpp_ffi/benchmarks/np_ffi_bench.cc b/nearby/presence/np_cpp_ffi/benchmarks/np_ffi_bench.cc
new file mode 100644
index 0000000..72a3f91
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/benchmarks/np_ffi_bench.cc
@@ -0,0 +1,102 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "nearby_protocol.h"
+
+#include "np_cpp_ffi_functions.h"
+#include "np_cpp_ffi_types.h"
+
+#include "benchmark/benchmark.h"
+
+// Internal C struct representation of a v0 payload
+static np_ffi::internal::RawAdvertisementPayload payload{
+    {7,
+     {
+         0x00,             // Adv Header
+         0x03,             // Public DE header
+         0x15, 0x05,       // Tx Power value 5
+         0x26, 0x00, 0x46, // Length 2 Actions
+     }}};
+
+static nearby_protocol::RawAdvertisementPayload
+    v0_adv(nearby_protocol::ByteBuffer(payload.bytes));
+
+class NpCppBenchmark : public benchmark::Fixture {
+  void SetUp(const ::benchmark::State &state) override {}
+
+  void TearDown(const ::benchmark::State &state) override {}
+};
+
+BENCHMARK_DEFINE_F(NpCppBenchmark, V0PlaintextAdvertisement)
+(benchmark::State &state) {
+  auto cred_book = nearby_protocol::CredentialBook::TryCreate();
+  assert(cred_book.ok());
+  auto num_ciphers = state.range(0);
+
+  for ([[maybe_unused]] auto _ : state) {
+    for (int i = 0; i < num_ciphers; i++) {
+      auto result = nearby_protocol::Deserializer::DeserializeAdvertisement(
+          v0_adv, cred_book.value());
+      assert(result.GetKind() ==
+             nearby_protocol::DeserializeAdvertisementResultKind::V0);
+    }
+  }
+}
+
+BENCHMARK_REGISTER_F(NpCppBenchmark, V0PlaintextAdvertisement)
+    ->RangeMultiplier(10)
+    ->Range(1, 1000)
+    ->Unit(benchmark::kMicrosecond);
+
+class NpCBenchmark : public benchmark::Fixture {
+  void SetUp(const ::benchmark::State &state) override {}
+
+  void TearDown(const ::benchmark::State &state) override {}
+};
+
+BENCHMARK_DEFINE_F(NpCBenchmark, V0PlaintextAdvertisement)
+(benchmark::State &state) {
+  auto num_ciphers = state.range(0);
+  auto book_result = np_ffi::internal::np_ffi_create_credential_book();
+  assert(
+      np_ffi::internal::np_ffi_CreateCredentialBookResult_kind(book_result) ==
+      np_ffi::internal::CreateCredentialBookResultKind::Success);
+  auto book = np_ffi::internal::np_ffi_CreateCredentialBookResult_into_SUCCESS(
+      book_result);
+
+  for ([[maybe_unused]] auto _ : state) {
+    for (int i = 0; i < num_ciphers; i++) {
+      auto result =
+          np_ffi::internal::np_ffi_deserialize_advertisement({payload}, book);
+      assert(np_ffi::internal::np_ffi_DeserializeAdvertisementResult_kind(
+                 result) ==
+             np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+      auto deallocate_result =
+          np_ffi::internal::np_ffi_deallocate_deserialize_advertisement_result(
+              result);
+      assert(deallocate_result == np_ffi::internal::DeallocateResult::Success);
+    }
+  }
+
+  auto deallocate_result =
+      np_ffi::internal::np_ffi_deallocate_credential_book(book);
+  assert(deallocate_result == np_ffi::internal::DeallocateResult::Success);
+}
+
+BENCHMARK_REGISTER_F(NpCBenchmark, V0PlaintextAdvertisement)
+    ->RangeMultiplier(10)
+    ->Range(1, 1000)
+    ->Unit(benchmark::kMicrosecond);
+
+BENCHMARK_MAIN();
\ No newline at end of file
diff --git a/nearby/presence/np_cpp_ffi/fuzz/CMakeLists.txt b/nearby/presence/np_cpp_ffi/fuzz/CMakeLists.txt
new file mode 100644
index 0000000..17f2f1f
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/fuzz/CMakeLists.txt
@@ -0,0 +1,31 @@
+# Copyright 2023 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+cmake_minimum_required(VERSION 3.0)
+
+# libfuzzer needs clang
+SET(CMAKE_C_COMPILER "clang")
+
+add_compile_definitions("CORPUS_DIR=${CMAKE_CURRENT_SOURCE_DIR}/corpus")
+file(COPY corpus DESTINATION "${CMAKE_CURRENT_BINARY_DIR}")
+add_executable(generate_fuzz_corpus generate_fuzz_corpus.cc)
+target_link_libraries(generate_fuzz_corpus nearby_protocol shared_test_util)
+
+add_executable(fuzzer_np_cpp_deserialize fuzzer_np_cpp_deserialize.cc)
+target_compile_options(fuzzer_np_cpp_deserialize PRIVATE -fsanitize=fuzzer,address)
+target_link_libraries(fuzzer_np_cpp_deserialize nearby_protocol -fsanitize=fuzzer,address)
+
+add_executable(fuzzer_np_cpp_valid_header fuzzer_np_cpp_valid_header.cc)
+target_compile_options(fuzzer_np_cpp_valid_header PRIVATE -fsanitize=fuzzer,address)
+target_link_libraries(fuzzer_np_cpp_valid_header nearby_protocol -fsanitize=fuzzer,address)
diff --git a/nearby/presence/np_cpp_ffi/fuzz/corpus/V0AdvEmpty b/nearby/presence/np_cpp_ffi/fuzz/corpus/V0AdvEmpty
new file mode 100644
index 0000000..f76dd23
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/fuzz/corpus/V0AdvEmpty
Binary files differ
diff --git a/nearby/presence/np_cpp_ffi/fuzz/corpus/V0AdvSimple b/nearby/presence/np_cpp_ffi/fuzz/corpus/V0AdvSimple
new file mode 100644
index 0000000..fac97f6
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/fuzz/corpus/V0AdvSimple
Binary files differ
diff --git a/nearby/presence/np_cpp_ffi/fuzz/corpus/V1AdvSimple b/nearby/presence/np_cpp_ffi/fuzz/corpus/V1AdvSimple
new file mode 100644
index 0000000..4acdf33
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/fuzz/corpus/V1AdvSimple
@@ -0,0 +1 @@
+ 
\ No newline at end of file
diff --git a/nearby/presence/np_cpp_ffi/fuzz/fuzzer_np_cpp_deserialize.cc b/nearby/presence/np_cpp_ffi/fuzz/fuzzer_np_cpp_deserialize.cc
new file mode 100644
index 0000000..84d7247
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/fuzz/fuzzer_np_cpp_deserialize.cc
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2023 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "nearby_protocol.h"
+
+#include <cstdint>
+#include <string>
+
+#include "absl/strings/escaping.h"
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+  // won't fit into a FfiByteBuffer<255>
+  if (size > 255) {
+    return -1;
+  }
+
+  nearby_protocol::FfiByteBuffer<255> raw_bytes;
+  memcpy(&raw_bytes.bytes, data, size);
+  raw_bytes.len = size;
+
+  nearby_protocol::RawAdvertisementPayload payload(
+      (nearby_protocol::ByteBuffer<255>(raw_bytes)));
+
+  auto credential_book = nearby_protocol::CredentialBook::TryCreate();
+  if (!credential_book.ok()) {
+    printf("Error: create Credential book failed\n");
+    __builtin_trap();
+  }
+
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          payload, credential_book.value());
+
+  return 0;
+}
\ No newline at end of file
diff --git a/nearby/presence/np_cpp_ffi/fuzz/fuzzer_np_cpp_valid_header.cc b/nearby/presence/np_cpp_ffi/fuzz/fuzzer_np_cpp_valid_header.cc
new file mode 100644
index 0000000..c08b6cd
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/fuzz/fuzzer_np_cpp_valid_header.cc
@@ -0,0 +1,54 @@
+/*
+ * Copyright 2023 Google LLC
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "nearby_protocol.h"
+
+#include <cstdint>
+
+// Fuzz input data beginning with a valid header
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
+  // Won't fit into a FfiByteBuffer<255>
+  if (size > 255) {
+    return -1;
+  }
+
+  nearby_protocol::FfiByteBuffer<255> raw_bytes;
+  memcpy(&raw_bytes.bytes, data, size);
+  raw_bytes.len = size;
+
+  nearby_protocol::RawAdvertisementPayload payload(
+      (nearby_protocol::ByteBuffer<255>(raw_bytes)));
+
+  auto credential_book = nearby_protocol::CredentialBook::TryCreate();
+  if (!credential_book.ok()) {
+    printf("Error: create Credential book failed\n");
+    __builtin_trap();
+  }
+
+  // Force it to go down the v0 deserialization path
+  raw_bytes.bytes[0] = 0x00;
+
+  auto v0_result = nearby_protocol::Deserializer::DeserializeAdvertisement(
+      payload, credential_book.value());
+
+  // Force it down the v1 deserialization path
+  raw_bytes.bytes[0] = 0x20;
+
+  auto v1_result = nearby_protocol::Deserializer::DeserializeAdvertisement(
+      payload, credential_book.value());
+
+  return 0;
+}
\ No newline at end of file
diff --git a/nearby/presence/np_cpp_ffi/fuzz/generate_fuzz_corpus.cc b/nearby/presence/np_cpp_ffi/fuzz/generate_fuzz_corpus.cc
new file mode 100644
index 0000000..9d28f7a
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/fuzz/generate_fuzz_corpus.cc
@@ -0,0 +1,44 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "nearby_protocol.h"
+#include "shared_test_util.h"
+
+#include <fstream>
+#include <iostream>
+
+#define STRING(x) #x
+#define XSTRING(x) STRING(x)
+
+void write_corpus_data_file(std::string file_name,
+                            nearby_protocol::RawAdvertisementPayload payload) {
+  // Get the current source directory.
+  std::string current_source_dir = XSTRING(CORPUS_DIR);
+
+  // Print the current source directory to the console.
+  std::cout << "Writing to file: " << current_source_dir << "/" << file_name
+            << std::endl;
+
+  std::ofstream out(current_source_dir + "/" + file_name,
+                    std::ios::out | std::ios::binary);
+  auto vec_data = payload.buffer_.ToVector();
+  out.write(reinterpret_cast<const char *>(vec_data.data()), vec_data.size());
+  out.close();
+}
+
+int main() {
+  write_corpus_data_file("V0AdvSimple", V0AdvSimple);
+  write_corpus_data_file("V1AdvSimple", V1AdvSimple);
+  write_corpus_data_file("V0AdvEmpty", V0AdvEmpty);
+}
diff --git a/nearby/presence/np_cpp_ffi/include/nearby_protocol.h b/nearby/presence/np_cpp_ffi/include/nearby_protocol.h
new file mode 100644
index 0000000..e7e46e7
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/include/nearby_protocol.h
@@ -0,0 +1,518 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef NEARBY_PRESENCE_NP_CPP_FFI_INCLUDE_NP_PROTOCOL_H_
+#define NEARBY_PRESENCE_NP_CPP_FFI_INCLUDE_NP_PROTOCOL_H_
+
+#include "absl/status/statusor.h"
+#include "absl/strings/str_format.h"
+#include "np_cpp_ffi_types.h"
+
+// This namespace provides a C++ API surface to the Rust nearby protocol
+// implementation. This is a wrapper over the np_ffi::internal namespace defined
+// in the headers np_cpp_ffi_functions.h and np_cpp_ffi_types.h which are
+// autogenerated by cbindgen based on the rust crate np_c_ffi.
+//
+// Classes in this namespace which have explicitly deleted copy-assignment and
+// copy-constructor functions are backed by a C handle allocated in the
+// underlying rust library. These handles are managed by the C++ classes which
+// hold them and will be freed automatically when the corresponding  type which
+// currently owns the handle goes out of scope.
+//
+// A note on conventions in this API surface:
+//
+// Function prefixed with `Into` will transfer ownership of the current instance
+// into a the newly returned object type, meaning that the previous instance is
+// no longer valid. Attempting to use a type which has already been moved out of
+// will result in the panic handler being invoked, which by default triggers
+// std::abort();
+//
+// Functions prefixed with `As` will not transfer ownership and instead return a
+// casted version of the previous object.
+//
+// Functions prefixed with `Try` are fallible and will return an
+// absl::StatusOr<T> result that needs to be checked before its used
+//
+// DO NOT DIRECTLY access the types defined in np_ffi::internal::*, these are
+// auto-generated and are easy to mis-use. Instead use the public types exposed
+// via the `nearby_protocol` namespace.
+namespace nearby_protocol {
+
+// Re-exporting cbindgen generated types which are used in the public API
+using np_ffi::internal::BooleanActionType;
+using np_ffi::internal::CreateCredentialBookResultKind;
+using np_ffi::internal::DeserializeAdvertisementResultKind;
+using np_ffi::internal::DeserializedV0AdvertisementKind;
+using np_ffi::internal::DeserializedV0IdentityKind;
+using np_ffi::internal::DeserializedV1IdentityKind;
+using np_ffi::internal::GetV0DEResultKind;
+using np_ffi::internal::PanicReason;
+using np_ffi::internal::TxPower;
+using np_ffi::internal::V0DataElementKind;
+
+template <uintptr_t N> using FfiByteBuffer = np_ffi::internal::ByteBuffer<N>;
+
+// All of the types defined in this header
+class RawAdvertisementPayload;
+class CredentialBook;
+class Deserializer;
+class DeserializeAdvertisementResult;
+
+// V0 Classes
+class DeserializedV0Advertisement;
+class DeserializedV0Identity;
+class LegibleDeserializedV0Advertisement;
+class V0DataElement;
+class V0Payload;
+class V0Actions;
+
+// V1 Classes
+class DeserializedV1Advertisement;
+class DeserializedV1Section;
+class V1DataElement;
+
+// Global static singleton class used to customize the deserialization library.
+// If no values are set, then the default values will be used. In most cases the
+// default max instance values won't need to be changed unless you are running
+// in a constrained resources environment, and need to specify an upper limit
+// on memory consumption. See np_ffi_global_config_* functions in
+// np_cpp_ffi_functions.h for more info
+class GlobalConfig {
+public:
+  // This class provides the static methods needed for global configuration,
+  // so it does not need to be constructable, cloneable, or assignable.
+  GlobalConfig(GlobalConfig const &) = delete;
+  void operator=(GlobalConfig const &) = delete;
+  GlobalConfig() = delete;
+
+  // Provides a user specified panic handler. This method will only have an
+  // effect on the global panic-handler the first time it's called, and this
+  // method will return `true` to indicate that the panic handler was
+  // successfully set. All subsequent calls to this method will simply ignore
+  // the argument and return `false`. see np_ffi_global_config_panic_handler in
+  // np_cpp_ffi_functions.h for more info
+  [[nodiscard]] static bool SetPanicHandler(void (*handler)(PanicReason));
+
+  // Sets an override to the number of shards employed in the libraries internal
+  // handle maps, used to set an upper limit on memory consumption, see
+  // np_ffi_global_config_set_num_shards in np_cpp_ffi_functions.h for more info
+  static void SetNumShards(uint8_t num_shards);
+
+  // Sets the maximum number of active handles to credential books which may be
+  // active at any one time. See
+  // np_ffi_global_config_set_max_num_credential_books in np_cpp_ffi_functions.h
+  // for more info
+  static void SetMaxNumCredentialBooks(uint32_t max_num_credential_books);
+
+  // Sets the maximum number of active handles to deserialized v0 advertisements
+  // which may be active at any one time. See
+  // np_ffi_global_config_set_max_num_deserialized_v0_advertisements for more
+  // info.
+  static void SetMaxNumDeserializedV0Advertisements(
+      uint32_t max_num_deserialized_v0_advertisements);
+
+  // Sets the maximum number of active handles to deserialized v1 advertisements
+  // which may be active at any one time
+  static void SetMaxNumDeserializedV1Advertisements(
+      uint32_t max_num_deserialized_v1_advertisements);
+};
+
+// Holds the credentials used when decrypting data of an advertisement.
+// This needs to be passed to Deserializer::DeserializeAdvertisement() when
+// attempting to deserialize a payload
+class CredentialBook {
+public:
+  // Don't allow copy constructor or copy assignment, since that would result in
+  // the underlying handle being freed multiple times
+  CredentialBook(const CredentialBook &other) = delete;
+  CredentialBook &operator=(const CredentialBook &other) = delete;
+
+  // Move constructor and move assignment are needed in order to wrap this class
+  // in absl::StatusOr
+  CredentialBook(CredentialBook &&other) noexcept;
+  CredentialBook &operator=(CredentialBook &&other) noexcept;
+
+  // The destructor for a CredentialBook, this will be called when a
+  // CredentialBook instance goes out of scope and will free the underlying
+  // resources
+  ~CredentialBook();
+
+  // Creates a new instance of a CredentialBook, returns the CredentialBook on
+  // success or a Status code on failure
+  [[nodiscard]] static absl::StatusOr<CredentialBook> TryCreate();
+
+private:
+  friend class Deserializer;
+  explicit CredentialBook(np_ffi::internal::CredentialBook credential_book)
+      : credential_book_(credential_book), moved_(false) {}
+
+  np_ffi::internal::CredentialBook credential_book_;
+  bool moved_;
+};
+
+// Representation of a buffer of bytes returned from deserialization APIs
+template <size_t N> class ByteBuffer {
+public:
+  // Constructor for a fixed length buffer of bytes from its internal struct
+  // data representation consisting of a length and array of unint8_t bytes.
+  [[nodiscard]] explicit ByteBuffer(FfiByteBuffer<N> internal)
+      : internal_(internal) {}
+
+  // Creates a ByteBuffer from a absl::string_view of bytes, returning an
+  // absl::OutOfRangeError in the case where bytes is too large to fit into the
+  // buffer. On success the returned type contains a copy of the provided bytes.
+  [[nodiscard]] static absl::StatusOr<ByteBuffer<N>>
+  CopyFrom(absl::string_view bytes) {
+    if (bytes.length() > N) {
+      return absl::OutOfRangeError(
+          absl::StrFormat("Provided bytes of length %d will not fit into a "
+                          "ByteBuffer<N> of size N=%d",
+                          bytes.length(), N));
+    }
+    np_ffi::internal::ByteBuffer<N> internal =
+        np_ffi::internal::ByteBuffer<N>();
+    internal.len = bytes.length();
+    std::copy(std::begin(bytes), std::end(bytes), internal.bytes);
+    return ByteBuffer(internal);
+  }
+
+  // Helper method to convert the ByteBuffer into a vector. The vector will
+  // contain a copy of the bytes and won't share the underlying buffer.
+  [[nodiscard]] std::vector<uint8_t> ToVector() {
+    std::vector<uint8_t> result(internal_.bytes,
+                                internal_.bytes + internal_.len);
+    return result;
+  }
+
+  // Helper method to convert the ByteBuffer into a std::string. The returned
+  // string will contain a copy of the bytes and won't share the underlying
+  // buffer.
+  [[nodiscard]] std::string ToString() {
+    std::string result;
+    result.assign(internal_.bytes, internal_.bytes + internal_.len);
+    return result;
+  }
+
+private:
+  friend class V1DataElement;
+  friend class Deserializer;
+  np_ffi::internal::ByteBuffer<N> internal_;
+};
+
+class RawAdvertisementPayload {
+public:
+  // Creates a RawAdvertisementPayload from a ByteBuffer.
+  explicit RawAdvertisementPayload(ByteBuffer<255> bytes) : buffer_(bytes) {}
+
+  ByteBuffer<255> buffer_;
+
+private:
+  friend class Deserializer;
+};
+
+// A global static Deserializer, configured by GlobalConfig and used to
+// deserialize advertisement payloads
+class Deserializer {
+public:
+  // Attempts to deserialize an advertisement with the given service-data
+  // payload (presumed to be under the NP service UUID) using credentials pulled
+  // from the given credential-book. See np_ffi_deserialize_advertisement in
+  // np_cpp_ffi_functions.h for more info
+  [[nodiscard]] static DeserializeAdvertisementResult
+  DeserializeAdvertisement(RawAdvertisementPayload &payload,
+                           const CredentialBook &credential_book);
+};
+
+// The result type returned from Deserializer::DeserializeAdvertisement(). Can
+// be used to further process the advertisement and inspect its contents
+class DeserializeAdvertisementResult {
+public:
+  // Don't allow copy constructor or copy assignment, since that would result in
+  // the underlying handle being freed multiple times
+  DeserializeAdvertisementResult(const DeserializeAdvertisementResult &other) =
+      delete;
+  DeserializeAdvertisementResult &
+  operator=(const DeserializeAdvertisementResult &other) = delete;
+
+  // Move constructor and move assignment operators
+  DeserializeAdvertisementResult(
+      DeserializeAdvertisementResult &&other) noexcept;
+  DeserializeAdvertisementResult &
+  operator=(DeserializeAdvertisementResult &&other) noexcept;
+
+  // Frees the underlying resources of the result.
+  ~DeserializeAdvertisementResult();
+
+  // Returns the DeserializeAdvertisementResultKind of the Result
+  [[nodiscard]] DeserializeAdvertisementResultKind GetKind();
+
+  // Casts a `DeserializeAdvertisementResult` to the `V0` variant, panicking in
+  // the case where the passed value is of a different enum variant. This can
+  // only be called once. When called, this object is moved into the
+  // returned 'DeserializedV0Advertisement' and this object is no longer valid.
+  [[nodiscard]] DeserializedV0Advertisement IntoV0();
+
+  // Casts a `DeserializeAdvertisementResult` to the `V1` variant, panicking in
+  // the case where the passed value is of a different enum variant. This can
+  // only be called once. After this is cast into a `V1` variant this result
+  // is no longer valid.
+  [[nodiscard]] DeserializedV1Advertisement IntoV1();
+
+private:
+  friend class Deserializer;
+  explicit DeserializeAdvertisementResult(
+      np_ffi::internal::DeserializeAdvertisementResult result)
+      : result_(result), moved_(false) {}
+
+  np_ffi::internal::DeserializeAdvertisementResult result_;
+  bool moved_;
+};
+
+// A deserialized V0 advertisement payload
+class DeserializedV0Advertisement {
+public:
+  // Don't allow copy constructor or copy assignment, since that would result in
+  // the underlying handle being freed multiple times
+  DeserializedV0Advertisement(const DeserializedV0Advertisement &other) =
+      delete;
+  DeserializedV0Advertisement &
+  operator=(const DeserializedV0Advertisement &other) = delete;
+
+  // Move constructor and move assignment operators
+  DeserializedV0Advertisement(DeserializedV0Advertisement &&other) noexcept;
+  DeserializedV0Advertisement &
+  operator=(DeserializedV0Advertisement &&other) noexcept;
+
+  // The destructor which will be called when a DeserializedV0Advertisement
+  // instance goes out of scope, and will free the underlying resources
+  ~DeserializedV0Advertisement();
+
+  // Returns the DeserializedV0AdvertisementKind of the advertisement
+  [[nodiscard]] DeserializedV0AdvertisementKind GetKind();
+
+  // Casts a `DeserializedV0Advertisement` to the `Legible` variant, panicking
+  // in the case where the passed value is of a different enum variant.
+  // After calling this the object is moved into the returned
+  // `LegibleDeserializedV0Advertisement`, and this object is no longer valid.
+  [[nodiscard]] LegibleDeserializedV0Advertisement IntoLegible();
+
+private:
+  friend class DeserializeAdvertisementResult;
+  explicit DeserializedV0Advertisement(
+      np_ffi::internal::DeserializedV0Advertisement v0_advertisement)
+      : v0_advertisement_(v0_advertisement), moved_(false) {}
+
+  np_ffi::internal::DeserializedV0Advertisement v0_advertisement_;
+  bool moved_;
+};
+
+// A Legible deserialized V0 advertisement, which means the contents of it are
+// either plaintext OR have already been decrypted successfully by a matching
+// credential in the provided CredentialBook
+class LegibleDeserializedV0Advertisement {
+public:
+  // Don't allow copy constructor or copy assignment, since that would result in
+  // the underlying handle being freed multiple times
+  LegibleDeserializedV0Advertisement(
+      const LegibleDeserializedV0Advertisement &other) = delete;
+  LegibleDeserializedV0Advertisement &
+  operator=(const LegibleDeserializedV0Advertisement &other) = delete;
+
+  // Move constructor and move assignment operators
+  LegibleDeserializedV0Advertisement(
+      LegibleDeserializedV0Advertisement &&other) noexcept;
+  LegibleDeserializedV0Advertisement &
+  operator=(LegibleDeserializedV0Advertisement &&other) noexcept;
+
+  // The destructor which will be called when a this instance goes out of scope,
+  // and will free the underlying parent handle.
+  ~LegibleDeserializedV0Advertisement();
+
+  // Returns just the identity information associated with the advertisement
+  [[nodiscard]] DeserializedV0Identity GetIdentity();
+  // Returns the number of data elements in the advertisement
+  [[nodiscard]] uint8_t GetNumberOfDataElements();
+  // Returns just the data-element payload of the advertisement
+  [[nodiscard]] V0Payload IntoPayload();
+
+private:
+  friend class DeserializedV0Advertisement;
+  explicit LegibleDeserializedV0Advertisement(
+      np_ffi::internal::LegibleDeserializedV0Advertisement
+          legible_v0_advertisement)
+      : legible_v0_advertisement_(legible_v0_advertisement), moved_(false) {}
+
+  np_ffi::internal::LegibleDeserializedV0Advertisement
+      legible_v0_advertisement_;
+  bool moved_;
+};
+
+// A V0 identity of an advertisement
+class DeserializedV0Identity {
+public:
+  // Returns the DeserializedV0IdentityKind of the advertisement
+  [[nodiscard]] DeserializedV0IdentityKind GetKind();
+
+private:
+  friend class LegibleDeserializedV0Advertisement;
+  explicit DeserializedV0Identity(
+      np_ffi::internal::DeserializedV0Identity v0_identity)
+      : v0_identity_(v0_identity) {}
+  np_ffi::internal::DeserializedV0Identity v0_identity_;
+};
+
+// A data element payload of a Deserialized V0 Advertisement.
+class V0Payload {
+public:
+  // Don't allow copy constructor or copy assignment, since that would result in
+  // the underlying parent handle being freed multiple times.
+  V0Payload(const V0Payload &other) = delete;
+  V0Payload &operator=(const V0Payload &other) = delete;
+
+  // Move constructor and move assignment operators
+  V0Payload(V0Payload &&other) noexcept;
+  V0Payload &operator=(V0Payload &&other) noexcept;
+
+  // Frees the underlying handle when this goes out of scope
+  ~V0Payload();
+
+  // Tries to retrieve the data element at the given index, returns the data
+  // element if it exists otherwise returns an Error status code
+  [[nodiscard]] absl::StatusOr<V0DataElement> TryGetDataElement(uint8_t index);
+
+private:
+  friend class LegibleDeserializedV0Advertisement;
+  explicit V0Payload(np_ffi::internal::V0Payload v0_payload)
+      : v0_payload_(v0_payload), moved_(false) {}
+
+  np_ffi::internal::V0Payload v0_payload_;
+  bool moved_;
+};
+
+// A single deserialized V0 data element
+class V0DataElement {
+public:
+  // Yields the V0DataElementKind of the data element
+  [[nodiscard]] V0DataElementKind GetKind();
+  // Casts the V0DataElement into the TxPower variant, panicking in the case
+  // where the data element is of a different enum variant
+  [[nodiscard]] TxPower AsTxPower();
+  // Casts the V0DataElement into the Actions variant, panicking in the case
+  // where the data element is of a different enum variant
+  [[nodiscard]] V0Actions AsActions();
+
+private:
+  friend class V0Payload;
+  explicit V0DataElement(np_ffi::internal::V0DataElement v0_data_element)
+      : v0_data_element_(v0_data_element) {}
+  np_ffi::internal::V0DataElement v0_data_element_;
+};
+
+// A V0 Actions Data Element
+class V0Actions {
+public:
+  // Gets the V0 Action bits as represented by a u32 where the last 8 bits are
+  // always 0 since V0 actions can only hold up to 24 bits.
+  [[nodiscard]] uint32_t GetAsU32();
+
+  /// Return whether a boolean action type is present in this data element
+  [[nodiscard]] bool HasAction(BooleanActionType action);
+
+  /// Gets the 4 bit context sync sequence number as a uint8_t from this data
+  /// element
+  [[nodiscard]] uint8_t GetContextSyncSequenceNumber();
+
+private:
+  friend class V0DataElement;
+  explicit V0Actions(np_ffi::internal::V0Actions actions) : actions_(actions) {}
+  np_ffi::internal::V0Actions actions_;
+};
+
+// A deserialized V1 Advertisement payload
+class DeserializedV1Advertisement {
+public:
+  // Don't allow copy constructor or copy assignment, since that would result in
+  // the underlying handle being freed multiple times
+  DeserializedV1Advertisement(const DeserializedV1Advertisement &other) =
+      delete;
+  DeserializedV1Advertisement &
+  operator=(const DeserializedV1Advertisement &other) = delete;
+
+  // Move constructor and move assignment operators
+  DeserializedV1Advertisement(DeserializedV1Advertisement &&other) noexcept;
+  DeserializedV1Advertisement &
+  operator=(DeserializedV1Advertisement &&other) noexcept;
+
+  // Gets the number of legible sections on a deserialized V1 advertisement.
+  // This is usable as an iteration bound for the section_index of TryGetSection
+  [[nodiscard]] uint8_t GetNumLegibleSections();
+  // Gets the number of sections on a deserialized V1 advertisement which
+  // were unable to be decrypted with the credentials that the receiver
+  // possesses
+  [[nodiscard]] uint8_t GetNumUndecryptableSections();
+  // Tries to get the section with the given index in a deserialized V1
+  // advertisement. Returns a error code in the result of an invalid index
+  [[nodiscard]] absl::StatusOr<DeserializedV1Section>
+  TryGetSection(uint8_t section_index);
+
+private:
+  friend class DeserializeAdvertisementResult;
+  explicit DeserializedV1Advertisement(
+      np_ffi::internal::DeserializedV1Advertisement v1_advertisement);
+
+  std::shared_ptr<np_ffi::internal::DeserializedV1Advertisement>
+      v1_advertisement_;
+};
+
+// A Deserialized V1 Section of an advertisement
+class DeserializedV1Section {
+public:
+  // Returns the number of data elements present in the section
+  [[nodiscard]] uint8_t NumberOfDataElements();
+  // Returns the DeserializedV1IdentityKind of the identity
+  [[nodiscard]] DeserializedV1IdentityKind GetIdentityKind();
+  // Tries to get the data element in the section at the given index
+  [[nodiscard]] absl::StatusOr<V1DataElement> TryGetDataElement(uint8_t index);
+
+private:
+  friend class DeserializedV1Advertisement;
+  explicit DeserializedV1Section(
+      np_ffi::internal::DeserializedV1Section section,
+      std::shared_ptr<np_ffi::internal::DeserializedV1Advertisement>
+          owning_v1_advertisement)
+      : section_(section),
+        owning_v1_advertisement_(std::move(owning_v1_advertisement)) {}
+  np_ffi::internal::DeserializedV1Section section_;
+  std::shared_ptr<np_ffi::internal::DeserializedV1Advertisement>
+      owning_v1_advertisement_;
+};
+
+// A V1 Data Element
+class V1DataElement {
+public:
+  // Yields the unsigned 32-bit integer V1 DE type code
+  [[nodiscard]] uint32_t GetDataElementTypeCode() const;
+  // Yields the payload bytes of the data element
+  [[nodiscard]] ByteBuffer<127> GetPayload() const;
+
+private:
+  friend class DeserializedV1Section;
+  explicit V1DataElement(np_ffi::internal::V1DataElement v1_data_element)
+      : v1_data_element_(v1_data_element) {}
+  np_ffi::internal::V1DataElement v1_data_element_;
+};
+
+} //  namespace nearby_protocol
+
+#endif // NEARBY_PRESENCE_NP_CPP_FFI_INCLUDE_NP_PROTOCOL_H_
diff --git a/nearby/presence/np_cpp_ffi/nearby_protocol.cc b/nearby/presence/np_cpp_ffi/nearby_protocol.cc
new file mode 100644
index 0000000..3ee5c63
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/nearby_protocol.cc
@@ -0,0 +1,486 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "include/nearby_protocol.h"
+
+#include "np_cpp_ffi_functions.h"
+
+#ifdef __FILE_NAME__
+#define __ASSERT_FILE_NAME __FILE_NAME__
+#else /* __FILE_NAME__ */
+#define __ASSERT_FILE_NAME __FILE__
+#endif /* __FILE_NAME__ */
+
+namespace nearby_protocol {
+
+static void panic_handler(PanicReason reason);
+
+struct PanicHandler {
+  void (*handler)(PanicReason);
+  bool set_by_client;
+};
+
+static PanicHandler gPanicHandler = PanicHandler{panic_handler, false};
+
+// C++ layer internal panic handler
+static void panic_handler(PanicReason reason) {
+  // Give clients a chance to use their own panic handler, but if they don't
+  // terminate the process we will make sure it happens.
+  if (gPanicHandler.set_by_client) {
+    gPanicHandler.handler(reason);
+  }
+  std::abort();
+}
+
+static void _assert_panic(bool condition, const char *func, const char *file,
+                          int line) {
+  if (!condition) {
+    std::cout << "Assert failed: \n function: " << func << "\n file: " << file
+              << "\n line: " << line << "\n";
+    panic_handler(PanicReason::AssertFailed);
+  }
+}
+
+#define assert_panic(e) _assert_panic(e, __func__, __ASSERT_FILE_NAME, __LINE__)
+
+bool GlobalConfig::SetPanicHandler(void (*handler)(PanicReason)) {
+  if (!gPanicHandler.set_by_client) {
+    gPanicHandler.handler = handler;
+    gPanicHandler.set_by_client = true;
+    return np_ffi::internal::np_ffi_global_config_panic_handler(panic_handler);
+  }
+  return false;
+}
+
+void GlobalConfig::SetNumShards(uint8_t num_shards) {
+  np_ffi::internal::np_ffi_global_config_set_num_shards(num_shards);
+}
+
+void GlobalConfig::SetMaxNumCredentialBooks(uint32_t max_num_credential_books) {
+  np_ffi::internal::np_ffi_global_config_set_max_num_credential_books(
+      max_num_credential_books);
+}
+
+void GlobalConfig::SetMaxNumDeserializedV0Advertisements(
+    uint32_t max_num_deserialized_v0_advertisements) {
+  np_ffi::internal::
+      np_ffi_global_config_set_max_num_deserialized_v0_advertisements(
+          max_num_deserialized_v0_advertisements);
+}
+
+void GlobalConfig::SetMaxNumDeserializedV1Advertisements(
+    uint32_t max_num_deserialized_v1_advertisements) {
+  np_ffi::internal::
+      np_ffi_global_config_set_max_num_deserialized_v1_advertisements(
+          max_num_deserialized_v1_advertisements);
+}
+
+absl::StatusOr<CredentialBook> CredentialBook::TryCreate() {
+  auto result = np_ffi::internal::np_ffi_create_credential_book();
+  auto kind = np_ffi::internal::np_ffi_CreateCredentialBookResult_kind(result);
+
+  switch (kind) {
+  case CreateCredentialBookResultKind::Success: {
+    auto book = CredentialBook(
+        np_ffi::internal::np_ffi_CreateCredentialBookResult_into_SUCCESS(
+            result));
+    return book;
+  }
+  case CreateCredentialBookResultKind::NoSpaceLeft: {
+    return absl::ResourceExhaustedError(
+        "No space left to create credential book");
+  }
+  }
+}
+
+CredentialBook::~CredentialBook() {
+  if (!this->moved_) {
+    auto result =
+        np_ffi::internal::np_ffi_deallocate_credential_book(credential_book_);
+    assert_panic(result == np_ffi::internal::DeallocateResult::Success);
+  }
+}
+
+CredentialBook::CredentialBook(CredentialBook &&other) noexcept
+    : credential_book_(other.credential_book_), moved_(other.moved_) {
+  other.credential_book_ = {};
+  other.moved_ = true;
+}
+
+CredentialBook &CredentialBook::operator=(CredentialBook &&other) noexcept {
+  if (this != &other) {
+    if (!this->moved_) {
+      auto result = np_ffi::internal::np_ffi_deallocate_credential_book(
+          this->credential_book_);
+      assert_panic(result == np_ffi::internal::DeallocateResult::Success);
+    }
+
+    this->credential_book_ = other.credential_book_;
+    this->moved_ = other.moved_;
+
+    other.credential_book_ = {};
+    other.moved_ = true;
+  }
+  return *this;
+}
+
+DeserializeAdvertisementResult
+Deserializer::DeserializeAdvertisement(RawAdvertisementPayload &payload,
+                                       const CredentialBook &credential_book) {
+  assert_panic(!credential_book.moved_);
+  auto result = np_ffi::internal::np_ffi_deserialize_advertisement(
+      {payload.buffer_.internal_}, credential_book.credential_book_);
+  return DeserializeAdvertisementResult(result);
+}
+
+DeserializeAdvertisementResultKind DeserializeAdvertisementResult::GetKind() {
+  assert_panic(!this->moved_);
+  return np_ffi::internal::np_ffi_DeserializeAdvertisementResult_kind(result_);
+}
+
+DeserializedV0Advertisement DeserializeAdvertisementResult::IntoV0() {
+  assert_panic(!this->moved_);
+  auto result =
+      np_ffi::internal::np_ffi_DeserializeAdvertisementResult_into_V0(result_);
+  this->moved_ = true;
+  return DeserializedV0Advertisement(result);
+}
+
+DeserializedV1Advertisement DeserializeAdvertisementResult::IntoV1() {
+  assert_panic(!this->moved_);
+  auto v1_adv =
+      np_ffi::internal::np_ffi_DeserializeAdvertisementResult_into_V1(result_);
+  this->moved_ = true;
+  return DeserializedV1Advertisement(v1_adv);
+}
+
+DeserializeAdvertisementResult::~DeserializeAdvertisementResult() {
+  if (!this->moved_) {
+    auto result =
+        np_ffi::internal::np_ffi_deallocate_deserialize_advertisement_result(
+            result_);
+    assert_panic(result == np_ffi::internal::DeallocateResult::Success);
+  }
+}
+
+DeserializeAdvertisementResult::DeserializeAdvertisementResult(
+    DeserializeAdvertisementResult &&other) noexcept
+    : result_(other.result_), moved_(other.moved_) {
+  other.result_ = {};
+  other.moved_ = true;
+}
+
+DeserializeAdvertisementResult &DeserializeAdvertisementResult::operator=(
+    DeserializeAdvertisementResult &&other) noexcept {
+  if (this != &other) {
+    if (!this->moved_) {
+      auto result =
+          np_ffi::internal::np_ffi_deallocate_deserialize_advertisement_result(
+              result_);
+      assert_panic(result == np_ffi::internal::DeallocateResult::Success);
+    }
+    this->result_ = other.result_;
+    this->moved_ = other.moved_;
+
+    other.result_ = {};
+    other.moved_ = true;
+  }
+  return *this;
+}
+
+// V0 Stuff
+DeserializedV0Advertisement::DeserializedV0Advertisement(
+    DeserializedV0Advertisement &&other) noexcept
+    : v0_advertisement_(other.v0_advertisement_), moved_(other.moved_) {
+  other.v0_advertisement_ = {};
+  other.moved_ = true;
+}
+
+DeserializedV0Advertisement &DeserializedV0Advertisement::operator=(
+    DeserializedV0Advertisement &&other) noexcept {
+  if (this != &other) {
+    if (!this->moved_) {
+      auto result =
+          np_ffi::internal::np_ffi_deallocate_deserialized_V0_advertisement(
+              v0_advertisement_);
+      assert_panic(result == np_ffi::internal::DeallocateResult::Success);
+    }
+    this->v0_advertisement_ = other.v0_advertisement_;
+    this->moved_ = other.moved_;
+
+    other.v0_advertisement_ = {};
+    other.moved_ = true;
+  }
+  return *this;
+}
+
+DeserializedV0Advertisement::~DeserializedV0Advertisement() {
+  if (!this->moved_) {
+    auto result =
+        np_ffi::internal::np_ffi_deallocate_deserialized_V0_advertisement(
+            v0_advertisement_);
+    assert_panic(result == np_ffi::internal::DeallocateResult::Success);
+  }
+}
+
+np_ffi::internal::DeserializedV0AdvertisementKind
+DeserializedV0Advertisement::GetKind() {
+  assert_panic(!this->moved_);
+  return np_ffi::internal::np_ffi_DeserializedV0Advertisement_kind(
+      v0_advertisement_);
+}
+
+LegibleDeserializedV0Advertisement DeserializedV0Advertisement::IntoLegible() {
+  assert_panic(!this->moved_);
+  auto result =
+      np_ffi::internal::np_ffi_DeserializedV0Advertisement_into_LEGIBLE(
+          v0_advertisement_);
+  this->moved_ = true;
+  this->v0_advertisement_ = {};
+  return LegibleDeserializedV0Advertisement(result);
+}
+
+LegibleDeserializedV0Advertisement::LegibleDeserializedV0Advertisement(
+    LegibleDeserializedV0Advertisement &&other) noexcept
+    : legible_v0_advertisement_(other.legible_v0_advertisement_),
+      moved_(other.moved_) {
+  other.moved_ = true;
+  other.legible_v0_advertisement_ = {};
+}
+
+LegibleDeserializedV0Advertisement &
+LegibleDeserializedV0Advertisement::operator=(
+    LegibleDeserializedV0Advertisement &&other) noexcept {
+  if (this != &other) {
+    if (!this->moved_) {
+      auto result =
+          np_ffi::internal::np_ffi_deallocate_legible_v0_advertisement(
+              this->legible_v0_advertisement_);
+      assert_panic(result == np_ffi::internal::DeallocateResult::Success);
+    }
+    this->legible_v0_advertisement_ = other.legible_v0_advertisement_;
+    this->moved_ = other.moved_;
+
+    other.moved_ = true;
+    other.legible_v0_advertisement_ = {};
+  }
+  return *this;
+}
+
+LegibleDeserializedV0Advertisement::~LegibleDeserializedV0Advertisement() {
+  if (!this->moved_) {
+    auto result = np_ffi::internal::np_ffi_deallocate_legible_v0_advertisement(
+        this->legible_v0_advertisement_);
+    assert_panic(result == np_ffi::internal::DeallocateResult::Success);
+  }
+}
+
+DeserializedV0Identity LegibleDeserializedV0Advertisement::GetIdentity() {
+  assert_panic(!this->moved_);
+  auto result =
+      np_ffi::internal::np_ffi_LegibleDeserializedV0Advertisement_into_identity(
+          legible_v0_advertisement_);
+  return DeserializedV0Identity(result);
+}
+
+uint8_t LegibleDeserializedV0Advertisement::GetNumberOfDataElements() {
+  assert_panic(!this->moved_);
+  return np_ffi::internal::
+      np_ffi_LegibleDeserializedV0Advertisement_get_num_des(
+          legible_v0_advertisement_);
+}
+
+V0Payload LegibleDeserializedV0Advertisement::IntoPayload() {
+  assert_panic(!this->moved_);
+  auto result = np_ffi_LegibleDeserializedV0Advertisement_into_payload(
+      legible_v0_advertisement_);
+  this->moved_ = true;
+  return V0Payload(result);
+}
+
+np_ffi::internal::DeserializedV0IdentityKind DeserializedV0Identity::GetKind() {
+  return np_ffi::internal::np_ffi_DeserializedV0Identity_kind(v0_identity_);
+}
+
+V0Payload::V0Payload(V0Payload &&other) noexcept
+    : v0_payload_(other.v0_payload_), moved_(other.moved_) {
+  other.v0_payload_ = {};
+  other.moved_ = true;
+}
+
+V0Payload &V0Payload::operator=(V0Payload &&other) noexcept {
+  if (this != &other) {
+    if (!this->moved_) {
+      auto result =
+          np_ffi::internal::np_ffi_deallocate_v0_payload(this->v0_payload_);
+      assert_panic(result == np_ffi::internal::DeallocateResult::Success);
+    }
+    this->v0_payload_ = other.v0_payload_;
+    this->moved_ = other.moved_;
+
+    other.moved_ = true;
+    other.v0_payload_ = {};
+  }
+  return *this;
+}
+
+V0Payload::~V0Payload() {
+  if (!this->moved_) {
+    auto result =
+        np_ffi::internal::np_ffi_deallocate_v0_payload(this->v0_payload_);
+    assert_panic(result == np_ffi::internal::DeallocateResult::Success);
+  }
+}
+
+absl::StatusOr<V0DataElement> V0Payload::TryGetDataElement(uint8_t index) {
+  assert_panic(!this->moved_);
+  auto result = np_ffi::internal::np_ffi_V0Payload_get_de(v0_payload_, index);
+  auto kind = np_ffi::internal::np_ffi_GetV0DEResult_kind(result);
+  switch (kind) {
+  case GetV0DEResultKind::Success: {
+    auto de = np_ffi_GetV0DEResult_into_SUCCESS(result);
+    return V0DataElement(de);
+  }
+  case GetV0DEResultKind::Error: {
+    return absl::OutOfRangeError("Invalid Data Element index");
+  }
+  }
+}
+
+V0DataElementKind V0DataElement::GetKind() {
+  return np_ffi::internal::np_ffi_V0DataElement_kind(v0_data_element_);
+}
+
+TxPower V0DataElement::AsTxPower() {
+  return np_ffi::internal::np_ffi_V0DataElement_into_TX_POWER(v0_data_element_);
+}
+
+V0Actions V0DataElement::AsActions() {
+  auto internal =
+      np_ffi::internal::np_ffi_V0DataElement_into_ACTIONS(v0_data_element_);
+  return V0Actions(internal);
+}
+
+uint32_t V0Actions::GetAsU32() {
+  return np_ffi::internal::np_ffi_V0Actions_as_u32(actions_);
+}
+
+bool V0Actions::HasAction(BooleanActionType action) {
+  return np_ffi::internal::np_ffi_V0Actions_has_action(actions_, action);
+}
+
+uint8_t V0Actions::GetContextSyncSequenceNumber() {
+  return np_ffi::internal::np_ffi_V0Actions_get_context_sync_sequence_number(
+      actions_);
+}
+
+// This is called after all references to the shared_ptr have gone out of scope
+auto DeallocateV1Adv(
+    np_ffi::internal::DeserializedV1Advertisement *v1_advertisement) {
+  auto result =
+      np_ffi::internal::np_ffi_deallocate_deserialized_V1_advertisement(
+          *v1_advertisement);
+  assert_panic(result == np_ffi::internal::DeallocateResult::Success);
+  delete v1_advertisement;
+}
+
+DeserializedV1Advertisement::DeserializedV1Advertisement(
+    np_ffi::internal::DeserializedV1Advertisement v1_advertisement) {
+  v1_advertisement_ =
+      std::shared_ptr<np_ffi::internal::DeserializedV1Advertisement>(
+          new np_ffi::internal::DeserializedV1Advertisement(v1_advertisement),
+          DeallocateV1Adv);
+}
+
+DeserializedV1Advertisement::DeserializedV1Advertisement(
+    DeserializedV1Advertisement &&other) noexcept
+    : v1_advertisement_(std::move(other.v1_advertisement_)) {}
+
+DeserializedV1Advertisement &DeserializedV1Advertisement::operator=(
+    DeserializedV1Advertisement &&other) noexcept {
+  if (this != &other) {
+    this->v1_advertisement_ = std::move(other.v1_advertisement_);
+  }
+  return *this;
+}
+
+// V1 Stuff
+uint8_t DeserializedV1Advertisement::GetNumLegibleSections() {
+  assert_panic(this->v1_advertisement_ != nullptr);
+  return np_ffi::internal::
+      np_ffi_DeserializedV1Advertisement_get_num_legible_sections(
+          *v1_advertisement_);
+}
+
+uint8_t DeserializedV1Advertisement::GetNumUndecryptableSections() {
+  assert_panic(this->v1_advertisement_ != nullptr);
+  return np_ffi::internal::
+      np_ffi_DeserializedV1Advertisement_get_num_undecryptable_sections(
+          *v1_advertisement_);
+}
+
+absl::StatusOr<DeserializedV1Section>
+DeserializedV1Advertisement::TryGetSection(uint8_t section_index) {
+  assert_panic(this->v1_advertisement_ != nullptr);
+  auto result =
+      np_ffi::internal::np_ffi_DeserializedV1Advertisement_get_section(
+          *v1_advertisement_, section_index);
+  auto kind = np_ffi::internal::np_ffi_GetV1SectionResult_kind(result);
+  switch (kind) {
+  case np_ffi::internal::GetV1SectionResultKind::Error: {
+    return absl::OutOfRangeError("Invalid section index");
+  }
+  case np_ffi::internal::GetV1SectionResultKind::Success: {
+    auto section =
+        np_ffi::internal::np_ffi_GetV1SectionResult_into_SUCCESS(result);
+    return DeserializedV1Section(section, v1_advertisement_);
+  }
+  }
+}
+
+uint8_t DeserializedV1Section::NumberOfDataElements() {
+  return np_ffi::internal::np_ffi_DeserializedV1Section_get_num_des(section_);
+}
+
+DeserializedV1IdentityKind DeserializedV1Section::GetIdentityKind() {
+  return np_ffi::internal::np_ffi_DeserializedV1Section_get_identity_kind(
+      section_);
+}
+
+absl::StatusOr<V1DataElement>
+DeserializedV1Section::TryGetDataElement(uint8_t index) {
+  auto result =
+      np_ffi::internal::np_ffi_DeserializedV1Section_get_de(section_, index);
+  auto kind = np_ffi::internal::np_ffi_GetV1DEResult_kind(result);
+  switch (kind) {
+  case np_ffi::internal::GetV1DEResultKind::Error: {
+    return absl::OutOfRangeError("Invalid data element index for this section");
+  }
+  case np_ffi::internal::GetV1DEResultKind::Success: {
+    return V1DataElement(
+        np_ffi::internal::np_ffi_GetV1DEResult_into_SUCCESS(result));
+  }
+  }
+}
+
+uint32_t V1DataElement::GetDataElementTypeCode() const {
+  return np_ffi::internal::np_ffi_V1DEType_to_uint32_t(
+      v1_data_element_.generic._0.de_type);
+}
+
+ByteBuffer<127> V1DataElement::GetPayload() const {
+  return ByteBuffer(v1_data_element_.generic._0.payload);
+}
+
+} // namespace nearby_protocol
diff --git a/nearby/presence/np_cpp_ffi/sample/CMakeLists.txt b/nearby/presence/np_cpp_ffi/sample/CMakeLists.txt
new file mode 100644
index 0000000..da33258
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/sample/CMakeLists.txt
@@ -0,0 +1,29 @@
+# Copyright 2023 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+add_executable(np_cpp_sample main.cpp)
+
+target_link_libraries(np_cpp_sample nearby_protocol)
+
+if (UNIX)
+    target_link_libraries(
+            np_cpp_sample
+            dl -fsanitize=address
+    )
+elseif (MSVC)
+    target_link_libraries(
+            np_cpp_sample
+            bcrypt ntdll userenv ws2_32
+    )
+endif ()
diff --git a/nearby/presence/np_cpp_ffi/sample/main.cpp b/nearby/presence/np_cpp_ffi/sample/main.cpp
new file mode 100644
index 0000000..114ed64
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/sample/main.cpp
@@ -0,0 +1,272 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     https://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "nearby_protocol.h"
+
+#include <bitset>
+#include <iostream>
+
+#include "absl/strings/escaping.h"
+
+static void SamplePanicHandler(nearby_protocol::PanicReason reason);
+
+void HandleAdvertisementResult(nearby_protocol::DeserializeAdvertisementResult);
+
+void HandleV0Adv(nearby_protocol::DeserializedV0Advertisement);
+void HandleLegibleV0Adv(nearby_protocol::LegibleDeserializedV0Advertisement);
+void HandleV0Identity(nearby_protocol::DeserializedV0Identity);
+void HandleDataElement(nearby_protocol::V0DataElement);
+
+void HandleV1Adv(nearby_protocol::DeserializedV1Advertisement);
+void HandleV1Section(nearby_protocol::DeserializedV1Section);
+void HandleV1DataElement(nearby_protocol::V1DataElement);
+
+int main() {
+  auto result =
+      nearby_protocol::GlobalConfig::SetPanicHandler(SamplePanicHandler);
+  if (result) {
+    std::cout << "Successfully registered panic handler\n";
+  } else {
+    std::cout << "Failed register panic handler\n";
+    return -1;
+  }
+  nearby_protocol::GlobalConfig::SetNumShards(4);
+
+  std::cout << "\n========= Example V0 Adv ==========\n";
+  std::cout << "Hex bytes: 00031503260046\n\n";
+
+  // Create an empty credential book and verify that is is successful
+  auto cred_book_result = nearby_protocol::CredentialBook::TryCreate();
+  if (!cred_book_result.ok()) {
+    std::cout << cred_book_result.status().ToString();
+    return -1;
+  }
+
+  auto v0_byte_string = "00"      // Adv Header
+                        "03"      // Public DE header
+                        "1503"    // Length 1 Tx Power DE with value 3
+                        "260046"; // Length 2 Actions
+
+  auto v0_bytes = absl::HexStringToBytes(v0_byte_string);
+  auto v0_buffer = nearby_protocol::ByteBuffer<255>::CopyFrom(v0_bytes);
+  nearby_protocol::RawAdvertisementPayload v0_payload(v0_buffer.value());
+
+  // Try to deserialize a V0 payload
+  auto deserialize_v0_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          v0_payload, cred_book_result.value());
+  HandleAdvertisementResult(std::move(deserialize_v0_result));
+
+  std::cout << "\n========= Example V1 Adv ==========\n";
+  std::cout << "Hex bytes: 20040326004603031505\n\n";
+
+  auto v1_byte_string = "20"     // V1 Advertisement header
+                        "04"     // Section Header
+                        "03"     // Public Identity DE header
+                        "260046" // Length 2 Actions DE
+                        "03"     // Section Header
+                        "03"     // Public Identity DE header
+                        "1505";  // Length 1 Tx Power DE with value 5
+  auto v1_bytes = absl::HexStringToBytes(v1_byte_string);
+  auto v1_buffer = nearby_protocol::ByteBuffer<255>::CopyFrom(v1_bytes);
+  nearby_protocol::RawAdvertisementPayload v1_payload(v1_buffer.value());
+
+  // Try to deserialize a V1 payload
+  auto deserialize_v1_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          v1_payload, cred_book_result.value());
+  HandleAdvertisementResult(std::move(deserialize_v1_result));
+
+  std::cout << "\n========= User input sample ==========\n\n";
+  while (true) {
+    std::string user_input;
+    std::cout << "Enter the hex of the advertisement you would like to parse "
+                 "(see above examples): ";
+    std::cin >> user_input;
+    auto bytes = absl::HexStringToBytes(user_input);
+    auto buffer = nearby_protocol::ByteBuffer<255>::CopyFrom(bytes);
+    if (!buffer.ok()) {
+      std::cout << "Too many bytes provided, must fit into a max length 255 "
+                   "byte BLE advertisement\n";
+      continue;
+    }
+    nearby_protocol::RawAdvertisementPayload user_input_payload(buffer.value());
+
+    // Try to deserialize user input
+    auto user_input_result =
+        nearby_protocol::Deserializer::DeserializeAdvertisement(
+            user_input_payload, cred_book_result.value());
+    HandleAdvertisementResult(std::move(user_input_result));
+
+    char choice;
+    do {
+      std::cout << "Do you want to continue? (Y/N) ";
+      std::cin >> choice;
+    } while (choice != 'Y' && choice != 'N' && choice != 'n' && choice != 'y');
+
+    if (choice == 'N' || choice == 'n') {
+      return 0;
+    }
+  }
+}
+
+static void SamplePanicHandler(nearby_protocol::PanicReason reason) {
+  std::cout << "Panicking! Reason: ";
+  switch (reason) {
+  case nearby_protocol::PanicReason::EnumCastFailed: {
+    std::cout << "EnumCastFailed \n";
+    break;
+  }
+  case nearby_protocol::PanicReason::AssertFailed: {
+    std::cout << "AssertFailed \n";
+    break;
+  }
+  case np_ffi::internal::PanicReason::InvalidActionBits: {
+    std::cout << "InvalidActionBits \n";
+    break;
+  }
+  }
+  std::abort();
+}
+
+void HandleAdvertisementResult(
+    nearby_protocol::DeserializeAdvertisementResult result) {
+  switch (result.GetKind()) {
+  case nearby_protocol::DeserializeAdvertisementResultKind::Error:
+    std::cout << "Error in deserializing advertisement!\n";
+    break;
+  case nearby_protocol::DeserializeAdvertisementResultKind::V0:
+    std::cout << "Successfully deserialized a V0 advertisement!\n";
+    HandleV0Adv(result.IntoV0());
+    break;
+  case nearby_protocol::DeserializeAdvertisementResultKind::V1:
+    std::cout << "Successfully deserialized a V1 advertisement\n";
+    HandleV1Adv(result.IntoV1());
+    break;
+  }
+}
+
+void HandleV0Adv(nearby_protocol::DeserializedV0Advertisement result) {
+  switch (result.GetKind()) {
+  case nearby_protocol::DeserializedV0AdvertisementKind::Legible:
+    std::cout << "\tThe Advertisement is plaintext \n";
+    HandleLegibleV0Adv(result.IntoLegible());
+    break;
+  case nearby_protocol::DeserializedV0AdvertisementKind::NoMatchingCredentials:
+    std::cout << "\tNo matching credentials found for this adv\n";
+    return;
+  }
+}
+
+void HandleLegibleV0Adv(
+    nearby_protocol::LegibleDeserializedV0Advertisement legible_adv) {
+  HandleV0Identity(legible_adv.GetIdentity());
+
+  auto num_des = legible_adv.GetNumberOfDataElements();
+  std::cout << "\t\tAdv contains " << unsigned(num_des) << " data elements \n";
+  auto payload = legible_adv.IntoPayload();
+  for (int i = 0; i < num_des; i++) {
+    auto de_result = payload.TryGetDataElement(i);
+    if (!de_result.ok()) {
+      std::cout << "\t\tError getting DE at index: " << i << "\n";
+      return;
+    }
+    std::cout << "\t\tSuccessfully retrieved De at index " << i << "\n";
+    HandleDataElement(de_result.value());
+  }
+}
+
+void HandleV0Identity(nearby_protocol::DeserializedV0Identity identity) {
+  switch (identity.GetKind()) {
+  case np_ffi::internal::DeserializedV0IdentityKind::Plaintext: {
+    std::cout << "\t\tIdentity is Plaintext\n";
+    break;
+  }
+  case np_ffi::internal::DeserializedV0IdentityKind::Decrypted: {
+    std::cout << "\t\tIdentity is Encrypted\n";
+    break;
+  }
+  }
+}
+
+void HandleDataElement(nearby_protocol::V0DataElement de) {
+  switch (de.GetKind()) {
+  case nearby_protocol::V0DataElementKind::TxPower: {
+    std::cout << "\t\t\tDE Type is TxPower\n";
+    auto tx_power = de.AsTxPower();
+    std::cout << "\t\t\tpower: " << int(tx_power.tx_power) << "\n";
+    return;
+  }
+  case nearby_protocol::V0DataElementKind::Actions: {
+    std::cout << "\t\t\tDE Type is Actions\n";
+    auto actions = de.AsActions();
+    std::cout << "\t\t\tactions: " << std::bitset<32>(actions.GetAsU32())
+              << "\n";
+    return;
+  }
+  }
+}
+
+void HandleV1Adv(nearby_protocol::DeserializedV1Advertisement adv) {
+  auto legible_sections = adv.GetNumLegibleSections();
+  std::cout << "\tAdv has " << unsigned(legible_sections)
+            << " legible sections \n";
+
+  auto encrypted_sections = adv.GetNumUndecryptableSections();
+  std::cout << "\tAdv has " << unsigned(encrypted_sections)
+            << " undecryptable sections\n";
+
+  for (auto i = 0; i < legible_sections; i++) {
+    auto section_result = adv.TryGetSection(i);
+    if (!section_result.ok()) {
+      std::cout << "\tError getting Section at index: " << i << "\n";
+      return;
+    }
+    std::cout << "\tSuccessfully retrieved section at index " << i << "\n";
+    HandleV1Section(section_result.value());
+  }
+}
+
+void HandleV1Section(nearby_protocol::DeserializedV1Section section) {
+  switch (section.GetIdentityKind()) {
+  case np_ffi::internal::DeserializedV1IdentityKind::Plaintext: {
+    std::cout << "\t\tIdentity is Plaintext\n";
+    break;
+  }
+  case np_ffi::internal::DeserializedV1IdentityKind::Decrypted: {
+    std::cout << "\t\tIdentity is Encrypted\n";
+    break;
+  }
+  }
+
+  auto num_des = section.NumberOfDataElements();
+  std::cout << "\t\tSection has " << unsigned(num_des) << " data elements \n";
+  for (auto i = 0; i < num_des; i++) {
+    auto de_result = section.TryGetDataElement(i);
+    if (!de_result.ok()) {
+      std::cout << "\t\tError getting de at index: " << i << "\n";
+      return;
+    }
+    std::cout << "\t\tSuccessfully retrieved data element at index " << i
+              << "\n";
+    HandleV1DataElement(de_result.value());
+  }
+}
+
+void HandleV1DataElement(nearby_protocol::V1DataElement de) {
+  std::cout << "\t\t\tData Element type code: "
+            << unsigned(de.GetDataElementTypeCode()) << "\n";
+  std::cout << "\t\t\tPayload bytes as hex: "
+            << absl::BytesToHexString(de.GetPayload().ToString()) << "\n";
+}
diff --git a/nearby/presence/np_cpp_ffi/shared/shared_test_util.cc b/nearby/presence/np_cpp_ffi/shared/shared_test_util.cc
new file mode 100644
index 0000000..27e98a6
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/shared/shared_test_util.cc
@@ -0,0 +1,50 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "nearby_protocol.h"
+
+std::string PanicReasonToString(nearby_protocol::PanicReason reason) {
+  switch (reason) {
+  case nearby_protocol::PanicReason::EnumCastFailed: {
+    return "EnumCastFailed";
+  }
+  case nearby_protocol::PanicReason::AssertFailed: {
+    return "AssertFailed";
+  }
+  case np_ffi::internal::PanicReason::InvalidActionBits: {
+    return "InvalidActionBits";
+  }
+  }
+}
+
+void test_panic_handler(nearby_protocol::PanicReason reason) {
+  std::cout << "Panicking! Reason: " << PanicReasonToString(reason);
+  std::abort();
+}
+
+std::string generate_hex_string(const size_t length) {
+  char *str = new char[length];
+
+  // hexadecimal characters
+  char hex_characters[] = {'0', '1', '2', '3', '4', '5', '6', '7',
+                           '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
+  size_t i;
+  for (i = 0; i < length; i++) {
+    str[i] = hex_characters[rand() % 16]; // NOLINT(cert-msc50-cpp)
+  }
+  str[length] = 0;
+  std::string result(str, length);
+  delete[] str;
+  return result;
+}
\ No newline at end of file
diff --git a/nearby/presence/np_cpp_ffi/shared/shared_test_util.h b/nearby/presence/np_cpp_ffi/shared/shared_test_util.h
new file mode 100644
index 0000000..52c5363
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/shared/shared_test_util.h
@@ -0,0 +1,58 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#ifndef NEARBY_PRESENCE_NP_CPP_FFI_TESTS_SHARED_TEST_UTILS_H_
+#define NEARBY_PRESENCE_NP_CPP_FFI_TESTS_SHARED_TEST_UTILS_H_
+
+#include "nearby_protocol.h"
+
+inline nearby_protocol::RawAdvertisementPayload
+    V0AdvEmpty(nearby_protocol::ByteBuffer<255>({1, {0x00}}));
+
+inline nearby_protocol::RawAdvertisementPayload
+    V0AdvSimple(nearby_protocol::ByteBuffer<255>({
+        4,
+        {0x00,       // Adv Header
+         0x03,       // Public DE header
+         0x15, 0x03} // Length 1 Tx Power DE with value 3
+    }));
+
+inline nearby_protocol::RawAdvertisementPayload
+    V1AdvSimple(nearby_protocol::ByteBuffer<255>(
+        {5,
+         {
+             0x20,      // V1 Advertisement header
+             0x03,      // Section Header
+             0x03,      // Public Identity DE header
+             0x15, 0x03 // Length 1 Tx Power DE with value 3
+         }}));
+
+inline nearby_protocol::RawAdvertisementPayload
+    V1AdvMultipleSections(nearby_protocol::ByteBuffer<255>(
+        {10,
+         {
+             0x20,             // V1 Advertisement header
+             0x04,             // Section Header
+             0x03,             // Public Identity DE header
+             0x26, 0x00, 0x46, // Length 2 Actions DE
+             0x03,             // Section Header
+             0x03,             // Public Identity DE header
+             0x15, 0x03        // Length 1 Tx Power DE with value 3
+         }}));
+
+void test_panic_handler(nearby_protocol::PanicReason reason);
+
+std::string generate_hex_string(size_t length);
+
+#endif // NEARBY_PRESENCE_NP_CPP_FFI_TESTS_SHARED_TEST_UTILS_H_
diff --git a/nearby/presence/np_cpp_ffi/tests/CMakeLists.txt b/nearby/presence/np_cpp_ffi/tests/CMakeLists.txt
new file mode 100644
index 0000000..bddda64
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/tests/CMakeLists.txt
@@ -0,0 +1,44 @@
+# Copyright 2023 Google LLC
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+add_executable(
+        np_ffi_tests
+        deserialize_result_tests.cc
+        deserialize_v0_tests.cc
+        deserialize_v1_tests.cc
+        global_config_tests.cc
+        credential_book_tests.cc
+        byte_buffer_tests.cc
+)
+
+target_link_libraries(
+        np_ffi_tests
+        nearby_protocol
+        shared_test_util
+        GTest::gtest_main
+)
+
+if (UNIX)
+    target_link_libraries(
+            np_ffi_tests
+            dl -fsanitize=address
+    )
+elseif (MSVC)
+    target_link_libraries(
+            np_ffi_tests
+            bcrypt ntdll userenv ws2_32
+    )
+endif ()
+
+gtest_discover_tests(np_ffi_tests)
diff --git a/nearby/presence/np_cpp_ffi/tests/byte_buffer_tests.cc b/nearby/presence/np_cpp_ffi/tests/byte_buffer_tests.cc
new file mode 100644
index 0000000..4bca8ec
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/tests/byte_buffer_tests.cc
@@ -0,0 +1,84 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on a "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "nearby_protocol.h"
+#include "shared_test_util.h"
+
+#include "absl/strings/escaping.h"
+#include "gtest/gtest.h"
+
+TEST(ByteBufferTests, ByteBufferMaxLength) {
+  // Each hex byte takes up 2 characters so length 510 string = 255 bytes of hex
+  auto str_bytes = generate_hex_string(510);
+  auto bytes = absl::HexStringToBytes(str_bytes);
+  auto buffer = nearby_protocol::ByteBuffer<255>::CopyFrom(bytes);
+  ASSERT_TRUE(buffer.ok());
+  auto string = buffer.value().ToString();
+  ASSERT_EQ(bytes, string);
+}
+
+TEST(ByteBufferTooLarge, ByteBufferInvalidLength) {
+  // 256 bytes should fail
+  auto str_bytes = generate_hex_string(512);
+  auto bytes = absl::HexStringToBytes(str_bytes);
+  auto buffer = nearby_protocol::ByteBuffer<255>::CopyFrom(bytes);
+  ASSERT_FALSE(buffer.ok());
+}
+
+TEST(ByteBufferTests, ByteBufferRoundTrip) {
+  auto bytes = absl::HexStringToBytes("2003031503");
+  auto buffer = nearby_protocol::ByteBuffer<255>::CopyFrom(bytes);
+  auto string = buffer.value().ToString();
+  ASSERT_EQ(bytes, string);
+}
+
+TEST(ByteBufferTests, ByteBufferPayloadWrongSize) {
+  auto bytes = absl::HexStringToBytes("1111111111111111111111");
+  auto buffer = nearby_protocol::ByteBuffer<10>::CopyFrom(bytes);
+  ASSERT_FALSE(buffer.ok());
+}
+
+TEST(ByteBufferTests, ByteBufferEmptyString) {
+  auto bytes = absl::HexStringToBytes("");
+  auto buffer = nearby_protocol::ByteBuffer<10>::CopyFrom(bytes);
+  ASSERT_TRUE(buffer.ok());
+}
+
+TEST(ByteBufferTests, ByteBufferToVector) {
+  auto bytes = absl::HexStringToBytes("1234567890");
+  auto buffer = nearby_protocol::ByteBuffer<100>::CopyFrom(bytes);
+  auto vec = buffer.value().ToVector();
+  std::vector<uint8_t> expected{0x12, 0x34, 0x56, 0x78, 0x90};
+  ASSERT_EQ(vec, expected);
+}
+
+TEST(ByteBufferTests, ByteBufferEndToEndPayloadAsString) {
+  std::string bytes = absl::HexStringToBytes("2003031503");
+  auto buffer = nearby_protocol::ByteBuffer<255>::CopyFrom(bytes);
+  ASSERT_TRUE(buffer.ok());
+
+  nearby_protocol::RawAdvertisementPayload adv(buffer.value());
+
+  auto credential_book = nearby_protocol::CredentialBook::TryCreate();
+  auto str = nearby_protocol::Deserializer::DeserializeAdvertisement(
+                 adv, credential_book.value())
+                 .IntoV1()
+                 .TryGetSection(0)
+                 .value()
+                 .TryGetDataElement(0)
+                 .value()
+                 .GetPayload()
+                 .ToString();
+  ASSERT_EQ(str, absl::HexStringToBytes("03"));
+}
diff --git a/nearby/presence/np_cpp_ffi/tests/credential_book_tests.cc b/nearby/presence/np_cpp_ffi/tests/credential_book_tests.cc
new file mode 100644
index 0000000..5eb9ce2
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/tests/credential_book_tests.cc
@@ -0,0 +1,80 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "nearby_protocol.h"
+#include "shared_test_util.h"
+
+#include "gtest/gtest.h"
+
+TEST(NpFfiCredentialBookTests, TestMoveConstructor) {
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty, book);
+  ASSERT_EQ(deserialize_result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+
+  // Move the credential book into a new object. Using the new object should
+  // still result in success
+  nearby_protocol::CredentialBook next_book(std::move(book));
+  auto deserialize_result_moved =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty,
+                                                              next_book);
+  ASSERT_EQ(deserialize_result_moved.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+
+  // The old object should now lead to use after moved assert failure
+  ASSERT_DEATH([[maybe_unused]] auto failure =
+                   nearby_protocol::Deserializer::DeserializeAdvertisement(
+                       V0AdvEmpty, book), // NOLINT(bugprone-use-after-move)
+               "");
+
+  // moving again should still lead to a use after moved assert failure
+  nearby_protocol::CredentialBook another_moved_book(std::move(book));
+  ASSERT_DEATH([[maybe_unused]] auto failure =
+                   nearby_protocol::Deserializer::DeserializeAdvertisement(
+                       V0AdvEmpty, another_moved_book),
+               "");
+}
+
+TEST(NpFfiCredentialBookTests, TestMoveAssignment) {
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty, book);
+  ASSERT_EQ(deserialize_result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+
+  // create a second empty credential book
+  auto other_book = nearby_protocol::CredentialBook::TryCreate().value();
+  other_book = std::move(book);
+
+  // new credential book should still be successful
+  auto deserialize_result_other =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty,
+                                                              other_book);
+  ASSERT_EQ(deserialize_result_other.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+
+  // The old object should now lead to use after moved assert failure
+  ASSERT_DEATH([[maybe_unused]] auto failure =
+                   nearby_protocol::Deserializer::DeserializeAdvertisement(
+                       V0AdvEmpty, book), // NOLINT(bugprone-use-after-move)
+               "");
+
+  // moving again should still lead to a use after moved assert failure
+  auto another_moved_book = std::move(book);
+  ASSERT_DEATH([[maybe_unused]] auto failure =
+                   nearby_protocol::Deserializer::DeserializeAdvertisement(
+                       V0AdvEmpty, another_moved_book),
+               "");
+}
\ No newline at end of file
diff --git a/nearby/presence/np_cpp_ffi/tests/deserialize_result_tests.cc b/nearby/presence/np_cpp_ffi/tests/deserialize_result_tests.cc
new file mode 100644
index 0000000..e3a44d5
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/tests/deserialize_result_tests.cc
@@ -0,0 +1,286 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "nearby_protocol.h"
+#include "shared_test_util.h"
+
+#include "absl/strings/escaping.h"
+#include "gtest/gtest.h"
+
+TEST(NpFfiDeserializeResultTests, TestResultMoveConstructor) {
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  auto result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty, book);
+  ASSERT_EQ(result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+
+  // Now move the result into a new value, and make sure its still valid
+  nearby_protocol::DeserializeAdvertisementResult moved_result(
+      std::move(result));
+  ASSERT_EQ(moved_result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+  auto v0 = moved_result.IntoV0();
+  ASSERT_EQ(v0.GetKind(),
+            np_ffi::internal::DeserializedV0AdvertisementKind::Legible);
+
+  // trying to use the moved object should result in a use after free which
+  // triggers an abort
+  ASSERT_DEATH([[maybe_unused]] auto failure =
+                   result.IntoV0(), // NOLINT(bugprone-use-after-move
+               "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = result.GetKind(), "");
+
+  // moving again should still preserve the moved state and also lead to an
+  // abort
+  nearby_protocol::DeserializeAdvertisementResult moved_again(
+      std::move(moved_result));
+  ASSERT_DEATH([[maybe_unused]] auto failure = moved_again.IntoV0(), "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = moved_again.GetKind(), "");
+}
+
+TEST(NpFfiDeserializeResultTests, DeserializeFromStringView) {
+  auto bytes = absl::HexStringToBytes("00031503");
+  auto buffer = nearby_protocol::ByteBuffer<255>::CopyFrom(bytes);
+  ASSERT_TRUE(buffer.ok());
+
+  nearby_protocol::RawAdvertisementPayload adv(buffer.value());
+
+  auto maybe_credential_book = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(maybe_credential_book.ok());
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          adv, maybe_credential_book.value());
+
+  ASSERT_EQ(deserialize_result.GetKind(),
+            nearby_protocol::DeserializeAdvertisementResultKind::V0);
+  auto v0_adv = deserialize_result.IntoV0();
+
+  ASSERT_EQ(v0_adv.GetKind(),
+            nearby_protocol::DeserializedV0AdvertisementKind::Legible);
+  auto legible_adv = v0_adv.IntoLegible();
+  auto identity = legible_adv.GetIdentity();
+  ASSERT_EQ(identity.GetKind(),
+            nearby_protocol::DeserializedV0IdentityKind::Plaintext);
+
+  auto num_des = legible_adv.GetNumberOfDataElements();
+  ASSERT_EQ(num_des, 1);
+  auto payload = legible_adv.IntoPayload();
+
+  auto de_result = payload.TryGetDataElement(0);
+  ASSERT_TRUE(de_result.ok());
+  auto de = de_result.value();
+
+  ASSERT_EQ(de.GetKind(), nearby_protocol::V0DataElementKind::TxPower);
+  auto tx_power = de.AsTxPower();
+  ASSERT_EQ(tx_power.tx_power, 3);
+}
+
+TEST(NpFfiDeserializeResultTests, TestResultMoveAssignment) {
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  auto result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty, book);
+  ASSERT_EQ(result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+
+  // create a second result
+  auto another_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty, book);
+  ASSERT_EQ(another_result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+
+  // move result into another_result. The original another_result should be
+  // de-allocated.
+  another_result = std::move(result);
+  auto v0 = another_result.IntoV0();
+  ASSERT_EQ(v0.GetKind(),
+            np_ffi::internal::DeserializedV0AdvertisementKind::Legible);
+
+  // original result should now be invalid, using it will trigger a use after
+  // free abort.
+  ASSERT_DEATH([[maybe_unused]] auto failure =
+                   result.IntoV0(), // NOLINT(bugprone-use-after-move)
+               "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = result.GetKind(), "");
+
+  // moving again should still lead to an error
+  auto moved_again = std::move(result);
+  ASSERT_DEATH([[maybe_unused]] auto failure = moved_again.IntoV0(), "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = moved_again.GetKind(), "");
+}
+
+TEST(NpFfiDeserializeResultTests, TestInvalidPayloadHeader) {
+  ASSERT_TRUE(
+      nearby_protocol::GlobalConfig::SetPanicHandler(test_panic_handler));
+
+  // An invalid header result should result in error
+  nearby_protocol::RawAdvertisementPayload InvalidHeaderPayload(
+      nearby_protocol::ByteBuffer<255>({1, {0xFF}}));
+  auto maybe_credential_book = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(maybe_credential_book.ok());
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          InvalidHeaderPayload, maybe_credential_book.value());
+
+  // Errors cannot be casted into further types
+  ASSERT_EQ(deserialize_result.GetKind(),
+            nearby_protocol::DeserializeAdvertisementResultKind::Error);
+  ASSERT_DEATH({ [[maybe_unused]] auto failure = deserialize_result.IntoV0(); },
+               "");
+  ASSERT_DEATH({ [[maybe_unused]] auto failure = deserialize_result.IntoV1(); },
+               "");
+}
+
+TEST(NpFfiDeserializeResultTests, TestInvalidV0Cast) {
+  ASSERT_TRUE(
+      nearby_protocol::GlobalConfig::SetPanicHandler(test_panic_handler));
+
+  auto maybe_credential_book = nearby_protocol::CredentialBook::TryCreate();
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V1AdvSimple, maybe_credential_book.value());
+
+  ASSERT_EQ(deserialize_result.GetKind(),
+            nearby_protocol::DeserializeAdvertisementResultKind::V1);
+  ASSERT_DEATH({ [[maybe_unused]] auto failure = deserialize_result.IntoV0(); },
+               "");
+}
+
+TEST(NpFfiDeserializeResultTests, TestInvalidV1Cast) {
+  ASSERT_TRUE(
+      nearby_protocol::GlobalConfig::SetPanicHandler(test_panic_handler));
+
+  // Create an empty credential book and verify that is is successful
+  auto maybe_credential_book = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(maybe_credential_book.ok());
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V0AdvEmpty, maybe_credential_book.value());
+
+  ASSERT_EQ(deserialize_result.GetKind(),
+            nearby_protocol::DeserializeAdvertisementResultKind::V0);
+  ASSERT_DEATH({ [[maybe_unused]] auto failure = deserialize_result.IntoV1(); },
+               "");
+}
+
+TEST(NpFfiDeserializeResultTests, V0UseResultTwice) {
+  auto book_result = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(book_result.ok());
+
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V0AdvEmpty, book_result.value());
+  ASSERT_EQ(deserialize_result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+
+  // Once this goes out of scope, the entire result will be invalid
+  auto v0_adv = deserialize_result.IntoV0();
+  // Calling intoV0 for a second time is a programmer error and will result
+  // in a crash.
+  ASSERT_DEATH({ [[maybe_unused]] auto failure = deserialize_result.IntoV0(); },
+               "");
+}
+
+TEST(NpFfiDeserializeResultTests, V1UseResultTwice) {
+  auto book_result = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(book_result.ok());
+
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V1AdvSimple, book_result.value());
+  ASSERT_EQ(deserialize_result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V1);
+
+  // Once this goes out of scope, the entire result will be invalid
+  auto v1_adv = deserialize_result.IntoV1();
+  // Calling intoV0 for a second time is a programmer error and will result
+  // in a crash.
+  ASSERT_DEATH({ [[maybe_unused]] auto failure = deserialize_result.IntoV1(); },
+               "");
+}
+
+TEST(NpFfiDeserializeResultTests, IntoV0AfterOutOfScope) {
+  auto book_result = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(book_result.ok());
+
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V0AdvEmpty, book_result.value());
+  ASSERT_EQ(deserialize_result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+
+  // Once this goes out of scope, the entire result will be invalid
+  { auto v0_adv = deserialize_result.IntoV0(); }
+
+  // Calling intoV0 for a second time is a programmer error and will result
+  // in a crash.
+  ASSERT_DEATH({ [[maybe_unused]] auto failure = deserialize_result.IntoV0(); },
+               "");
+}
+
+TEST(NpFfiDeserializeResultTests, IntoV1AfterOutOfScope) {
+  auto book_result = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(book_result.ok());
+
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V1AdvSimple, book_result.value());
+  ASSERT_EQ(deserialize_result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V1);
+
+  // Once this goes out of scope, the entire result will be invalid
+  { auto v0_adv = deserialize_result.IntoV1(); }
+
+  // Calling intoV0 for a second time is a programmer error and will result
+  // in a crash.
+  ASSERT_DEATH({ [[maybe_unused]] auto failure = deserialize_result.IntoV1(); },
+               "");
+}
+
+TEST(NpFfiDeserializeV0Tests, V0ResultKindAfterOutOfScope) {
+  auto book_result = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(book_result.ok());
+
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V0AdvEmpty, book_result.value());
+  ASSERT_EQ(deserialize_result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+
+  // Once this goes out of scope, the entire result will be invalid
+  { auto v0_adv = deserialize_result.IntoV0(); }
+
+  // Calling intoV0 for a second time is a programmer error and will result
+  // in a crash.
+  ASSERT_DEATH(
+      { [[maybe_unused]] auto failure = deserialize_result.GetKind(); }, "");
+}
+
+TEST(NpFfiDeserializeResultTests, V1ResultKindAfterOutOfScope) {
+  auto book_result = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(book_result.ok());
+
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V1AdvSimple, book_result.value());
+  ASSERT_EQ(deserialize_result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V1);
+
+  // Once this goes out of scope, the entire result will be invalid
+  { auto v0_adv = deserialize_result.IntoV1(); }
+
+  // Calling intoV0 for a second time is a programmer error and will result
+  // in a crash.
+  ASSERT_DEATH(
+      { [[maybe_unused]] auto failure = deserialize_result.GetKind(); }, "");
+}
\ No newline at end of file
diff --git a/nearby/presence/np_cpp_ffi/tests/deserialize_v0_tests.cc b/nearby/presence/np_cpp_ffi/tests/deserialize_v0_tests.cc
new file mode 100644
index 0000000..9781720
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/tests/deserialize_v0_tests.cc
@@ -0,0 +1,610 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "nearby_protocol.h"
+#include "shared_test_util.h"
+
+#include "gtest/gtest.h"
+
+TEST(NpFfiDeserializeV0Tests, V0SingleDataElementTxPower) {
+  nearby_protocol::RawAdvertisementPayload adv(
+      nearby_protocol::ByteBuffer<255>({
+          4,
+          {0x00,       // Adv Header
+           0x03,       // Public DE header
+           0x15, 0x03} // Length 1 Tx Power DE with value 3
+      }));
+
+  auto maybe_credential_book = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(maybe_credential_book.ok());
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          adv, maybe_credential_book.value());
+
+  ASSERT_EQ(deserialize_result.GetKind(),
+            nearby_protocol::DeserializeAdvertisementResultKind::V0);
+  auto v0_adv = deserialize_result.IntoV0();
+
+  ASSERT_EQ(v0_adv.GetKind(),
+            nearby_protocol::DeserializedV0AdvertisementKind::Legible);
+  auto legible_adv = v0_adv.IntoLegible();
+  auto identity = legible_adv.GetIdentity();
+  ASSERT_EQ(identity.GetKind(),
+            nearby_protocol::DeserializedV0IdentityKind::Plaintext);
+
+  auto num_des = legible_adv.GetNumberOfDataElements();
+  ASSERT_EQ(num_des, 1);
+  auto payload = legible_adv.IntoPayload();
+
+  auto de_result = payload.TryGetDataElement(0);
+  ASSERT_TRUE(de_result.ok());
+  auto de = de_result.value();
+
+  ASSERT_EQ(de.GetKind(), nearby_protocol::V0DataElementKind::TxPower);
+  auto tx_power = de.AsTxPower();
+  ASSERT_EQ(tx_power.tx_power, 3);
+}
+
+TEST(NpFfiDeserializeV0Tests, V0LengthOneActionsDataElement) {
+  nearby_protocol::RawAdvertisementPayload adv(
+      nearby_protocol::ByteBuffer<255>({
+          4,
+          {0x00,       // Adv Header
+           0x03,       // Public DE header
+           0x16, 0x00} // Length 1 Actions DE
+      }));
+
+  auto maybe_credential_book = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(maybe_credential_book.ok());
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          adv, maybe_credential_book.value());
+
+  ASSERT_EQ(deserialize_result.GetKind(),
+            nearby_protocol::DeserializeAdvertisementResultKind::V0);
+  auto v0_adv = deserialize_result.IntoV0();
+
+  ASSERT_EQ(v0_adv.GetKind(),
+            nearby_protocol::DeserializedV0AdvertisementKind::Legible);
+  auto legible_adv = v0_adv.IntoLegible();
+  auto identity = legible_adv.GetIdentity();
+  ASSERT_EQ(identity.GetKind(),
+            nearby_protocol::DeserializedV0IdentityKind::Plaintext);
+
+  auto num_des = legible_adv.GetNumberOfDataElements();
+  ASSERT_EQ(num_des, 1);
+  auto payload = legible_adv.IntoPayload();
+
+  auto de_result = payload.TryGetDataElement(0);
+  ASSERT_TRUE(de_result.ok());
+  auto de = de_result.value();
+
+  ASSERT_EQ(de.GetKind(), nearby_protocol::V0DataElementKind::Actions);
+  auto actions = de.AsActions();
+  ASSERT_EQ(actions.GetAsU32(), 0);
+}
+
+TEST(NpFfiDeserializeV0Tests, V0LengthTwoActionsDataElement) {
+  nearby_protocol::RawAdvertisementPayload adv(
+      nearby_protocol::ByteBuffer<255>({
+          5,
+          {0x00,             // Adv Header
+           0x03,             // Public DE header
+           0x26, 0xD0, 0x46} // Length 2 Actions DE
+      }));
+
+  auto maybe_credential_book = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(maybe_credential_book.ok());
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          adv, maybe_credential_book.value());
+
+  ASSERT_EQ(deserialize_result.GetKind(),
+            nearby_protocol::DeserializeAdvertisementResultKind::V0);
+  auto v0_adv = deserialize_result.IntoV0();
+
+  ASSERT_EQ(v0_adv.GetKind(),
+            nearby_protocol::DeserializedV0AdvertisementKind::Legible);
+  auto legible_adv = v0_adv.IntoLegible();
+  auto identity = legible_adv.GetIdentity();
+  ASSERT_EQ(identity.GetKind(),
+            nearby_protocol::DeserializedV0IdentityKind::Plaintext);
+
+  auto num_des = legible_adv.GetNumberOfDataElements();
+  ASSERT_EQ(num_des, 1);
+
+  auto payload = legible_adv.IntoPayload();
+  auto de_result = payload.TryGetDataElement(0);
+  ASSERT_TRUE(de_result.ok());
+  auto de = de_result.value();
+
+  ASSERT_EQ(de.GetKind(), nearby_protocol::V0DataElementKind::Actions);
+  auto actions = de.AsActions();
+  ASSERT_EQ(actions.GetAsU32(), 0xD0460000);
+
+  ASSERT_TRUE(
+      actions.HasAction(nearby_protocol::BooleanActionType::NearbyShare));
+  ASSERT_TRUE(actions.HasAction(nearby_protocol::BooleanActionType::Finder));
+  ASSERT_TRUE(
+      actions.HasAction(nearby_protocol::BooleanActionType::FastPairSass));
+
+  ASSERT_FALSE(
+      actions.HasAction(nearby_protocol::BooleanActionType::ActiveUnlock));
+  ASSERT_FALSE(
+      actions.HasAction(nearby_protocol::BooleanActionType::InstantTethering));
+  ASSERT_FALSE(actions.HasAction(nearby_protocol::BooleanActionType::PhoneHub));
+  ASSERT_FALSE(
+      actions.HasAction(nearby_protocol::BooleanActionType::PresenceManager));
+
+  ASSERT_EQ(actions.GetContextSyncSequenceNumber(), 0xD);
+}
+
+TEST(NpFfiDeserializeV0Tests, V0MultipleDataElements) {
+  nearby_protocol::RawAdvertisementPayload adv(nearby_protocol::ByteBuffer<255>(
+      {7,
+       {
+           0x00,             // Adv Header
+           0x03,             // Public DE header
+           0x15, 0x05,       // Tx Power value 5
+           0x26, 0x00, 0x46, // Length 2 Actions
+       }}));
+
+  auto maybe_credential_book = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(maybe_credential_book.ok());
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          adv, maybe_credential_book.value());
+
+  ASSERT_EQ(deserialize_result.GetKind(),
+            nearby_protocol::DeserializeAdvertisementResultKind::V0);
+  auto v0_adv = deserialize_result.IntoV0();
+
+  ASSERT_EQ(v0_adv.GetKind(),
+            nearby_protocol::DeserializedV0AdvertisementKind::Legible);
+  auto legible_adv = v0_adv.IntoLegible();
+  auto identity = legible_adv.GetIdentity();
+  ASSERT_EQ(identity.GetKind(),
+            nearby_protocol::DeserializedV0IdentityKind::Plaintext);
+
+  auto num_des = legible_adv.GetNumberOfDataElements();
+  ASSERT_EQ(num_des, 2);
+  auto payload = legible_adv.IntoPayload();
+
+  auto first_de_result = payload.TryGetDataElement(0);
+  ASSERT_TRUE(first_de_result.ok());
+  auto first_de = first_de_result.value();
+
+  ASSERT_EQ(first_de.GetKind(), nearby_protocol::V0DataElementKind::TxPower);
+  auto power = first_de.AsTxPower();
+  ASSERT_EQ(power.tx_power, 5);
+
+  auto second_de_result = payload.TryGetDataElement(1);
+  ASSERT_TRUE(second_de_result.ok());
+  auto second_de = second_de_result.value();
+
+  ASSERT_EQ(second_de.GetKind(), nearby_protocol::V0DataElementKind::Actions);
+  auto actions = second_de.AsActions();
+  ASSERT_EQ(actions.GetAsU32(), 0x00460000);
+  ASSERT_EQ(actions.GetContextSyncSequenceNumber(), 0);
+}
+
+TEST(NpFfiDeserializeV0Tests, V0EmptyPayload) {
+  auto maybe_credential_book = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(maybe_credential_book.ok());
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V0AdvEmpty, maybe_credential_book.value());
+
+  ASSERT_EQ(deserialize_result.GetKind(),
+            nearby_protocol::DeserializeAdvertisementResultKind::V0);
+  auto v0_adv = deserialize_result.IntoV0();
+
+  ASSERT_EQ(v0_adv.GetKind(),
+            nearby_protocol::DeserializedV0AdvertisementKind::Legible);
+  auto legible_adv = v0_adv.IntoLegible();
+  auto identity = legible_adv.GetIdentity();
+  ASSERT_EQ(identity.GetKind(),
+            nearby_protocol::DeserializedV0IdentityKind::Plaintext);
+
+  auto num_des = legible_adv.GetNumberOfDataElements();
+  ASSERT_EQ(num_des, 0);
+  auto payload = legible_adv.IntoPayload();
+
+  auto result = payload.TryGetDataElement(0);
+  ASSERT_FALSE(result.ok());
+  ASSERT_TRUE(absl::IsOutOfRange(result.status()));
+}
+
+TEST(NpFfiDeserializeV0Tests, TestV0AdvMoveConstructor) {
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  auto result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty, book);
+  ASSERT_EQ(result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+  auto adv = result.IntoV0();
+
+  // Now move the adv into a new value, and make sure its still valid
+  nearby_protocol::DeserializedV0Advertisement moved_adv(std::move(adv));
+  ASSERT_EQ(moved_adv.GetKind(),
+            np_ffi::internal::DeserializedV0AdvertisementKind::Legible);
+
+  // trying to use the moved object should result in a use after free which
+  // triggers an abort
+  ASSERT_DEATH([[maybe_unused]] auto failure =
+                   adv.IntoLegible(), // NOLINT(bugprone-use-after-move
+               "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = adv.GetKind(), "");
+
+  // moving again should still preserve the moved state and also lead to an
+  // abort
+  nearby_protocol::DeserializedV0Advertisement moved_again(std::move(adv));
+  ASSERT_DEATH([[maybe_unused]] auto failure = moved_again.IntoLegible(), "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = moved_again.GetKind(), "");
+}
+
+TEST(NpFfiDeserializeResultTests, TestV0AdvMoveAssignment) {
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  auto result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty, book);
+  ASSERT_EQ(result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+  auto adv = result.IntoV0();
+
+  // create a second result
+  auto another_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty, book);
+  ASSERT_EQ(another_result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+  auto adv2 = another_result.IntoV0();
+
+  // move adv2 into adv, the original should be deallocated by assignment
+  adv2 = std::move(adv);
+  ASSERT_EQ(adv2.GetKind(),
+            np_ffi::internal::DeserializedV0AdvertisementKind::Legible);
+
+  // original result should now be invalid, using it will trigger a use after
+  // free abort.
+  ASSERT_DEATH([[maybe_unused]] auto failure =
+                   adv.IntoLegible(), // NOLINT(bugprone-use-after-move)
+               "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = adv.GetKind(), "");
+
+  // moving again should still lead to an error
+  auto moved_again = std::move(adv);
+  ASSERT_DEATH([[maybe_unused]] auto failure = moved_again.IntoLegible(), "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = moved_again.GetKind(), "");
+}
+
+TEST(NpFfiDeserializeV0Tests, V0AdvDestructor) {
+  nearby_protocol::GlobalConfig::SetMaxNumDeserializedV0Advertisements(1);
+  auto book_result = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(book_result.ok());
+  {
+    auto deserialize_result =
+        nearby_protocol::Deserializer::DeserializeAdvertisement(
+            V0AdvEmpty, book_result.value());
+    ASSERT_EQ(deserialize_result.GetKind(),
+              np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+
+    // Going over max amount should result in error
+    auto deserialize_result2 =
+        nearby_protocol::Deserializer::DeserializeAdvertisement(
+            V0AdvEmpty, book_result.value());
+    ASSERT_EQ(deserialize_result2.GetKind(),
+              np_ffi::internal::DeserializeAdvertisementResultKind::Error);
+
+    // Calling IntoV0() should move the underlying resources into the v0 object
+    // when both go out of scope only one should be freed
+    auto v0_adv = deserialize_result.IntoV0();
+  }
+
+  // Now that the first v0 adv is out of scope, it should be de-allocated which
+  // will create room for one more to be created.
+  auto deserialize_result3 =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V0AdvEmpty, book_result.value());
+  ASSERT_EQ(deserialize_result3.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+}
+
+TEST(NpFfiDeserializeV0Tests, V0AdvUseAfterMove) {
+  auto maybe_credential_book = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(maybe_credential_book.ok());
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V0AdvSimple, maybe_credential_book.value());
+
+  ASSERT_EQ(deserialize_result.GetKind(),
+            nearby_protocol::DeserializeAdvertisementResultKind::V0);
+  auto v0_adv = deserialize_result.IntoV0();
+
+  ASSERT_EQ(v0_adv.GetKind(),
+            nearby_protocol::DeserializedV0AdvertisementKind::Legible);
+
+  // Moves the adv into a legible adv, so the original v0_adv is no longer valid
+  [[maybe_unused]] auto legible_adv = v0_adv.IntoLegible();
+  ASSERT_DEATH([[maybe_unused]] auto failure = v0_adv.GetKind(), "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = v0_adv.IntoLegible(), "");
+}
+
+TEST(NpFfiDeserializeV0Tests, TestLegibleAdvMoveConstructor) {
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  auto result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty, book);
+  ASSERT_EQ(result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+  auto legible = result.IntoV0().IntoLegible();
+
+  // Now move the adv into a new value, and make sure its still valid
+  nearby_protocol::LegibleDeserializedV0Advertisement moved(std::move(legible));
+  ASSERT_EQ(moved.GetNumberOfDataElements(), 0);
+  ASSERT_EQ(moved.GetIdentity().GetKind(),
+            np_ffi::internal::DeserializedV0IdentityKind::Plaintext);
+
+  // trying to use the moved object should result in a use after free which
+  // triggers an abort
+  ASSERT_DEATH([[maybe_unused]] auto failure =
+                   legible.GetIdentity(), // NOLINT(bugprone-use-after-move
+               "");
+  ASSERT_DEATH(
+      [[maybe_unused]] auto failure = legible.GetNumberOfDataElements(), "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = legible.IntoPayload(), "");
+
+  // moving again should still preserve the moved state and also lead to an
+  // abort
+  nearby_protocol::LegibleDeserializedV0Advertisement moved_again(
+      std::move(legible));
+  ASSERT_DEATH([[maybe_unused]] auto failure = moved_again.GetIdentity(), "");
+  ASSERT_DEATH([[maybe_unused]] auto failure =
+                   moved_again.GetNumberOfDataElements(),
+               "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = moved_again.IntoPayload(), "");
+}
+
+TEST(NpFfiDeserializeResultTests, TestLegibleAdvMoveAssignment) {
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  auto result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty, book);
+  ASSERT_EQ(result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+  auto legible = result.IntoV0().IntoLegible();
+
+  // create a second result
+  auto another_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty, book);
+  ASSERT_EQ(another_result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+  auto legible2 = another_result.IntoV0().IntoLegible();
+
+  // move adv2 into adv, the original should be deallocated by assignment
+  legible2 = std::move(legible);
+  ASSERT_EQ(legible2.GetIdentity().GetKind(),
+            np_ffi::internal::DeserializedV0IdentityKind::Plaintext);
+
+  // original result should now be invalid, using it will trigger a use after
+  // free abort.
+  ASSERT_DEATH([[maybe_unused]] auto failure =
+                   legible.GetIdentity(), // NOLINT(bugprone-use-after-move)
+               "");
+  ASSERT_DEATH(
+      [[maybe_unused]] auto failure = legible.GetNumberOfDataElements(), "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = legible.IntoPayload(), "");
+
+  // moving again should still lead to an error
+  auto moved_again = std::move(legible);
+  ASSERT_DEATH([[maybe_unused]] auto failure = moved_again.IntoPayload(), "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = moved_again.GetIdentity(), "");
+  ASSERT_DEATH([[maybe_unused]] auto failure =
+                   moved_again.GetNumberOfDataElements(),
+               "");
+}
+
+nearby_protocol::LegibleDeserializedV0Advertisement
+CreateLegibleAdv(nearby_protocol::CredentialBook &book) {
+  auto adv = nearby_protocol::Deserializer::DeserializeAdvertisement(
+      V0AdvSimple, book);
+  auto v0_adv = adv.IntoV0();
+  return v0_adv.IntoLegible();
+}
+
+TEST(NpFfiDeserializeV0Tests, V0LegibleAdvUseAfterMove) {
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  auto legible_adv = CreateLegibleAdv(book);
+
+  // Should be able to use the valid legible adv even though its original parent
+  // is now out of scope.
+  ASSERT_EQ(legible_adv.GetIdentity().GetKind(),
+            nearby_protocol::DeserializedV0IdentityKind::Plaintext);
+  ASSERT_EQ(legible_adv.GetNumberOfDataElements(), 1);
+  [[maybe_unused]] auto payload = legible_adv.IntoPayload();
+
+  // now that the legible adv has moved into the payload it should no longer be
+  // valid
+  ASSERT_DEATH([[maybe_unused]] auto failure = legible_adv.GetIdentity(), "");
+  ASSERT_DEATH([[maybe_unused]] auto failure =
+                   legible_adv.GetNumberOfDataElements(),
+               "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = legible_adv.IntoPayload(), "");
+}
+
+TEST(NpFfiDeserializeV0Tests, LegibleAdvDestructor) {
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  nearby_protocol::GlobalConfig::SetMaxNumDeserializedV0Advertisements(1);
+  {
+    auto legible_adv = CreateLegibleAdv(book);
+
+    // check that legible adv is valid.
+    ASSERT_EQ(legible_adv.GetIdentity().GetKind(),
+              nearby_protocol::DeserializedV0IdentityKind::Plaintext);
+    ASSERT_EQ(legible_adv.GetNumberOfDataElements(), 1);
+
+    // allocation slots should be full
+    ASSERT_EQ(nearby_protocol::Deserializer::DeserializeAdvertisement(
+                  V0AdvSimple, book)
+                  .GetKind(),
+              nearby_protocol::DeserializeAdvertisementResultKind::Error);
+  }
+
+  // Verify the handle was de-allocated when legible adv went out of scope
+  auto result = nearby_protocol::Deserializer::DeserializeAdvertisement(
+      V0AdvSimple, book);
+  ASSERT_EQ(result.GetKind(),
+            nearby_protocol::DeserializeAdvertisementResultKind::V0);
+}
+
+nearby_protocol::V0Payload
+CreatePayload(nearby_protocol::CredentialBook &book) {
+  auto legible_adv = CreateLegibleAdv(book);
+  return legible_adv.IntoPayload();
+}
+
+TEST(NpFfiDeserializeV0Tests, V0PayloadDestructor) {
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  nearby_protocol::GlobalConfig::SetMaxNumDeserializedV0Advertisements(1);
+  {
+    auto payload = CreatePayload(book);
+
+    // check that payload adv is valid even though its parent is out of scope
+    ASSERT_TRUE(payload.TryGetDataElement(0).ok());
+
+    // allocation slots should be full
+    ASSERT_EQ(nearby_protocol::Deserializer::DeserializeAdvertisement(
+                  V0AdvSimple, book)
+                  .GetKind(),
+              nearby_protocol::DeserializeAdvertisementResultKind::Error);
+  }
+
+  // Now that the payload is out of scope its destructor should have been called
+  // freeing the parent handle
+  auto result = nearby_protocol::Deserializer::DeserializeAdvertisement(
+      V0AdvSimple, book);
+  ASSERT_EQ(result.GetKind(),
+            nearby_protocol::DeserializeAdvertisementResultKind::V0);
+}
+
+TEST(NpFfiDeserializeV0Tests, TestV0PayloadMoveConstructor) {
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  auto result = nearby_protocol::Deserializer::DeserializeAdvertisement(
+      V0AdvSimple, book);
+  ASSERT_EQ(result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+  auto payload = result.IntoV0().IntoLegible().IntoPayload();
+
+  // Now move the adv into a new value, and make sure its still valid
+  nearby_protocol::V0Payload moved(std::move(payload));
+  ASSERT_TRUE(moved.TryGetDataElement(0).ok());
+  ASSERT_TRUE(absl::IsOutOfRange(moved.TryGetDataElement(1).status()));
+
+  // trying to use the moved object should result in a use after free which
+  // triggers an abort
+  ASSERT_DEATH([[maybe_unused]] auto failure = payload.TryGetDataElement(
+                   0), // NOLINT(bugprone-use-after-move
+               "");
+
+  // moving again should still preserve the moved state and also lead to an
+  // abort
+  nearby_protocol::V0Payload moved_again(std::move(payload));
+  ASSERT_DEATH([[maybe_unused]] auto failure = moved_again.TryGetDataElement(0),
+               "");
+}
+
+TEST(NpFfiDeserializeResultTests, TestV0PayloadMoveAssignment) {
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  auto result = nearby_protocol::Deserializer::DeserializeAdvertisement(
+      V0AdvSimple, book);
+  ASSERT_EQ(result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+  auto payload = result.IntoV0().IntoLegible().IntoPayload();
+
+  // create a second result
+  auto another_result = nearby_protocol::Deserializer::DeserializeAdvertisement(
+      V0AdvSimple, book);
+  ASSERT_EQ(another_result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+  auto payload2 = another_result.IntoV0().IntoLegible().IntoPayload();
+
+  // original should be deallocated by assignment
+  payload2 = std::move(payload);
+  ASSERT_TRUE(payload2.TryGetDataElement(0).ok());
+
+  // original result should now be invalid, using it will trigger a use after
+  // free abort.
+  ASSERT_DEATH([[maybe_unused]] auto failure = payload.TryGetDataElement(
+                   0), // NOLINT(bugprone-use-after-move)
+               "");
+
+  // moving again should still lead to an error
+  auto moved_again = std::move(payload);
+  ASSERT_DEATH([[maybe_unused]] auto failure = moved_again.TryGetDataElement(0),
+               "");
+}
+
+TEST(NpFfiDeserializeV0Tests, InvalidDataElementCast) {
+  ASSERT_TRUE(
+      nearby_protocol::GlobalConfig::SetPanicHandler(test_panic_handler));
+
+  auto maybe_credential_book = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(maybe_credential_book.ok());
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V0AdvSimple, maybe_credential_book.value());
+
+  ASSERT_EQ(deserialize_result.GetKind(),
+            nearby_protocol::DeserializeAdvertisementResultKind::V0);
+  auto v0_adv = deserialize_result.IntoV0();
+  ASSERT_EQ(v0_adv.GetKind(),
+            nearby_protocol::DeserializedV0AdvertisementKind::Legible);
+  auto legible_adv = v0_adv.IntoLegible();
+  auto identity = legible_adv.GetIdentity();
+  ASSERT_EQ(identity.GetKind(),
+            nearby_protocol::DeserializedV0IdentityKind::Plaintext);
+
+  auto num_des = legible_adv.GetNumberOfDataElements();
+  ASSERT_EQ(num_des, 1);
+  auto payload = legible_adv.IntoPayload();
+
+  auto de_result = payload.TryGetDataElement(0);
+  ASSERT_TRUE(de_result.ok());
+  auto de = de_result.value();
+
+  ASSERT_EQ(de.GetKind(), nearby_protocol::V0DataElementKind::TxPower);
+  ASSERT_DEATH([[maybe_unused]] auto failure = de.AsActions();, "");
+}
+
+TEST(NpFfiDeserializeV0Tests, InvalidDataElementIndex) {
+  auto maybe_credential_book = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(maybe_credential_book.ok());
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V0AdvSimple, maybe_credential_book.value());
+
+  ASSERT_EQ(deserialize_result.GetKind(),
+            nearby_protocol::DeserializeAdvertisementResultKind::V0);
+  auto v0_adv = deserialize_result.IntoV0();
+
+  ASSERT_EQ(v0_adv.GetKind(),
+            nearby_protocol::DeserializedV0AdvertisementKind::Legible);
+  auto legible_adv = v0_adv.IntoLegible();
+  auto identity = legible_adv.GetIdentity();
+  ASSERT_EQ(identity.GetKind(),
+            nearby_protocol::DeserializedV0IdentityKind::Plaintext);
+
+  auto num_des = legible_adv.GetNumberOfDataElements();
+  ASSERT_EQ(num_des, 1);
+  auto payload = legible_adv.IntoPayload();
+
+  auto de_result = payload.TryGetDataElement(1);
+  ASSERT_FALSE(de_result.ok());
+  ASSERT_TRUE(absl::IsOutOfRange(de_result.status()));
+}
diff --git a/nearby/presence/np_cpp_ffi/tests/deserialize_v1_tests.cc b/nearby/presence/np_cpp_ffi/tests/deserialize_v1_tests.cc
new file mode 100644
index 0000000..48b881b
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/tests/deserialize_v1_tests.cc
@@ -0,0 +1,254 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "nearby_protocol.h"
+#include "shared_test_util.h"
+
+#include "gtest/gtest.h"
+
+TEST(NpFfiDeserializeV1Tests, V1SimpleTestCase) {
+  auto maybe_credential_book = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(maybe_credential_book.ok());
+
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V1AdvSimple, maybe_credential_book.value());
+  ASSERT_EQ(deserialize_result.GetKind(),
+            nearby_protocol::DeserializeAdvertisementResultKind::V1);
+
+  auto v1_adv = deserialize_result.IntoV1();
+  ASSERT_EQ(v1_adv.GetNumLegibleSections(), 1);
+  ASSERT_EQ(v1_adv.GetNumUndecryptableSections(), 0);
+
+  auto invalid = v1_adv.TryGetSection(1);
+  ASSERT_FALSE(invalid.ok());
+  ASSERT_TRUE(absl::IsOutOfRange(invalid.status()));
+
+  auto section = v1_adv.TryGetSection(0);
+  ASSERT_TRUE(section.ok());
+  ASSERT_EQ(section.value().GetIdentityKind(),
+            nearby_protocol::DeserializedV1IdentityKind::Plaintext);
+  ASSERT_EQ(section.value().NumberOfDataElements(), 1);
+
+  auto invalid_de = section.value().TryGetDataElement(1);
+  ASSERT_FALSE(invalid_de.ok());
+  ASSERT_TRUE(absl::IsOutOfRange(invalid_de.status()));
+
+  auto de = section.value().TryGetDataElement(0);
+  ASSERT_TRUE(de.ok());
+  ASSERT_EQ(de.value().GetDataElementTypeCode(), 5);
+
+  auto payload = de.value().GetPayload();
+  auto vec = payload.ToVector();
+  std::vector<uint8_t> expected{3};
+  ASSERT_EQ(vec, expected);
+}
+
+TEST(NpFfiDeserializeV1Tests, V1MultipleSections) {
+  auto maybe_credential_book = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(maybe_credential_book.ok());
+
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V1AdvMultipleSections, maybe_credential_book.value());
+  ASSERT_EQ(deserialize_result.GetKind(),
+            nearby_protocol::DeserializeAdvertisementResultKind::V1);
+
+  auto v1_adv = deserialize_result.IntoV1();
+  ASSERT_EQ(v1_adv.GetNumLegibleSections(), 2);
+  ASSERT_EQ(v1_adv.GetNumUndecryptableSections(), 0);
+
+  auto invalid = v1_adv.TryGetSection(2);
+  ASSERT_FALSE(invalid.ok());
+  ASSERT_TRUE(absl::IsOutOfRange(invalid.status()));
+
+  auto section = v1_adv.TryGetSection(0);
+  ASSERT_TRUE(section.ok());
+  ASSERT_EQ(section.value().GetIdentityKind(),
+            nearby_protocol::DeserializedV1IdentityKind::Plaintext);
+  ASSERT_EQ(section.value().NumberOfDataElements(), 1);
+
+  auto invalid_de = section.value().TryGetDataElement(1);
+  ASSERT_FALSE(invalid_de.ok());
+  ASSERT_TRUE(absl::IsOutOfRange(invalid_de.status()));
+
+  auto de = section.value().TryGetDataElement(0);
+  ASSERT_TRUE(de.ok());
+  ASSERT_EQ(de.value().GetDataElementTypeCode(), 6);
+
+  auto payload = de.value().GetPayload();
+  auto vec = payload.ToVector();
+  std::vector<uint8_t> expected{0x00, 0x46};
+  ASSERT_EQ(vec, expected);
+
+  auto section2 = v1_adv.TryGetSection(1);
+  ASSERT_TRUE(section2.ok());
+  ASSERT_EQ(section2.value().GetIdentityKind(),
+            nearby_protocol::DeserializedV1IdentityKind::Plaintext);
+  ASSERT_EQ(section2.value().NumberOfDataElements(), 1);
+}
+
+TEST(NpFfiDeserializeV1Tests, TestV1AdvMoveConstructor) {
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  auto result = nearby_protocol::Deserializer::DeserializeAdvertisement(
+      V1AdvSimple, book);
+  ASSERT_EQ(result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V1);
+  auto adv = result.IntoV1();
+
+  // Now move the adv into a new value, and make sure its still valid
+  nearby_protocol::DeserializedV1Advertisement moved_adv(std::move(adv));
+  ASSERT_EQ(moved_adv.GetNumLegibleSections(), 1);
+
+  // trying to use the moved object should result in a use after free which
+  // triggers an abort
+  ASSERT_DEATH(
+      [[maybe_unused]] auto failure =
+          adv.GetNumLegibleSections(), // NOLINT(bugprone-use-after-move
+      "");
+  ASSERT_DEATH(
+      [[maybe_unused]] auto failure = adv.GetNumUndecryptableSections(), "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = adv.TryGetSection(0), "");
+
+  // moving again should still preserve the moved state and also lead to an
+  // abort
+  nearby_protocol::DeserializedV1Advertisement moved_again(std::move(adv));
+  ASSERT_DEATH(
+      [[maybe_unused]] auto failure =
+          moved_again.GetNumLegibleSections(), // NOLINT(bugprone-use-after-move
+      "");
+  ASSERT_DEATH([[maybe_unused]] auto failure =
+                   moved_again.GetNumUndecryptableSections(),
+               "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = moved_again.TryGetSection(0),
+               "");
+}
+
+TEST(NpFfiDeserializeV1Tests, TestV1AdvMoveAssignment) {
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  auto result = nearby_protocol::Deserializer::DeserializeAdvertisement(
+      V1AdvSimple, book);
+  ASSERT_EQ(result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V1);
+  auto adv = result.IntoV1();
+
+  // create a second result
+  auto another_result = nearby_protocol::Deserializer::DeserializeAdvertisement(
+      V1AdvSimple, book);
+  ASSERT_EQ(another_result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V1);
+  auto adv2 = another_result.IntoV1();
+
+  // move adv2 into adv, the original should be deallocated by assignment
+  adv2 = std::move(adv);
+  ASSERT_EQ(adv2.GetNumLegibleSections(), 1);
+
+  // original result should now be invalid, using it will trigger a use after
+  // free abort.
+  ASSERT_DEATH(
+      [[maybe_unused]] auto failure =
+          adv.GetNumLegibleSections(), // NOLINT(bugprone-use-after-move
+      "");
+  ASSERT_DEATH(
+      [[maybe_unused]] auto failure = adv.GetNumUndecryptableSections(), "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = adv.TryGetSection(0), "");
+
+  // moving again should still lead to an error
+  auto moved_again = std::move(adv);
+  ASSERT_DEATH(
+      [[maybe_unused]] auto failure =
+          moved_again.GetNumLegibleSections(), // NOLINT(bugprone-use-after-move
+      "");
+  ASSERT_DEATH([[maybe_unused]] auto failure =
+                   moved_again.GetNumUndecryptableSections(),
+               "");
+  ASSERT_DEATH([[maybe_unused]] auto failure = moved_again.TryGetSection(0),
+               "");
+}
+
+nearby_protocol::DeserializedV1Section
+GetSection(nearby_protocol::CredentialBook &book) {
+  // Create the adv in this scope, so its de-allocated at the end of this call.
+  // The section should still be valid
+  auto v1_adv =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V1AdvSimple, book)
+          .IntoV1();
+  auto section = v1_adv.TryGetSection(0);
+  return section.value();
+}
+
+bool TryDeserializeNewV1Adv(nearby_protocol::CredentialBook &book) {
+  auto adv = nearby_protocol::Deserializer::DeserializeAdvertisement(
+      V1AdvSimple, book);
+  return adv.GetKind() ==
+         np_ffi::internal::DeserializeAdvertisementResultKind::V1;
+}
+
+TEST(NpFfiDeserializeV1Tests, TestSectionOwnership) {
+  // Capping the max number so we can verify that de-allocations are happening
+  nearby_protocol::GlobalConfig::SetMaxNumDeserializedV1Advertisements(1);
+  auto maybe_credential_book = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(maybe_credential_book.ok());
+
+  {
+    auto section = GetSection(maybe_credential_book.value());
+    ASSERT_EQ(section.GetIdentityKind(),
+              nearby_protocol::DeserializedV1IdentityKind::Plaintext);
+    ASSERT_EQ(section.NumberOfDataElements(), 1);
+    ASSERT_TRUE(section.TryGetDataElement(0).ok());
+
+    ASSERT_FALSE(TryDeserializeNewV1Adv(maybe_credential_book.value()));
+  }
+
+  // now that the section has gone out of scope, deserializing a new adv should
+  // succeed
+  ASSERT_TRUE(TryDeserializeNewV1Adv(maybe_credential_book.value()));
+}
+
+void NestedGetSectionsPart2(nearby_protocol::DeserializedV1Advertisement &adv,
+                            nearby_protocol::CredentialBook &book) {
+  { auto section = adv.TryGetSection(1); }
+  assert(!TryDeserializeNewV1Adv(book));
+}
+
+nearby_protocol::DeserializedV1Section
+NestedGetSections(nearby_protocol::CredentialBook &book) {
+  auto v1_adv = nearby_protocol::Deserializer::DeserializeAdvertisement(
+                    V1AdvMultipleSections, book)
+                    .IntoV1();
+  auto section = v1_adv.TryGetSection(0);
+  NestedGetSectionsPart2(v1_adv, book);
+  return section.value();
+}
+
+// Make sure handle stays in scope until all of the sections and adv have gone
+// out of scope
+TEST(NpFfiDeserializeV1Tests, TestSectionOwnershipMultipleSections) {
+  // Capping the max number so we can verify that de-allocations are happening
+  nearby_protocol::GlobalConfig::SetMaxNumDeserializedV1Advertisements(1);
+  auto maybe_credential_book = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(maybe_credential_book.ok());
+  {
+    auto section = NestedGetSections(maybe_credential_book.value());
+    ASSERT_EQ(section.GetIdentityKind(),
+              nearby_protocol::DeserializedV1IdentityKind::Plaintext);
+    ASSERT_EQ(section.NumberOfDataElements(), 1);
+
+    ASSERT_FALSE(TryDeserializeNewV1Adv(maybe_credential_book.value()));
+  }
+
+  // now that the section has gone out of scope, deserializing a new adv should
+  // succeed
+  ASSERT_TRUE(TryDeserializeNewV1Adv(maybe_credential_book.value()));
+}
\ No newline at end of file
diff --git a/nearby/presence/np_cpp_ffi/tests/global_config_tests.cc b/nearby/presence/np_cpp_ffi/tests/global_config_tests.cc
new file mode 100644
index 0000000..e120aee
--- /dev/null
+++ b/nearby/presence/np_cpp_ffi/tests/global_config_tests.cc
@@ -0,0 +1,205 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "nearby_protocol.h"
+#include "shared_test_util.h"
+
+#include <iostream>
+
+#include "gtest/gtest.h"
+
+TEST(NpFfiGlobalConfigTests, TestPanicHandler) {
+  ASSERT_TRUE(
+      nearby_protocol::GlobalConfig::SetPanicHandler(test_panic_handler));
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty, book);
+  ASSERT_EQ(deserialize_result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+
+  // Now try to cast the result into the wrong type and verify the process
+  // aborts
+  ASSERT_DEATH({ [[maybe_unused]] auto failure = deserialize_result.IntoV1(); },
+               "");
+}
+
+TEST(NpFfiGlobalConfigTests, TestPanicHandlerTwice) {
+  ASSERT_TRUE(
+      nearby_protocol::GlobalConfig::SetPanicHandler(test_panic_handler));
+
+  // Second time trying to set should fail
+  ASSERT_FALSE(
+      nearby_protocol::GlobalConfig::SetPanicHandler(test_panic_handler));
+}
+
+// There is not much we can actually test here since this will affect memory
+// consumption. This is more of just a simple check that things still work after
+// configuring this
+TEST(NpFfiGlobalConfigTests, TestSetMaxShardsDefault) {
+  // 0 should still work as default behavior
+  nearby_protocol::GlobalConfig::SetNumShards(0);
+
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  auto book2 = nearby_protocol::CredentialBook::TryCreate().value();
+  auto book3 = nearby_protocol::CredentialBook::TryCreate().value();
+  auto deserialize_result =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty, book);
+
+  // Should still work
+  ASSERT_EQ(deserialize_result.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+
+  // Call again with a lower number, should have no effect. books 2 and 3 should
+  // still work.
+  nearby_protocol::GlobalConfig::SetNumShards(1);
+  auto deserialize_result_2 =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty,
+                                                              book2);
+  ASSERT_EQ(deserialize_result_2.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+  auto deserialize_result_3 =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty,
+                                                              book3);
+  ASSERT_EQ(deserialize_result_3.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+}
+
+TEST(NpFfiGlobalConfigTests, TestSetMaxShardsSmall) {
+  nearby_protocol::GlobalConfig::SetNumShards(1);
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+
+  // should still be able to parse 2 payloads with only one shard
+  auto deserialize_result1 =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty, book);
+  ASSERT_EQ(deserialize_result1.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+  auto deserialize_result2 =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(V0AdvEmpty, book);
+  ASSERT_EQ(deserialize_result2.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+}
+
+TEST(NpFfiGlobalConfigTests, TestSetMaxCredBooks) {
+  nearby_protocol::GlobalConfig::SetMaxNumCredentialBooks(1);
+  auto book1_result = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(book1_result.ok());
+
+  auto book2_result = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_FALSE(book2_result.ok());
+  ASSERT_TRUE(absl::IsResourceExhausted(book2_result.status()));
+}
+
+TEST(NpFfiGlobalConfigTests, TestSetMaxCredBooksAfterFirstCall) {
+  auto book = nearby_protocol::CredentialBook::TryCreate().value();
+  auto book2 = nearby_protocol::CredentialBook::TryCreate().value();
+  auto book3 = nearby_protocol::CredentialBook::TryCreate().value();
+
+  // setting this after books have already been created should have no affect
+  nearby_protocol::GlobalConfig::SetMaxNumCredentialBooks(1);
+  auto book4_result = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(book4_result.ok());
+}
+
+TEST(NpFfiGlobalConfigTests, TestSetMaxV0Advs) {
+  nearby_protocol::GlobalConfig::SetMaxNumDeserializedV0Advertisements(1);
+  auto book_result = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(book_result.ok());
+
+  {
+    auto deserialize_result =
+        nearby_protocol::Deserializer::DeserializeAdvertisement(
+            V0AdvEmpty, book_result.value());
+    ASSERT_EQ(deserialize_result.GetKind(),
+              np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+
+    // Going over max amount should result in error
+    auto deserialize_result2 =
+        nearby_protocol::Deserializer::DeserializeAdvertisement(
+            V0AdvEmpty, book_result.value());
+    ASSERT_EQ(deserialize_result2.GetKind(),
+              np_ffi::internal::DeserializeAdvertisementResultKind::Error);
+  }
+
+  // Now that the first v0 adv is out of scope, it will be de-allocated which
+  // will create room for one more to be created.
+  auto deserialize_result3 =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V0AdvEmpty, book_result.value());
+  ASSERT_EQ(deserialize_result3.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V0);
+}
+
+TEST(NpFfiGlobalConfigTests, TestSetMaxV1Advs) {
+  nearby_protocol::GlobalConfig::SetMaxNumDeserializedV1Advertisements(1);
+  auto book_result = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(book_result.ok());
+
+  {
+    auto deserialize_result =
+        nearby_protocol::Deserializer::DeserializeAdvertisement(
+            V1AdvSimple, book_result.value());
+    ASSERT_EQ(deserialize_result.GetKind(),
+              np_ffi::internal::DeserializeAdvertisementResultKind::V1);
+
+    // Going over max amount should result in error
+    auto deserialize_result2 =
+        nearby_protocol::Deserializer::DeserializeAdvertisement(
+            V1AdvSimple, book_result.value());
+    ASSERT_EQ(deserialize_result2.GetKind(),
+              np_ffi::internal::DeserializeAdvertisementResultKind::Error);
+  }
+
+  // Now that the first v1 adv is out of scope, it will be de-allocated which
+  // will create room for one more to be created.
+  auto deserialize_result3 =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V1AdvSimple, book_result.value());
+  ASSERT_EQ(deserialize_result3.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V1);
+}
+
+// Same test case as above, but verifies that the de-allocation still succeeds
+// after calling IntoV1() and that no double frees occur.
+TEST(NpFfiGlobalConfigTests, TestSetMaxV1AdvsFreeAfterInto) {
+  nearby_protocol::GlobalConfig::SetMaxNumDeserializedV1Advertisements(1);
+  auto book_result = nearby_protocol::CredentialBook::TryCreate();
+  ASSERT_TRUE(book_result.ok());
+
+  {
+    auto deserialize_result =
+        nearby_protocol::Deserializer::DeserializeAdvertisement(
+            V1AdvSimple, book_result.value());
+    ASSERT_EQ(deserialize_result.GetKind(),
+              np_ffi::internal::DeserializeAdvertisementResultKind::V1);
+
+    // Going over max amount should result in error
+    auto deserialize_result2 =
+        nearby_protocol::Deserializer::DeserializeAdvertisement(
+            V1AdvSimple, book_result.value());
+    ASSERT_EQ(deserialize_result2.GetKind(),
+              np_ffi::internal::DeserializeAdvertisementResultKind::Error);
+
+    // Calling IntoV1() should move the underlying resources into the v0 object
+    // when both go out of scope only one should be freed
+    auto v0_adv = deserialize_result.IntoV1();
+  }
+
+  // Now that the first v1 adv is out of scope, it will be de-allocated which
+  // will create room for one more to be created.
+  auto deserialize_result3 =
+      nearby_protocol::Deserializer::DeserializeAdvertisement(
+          V1AdvSimple, book_result.value());
+  ASSERT_EQ(deserialize_result3.GetKind(),
+            np_ffi::internal::DeserializeAdvertisementResultKind::V1);
+}
\ No newline at end of file
diff --git a/nearby/presence/np_ed25519/Cargo.toml b/nearby/presence/np_ed25519/Cargo.toml
new file mode 100644
index 0000000..b4bca66
--- /dev/null
+++ b/nearby/presence/np_ed25519/Cargo.toml
@@ -0,0 +1,14 @@
+[package]
+name = "np_ed25519"
+version.workspace = true
+edition.workspace = true
+publish.workspace = true
+
+[dependencies]
+array_view.workspace = true
+crypto_provider.workspace = true
+sink.workspace = true
+tinyvec.workspace = true
+
+[features]
+std = ["crypto_provider/std"]
diff --git a/nearby/presence/np_ed25519/src/lib.rs b/nearby/presence/np_ed25519/src/lib.rs
new file mode 100644
index 0000000..60c8302
--- /dev/null
+++ b/nearby/presence/np_ed25519/src/lib.rs
@@ -0,0 +1,286 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! Wrappers around NP's usage of ed25519 signatures.
+//!
+//! All of NP's usages of ed25519 signatures are performed
+//! with "context" bytes prepended to the payload to be signed
+//! or verified. These "context" bytes allow for usage of the
+//! same base key-pair for different purposes in the protocol.
+#![no_std]
+#![forbid(unsafe_code)]
+#![deny(missing_docs, clippy::indexing_slicing)]
+
+extern crate core;
+
+use array_view::ArrayView;
+use crypto_provider::ed25519::{
+    Ed25519Provider, KeyPair as _, PublicKey as _, RawPrivateKey, RawPublicKey, RawSignature,
+    Signature as _, SignatureError,
+};
+use crypto_provider::CryptoProvider;
+use sink::{Sink, SinkWriter};
+use tinyvec::ArrayVec;
+
+/// Convenient type-alias for a crypto-provider's Ed25519 key-pair
+type CpKeyPair<C> = <<C as CryptoProvider>::Ed25519 as Ed25519Provider>::KeyPair;
+
+/// Type-alias for the Ed25519 public key type
+type CpPublicKey<C> = <<C as CryptoProvider>::Ed25519 as Ed25519Provider>::PublicKey;
+
+/// Type-alias for the Ed25519 signature type
+type CpSignature<C> = <<C as CryptoProvider>::Ed25519 as Ed25519Provider>::Signature;
+
+/// Maximum length of the combined (context len byte) + (context bytes) + (signing payload)
+/// byte-array which an ed25519 signature will be computed over. This is deliberately
+/// chosen to be large enough to incorporate an entire v1 adv as the signing payload.
+pub const MAX_SIGNATURE_BUFFER_LEN: usize = 512;
+
+/// Representation of an Ed25519 key-pair using the given
+/// [`CryptoProvider`] to back its implementation.
+/// Contains both the public and secret halves of an
+/// asymmetric key, and so it may be used to
+/// both sign and verify message signatures.
+pub struct KeyPair<C: CryptoProvider>(CpKeyPair<C>);
+
+impl<C: CryptoProvider> KeyPair<C> {
+    /// Returns the `KeyPair`'s private key bytes. This method should only ever be called by code
+    /// which securely stores private credentials.
+    pub fn private_key(&self) -> RawPrivateKey {
+        self.0.private_key()
+    }
+
+    /// Builds this key-pair from an array of its private key bytes in the yielded by `private_key`.
+    /// This method should only ever be called by code which securely stores private credentials.
+    pub fn from_private_key(private_key: &RawPrivateKey) -> Self {
+        Self(CpKeyPair::<C>::from_private_key(private_key))
+    }
+
+    /// Sign the given message with the given context and
+    /// return a digital signature. The message is represented
+    /// using a [`SinkWriter`] to allow the caller to construct
+    /// the payload to sign without requiring a fully-assembled
+    /// payload available as a slice.
+    ///
+    /// If the message writer writes too much data (greater than 256 bytes),
+    /// this will return `None` instead of a valid signature,
+    /// and so uses in `np_adv` will use `.expect` on the returned value
+    /// to indicate that this length constraint has been considered.
+    pub fn sign_with_context<W: SinkWriter<DataType = u8>>(
+        &self,
+        context: &SignatureContext,
+        msg_writer: W,
+    ) -> Option<Signature<C>> {
+        let mut buffer = context.create_signature_buffer();
+        buffer.try_extend_from_writer(msg_writer).map(|_| Signature(self.0.sign(buffer.as_ref())))
+    }
+
+    /// Gets the public key of this key-pair
+    pub fn public(&self) -> PublicKey<C> {
+        PublicKey { public_key: self.0.public() }
+    }
+
+    /// Generates an ed25519 keypair from a CSPRNG
+    /// generate is not available in `no-std`
+    #[cfg(feature = "std")]
+    pub fn generate() -> Self {
+        Self(CpKeyPair::<C>::generate())
+    }
+}
+
+/// Error raised when attempting to deserialize a key-pair
+/// from a byte-array, but the bytes do not represent a valid
+/// ed25519 key-pair
+#[derive(Debug)]
+pub struct InvalidKeyPairBytes;
+
+/// Errors yielded when attempting to verify an ed25519 signature.
+#[derive(Debug, PartialEq, Eq)]
+pub enum SignatureVerificationError {
+    /// The payload that we attempted to verify the signature of was too big
+    PayloadTooBig,
+    /// The signature we were checking was invalid for the given payload
+    SignatureInvalid,
+}
+
+impl From<SignatureError> for SignatureVerificationError {
+    fn from(_: SignatureError) -> Self {
+        Self::SignatureInvalid
+    }
+}
+
+/// Representation of an Ed25519 public key used for
+/// signature verification.
+pub struct PublicKey<C: CryptoProvider> {
+    public_key: CpPublicKey<C>,
+}
+
+impl<C: CryptoProvider> PublicKey<C> {
+    /// Succeeds if the signature was a valid signature created via the corresponding
+    /// keypair to this public key using the given [`SignatureContext`] on the given
+    /// message payload. The message payload is represented
+    /// using a [`SinkWriter`] to allow the caller to construct
+    /// the payload to sign without requiring a fully-assembled
+    /// payload available as a slice.
+    ///
+    /// If the message writer writes too much data (greater than 256 bytes),
+    /// this will return `None` instead of a valid signature,
+    /// and so uses in `np_adv` will use `.expect` on the returned value
+    /// to indicate that this length constraint has been considered.
+    pub fn verify_signature_with_context<W: SinkWriter<DataType = u8>>(
+        &self,
+        context: &SignatureContext,
+        msg_writer: W,
+        signature: &Signature<C>,
+    ) -> Result<(), SignatureVerificationError> {
+        let mut buffer = context.create_signature_buffer();
+        let maybe_write_success = buffer.try_extend_from_writer(msg_writer);
+        match maybe_write_success {
+            Some(_) => {
+                self.public_key.verify_strict(buffer.as_ref(), &signature.0)?;
+                Ok(())
+            }
+            None => Err(SignatureVerificationError::PayloadTooBig),
+        }
+    }
+
+    /// Builds an ed25519 public key from an array of bytes in
+    /// the format yielded by `to_bytes`.
+    pub fn from_bytes(bytes: &RawPublicKey) -> Result<Self, InvalidPublicKeyBytes> {
+        CpPublicKey::<C>::from_bytes(bytes)
+            .map(|public_key| Self { public_key })
+            .map_err(|_| InvalidPublicKeyBytes)
+    }
+
+    /// Yields the bytes of this ed25519 public key
+    pub fn to_bytes(&self) -> RawPublicKey {
+        self.public_key.to_bytes()
+    }
+}
+
+impl<C: CryptoProvider> Clone for PublicKey<C> {
+    fn clone(&self) -> Self {
+        Self::from_bytes(&self.to_bytes()).unwrap()
+    }
+}
+
+/// Error raised when attempting to deserialize a public key
+/// from a byte-array, but the bytes do not represent a valid
+/// ed25519 public key
+#[derive(Debug)]
+pub struct InvalidPublicKeyBytes;
+
+/// Representation of an Ed25519 message signature,
+/// which can be checked against a [`PublicKey`]
+/// for validity.
+pub struct Signature<C: CryptoProvider>(CpSignature<C>);
+
+impl<C: CryptoProvider> Signature<C> {
+    /// Returns a slice of the signature bytes
+    pub fn to_bytes(&self) -> RawSignature {
+        self.0.to_bytes()
+    }
+}
+
+/// Error raised when attempting to construct a [`Signature`]
+/// from a byte-array which is not of the proper length or format.
+#[derive(Debug)]
+pub struct InvalidSignatureBytes;
+
+impl<C: CryptoProvider> TryFrom<&[u8]> for Signature<C> {
+    type Error = InvalidSignatureBytes;
+    fn try_from(bytes: &[u8]) -> Result<Self, Self::Error> {
+        bytes
+            .try_into()
+            .map(|sig| Self(CpSignature::<C>::from_bytes(sig)))
+            .map_err(|_| InvalidSignatureBytes)
+    }
+}
+
+/// Minimum length (in bytes) for a [`SignatureContext`] (which cannot be empty).
+pub const MIN_SIGNATURE_CONTEXT_LEN: usize = 1;
+
+/// Maximum length (in bytes) for a [`SignatureContext`] (which uses a 8-bit length field).
+pub const MAX_SIGNATURE_CONTEXT_LEN: usize = 255;
+
+/// (Non-empty) context bytes to use in the construction of NP's
+/// Ed25519 signatures. The context bytes should uniquely
+/// identify the component of the protocol performing the
+/// signature/verification (e.g: advertisement signing,
+/// connection signing), and should be between 1 and
+/// 255 bytes in length.
+pub struct SignatureContext {
+    data: ArrayView<u8, MAX_SIGNATURE_CONTEXT_LEN>,
+}
+
+impl SignatureContext {
+    /// Creates a signature buffer with size bounded by MAX_SIGNATURE_BUFFER_LEN
+    /// which is pre-populated with the contents yielded by
+    /// [`SignatureContext#write_length_prefixed`].
+    fn create_signature_buffer(&self) -> impl Sink<u8> + AsRef<[u8]> {
+        let mut buffer = ArrayVec::<[u8; MAX_SIGNATURE_BUFFER_LEN]>::new();
+        self.write_length_prefixed(&mut buffer).expect("Context should always fit into sig buffer");
+        buffer
+    }
+
+    /// Writes the contents of this signature context, prefixed
+    /// by the length of the context payload to the given byte-sink.
+    /// If writing to the sink failed at some point during this operation,
+    /// `None` will be returned, and the data written to the sink should
+    /// be considered to be invalid.
+    fn write_length_prefixed<S: Sink<u8>>(&self, sink: &mut S) -> Option<()> {
+        let length_byte = self.data.len() as u8;
+        sink.try_push(length_byte)?;
+        sink.try_extend_from_slice(self.data.as_slice())
+    }
+
+    /// Attempts to construct a signature context from the utf-8 bytes
+    /// of the given string. Returns `None` if the passed string
+    /// is invalid to use for signature context bytes.
+    pub const fn from_string_bytes(data_str: &str) -> Result<Self, SignatureContextInvalidLength> {
+        let data_bytes = data_str.as_bytes();
+        Self::from_bytes(data_bytes)
+    }
+
+    #[allow(clippy::indexing_slicing)]
+    const fn from_bytes(bytes: &[u8]) -> Result<Self, SignatureContextInvalidLength> {
+        let num_bytes = bytes.len();
+        if num_bytes < MIN_SIGNATURE_CONTEXT_LEN || num_bytes > MAX_SIGNATURE_CONTEXT_LEN {
+            Err(SignatureContextInvalidLength)
+        } else {
+            let mut array = [0u8; MAX_SIGNATURE_CONTEXT_LEN];
+            let mut i = 0;
+            while i < num_bytes {
+                array[i] = bytes[i];
+                i += 1;
+            }
+            let data = ArrayView::const_from_array(array, bytes.len());
+            Ok(Self { data })
+        }
+    }
+}
+
+/// Error raised when attempting to construct a
+/// [`SignatureContext`] out of data with an
+/// invalid length in bytes.
+#[derive(Debug)]
+pub struct SignatureContextInvalidLength;
+
+impl TryFrom<&[u8]> for SignatureContext {
+    type Error = SignatureContextInvalidLength;
+
+    fn try_from(value: &[u8]) -> Result<Self, Self::Error> {
+        Self::from_bytes(value)
+    }
+}
diff --git a/nearby/presence/np_ffi_core/Cargo.toml b/nearby/presence/np_ffi_core/Cargo.toml
new file mode 100644
index 0000000..5be03a6
--- /dev/null
+++ b/nearby/presence/np_ffi_core/Cargo.toml
@@ -0,0 +1,17 @@
+[package]
+name = "np_ffi_core"
+version.workspace = true
+edition.workspace = true
+publish.workspace = true
+
+[dependencies]
+array_view.workspace = true
+np_adv.workspace = true
+handle_map.workspace = true
+crypto_provider.workspace = true
+#TODO: Allow this to be configurable!
+crypto_provider_default = {workspace = true, features = ["rustcrypto"]}
+spin.workspace = true
+
+[features]
+std = []
diff --git a/nearby/presence/np_ffi_core/src/common.rs b/nearby/presence/np_ffi_core/src/common.rs
new file mode 100644
index 0000000..f00c358
--- /dev/null
+++ b/nearby/presence/np_ffi_core/src/common.rs
@@ -0,0 +1,293 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//! Common externally-accessible FFI constructs which are needed
+//! in order to define the interfaces in this crate's various modules.
+
+use alloc::string::String;
+use array_view::ArrayView;
+use handle_map::HandleNotPresentError;
+
+const DEFAULT_MAX_HANDLES: u32 = u32::MAX - 1;
+
+/// Configuration for top-level constants to be used
+/// by the rest of the FFI which are independent of
+/// the programming language which we ultimately
+/// interface with at a higher level.
+#[repr(C)]
+pub struct CommonConfig {
+    /// The number of shards to employ in all handle-maps,
+    /// or zero if we want to use the default.
+    ///
+    /// The default number of shards will depend on whether
+    /// this crate was compiled with the `std` feature or not:
+    /// - If compiled with the `std` feature, the default number
+    ///   of shards will be set to
+    ///   `min(16, std::thread::available_parallelism().unwrap())`,
+    ///   assuming that that call completes successfully.
+    /// - In all other cases, 16 shards will be used by default.
+    num_shards: u8,
+
+    /// The maximum number of credential books which may be active
+    /// at any one time. By default, this value will be set to
+    /// `u32::MAX - 1`, which is the upper-bound on this value.
+    max_num_credential_books: u32,
+
+    /// The maximum number of deserialized v0 advertisements
+    /// which may be active at any one time. By default, this
+    /// value will be set to `u32::MAX - 1`, which is the upper-bound
+    /// on this value.
+    max_num_deserialized_v0_advertisements: u32,
+
+    /// The maximum number of deserialized v1 advertisements
+    /// which may be active at any one time. By default, this
+    /// value will be set to `u32::MAX - 1`, which is the upper-bound
+    /// on this value.
+    max_num_deserialized_v1_advertisements: u32,
+}
+
+impl Default for CommonConfig {
+    fn default() -> Self {
+        Self::new()
+    }
+}
+
+impl CommonConfig {
+    pub(crate) const fn new() -> Self {
+        Self {
+            num_shards: 0,
+            max_num_credential_books: DEFAULT_MAX_HANDLES,
+            max_num_deserialized_v0_advertisements: DEFAULT_MAX_HANDLES,
+            max_num_deserialized_v1_advertisements: DEFAULT_MAX_HANDLES,
+        }
+    }
+    #[cfg(feature = "std")]
+    pub(crate) fn num_shards(&self) -> u8 {
+        if self.num_shards == 0 {
+            match std::thread::available_parallelism() {
+                Ok(parallelism) => 16u8.min(parallelism),
+                Err(_) => 16u8,
+            }
+        } else {
+            self.num_shards
+        }
+    }
+    #[cfg(not(feature = "std"))]
+    pub(crate) fn num_shards(&self) -> u8 {
+        if self.num_shards == 0 {
+            16u8
+        } else {
+            self.num_shards
+        }
+    }
+    pub(crate) fn max_num_credential_books(&self) -> u32 {
+        self.max_num_credential_books
+    }
+    pub(crate) fn max_num_deserialized_v0_advertisements(&self) -> u32 {
+        self.max_num_deserialized_v0_advertisements
+    }
+    pub(crate) fn max_num_deserialized_v1_advertisements(&self) -> u32 {
+        self.max_num_deserialized_v1_advertisements
+    }
+    pub(crate) fn set_num_shards(&mut self, num_shards: u8) {
+        self.num_shards = num_shards
+    }
+
+    /// Sets the maximum number of active handles to credential-books
+    /// which may be active at any one time.
+    /// Max value: `u32::MAX - 1`.
+    pub fn set_max_num_credential_books(&mut self, max_num_credential_books: u32) {
+        self.max_num_credential_books = DEFAULT_MAX_HANDLES.min(max_num_credential_books)
+    }
+
+    /// Sets the maximum number of active handles to deserialized v0
+    /// advertisements which may be active at any one time.
+    /// Max value: `u32::MAX - 1`.
+    pub fn set_max_num_deserialized_v0_advertisements(
+        &mut self,
+        max_num_deserialized_v0_advertisements: u32,
+    ) {
+        self.max_num_deserialized_v0_advertisements =
+            DEFAULT_MAX_HANDLES.min(max_num_deserialized_v0_advertisements)
+    }
+
+    /// Sets the maximum number of active handles to deserialized v0
+    /// advertisements which may be active at any one time.
+    /// Max value: `u32::MAX - 1`.
+    pub fn set_max_num_deserialized_v1_advertisements(
+        &mut self,
+        max_num_deserialized_v1_advertisements: u32,
+    ) {
+        self.max_num_deserialized_v1_advertisements =
+            DEFAULT_MAX_HANDLES.min(max_num_deserialized_v1_advertisements)
+    }
+}
+
+static COMMON_CONFIG: spin::RwLock<CommonConfig> = spin::RwLock::new(CommonConfig::new());
+
+pub(crate) fn global_num_shards() -> u8 {
+    COMMON_CONFIG.read().num_shards()
+}
+pub(crate) fn global_max_num_credential_books() -> u32 {
+    COMMON_CONFIG.read().max_num_credential_books()
+}
+pub(crate) fn global_max_num_deserialized_v0_advertisements() -> u32 {
+    COMMON_CONFIG.read().max_num_deserialized_v0_advertisements()
+}
+pub(crate) fn global_max_num_deserialized_v1_advertisements() -> u32 {
+    COMMON_CONFIG.read().max_num_deserialized_v1_advertisements()
+}
+
+/// Sets an override to the number of shards to employ in the NP FFI's
+/// internal handle-maps, which places an upper bound on the number
+/// of writing threads which may make progress at any one time
+/// when concurrently accessing handles of the same type.
+///
+/// By default, this value will be set to 16, or in `std` environments,
+/// the minimum of 16 and the number of available hardware threads.
+/// A shard value override of zero will be interpreted the same
+/// as this default.
+///
+/// Setting this value will have no effect if the handle-maps for the
+/// API have already begun being used by the client code, and any
+/// values set will take effect upon the first usage of _any_ non-`global_config_set`
+/// API call.
+pub fn global_config_set_num_shards(num_shards: u8) {
+    let mut config = COMMON_CONFIG.write();
+    config.set_num_shards(num_shards);
+}
+
+/// Sets the maximum number of active handles to credential books
+/// which may be active at any one time. Max value: `u32::MAX - 1`.
+///
+/// Setting this value will have no effect if the handle-maps for the
+/// API have already begun being used by the client code, and any
+/// values set will take effect upon the first usage of any API
+/// call utilizing credential books.
+pub fn global_config_set_max_num_credential_books(max_num_credential_books: u32) {
+    let mut config = COMMON_CONFIG.write();
+    config.set_max_num_credential_books(max_num_credential_books);
+}
+
+/// Sets the maximum number of active handles to deserialized v0
+/// advertisements which may be active at any one time.
+/// Max value: `u32::MAX - 1`.
+///
+/// Setting this value will have no effect if the handle-maps for the
+/// API have already begun being used by the client code, and any
+/// values set will take effect upon the first usage of any API
+/// call which references or returns a deserialized V0 advertisement.
+pub fn global_config_set_max_num_deserialized_v0_advertisements(
+    max_num_deserialized_v0_advertisements: u32,
+) {
+    let mut config = COMMON_CONFIG.write();
+    config.set_max_num_deserialized_v0_advertisements(max_num_deserialized_v0_advertisements);
+}
+
+/// Sets the maximum number of active handles to deserialized v1
+/// advertisements which may be active at any one time.
+/// Max value: `u32::MAX - 1`.
+///
+/// Setting this value will have no effect if the handle-maps for the
+/// API have already begun being used by the client code, and any
+/// values set will take effect upon the first usage of any API
+/// call which references or returns a deserialized V1 advertisement.
+pub fn global_config_set_max_num_deserialized_v1_advertisements(
+    max_num_deserialized_v1_advertisements: u32,
+) {
+    let mut config = COMMON_CONFIG.write();
+    config.set_max_num_deserialized_v1_advertisements(max_num_deserialized_v1_advertisements);
+}
+
+// API surfaces:
+
+/// A result-type enum which tells the caller whether/not a deallocation
+/// succeeded or failed due to the requested handle not being present.
+#[repr(C)]
+pub enum DeallocateResult {
+    /// The requested handle to deallocate was not present in the map
+    NotPresent = 0,
+    /// The object behind the handle was successfully deallocated
+    Success = 1,
+}
+
+impl From<Result<(), HandleNotPresentError>> for DeallocateResult {
+    fn from(result: Result<(), HandleNotPresentError>) -> Self {
+        match result {
+            Ok(_) => DeallocateResult::Success,
+            Err(_) => DeallocateResult::NotPresent,
+        }
+    }
+}
+
+/// Represents the raw contents of the service payload data
+/// under the Nearby Presence service UUID
+#[repr(C)]
+pub struct RawAdvertisementPayload {
+    bytes: ByteBuffer<255>,
+}
+
+impl RawAdvertisementPayload {
+    /// Yields a slice of the bytes in this raw advertisement payload.
+    pub fn as_slice(&self) -> &[u8] {
+        self.bytes.as_slice()
+    }
+}
+
+/// A byte-string with a maximum size of N,
+/// where only the first `len` bytes are considered
+/// to contain the actual payload. N is only
+/// permitted to be between 0 and 255.
+#[derive(Clone)]
+#[repr(C)]
+// TODO: Once generic const exprs are stabilized,
+// we could instead make N into a compile-time u8.
+pub struct ByteBuffer<const N: usize> {
+    len: u8,
+    bytes: [u8; N],
+}
+
+impl<const N: usize> ByteBuffer<N> {
+    /// Constructs a byte-buffer from a Rust-side-derived
+    /// ArrayView, which is assumed to be trusted to be
+    /// properly initialized, and with a size-bound
+    /// under 255 bytes.
+    pub(crate) fn from_array_view(array_view: ArrayView<u8, N>) -> Self {
+        let (len, bytes) = array_view.into_raw_parts();
+        let len = len as u8;
+        Self { len, bytes }
+    }
+    /// Yields a slice of the first `self.len` bytes of `self.bytes`.
+    pub fn as_slice(&self) -> &[u8] {
+        &self.bytes[..(self.len as usize)]
+    }
+}
+
+/// Error raised when attempting to cast an enum to
+/// one of its variants, but the value is actually
+/// of a different variant than the requested one.
+pub struct EnumCastError {
+    pub(crate) projection_method_name: String,
+    pub(crate) variant_enum_name: String,
+    pub(crate) variant_type_name: String,
+}
+
+impl core::fmt::Debug for EnumCastError {
+    fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
+        write!(
+            f,
+            "Attempted to cast a non-{} to a {} via {}",
+            &self.variant_enum_name, &self.variant_type_name, &self.projection_method_name
+        )
+    }
+}
diff --git a/nearby/presence/np_ffi_core/src/credentials.rs b/nearby/presence/np_ffi_core/src/credentials.rs
new file mode 100644
index 0000000..412ebc1
--- /dev/null
+++ b/nearby/presence/np_ffi_core/src/credentials.rs
@@ -0,0 +1,88 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//! Credential-related data-types and functions
+
+use crate::common::*;
+use crate::utils::FfiEnum;
+use handle_map::{declare_handle_map, HandleLike, HandleMapDimensions, HandleMapFullError};
+
+/// Internal, Rust-side implementation of a credential-book.
+/// See [`CredentialBook`] for the FFI-side handles.
+// TODO(b/283249542): Give this a real definition!
+pub struct CredentialBookInternals;
+
+fn get_credential_book_handle_map_dimensions() -> HandleMapDimensions {
+    HandleMapDimensions {
+        num_shards: global_num_shards(),
+        max_active_handles: global_max_num_credential_books(),
+    }
+}
+
+declare_handle_map! {credential_book, CredentialBook, super::CredentialBookInternals, super::get_credential_book_handle_map_dimensions()}
+use credential_book::CredentialBook;
+
+/// Discriminant for `CreateCredentialBookResult`
+#[repr(u8)]
+pub enum CreateCredentialBookResultKind {
+    /// There was no space left to create a new credential book
+    NoSpaceLeft = 0,
+    /// We created a new credential book behind the given handle.
+    /// The associated payload may be obtained via
+    /// `CreateCredentialBookResult#into_success()`.
+    Success = 1,
+}
+
+/// Result type for `create_credential_book`
+#[repr(u8)]
+#[allow(missing_docs)]
+pub enum CreateCredentialBookResult {
+    NoSpaceLeft = 0,
+    Success(CredentialBook) = 1,
+}
+
+impl From<Result<CredentialBook, HandleMapFullError>> for CreateCredentialBookResult {
+    fn from(result: Result<CredentialBook, HandleMapFullError>) -> Self {
+        match result {
+            Ok(book) => CreateCredentialBookResult::Success(book),
+            Err(_) => CreateCredentialBookResult::NoSpaceLeft,
+        }
+    }
+}
+
+/// Allocates a new credential-book, returning a handle to the created object
+pub fn create_credential_book() -> CreateCredentialBookResult {
+    CredentialBook::allocate(|| CredentialBookInternals).into()
+}
+
+impl FfiEnum for CreateCredentialBookResult {
+    type Kind = CreateCredentialBookResultKind;
+    fn kind(&self) -> Self::Kind {
+        match self {
+            CreateCredentialBookResult::NoSpaceLeft => CreateCredentialBookResultKind::NoSpaceLeft,
+            CreateCredentialBookResult::Success(_) => CreateCredentialBookResultKind::Success,
+        }
+    }
+}
+
+impl CreateCredentialBookResult {
+    declare_enum_cast! {into_success, Success, CredentialBook}
+}
+
+/// Deallocates a credential-book by its handle
+pub fn deallocate_credential_book(credential_book: CredentialBook) -> DeallocateResult {
+    credential_book.deallocate().map(|_| ()).into()
+}
+
+/// A handle on a particular v0 shared credential stored within a credential book
+pub struct V0SharedCredential;
diff --git a/nearby/presence/np_ffi_core/src/deserialize/mod.rs b/nearby/presence/np_ffi_core/src/deserialize/mod.rs
new file mode 100644
index 0000000..a651bcf
--- /dev/null
+++ b/nearby/presence/np_ffi_core/src/deserialize/mod.rs
@@ -0,0 +1,168 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//! Core NP Rust FFI structures and methods for advertisement deserialization.
+
+use crate::common::*;
+use crate::credentials::credential_book::CredentialBook;
+use crate::deserialize::v0::*;
+use crate::deserialize::v1::*;
+use crate::utils::FfiEnum;
+use crypto_provider_default::CryptoProviderImpl;
+use handle_map::{HandleLike, HandleMapFullError, HandleNotPresentError};
+
+pub mod v0;
+pub mod v1;
+
+/// Discriminant for `DeserializeAdvertisementResult`.
+#[repr(u8)]
+pub enum DeserializeAdvertisementResultKind {
+    /// Deserializing the advertisement failed, for some reason or another.
+    Error = 0,
+    /// The advertisement was correctly deserialized, and it's a V0 advertisement.
+    /// `DeserializeAdvertisementResult#into_v0()` is the corresponding cast
+    /// to the associated enum variant.
+    V0 = 1,
+    /// The advertisement was correctly deserialized, and it's a V1 advertisement.
+    /// `DeserializeAdvertisementResult#into_v1()` is the corresponding cast
+    /// to the associated enum variant.
+    V1 = 2,
+}
+
+/// The result of calling `np_ffi_deserialize_advertisement`.
+/// Must be explicitly deallocated after use with
+/// a corresponding `np_ffi_deallocate_deserialize_advertisement_result`
+#[repr(u8)]
+pub enum DeserializeAdvertisementResult {
+    /// Deserializing the advertisement failed, for some reason or another.
+    /// `DeserializeAdvertisementResultKind::Error` is the associated enum tag.
+    Error,
+    /// The advertisement was correctly deserialized, and it's a V0 advertisement.
+    /// `DeserializeAdvertisementResultKind::V0` is the associated enum tag.
+    V0(DeserializedV0Advertisement),
+    /// The advertisement was correctly deserialized, and it's a V1 advertisement.
+    /// `DeserializeAdvertisementResultKind::V1` is the associated enum tag.
+    V1(DeserializedV1Advertisement),
+}
+
+impl FfiEnum for DeserializeAdvertisementResult {
+    type Kind = DeserializeAdvertisementResultKind;
+    fn kind(&self) -> Self::Kind {
+        match self {
+            DeserializeAdvertisementResult::Error => DeserializeAdvertisementResultKind::Error,
+            DeserializeAdvertisementResult::V0(_) => DeserializeAdvertisementResultKind::V0,
+            DeserializeAdvertisementResult::V1(_) => DeserializeAdvertisementResultKind::V1,
+        }
+    }
+}
+
+impl DeserializeAdvertisementResult {
+    declare_enum_cast! {into_v0, V0, DeserializedV0Advertisement}
+    declare_enum_cast! {into_v1, V1, DeserializedV1Advertisement}
+
+    /// Deallocates any internal data referenced by a `DeserializeAdvertisementResult`
+    pub fn deallocate(self) -> DeallocateResult {
+        match self {
+            DeserializeAdvertisementResult::Error => DeallocateResult::Success,
+            DeserializeAdvertisementResult::V0(adv) => adv.deallocate(),
+            DeserializeAdvertisementResult::V1(adv) => adv.deallocate(),
+        }
+    }
+}
+
+//TODO: Once the `FromResidual` trait is stabilized, we won't need to do this
+enum DeserializeAdvertisementSuccess {
+    V0(DeserializedV0Advertisement),
+    V1(DeserializedV1Advertisement),
+}
+
+struct DeserializeAdvertisementError;
+
+impl From<HandleMapFullError> for DeserializeAdvertisementError {
+    fn from(_: HandleMapFullError) -> Self {
+        DeserializeAdvertisementError
+    }
+}
+
+impl From<HandleNotPresentError> for DeserializeAdvertisementError {
+    fn from(_: HandleNotPresentError) -> Self {
+        DeserializeAdvertisementError
+    }
+}
+
+impl From<np_adv::AdvDeserializationError> for DeserializeAdvertisementError {
+    fn from(_: np_adv::AdvDeserializationError) -> Self {
+        DeserializeAdvertisementError
+    }
+}
+
+type DefaultV0Credential = np_adv::credential::simple::SimpleV0Credential<
+    np_adv::credential::v0::MinimumFootprintV0CryptoMaterial,
+    (),
+>;
+type DefaultV1Credential = np_adv::credential::simple::SimpleV1Credential<
+    np_adv::credential::v1::MinimumFootprintV1CryptoMaterial,
+    (),
+>;
+type DefaultBothCredentialSource =
+    np_adv::credential::source::OwnedBothCredentialSource<DefaultV0Credential, DefaultV1Credential>;
+
+fn deserialize_advertisement_from_slice_internal(
+    adv_payload: &[u8],
+    credential_book: CredentialBook,
+) -> Result<DeserializeAdvertisementSuccess, DeserializeAdvertisementError> {
+    // Deadlock Safety: Credential-book locks always live longer than deserialized advs.
+    let _credential_book_read_guard = credential_book.get()?;
+
+    //TODO(b/283249542): Use an actual credential source
+    let cred_source: DefaultBothCredentialSource = DefaultBothCredentialSource::new_empty();
+
+    let deserialized_advertisement =
+        np_adv::deserialize_advertisement::<_, _, _, _, CryptoProviderImpl>(
+            adv_payload,
+            &cred_source,
+        )?;
+    match deserialized_advertisement {
+        np_adv::DeserializedAdvertisement::V0(adv_contents) => {
+            let adv_handle = DeserializedV0Advertisement::allocate_with_contents(adv_contents)?;
+            Ok(DeserializeAdvertisementSuccess::V0(adv_handle))
+        }
+        np_adv::DeserializedAdvertisement::V1(adv_contents) => {
+            let adv_handle = DeserializedV1Advertisement::allocate_with_contents(adv_contents)?;
+            Ok(DeserializeAdvertisementSuccess::V1(adv_handle))
+        }
+    }
+}
+
+/// Attempts to deserialize an advertisement with the given payload.
+/// Suitable for langs which have a suitably expressive slice-type.
+pub fn deserialize_advertisement_from_slice(
+    adv_payload: &[u8],
+    credential_book: CredentialBook,
+) -> DeserializeAdvertisementResult {
+    let result = deserialize_advertisement_from_slice_internal(adv_payload, credential_book);
+    match result {
+        Ok(DeserializeAdvertisementSuccess::V0(x)) => DeserializeAdvertisementResult::V0(x),
+        Ok(DeserializeAdvertisementSuccess::V1(x)) => DeserializeAdvertisementResult::V1(x),
+        Err(_) => DeserializeAdvertisementResult::Error,
+    }
+}
+
+/// Attempts to deserialize an advertisement with the given payload.
+/// Suitable for langs which don't have an expressive-enough slice type.
+pub fn deserialize_advertisement(
+    adv_payload: &RawAdvertisementPayload,
+    credential_book: CredentialBook,
+) -> DeserializeAdvertisementResult {
+    deserialize_advertisement_from_slice(adv_payload.as_slice(), credential_book)
+}
diff --git a/nearby/presence/np_ffi_core/src/deserialize/v0.rs b/nearby/presence/np_ffi_core/src/deserialize/v0.rs
new file mode 100644
index 0000000..0f4b24b
--- /dev/null
+++ b/nearby/presence/np_ffi_core/src/deserialize/v0.rs
@@ -0,0 +1,445 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//! Core NP Rust FFI structures and methods for v0 advertisement deserialization.
+
+use crate::common::*;
+use crate::credentials::credential_book::CredentialBook;
+use crate::utils::{FfiEnum, LocksLongerThan};
+use alloc::vec::Vec;
+use handle_map::{declare_handle_map, HandleLike, HandleMapDimensions, HandleMapFullError};
+use np_adv::legacy::actions::ActionsDataElement;
+use np_adv::legacy::{data_elements as np_adv_de, Ciphertext, PacketFlavorEnum, Plaintext};
+
+/// Discriminant for possible results of V0 advertisement deserialization
+#[derive(Clone, Copy)]
+#[repr(u8)]
+pub enum DeserializedV0AdvertisementKind {
+    /// The deserialized V0 advertisement was legible.
+    /// The associated payload may be obtained via
+    /// `DeserializedV0Advertisement#into_legible`.
+    Legible = 0,
+    /// The deserialized V0 advertisement is illegible,
+    /// likely meaning that the receiver does not hold
+    /// the proper credentials to be able to read
+    /// the received advertisement.
+    NoMatchingCredentials = 1,
+}
+
+/// Represents a deserialized V0 advertisement
+#[repr(C)]
+#[allow(missing_docs)]
+pub enum DeserializedV0Advertisement {
+    Legible(LegibleDeserializedV0Advertisement),
+    NoMatchingCredentials,
+}
+
+impl FfiEnum for DeserializedV0Advertisement {
+    type Kind = DeserializedV0AdvertisementKind;
+    fn kind(&self) -> Self::Kind {
+        match self {
+            DeserializedV0Advertisement::Legible(_) => DeserializedV0AdvertisementKind::Legible,
+            DeserializedV0Advertisement::NoMatchingCredentials => {
+                DeserializedV0AdvertisementKind::NoMatchingCredentials
+            }
+        }
+    }
+}
+
+impl DeserializedV0Advertisement {
+    /// Attempts to deallocate memory utilized internally by this V0 advertisement
+    /// (which contains a handle to actual advertisement contents behind-the-scenes).
+    pub fn deallocate(self) -> DeallocateResult {
+        match self {
+            DeserializedV0Advertisement::Legible(adv) => adv.deallocate(),
+            DeserializedV0Advertisement::NoMatchingCredentials => DeallocateResult::Success,
+        }
+    }
+
+    pub(crate) fn allocate_with_contents<'m, M: np_adv::credential::MatchedCredential<'m>>(
+        contents: np_adv::V0AdvContents<'m, M>,
+    ) -> Result<Self, HandleMapFullError> {
+        match contents {
+            np_adv::V0AdvContents::Plaintext(plaintext_contents) => {
+                let adv = LegibleDeserializedV0Advertisement::allocate_with_plaintext_contents(
+                    plaintext_contents,
+                )?;
+                Ok(Self::Legible(adv))
+            }
+            np_adv::V0AdvContents::Decrypted(_) => {
+                unimplemented!();
+            }
+            np_adv::V0AdvContents::NoMatchingCredentials => Ok(Self::NoMatchingCredentials),
+        }
+    }
+
+    declare_enum_cast! {into_legible, Legible, LegibleDeserializedV0Advertisement}
+}
+
+/// Represents a deserialized V0 advertisement whose DE contents may be read
+#[repr(C)]
+pub struct LegibleDeserializedV0Advertisement {
+    num_des: u8,
+    payload: V0Payload,
+    identity: DeserializedV0Identity,
+}
+
+impl LegibleDeserializedV0Advertisement {
+    pub(crate) fn allocate_with_plaintext_contents(
+        contents: np_adv::legacy::deserialize::PlaintextAdvContents,
+    ) -> Result<Self, HandleMapFullError> {
+        let data_elements = contents.to_data_elements();
+        let num_des = data_elements.len() as u8;
+        let payload = V0Payload::allocate_with_data_elements(data_elements)?;
+        Ok(Self { num_des, payload, identity: DeserializedV0Identity::Plaintext })
+    }
+    /// Gets the number of data-elements in this adv's payload
+    /// Suitable as an iteration bound for `Self.into_payload().get_de(...)`.
+    pub fn num_des(&self) -> u8 {
+        self.num_des
+    }
+    /// Destructures this legible advertisement into just the payload
+    pub fn into_payload(self) -> V0Payload {
+        self.payload
+    }
+    /// Destructures this legible advertisement into just the identity information
+    pub fn into_identity(self) -> DeserializedV0Identity {
+        self.identity
+    }
+    /// Deallocates the underlying handle of the payload
+    pub fn deallocate(self) -> DeallocateResult {
+        self.payload.deallocate().map(|_| ()).into()
+    }
+}
+
+/// Discriminant for `DeserializedV0Identity`.
+#[derive(Clone, Copy)]
+#[repr(u8)]
+pub enum DeserializedV0IdentityKind {
+    /// The deserialized identity was a plaintext identity.
+    Plaintext = 0,
+    /// The deserialized identity was some decrypted identity.
+    Decrypted = 1,
+}
+
+/// Represents deserialized information about the V0 identity utilized
+/// by a deserialized V0 advertisement
+#[repr(C)]
+#[allow(missing_docs)]
+pub enum DeserializedV0Identity {
+    Plaintext,
+    // TODO: This gets a payload once we support creds
+    Decrypted,
+}
+
+impl FfiEnum for DeserializedV0Identity {
+    type Kind = DeserializedV0IdentityKind;
+    fn kind(&self) -> Self::Kind {
+        match self {
+            DeserializedV0Identity::Plaintext => DeserializedV0IdentityKind::Plaintext,
+            DeserializedV0Identity::Decrypted => DeserializedV0IdentityKind::Decrypted,
+        }
+    }
+}
+
+/// The internal data-structure used for storing
+/// the payload of a deserialized V0 advertisement.
+pub struct V0PayloadInternals {
+    des: Vec<V0DataElement>,
+}
+
+impl V0PayloadInternals {
+    /// Attempts to get the DE with the given index
+    /// in this v0 payload.
+    fn get_de(&self, index: u8) -> GetV0DEResult {
+        match self.des.get(index as usize) {
+            Some(de) => GetV0DEResult::Success(de.clone()),
+            None => GetV0DEResult::Error,
+        }
+    }
+}
+
+fn get_v0_payload_handle_map_dimensions() -> HandleMapDimensions {
+    HandleMapDimensions {
+        num_shards: global_num_shards(),
+        max_active_handles: global_max_num_deserialized_v0_advertisements(),
+    }
+}
+
+declare_handle_map! {v0_payload, V0Payload, super::V0PayloadInternals, super::get_v0_payload_handle_map_dimensions() }
+use v0_payload::V0Payload;
+
+impl LocksLongerThan<V0Payload> for CredentialBook {}
+
+impl V0Payload {
+    pub(crate) fn allocate_with_data_elements<F: np_adv::legacy::PacketFlavor>(
+        data_elements: Vec<np_adv::legacy::deserialize::PlainDataElement<F>>,
+    ) -> Result<Self, HandleMapFullError> {
+        Self::allocate(move || {
+            let des = data_elements.into_iter().map(V0DataElement::from).collect();
+            V0PayloadInternals { des }
+        })
+    }
+    /// Gets the data-element with the given index in this v0 adv payload
+    pub fn get_de(&self, index: u8) -> GetV0DEResult {
+        match self.get() {
+            Ok(read_guard) => read_guard.get_de(index),
+            Err(_) => GetV0DEResult::Error,
+        }
+    }
+
+    /// Deallocates any underlying data held by a V0Payload
+    pub fn deallocate_payload(&self) -> DeallocateResult {
+        self.deallocate().map(|_| ()).into()
+    }
+}
+
+/// Discriminant of `GetV0DEResult`.
+#[derive(Clone, Copy)]
+#[repr(u8)]
+pub enum GetV0DEResultKind {
+    /// The attempt to get the DE succeeded.
+    /// The associated payload may be obtained via
+    /// `GetV0DEResult#into_success`.
+    Success = 0,
+    /// The attempt to get the DE failed,
+    /// possibly due to the requested index being
+    /// out-of-bounds or due to the advertisement
+    /// having been previously deallocated.
+    Error = 1,
+}
+
+/// The result of `V0Payload#get_de`.
+#[repr(C)]
+#[allow(missing_docs)]
+pub enum GetV0DEResult {
+    Success(V0DataElement),
+    Error,
+}
+
+impl FfiEnum for GetV0DEResult {
+    type Kind = GetV0DEResultKind;
+    fn kind(&self) -> Self::Kind {
+        match self {
+            GetV0DEResult::Success(_) => GetV0DEResultKind::Success,
+            GetV0DEResult::Error => GetV0DEResultKind::Error,
+        }
+    }
+}
+
+impl GetV0DEResult {
+    declare_enum_cast! {into_success, Success, V0DataElement}
+}
+
+/// Discriminant for `V0DataElement`.
+#[repr(u8)]
+pub enum V0DataElementKind {
+    /// A transmission Power (Tx Power) data-element.
+    /// The associated payload may be obtained via
+    /// `V0DataElement#into_tx_power`.
+    TxPower = 0,
+    /// The Actions data-element.
+    /// The associated payload may be obtained via
+    /// `V0DataElement#into_actions`.
+    Actions = 1,
+}
+
+/// Representation of a V0 data element.
+#[repr(C)]
+#[allow(missing_docs)]
+#[derive(Clone)]
+pub enum V0DataElement {
+    TxPower(TxPower),
+    Actions(V0Actions),
+}
+
+impl<F: np_adv::legacy::PacketFlavor> From<np_adv::legacy::deserialize::PlainDataElement<F>>
+    for V0DataElement
+{
+    fn from(de: np_adv::legacy::deserialize::PlainDataElement<F>) -> Self {
+        use np_adv::legacy::deserialize::PlainDataElement;
+        match de {
+            PlainDataElement::Actions(x) => V0DataElement::Actions(x.into()),
+            PlainDataElement::TxPower(x) => V0DataElement::TxPower(x.into()),
+        }
+    }
+}
+
+impl FfiEnum for V0DataElement {
+    type Kind = V0DataElementKind;
+    fn kind(&self) -> Self::Kind {
+        match self {
+            V0DataElement::Actions(_) => V0DataElementKind::Actions,
+            V0DataElement::TxPower(_) => V0DataElementKind::TxPower,
+        }
+    }
+}
+
+impl V0DataElement {
+    declare_enum_cast! {into_tx_power, TxPower, TxPower}
+    declare_enum_cast! {into_actions, Actions, V0Actions}
+}
+
+/// Representation of a transmission power,
+/// as used for the Tx Power DE in V0 and V1.
+#[derive(Clone)]
+#[repr(C)]
+pub struct TxPower {
+    tx_power: i8,
+}
+
+impl TxPower {
+    /// Yields this Tx Power value as an i8.
+    pub fn as_i8(&self) -> i8 {
+        self.tx_power
+    }
+}
+
+impl From<np_adv_de::TxPowerDataElement> for TxPower {
+    fn from(de: np_adv_de::TxPowerDataElement) -> Self {
+        Self { tx_power: de.tx_power_value() }
+    }
+}
+
+/// Representation of the Actions DE in V0.
+#[derive(Clone)]
+#[repr(C)]
+pub enum V0Actions {
+    /// A set of action bits which were present in a plaintext identity advertisement
+    Plaintext(V0ActionBits),
+    /// A set of action bits which were present in a encrypted identity advertisement
+    Encrypted(V0ActionBits),
+}
+
+impl<F: np_adv::legacy::PacketFlavor> From<np_adv::legacy::actions::ActionsDataElement<F>>
+    for V0Actions
+{
+    fn from(value: ActionsDataElement<F>) -> Self {
+        match F::ENUM_VARIANT {
+            PacketFlavorEnum::Plaintext => {
+                Self::Plaintext(V0ActionBits { bitfield: value.as_u32() })
+            }
+            PacketFlavorEnum::Ciphertext => {
+                Self::Encrypted(V0ActionBits { bitfield: value.as_u32() })
+            }
+        }
+    }
+}
+
+#[repr(C)]
+#[derive(Clone)]
+/// The bitfield data of a VOActions data element
+pub struct V0ActionBits {
+    bitfield: u32,
+}
+
+#[allow(missing_docs)]
+#[repr(u8)]
+/// The possible boolean action types which can be present in an Actions data element
+pub enum BooleanActionType {
+    ActiveUnlock = 8,
+    NearbyShare = 9,
+    InstantTethering = 10,
+    PhoneHub = 11,
+    PresenceManager = 12,
+    Finder = 13,
+    FastPairSass = 14,
+}
+
+impl From<&BooleanActionType> for np_adv::legacy::actions::ActionType {
+    fn from(value: &BooleanActionType) -> Self {
+        match value {
+            BooleanActionType::ActiveUnlock => np_adv::legacy::actions::ActionType::ActiveUnlock,
+            BooleanActionType::NearbyShare => np_adv::legacy::actions::ActionType::NearbyShare,
+            BooleanActionType::InstantTethering => {
+                np_adv::legacy::actions::ActionType::InstantTethering
+            }
+            BooleanActionType::PhoneHub => np_adv::legacy::actions::ActionType::PhoneHub,
+            BooleanActionType::Finder => np_adv::legacy::actions::ActionType::Finder,
+            BooleanActionType::FastPairSass => np_adv::legacy::actions::ActionType::FastPairSass,
+            BooleanActionType::PresenceManager => {
+                np_adv::legacy::actions::ActionType::PresenceManager
+            }
+        }
+    }
+}
+
+/// Error returned if action bits inside of a V0Actions struct are invalid. If the struct was
+/// created by the np_adv deserializer, the bits will always be valid, they are only invalid if a
+/// user reaches in and changes them to something invalid.
+#[derive(Debug)]
+pub struct InvalidActionBits;
+
+impl V0Actions {
+    /// Gets the V0 Action bits as represented by a u32 where the last 8 bits are
+    /// always 0 since V0 actions can only hold up to 24 bits.
+    pub fn as_u32(&self) -> u32 {
+        match self {
+            V0Actions::Plaintext(bits) => bits.bitfield,
+            V0Actions::Encrypted(bits) => bits.bitfield,
+        }
+    }
+
+    /// Return whether a boolean action type is set in this data element
+    #[allow(clippy::expect_used)]
+    pub fn has_action(&self, action_type: &BooleanActionType) -> Result<bool, InvalidActionBits> {
+        match self {
+            V0Actions::Plaintext(action_bits) => {
+                let bits = np_adv::legacy::actions::ActionBits::<Plaintext>::try_from(
+                    action_bits.bitfield,
+                )
+                .map_err(|_| InvalidActionBits)?;
+
+                let actions_de = np_adv::legacy::actions::ActionsDataElement::from(bits);
+                Ok(actions_de
+                    .has_action(&action_type.into())
+                    .expect("BooleanActionType only has one bit"))
+            }
+            V0Actions::Encrypted(action_bits) => {
+                let bits = np_adv::legacy::actions::ActionBits::<Ciphertext>::try_from(
+                    action_bits.bitfield,
+                )
+                .map_err(|_| InvalidActionBits)?;
+
+                let actions_de = np_adv::legacy::actions::ActionsDataElement::from(bits);
+                Ok(actions_de
+                    .has_action(&action_type.into())
+                    .expect("BooleanActionType only has one bit"))
+            }
+        }
+    }
+
+    /// Return the context sequence number from this data element
+    #[allow(clippy::expect_used)]
+    pub fn get_context_sync_seq_num(&self) -> Result<u8, InvalidActionBits> {
+        match self {
+            V0Actions::Plaintext(action_bits) => {
+                let bits = np_adv::legacy::actions::ActionBits::<Plaintext>::try_from(
+                    action_bits.bitfield,
+                )
+                .map_err(|_| InvalidActionBits)?;
+
+                let actions_de = np_adv::legacy::actions::ActionsDataElement::from(bits);
+                Ok(actions_de.context_sync_seq_num().as_u8())
+            }
+            V0Actions::Encrypted(action_bits) => {
+                let bits = np_adv::legacy::actions::ActionBits::<Ciphertext>::try_from(
+                    action_bits.bitfield,
+                )
+                .map_err(|_| InvalidActionBits)?;
+                let actions_de = np_adv::legacy::actions::ActionsDataElement::from(bits);
+                Ok(actions_de.context_sync_seq_num().as_u8())
+            }
+        }
+    }
+}
diff --git a/nearby/presence/np_ffi_core/src/deserialize/v1.rs b/nearby/presence/np_ffi_core/src/deserialize/v1.rs
new file mode 100644
index 0000000..9b4a3f4
--- /dev/null
+++ b/nearby/presence/np_ffi_core/src/deserialize/v1.rs
@@ -0,0 +1,401 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//! Core NP Rust FFI structures and methods for v1 advertisement deserialization.
+
+use crate::common::*;
+use crate::credentials::credential_book::CredentialBook;
+use crate::utils::*;
+use alloc::vec::Vec;
+use array_view::ArrayView;
+use handle_map::{declare_handle_map, HandleLike, HandleMapDimensions, HandleMapFullError};
+
+/// Representation of a deserialized V1 advertisement
+#[repr(C)]
+pub struct DeserializedV1Advertisement {
+    num_legible_sections: u8,
+    num_undecryptable_sections: u8,
+    legible_sections: LegibleV1Sections,
+}
+
+impl DeserializedV1Advertisement {
+    /// Gets the number of legible sections in this deserialized V1 advertisement.
+    pub fn num_legible_sections(&self) -> u8 {
+        self.num_legible_sections
+    }
+
+    /// Gets the number of undecryptable sections in this deserialized V1 advertisement.
+    pub fn num_undecryptable_sections(&self) -> u8 {
+        self.num_undecryptable_sections
+    }
+
+    /// Gets the legible section with the given index
+    /// (which is bounded in `0..self.num_legible_sections()`)
+    pub fn get_section(&self, legible_section_index: u8) -> GetV1SectionResult {
+        match self.legible_sections.get() {
+            Ok(sections_read_guard) => {
+                sections_read_guard.get_section(self.legible_sections, legible_section_index)
+            }
+            Err(_) => GetV1SectionResult::Error,
+        }
+    }
+
+    /// Attempts to deallocate memory utilized internally by this V1 advertisement
+    /// (which contains a handle to actual advertisement contents behind-the-scenes).
+    pub fn deallocate(self) -> DeallocateResult {
+        self.legible_sections.deallocate().map(|_| ()).into()
+    }
+
+    pub(crate) fn allocate_with_contents<'m, M: np_adv::credential::MatchedCredential<'m>>(
+        contents: np_adv::V1AdvContents<'m, M>,
+    ) -> Result<Self, HandleMapFullError> {
+        // 16-section limit enforced by np_adv
+        let num_undecryptable_sections = contents.invalid_sections_count() as u8;
+        let legible_sections = contents.into_valid_sections();
+        let num_legible_sections = legible_sections.len() as u8;
+        let legible_sections = LegibleV1Sections::allocate_with_contents(legible_sections)?;
+        Ok(Self { num_undecryptable_sections, num_legible_sections, legible_sections })
+    }
+}
+
+/// Internal, Rust-side implementation of a listing of legible sections
+/// in a deserialized V1 advertisement
+pub struct LegibleV1SectionsInternals {
+    sections: Vec<DeserializedV1SectionInternals>,
+}
+
+impl LegibleV1SectionsInternals {
+    fn get_section_internals(
+        &self,
+        legible_section_index: u8,
+    ) -> Option<&DeserializedV1SectionInternals> {
+        self.sections.get(legible_section_index as usize)
+    }
+    fn get_section(
+        &self,
+        legible_sections_handle: LegibleV1Sections,
+        legible_section_index: u8,
+    ) -> GetV1SectionResult {
+        match self.get_section_internals(legible_section_index) {
+            Some(section_ref) => {
+                // Determine whether the section is plaintext
+                // or decrypted to report back to the caller,
+                // and also determine the number of contained DEs.
+                let num_des = section_ref.num_des();
+                let identity_tag = section_ref.identity_kind();
+                GetV1SectionResult::Success(DeserializedV1Section {
+                    legible_sections_handle,
+                    legible_section_index,
+                    num_des,
+                    identity_tag,
+                })
+            }
+            None => GetV1SectionResult::Error,
+        }
+    }
+}
+
+impl<'m, M: np_adv::credential::MatchedCredential<'m>>
+    From<Vec<np_adv::V1DeserializedSection<'m, M>>> for LegibleV1SectionsInternals
+{
+    fn from(contents: Vec<np_adv::V1DeserializedSection<'m, M>>) -> Self {
+        let sections = contents.into_iter().map(DeserializedV1SectionInternals::from).collect();
+        Self { sections }
+    }
+}
+
+fn get_legible_v1_sections_handle_map_dimensions() -> HandleMapDimensions {
+    HandleMapDimensions {
+        num_shards: global_num_shards(),
+        max_active_handles: global_max_num_deserialized_v1_advertisements(),
+    }
+}
+
+declare_handle_map! {legible_v1_sections, LegibleV1Sections, super::LegibleV1SectionsInternals, super::get_legible_v1_sections_handle_map_dimensions() }
+use legible_v1_sections::LegibleV1Sections;
+
+impl LocksLongerThan<LegibleV1Sections> for CredentialBook {}
+
+impl LegibleV1Sections {
+    pub(crate) fn allocate_with_contents<'m, M: np_adv::credential::MatchedCredential<'m>>(
+        contents: Vec<np_adv::V1DeserializedSection<'m, M>>,
+    ) -> Result<Self, HandleMapFullError> {
+        Self::allocate(move || LegibleV1SectionsInternals::from(contents))
+    }
+}
+
+/// Discriminant for `GetV1SectionResult`
+#[derive(Clone, Copy)]
+#[repr(u8)]
+pub enum GetV1SectionResultKind {
+    /// The attempt to get the section failed,
+    /// possibly due to the section index being
+    /// out-of-bounds or due to the underlying
+    /// advertisement having already been deallocated.
+    Error = 0,
+    /// The attempt to get the section succeeded.
+    /// The wrapped section may be obtained via
+    /// `GetV1SectionResult#into_success`.
+    Success = 1,
+}
+
+/// The result of attempting to get a particular V1 section
+/// from its' index within the list of legible sections
+/// via `DeserializedV1Advertisement::get_section`.
+#[repr(C)]
+#[allow(missing_docs)]
+pub enum GetV1SectionResult {
+    Error,
+    Success(DeserializedV1Section),
+}
+
+impl FfiEnum for GetV1SectionResult {
+    type Kind = GetV1SectionResultKind;
+    fn kind(&self) -> Self::Kind {
+        match self {
+            GetV1SectionResult::Error => GetV1SectionResultKind::Error,
+            GetV1SectionResult::Success(_) => GetV1SectionResultKind::Success,
+        }
+    }
+}
+
+impl GetV1SectionResult {
+    declare_enum_cast! {into_success, Success, DeserializedV1Section}
+}
+
+/// The internal FFI-friendly representation of a deserialized v1 section
+pub struct DeserializedV1SectionInternals {
+    des: Vec<V1DataElement>,
+    identity: DeserializedV1Identity,
+}
+
+impl DeserializedV1SectionInternals {
+    /// Gets the number of data-elements in this section.
+    fn num_des(&self) -> u8 {
+        self.des.len() as u8
+    }
+    /// Gets the enum tag of the identity used for this section.
+    fn identity_kind(&self) -> DeserializedV1IdentityKind {
+        self.identity.kind()
+    }
+    /// Attempts to get the DE with the given index in this section.
+    fn get_de(&self, index: u8) -> GetV1DEResult {
+        match self.des.get(index as usize) {
+            Some(de) => GetV1DEResult::Success(de.clone()),
+            None => GetV1DEResult::Error,
+        }
+    }
+}
+
+impl<'m, M: np_adv::credential::MatchedCredential<'m>> From<np_adv::V1DeserializedSection<'m, M>>
+    for DeserializedV1SectionInternals
+{
+    fn from(section: np_adv::V1DeserializedSection<'m, M>) -> Self {
+        use np_adv::extended::deserialize::Section;
+        use np_adv::V1DeserializedSection;
+        match section {
+            V1DeserializedSection::Plaintext(section) => {
+                let des = section.data_elements().map(V1DataElement::from).collect();
+                let identity = DeserializedV1Identity::Plaintext;
+                Self { des, identity }
+            }
+            V1DeserializedSection::Decrypted(_) => {
+                unimplemented!();
+            }
+        }
+    }
+}
+/// Discriminant for `DeserializedV1Identity`.
+#[derive(Clone, Copy)]
+#[repr(u8)]
+pub enum DeserializedV1IdentityKind {
+    /// The deserialized v1 identity was plaintext
+    Plaintext = 0,
+    /// The deserialized v1 identity corresponded
+    /// to some kind of decrypted identity.
+    Decrypted = 1,
+}
+
+/// Deserialized information about the identity
+/// employed in a V1 adveritsement section.
+#[derive(Clone, Copy)]
+#[repr(C)]
+#[allow(missing_docs)]
+pub enum DeserializedV1Identity {
+    Plaintext,
+    // TODO: This gets a payload once we support creds
+    Decrypted,
+}
+
+impl FfiEnum for DeserializedV1Identity {
+    type Kind = DeserializedV1IdentityKind;
+    fn kind(&self) -> Self::Kind {
+        match self {
+            DeserializedV1Identity::Plaintext => DeserializedV1IdentityKind::Plaintext,
+            DeserializedV1Identity::Decrypted => DeserializedV1IdentityKind::Decrypted,
+        }
+    }
+}
+
+/// Handle to a deserialized V1 section
+#[repr(C)]
+pub struct DeserializedV1Section {
+    legible_sections_handle: LegibleV1Sections,
+    legible_section_index: u8,
+    num_des: u8,
+    identity_tag: DeserializedV1IdentityKind,
+}
+
+impl DeserializedV1Section {
+    /// Gets the number of data elements contained in this section.
+    /// Suitable as an iteration bound on `Self::get_de`.
+    pub fn num_des(&self) -> u8 {
+        self.num_des
+    }
+
+    /// Gets the enum tag of the identity employed by this deserialized section.
+    pub fn identity_kind(&self) -> DeserializedV1IdentityKind {
+        self.identity_tag
+    }
+
+    /// Gets the DE with the given index in this section.
+    pub fn get_de(&self, de_index: u8) -> GetV1DEResult {
+        // TODO: Once the `FromResidual` trait is stabilized, this can be simplified.
+        match self.legible_sections_handle.get() {
+            Ok(legible_sections_read_guard) => {
+                match legible_sections_read_guard.get_section_internals(self.legible_section_index)
+                {
+                    Some(section_ref) => section_ref.get_de(de_index),
+                    None => GetV1DEResult::Error,
+                }
+            }
+            Err(_) => GetV1DEResult::Error,
+        }
+    }
+}
+
+/// Discriminant for the `GetV1DEResult` enum.
+#[derive(Clone, Copy)]
+#[repr(u8)]
+pub enum GetV1DEResultKind {
+    /// Attempting to get the DE at the given position failed,
+    /// possibly due to the index being out-of-bounds or due
+    /// to the whole advertisement having been previously deallocated.
+    Error = 0,
+    /// Attempting to get the DE at the given position succeeded.
+    /// The underlying DE may be extracted with `GetV1DEResult#into_success`.
+    Success = 1,
+}
+
+/// Represents the result of the `DeserializedV1Section#get_de` operation.
+#[repr(C)]
+#[allow(missing_docs)]
+pub enum GetV1DEResult {
+    Error,
+    Success(V1DataElement),
+}
+
+impl FfiEnum for GetV1DEResult {
+    type Kind = GetV1DEResultKind;
+    fn kind(&self) -> Self::Kind {
+        match self {
+            GetV1DEResult::Error => GetV1DEResultKind::Error,
+            GetV1DEResult::Success(_) => GetV1DEResultKind::Success,
+        }
+    }
+}
+
+impl GetV1DEResult {
+    declare_enum_cast! {into_success, Success, V1DataElement}
+}
+
+/// FFI-transmissible representation of a V1 data-element
+#[derive(Clone)]
+#[repr(C)]
+pub enum V1DataElement {
+    /// A "generic" V1 data-element, for which we have no
+    /// particular information about its schema (just
+    /// a DE type code and a byte payload.)
+    Generic(GenericV1DataElement),
+}
+
+impl V1DataElement {
+    // Note: not using declare_enum_cast! for this one, because if V1DataElement
+    // gets more variants, this will have a different internal implementation
+    /// Converts a `V1DataElement` to a `GenericV1DataElement` which
+    /// only maintains information about the DE's type-code and payload.
+    pub fn to_generic(self) -> GenericV1DataElement {
+        match self {
+            V1DataElement::Generic(x) => x,
+        }
+    }
+}
+
+impl<'a> From<np_adv::extended::deserialize::DataElement<'a>> for V1DataElement {
+    fn from(de: np_adv::extended::deserialize::DataElement<'a>) -> Self {
+        let de_type = V1DEType::from(de.de_type());
+        let contents_as_slice = de.contents();
+        //Guaranteed not to panic due DE size limit.
+        #[allow(clippy::unwrap_used)]
+        let array_view: ArrayView<u8, 127> = ArrayView::try_from_slice(contents_as_slice).unwrap();
+        let payload = ByteBuffer::from_array_view(array_view);
+        Self::Generic(GenericV1DataElement { de_type, payload })
+    }
+}
+
+/// FFI-transmissible representation of a generic V1 data-element.
+/// This representation is stable, and so you may directly
+/// reference this struct's fields if you wish.
+#[derive(Clone)]
+#[repr(C)]
+pub struct GenericV1DataElement {
+    /// The DE type code of this generic data-element.
+    pub de_type: V1DEType,
+    /// The raw data-element byte payload, up to
+    /// 127 bytes in length.
+    pub payload: ByteBuffer<127>,
+}
+
+impl GenericV1DataElement {
+    /// Gets the DE-type of this generic V1 data element.
+    pub fn de_type(&self) -> V1DEType {
+        self.de_type
+    }
+    /// Destructures this `GenericV1DataElement` into just the
+    /// DE payload byte-buffer.
+    pub fn into_payload(self) -> ByteBuffer<127> {
+        self.payload
+    }
+}
+
+/// Representation of the data-element type tag
+/// of a V1 data element.
+#[derive(Clone, Copy)]
+#[repr(C)]
+pub struct V1DEType {
+    code: u32,
+}
+
+impl From<np_adv::extended::de_type::DeType> for V1DEType {
+    fn from(de_type: np_adv::extended::de_type::DeType) -> Self {
+        let code = de_type.as_u32();
+        Self { code }
+    }
+}
+
+impl V1DEType {
+    /// Yields this V1 DE type code as a u32.
+    pub fn to_u32(&self) -> u32 {
+        self.code
+    }
+}
diff --git a/nearby/presence/np_ffi_core/src/lib.rs b/nearby/presence/np_ffi_core/src/lib.rs
new file mode 100644
index 0000000..dd9e49e
--- /dev/null
+++ b/nearby/presence/np_ffi_core/src/lib.rs
@@ -0,0 +1,32 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//! Core functionality common to all NP Rust FFI layers
+#![cfg_attr(not(feature = "std"), no_std)]
+#![forbid(unsafe_code)]
+#![deny(
+    missing_docs,
+    clippy::indexing_slicing,
+    clippy::unwrap_used,
+    clippy::panic,
+    clippy::expect_used
+)]
+
+extern crate alloc;
+extern crate core;
+
+#[macro_use]
+pub mod utils;
+pub mod common;
+pub mod credentials;
+pub mod deserialize;
diff --git a/nearby/presence/np_ffi_core/src/utils.rs b/nearby/presence/np_ffi_core/src/utils.rs
new file mode 100644
index 0000000..e547a89
--- /dev/null
+++ b/nearby/presence/np_ffi_core/src/utils.rs
@@ -0,0 +1,51 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//! Common utilities used by other modules within this crate.
+
+use handle_map::HandleLike;
+
+/// Type-level predicate for handle types which uniformly hold a lock
+/// for longer than some other handle type in API calls.
+pub(crate) trait LocksLongerThan<H: HandleLike>: HandleLike {}
+
+/// Trait which canonicalizes the relationship between FFI
+/// tagged-unions and their tags
+pub trait FfiEnum {
+    /// The [FFI-safe] type of tags used to identify
+    /// variants of this tagged union.
+    type Kind;
+
+    /// Returns the tag for this FFI-safe tagged union.
+    fn kind(&self) -> Self::Kind;
+}
+
+/// Declares a method of the given name which attempts to cast
+/// the enclosing enum to the payload held under the given
+/// variant name, yielding a result of the given type wrapped
+/// in an `Option::Some`.
+///
+/// If the enclosing enum turns out to not be the requested
+/// variant, the generated method will return `None`.
+macro_rules! declare_enum_cast {
+    ($projection_method_name:ident, $variant_enum_name:ident, $variant_type_name:ty) => {
+        #[doc = concat!("Attempts to cast `self` to the `", stringify!($variant_enum_name),
+          "` variant, returning `None` in the \ncase where the passed value is of a different enum variant.")]
+        pub fn $projection_method_name(self) -> Option<$variant_type_name> {
+            match self {
+                Self::$variant_enum_name(x) => Some(x),
+                _ => None,
+            }
+        }
+    }
+}
diff --git a/nearby/presence/sink/Cargo.toml b/nearby/presence/sink/Cargo.toml
new file mode 100644
index 0000000..a0322b6
--- /dev/null
+++ b/nearby/presence/sink/Cargo.toml
@@ -0,0 +1,12 @@
+[package]
+name = "sink"
+version.workspace = true
+edition.workspace = true
+publish.workspace = true
+
+[dependencies]
+tinyvec.workspace = true
+
+[features]
+std = []
+
diff --git a/nearby/presence/sink/src/lib.rs b/nearby/presence/sink/src/lib.rs
new file mode 100644
index 0000000..75c7c1d
--- /dev/null
+++ b/nearby/presence/sink/src/lib.rs
@@ -0,0 +1,91 @@
+// Copyright 2023 Google LLC
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//      http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+//! A no_std-friendly data-writing "sink" trait which allows for convenient expression
+//! of "write me into a limited-size buffer"-type methods on traits.
+#![cfg_attr(not(feature = "std"), no_std)]
+#![forbid(unsafe_code)]
+#![deny(
+    missing_docs,
+    clippy::indexing_slicing,
+    clippy::unwrap_used,
+    clippy::panic,
+    clippy::expect_used
+)]
+
+/// An append-only, limited-size collection.
+pub trait Sink<T> {
+    /// Returns `Some` if the slice was appended, `None` otherwise, in which case nothing was written
+    fn try_extend_from_slice(&mut self, items: &[T]) -> Option<()>;
+
+    /// Returns `Some` if the item could be pushed, `None` otherwise
+    fn try_push(&mut self, item: T) -> Option<()>;
+
+    /// Uses the given [`SinkWriter`] to write to this sink.
+    fn try_extend_from_writer<W: SinkWriter<DataType = T>>(&mut self, writer: W) -> Option<()>
+    where
+        Self: Sized,
+    {
+        writer.write_payload(self)
+    }
+}
+
+/// A use-once trait (like `FnOnce`) which represents some
+/// code which writes data to a [`Sink`].
+pub trait SinkWriter {
+    /// The type of data being written to the [`Sink`].
+    type DataType;
+
+    /// Returns `Some` if all data was successfully written to the [`Sink`],
+    /// but if doing so failed at any point, returns `None`. If this method
+    /// fails, the contents of the [`Sink`] should be considered to be invalid.
+    fn write_payload<S: Sink<Self::DataType> + ?Sized>(self, sink: &mut S) -> Option<()>;
+}
+
+impl<T, A> Sink<T> for tinyvec::ArrayVec<A>
+where
+    A: tinyvec::Array<Item = T>,
+    T: Clone,
+{
+    fn try_extend_from_slice(&mut self, items: &[T]) -> Option<()> {
+        if items.len() > (self.capacity() - self.len()) {
+            return None;
+        }
+        // won't panic: just checked the length
+        self.extend_from_slice(items);
+        Some(())
+    }
+
+    fn try_push(&mut self, item: T) -> Option<()> {
+        // tinyvec uses None to indicate success, whereas for our limited purposes we want the
+        // opposite
+        match tinyvec::ArrayVec::try_push(self, item) {
+            None => Some(()),
+            Some(_) => None,
+        }
+    }
+}
+
+#[cfg(feature = "std")]
+impl<T: Clone> Sink<T> for std::vec::Vec<T> {
+    fn try_extend_from_slice(&mut self, items: &[T]) -> Option<()> {
+        self.extend_from_slice(items);
+        Some(())
+    }
+
+    fn try_push(&mut self, item: T) -> Option<()> {
+        self.push(item);
+        Some(())
+    }
+}
diff --git a/nearby/presence/xts_aes/fuzz/Cargo.lock b/nearby/presence/xts_aes/fuzz/Cargo.lock
index 2bdaef3..f0b7f56 100644
--- a/nearby/presence/xts_aes/fuzz/Cargo.lock
+++ b/nearby/presence/xts_aes/fuzz/Cargo.lock
@@ -4,9 +4,9 @@
 
 [[package]]
 name = "aead"
-version = "0.5.1"
+version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8"
+checksum = "d122413f284cf2d62fb1b7db97e02edb8cda96d769b16e443a4f6195e35662b0"
 dependencies = [
  "bytes",
  "crypto-common",
@@ -15,9 +15,9 @@
 
 [[package]]
 name = "aes"
-version = "0.8.2"
+version = "0.8.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241"
+checksum = "ac1f845298e95f983ff1944b728ae08b8cebab80d684f0a832ed0fc74dfa27e2"
 dependencies = [
  "cfg-if",
  "cipher",
@@ -69,9 +69,9 @@
 
 [[package]]
 name = "block-padding"
-version = "0.3.2"
+version = "0.3.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0a90ec2df9600c28a01c56c4784c9207a96d2451833aeceb8cc97e4c9548bb78"
+checksum = "a8894febbff9f758034a5b8e12d87918f56dfc64a8e1fe757d65e29041538d93"
 dependencies = [
  "generic-array",
 ]
@@ -118,24 +118,24 @@
 
 [[package]]
 name = "const-oid"
-version = "0.9.2"
+version = "0.9.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "520fbf3c07483f94e3e3ca9d0cfd913d7718ef2483d2cfd91c0d9e91474ab913"
+checksum = "795bc6e66a8e340f075fcf6227e417a2dc976b92b91f3cdc778bb858778b6747"
 
 [[package]]
 name = "cpufeatures"
-version = "0.2.5"
+version = "0.2.9"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320"
+checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1"
 dependencies = [
  "libc",
 ]
 
 [[package]]
 name = "crypto-bigint"
-version = "0.5.1"
+version = "0.5.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7c2538c4e68e52548bacb3e83ac549f903d44f011ac9d5abb5e132e67d0808f7"
+checksum = "cf4c2f4e1afd912bc40bfd6fed5d9dc1f288e0ba01bfcc835cc5bc3eb13efe15"
 dependencies = [
  "generic-array",
  "rand_core",
@@ -193,23 +193,36 @@
 
 [[package]]
 name = "curve25519-dalek"
-version = "4.0.0-rc.2"
+version = "4.0.0-rc.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "03d928d978dbec61a1167414f5ec534f24bea0d7a0d24dd9b6233d3d8223e585"
+checksum = "436ace70fc06e06f7f689d2624dc4e2f0ea666efb5aa704215f7249ae6e047a7"
 dependencies = [
  "cfg-if",
+ "cpufeatures",
+ "curve25519-dalek-derive",
  "digest",
  "fiat-crypto",
- "packed_simd_2",
  "platforms",
+ "rustc_version",
  "subtle",
 ]
 
 [[package]]
-name = "der"
-version = "0.7.1"
+name = "curve25519-dalek-derive"
+version = "0.1.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc906908ea6458456e5eaa160a9c08543ec3d1e6f71e2235cedd660cb65f9df0"
+checksum = "83fdaf97f4804dcebfa5862639bc9ce4121e82140bec2a987ac5140294865b5b"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
+name = "der"
+version = "0.7.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0c7ed52955ce76b1554f509074bb357d3fb8ac9b51288a65a3fd480d1dfba946"
 dependencies = [
  "const-oid",
  "zeroize",
@@ -217,9 +230,9 @@
 
 [[package]]
 name = "derive_arbitrary"
-version = "1.3.0"
+version = "1.3.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f3cdeb9ec472d588e539a818b2dee436825730da08ad0017c4b1a17676bdc8b7"
+checksum = "53e0efad4403bfc52dc201159c4b842a246a14b98c64b55dfd0f2d89729dfeb8"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -228,9 +241,9 @@
 
 [[package]]
 name = "digest"
-version = "0.10.6"
+version = "0.10.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f"
+checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292"
 dependencies = [
  "block-buffer",
  "crypto-common",
@@ -248,9 +261,9 @@
 
 [[package]]
 name = "ed25519-dalek"
-version = "2.0.0-rc.2"
+version = "2.0.0-rc.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "798f704d128510932661a3489b08e3f4c934a01d61c5def59ae7b8e48f19665a"
+checksum = "faa8e9049d5d72bfc12acbc05914731b5322f79b5e2f195e9f2d705fca22ab4c"
 dependencies = [
  "curve25519-dalek",
  "ed25519",
@@ -260,9 +273,9 @@
 
 [[package]]
 name = "elliptic-curve"
-version = "0.13.2"
+version = "0.13.5"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6ea5a92946e8614bb585254898bb7dd1ddad241ace60c52149e3765e34cc039d"
+checksum = "968405c8fdc9b3bf4df0a6638858cc0b52462836ab6b1c87377785dd09cf1c0b"
 dependencies = [
  "base16ct",
  "crypto-bigint",
@@ -295,9 +308,9 @@
 
 [[package]]
 name = "generic-array"
-version = "0.14.6"
+version = "0.14.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9"
+checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a"
 dependencies = [
  "typenum",
  "version_check",
@@ -306,9 +319,9 @@
 
 [[package]]
 name = "getrandom"
-version = "0.2.8"
+version = "0.2.10"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
+checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
 dependencies = [
  "cfg-if",
  "libc",
@@ -372,9 +385,9 @@
 
 [[package]]
 name = "libc"
-version = "0.2.140"
+version = "0.2.147"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "99227334921fae1a979cf0bfdfcc6b3e5ce376ef57e16fb6fb3ea2ed6095f80c"
+checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3"
 
 [[package]]
 name = "libfuzzer-sys"
@@ -388,16 +401,10 @@
 ]
 
 [[package]]
-name = "libm"
-version = "0.1.4"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7fc7aa29613bd6a620df431842069224d8bc9011086b1db4c0e0cd47fa03ec9a"
-
-[[package]]
 name = "once_cell"
-version = "1.17.1"
+version = "1.18.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b7e5500299e16ebb147ae15a00a942af264cf3688f47923b8fc2cd5858f23ad3"
+checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d"
 
 [[package]]
 name = "opaque-debug"
@@ -407,25 +414,15 @@
 
 [[package]]
 name = "p256"
-version = "0.13.0"
+version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7270da3e5caa82afd3deb054cc237905853813aea3859544bc082c3fe55b8d47"
+checksum = "c9863ad85fa8f4460f9c48cb909d38a0d689dba1f6f6988a5e3e0d31071bcd4b"
 dependencies = [
  "elliptic-curve",
  "primeorder",
 ]
 
 [[package]]
-name = "packed_simd_2"
-version = "0.3.8"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a1914cd452d8fccd6f9db48147b29fd4ae05bea9dc5d9ad578509f72415de282"
-dependencies = [
- "cfg-if",
- "libm",
-]
-
-[[package]]
 name = "platforms"
 version = "3.0.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -433,9 +430,9 @@
 
 [[package]]
 name = "polyval"
-version = "0.6.0"
+version = "0.6.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6"
+checksum = "d52cff9d1d4dee5fe6d03729099f4a310a41179e0a10dbf542039873f2e826fb"
 dependencies = [
  "cfg-if",
  "cpufeatures",
@@ -451,27 +448,27 @@
 
 [[package]]
 name = "primeorder"
-version = "0.13.0"
+version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7613fdcc0831c10060fa69833ea8fa2caa94b6456f51e25356a885b530a2e3d0"
+checksum = "3c2fcef82c0ec6eefcc179b978446c399b3cdf73c392c35604e399eee6df1ee3"
 dependencies = [
  "elliptic-curve",
 ]
 
 [[package]]
 name = "proc-macro2"
-version = "1.0.53"
+version = "1.0.66"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba466839c78239c09faf015484e5cc04860f88242cff4d03eb038f04b4699b73"
+checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9"
 dependencies = [
  "unicode-ident",
 ]
 
 [[package]]
 name = "quote"
-version = "1.0.26"
+version = "1.0.31"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4424af4bf778aae2051a77b60283332f386554255d722233d09fbfc7e30da2fc"
+checksum = "5fe8a65d69dd0808184ebb5f836ab526bb259db23c657efa38711b1072ee47f0"
 dependencies = [
  "proc-macro2",
 ]
@@ -505,10 +502,19 @@
 ]
 
 [[package]]
-name = "sec1"
-version = "0.7.1"
+name = "rustc_version"
+version = "0.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "48518a2b5775ba8ca5b46596aae011caa431e6ce7e4a67ead66d92f08884220e"
+checksum = "bfa0f585226d2e68097d4f95d113b15b83a82e819ab25717ec0590d9584ef366"
+dependencies = [
+ "semver",
+]
+
+[[package]]
+name = "sec1"
+version = "0.7.3"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "d3e97a565f76233a6003f9f5c54be1d9c5bdfa3eccfb189469f11ec4901c47dc"
 dependencies = [
  "base16ct",
  "der",
@@ -518,10 +524,16 @@
 ]
 
 [[package]]
-name = "sha2"
-version = "0.10.6"
+name = "semver"
+version = "1.0.18"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0"
+checksum = "b0293b4b29daaf487284529cc2f5675b8e57c61f70167ba415a463651fd6a918"
+
+[[package]]
+name = "sha2"
+version = "0.10.7"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8"
 dependencies = [
  "cfg-if",
  "cpufeatures",
@@ -536,15 +548,15 @@
 
 [[package]]
 name = "subtle"
-version = "2.4.1"
+version = "2.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6bdef32e8150c2a081110b42772ffe7d7c9032b606bc226c8260fd97e0976601"
+checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc"
 
 [[package]]
 name = "syn"
-version = "1.0.109"
+version = "2.0.26"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
+checksum = "45c3457aacde3c65315de5031ec191ce46604304d2446e803d71ade03308d970"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -559,15 +571,15 @@
 
 [[package]]
 name = "unicode-ident"
-version = "1.0.8"
+version = "1.0.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e5464a87b239f13a63a501f2701565754bae92d243d4bb7eb12f6d57d2269bf4"
+checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c"
 
 [[package]]
 name = "universal-hash"
-version = "0.5.0"
+version = "0.5.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5"
+checksum = "fc1de2c688dc15305988b563c3854064043356019f97a4b46276fe734c4f07ea"
 dependencies = [
  "crypto-common",
  "subtle",
@@ -587,9 +599,9 @@
 
 [[package]]
 name = "x25519-dalek"
-version = "2.0.0-rc.2"
+version = "2.0.0-rc.3"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fabd6e16dd08033932fc3265ad4510cc2eab24656058a6dcb107ffe274abcc95"
+checksum = "ec7fae07da688e17059d5886712c933bb0520f15eff2e09cfa18e30968f4e63a"
 dependencies = [
  "curve25519-dalek",
  "rand_core",
@@ -618,6 +630,6 @@
 
 [[package]]
 name = "zeroize"
-version = "1.5.7"
+version = "1.6.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c394b5bd0c6f669e7275d9c20aa90ae064cb22e75a1cad54e1b34088034b149f"
+checksum = "2a0956f1ba7c7909bfb66c2e9e4124ab6f6482560f6628b5aaeba39207c9aad9"