LLVMFuzzerTestOneInput:
  181|  13.9k|{
  182|  13.9k|   const std::string_view input{reinterpret_cast<const char*>(Data), Size};
  183|       |
  184|       |   // Raw bytes: header validation, length arithmetic, and the query/body views it hands out.
  185|  13.9k|   {
  186|  13.9k|      const auto buf = exact_buffer(input);
  187|  13.9k|      drive({buf.data(), buf.size()});
  188|  13.9k|      drive_plugin({buf.data(), buf.size()});
  189|  13.9k|   }
  190|       |
  191|  13.9k|   if (Size < 2) {
  ------------------
  |  Branch (191:8): [True: 2, False: 13.9k]
  ------------------
  192|      2|      return 0;
  193|      2|   }
  194|       |
  195|       |   // Wrapped: the first byte picks the framing, the second says how much of the rest is the query.
  196|       |   // The query is what the dispatch walks and the body is what the reader parses, so splitting the
  197|       |   // input between them lets a single corpus entry drive both.
  198|  13.9k|   const uint8_t flags = Data[0];
  199|  13.9k|   const std::string_view rest = input.substr(2);
  200|  13.9k|   const size_t query_size = rest.empty() ? 0 : size_t(Data[1]) % (rest.size() + 1);
  ------------------
  |  Branch (200:30): [True: 4, False: 13.9k]
  ------------------
  201|  13.9k|   const std::string_view query = rest.substr(0, query_size);
  202|  13.9k|   const std::string_view body = rest.substr(query_size);
  203|       |
  204|  13.9k|   {
  205|  13.9k|      const auto framed = framed_message(query, body, flags);
  206|  13.9k|      const auto buf = exact_buffer(framed);
  207|  13.9k|      drive({buf.data(), buf.size()});
  208|  13.9k|   }
  209|       |
  210|       |   // The same body against a fixed query that is known to resolve, so the body reader is reached
  211|       |   // even when the fuzzer has not yet learned what a valid JSON pointer looks like.
  212|       |   // "" is the root endpoint, which reads the whole registered object in one document -- every
  213|       |   // nested struct, container, optional and variant at once, and the deepest reader nesting on
  214|       |   // offer. It is the widest single target here, so it must not be left out of the list.
  215|  13.9k|   for (std::string_view known : {"",        "/value", "/name",    "/position", "/position/x", "/inner", "/inner/label",
  ------------------
  |  Branch (215:32): [True: 293k, False: 13.9k]
  ------------------
  216|  13.9k|                                  "/series", "/table", "/maybe",   "/measure",  "/doubled",    "/greet", "/midpoint",
  217|   293k|                                  "/total",  "/reset", "/counter", "/scale",    "/bump",       "/shift", "/tag"}) {
  218|   293k|      const auto framed = framed_message(known, body, flags);
  219|   293k|      const auto buf = exact_buffer(framed);
  220|   293k|      drive({buf.data(), buf.size()});
  221|   293k|   }
  222|       |
  223|  13.9k|   return 0;
  224|  13.9k|}
repe_registry.cpp:_ZN12_GLOBAL__N_112exact_bufferENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEE:
  113|   516k|   {
  114|   516k|      std::vector<char> buf(bytes.size());
  115|   516k|      if (!bytes.empty()) {
  ------------------
  |  Branch (115:11): [True: 516k, False: 0]
  ------------------
  116|   516k|         std::memcpy(buf.data(), bytes.data(), bytes.size());
  117|   516k|      }
  118|   516k|      return buf;
  119|   516k|   }
repe_registry.cpp:_ZN12_GLOBAL__N_15driveENSt3__14spanIKcLm18446744073709551615EEE:
  146|   321k|   {
  147|   321k|      glz::registry<> registry;
  148|   321k|      fuzz_api api{};
  149|   321k|      repe_fuzz::member_api members{};
  150|       |      // members first, so the last registration -- and therefore the root endpoint -- is the wider
  151|       |      // of the two objects. Root reads the whole object in one document, so it should be the one
  152|       |      // with the nested struct, containers, optional and variant in it.
  153|   321k|      registry.on(members);
  154|   321k|      registry.on(api);
  155|       |
  156|   321k|      std::string response;
  157|   321k|      registry.call(request, response);
  158|   321k|      if (!response.empty()) {
  ------------------
  |  Branch (158:11): [True: 194k, False: 127k]
  ------------------
  159|       |         // The response is a message in its own right, so parsing it back exercises the header
  160|       |         // reader on bytes the registry itself produced. Copy it out at exactly its own size first:
  161|       |         // a std::string keeps an implicit '\0' at data()[size()] and allocator slack behind it,
  162|       |         // which is the very thing this target exists to not have.
  163|   194k|         const auto buf = exact_buffer(response);
  164|   194k|         [[maybe_unused]] auto parsed = glz::repe::parse_request({buf.data(), buf.size()});
  165|   194k|      }
  166|   321k|   }
_ZNK9repe_fuzz8fuzz_api7doubledMUliE_clEi:
   67|    393|      std::function<int32_t(int32_t)> doubled = [](int32_t v) { return int32_t(uint32_t(v) * 2u); };
_ZNK9repe_fuzz8fuzz_api5greetMUlRKNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEE_clESA_:
   68|    489|      std::function<std::string(const std::string&)> greet = [](const std::string& who) { return "hi " + who; };
_ZNK9repe_fuzz8fuzz_api8midpointMUlRKNS_5pointEE_clES4_:
   69|     68|      std::function<point(const point&)> midpoint = [](const point& p) -> point { return {p.x / 2, p.y / 2}; };
_ZNK9repe_fuzz8fuzz_api5totalMUlRNSt3__16vectorIdNS2_9allocatorIdEEEEE_clES7_:
   70|    485|      std::function<double(std::vector<double>&)> total = [](std::vector<double>& v) {
   71|    485|         double sum{};
   72|  1.16k|         for (auto d : v) sum += d;
  ------------------
  |  Branch (72:22): [True: 1.16k, False: 485]
  ------------------
   73|    485|         return sum;
   74|    485|      };
_ZNK9repe_fuzz8fuzz_api5resetMUlvE_clEv:
   75|  13.8k|      std::function<void()> reset = [] {};
_ZN9repe_fuzz10member_api5scaleEi:
   90|    497|      {
   91|    497|         counter = int32_t(uint32_t(counter) + uint32_t(v));
   92|    497|         return int32_t(uint32_t(v) * 3u);
   93|    497|      }
_ZN9repe_fuzz10member_api4bumpEv:
   94|  13.8k|      void bump() { counter = int32_t(uint32_t(counter) + 1u); }
_ZN9repe_fuzz10member_api5shiftERKNS_5pointE:
   95|    177|      point shift(const point& p) { return {p.x + 1, p.y + 1}; }
_ZN9repe_fuzz10member_api3tagERKNS_6nestedE:
   96|    331|      std::string tag(const nested& n) { return n.label; }
repe_registry.cpp:_ZN12_GLOBAL__N_112drive_pluginENSt3__14spanIKcLm18446744073709551615EEE:
  172|  13.9k|   {
  173|  13.9k|      glz::registry<> registry;
  174|  13.9k|      fuzz_api api{};
  175|  13.9k|      registry.on(api);
  176|  13.9k|      [[maybe_unused]] auto out = glz::repe::plugin_call(registry, request.data(), request.size());
  177|  13.9k|   }
repe_registry.cpp:_ZN12_GLOBAL__N_114framed_messageENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEES4_h:
  122|   307k|   {
  123|   307k|      glz::repe::header hdr{};
  124|   307k|      hdr.spec = glz::repe::repe_magic;
  125|   307k|      hdr.version = 1;
  126|   307k|      hdr.id = 1;
  127|   307k|      hdr.notify = (flags & 0x1) ? 1 : 0;
  ------------------
  |  Branch (127:20): [True: 127k, False: 180k]
  ------------------
  128|   307k|      hdr.query_length = query.size();
  129|   307k|      hdr.body_length = body.size();
  130|   307k|      hdr.length = sizeof(glz::repe::header) + query.size() + body.size();
  131|   307k|      hdr.query_format = glz::repe::query_format::JSON_POINTER;
  132|   307k|      hdr.body_format = glz::repe::body_format::JSON;
  133|       |      // The registry echoes a request that already carries an error back to the sender without
  134|       |      // dispatching it. Nothing else in this target sets ec, so without this that branch is dead.
  135|   307k|      hdr.ec = (flags & 0x2) ? glz::error_code::invalid_query : glz::error_code::none;
  ------------------
  |  Branch (135:16): [True: 2.26k, False: 305k]
  ------------------
  136|       |
  137|   307k|      std::string msg;
  138|   307k|      msg.resize(hdr.length);
  139|   307k|      std::memcpy(msg.data(), &hdr, sizeof(hdr));
  140|   307k|      std::memcpy(msg.data() + sizeof(hdr), query.data(), query.size());
  141|   307k|      std::memcpy(msg.data() + sizeof(hdr) + query.size(), body.data(), body.size());
  142|   307k|      return msg;
  143|   307k|   }

_ZN3glz11empty_rangeITkNS_5rangeERNSt3__16vectorIiNS1_9allocatorIiEEEEEEbOT_:
  284|    120|   {
  285|    120|#ifdef __cpp_lib_ranges
  286|    120|      return std::ranges::empty(rng);
  287|       |#else
  288|       |      // in lieu of std::ranges::empty
  289|       |      if constexpr (requires() {
  290|       |                       { rng.empty() } -> std::convertible_to<bool>;
  291|       |                    }) {
  292|       |         return rng.empty();
  293|       |      }
  294|       |      else if constexpr (requires() {
  295|       |                            { rng.size() } -> std::same_as<std::size_t>;
  296|       |                         }) {
  297|       |         return rng.size() == std::size_t{0};
  298|       |      }
  299|       |      else {
  300|       |         return std::cbegin(rng) == std::cend(rng);
  301|       |      }
  302|       |#endif
  303|    120|   }
_ZN3glz11empty_rangeITkNS_5rangeERNSt3__13mapINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEiNS1_4lessIS8_EENS6_INS1_4pairIKS8_iEEEEEEEEbOT_:
  284|    120|   {
  285|    120|#ifdef __cpp_lib_ranges
  286|    120|      return std::ranges::empty(rng);
  287|       |#else
  288|       |      // in lieu of std::ranges::empty
  289|       |      if constexpr (requires() {
  290|       |                       { rng.empty() } -> std::convertible_to<bool>;
  291|       |                    }) {
  292|       |         return rng.empty();
  293|       |      }
  294|       |      else if constexpr (requires() {
  295|       |                            { rng.size() } -> std::same_as<std::size_t>;
  296|       |                         }) {
  297|       |         return rng.size() == std::size_t{0};
  298|       |      }
  299|       |      else {
  300|       |         return std::cbegin(rng) == std::cend(rng);
  301|       |      }
  302|       |#endif
  303|    120|   }

_ZN3glz11grow_bufferINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEEvRT_m:
   88|    230|   {
   89|    230|      using traits = buffer_traits<std::remove_cvref_t<B>>;
   90|    230|      if constexpr (requires { traits::grow(b, required); }) {
   91|    230|         traits::grow(b, required);
   92|       |      }
   93|       |      else {
   94|       |         // A user specialization written before `grow` existed: keep the growth it used to get.
   95|       |         b.resize(2 * required);
   96|       |      }
   97|    230|   }
_ZN3glz13buffer_traitsINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEE4growERS7_mQL_ZNS_13buffer_traits12is_resizableEE:
   63|    230|      {
   64|    230|         b.resize(2 * required);
   65|    230|      }
_ZN3glz12ensure_spaceINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEETkNS_10is_contextENS_7contextEEEbRT0_RT_m:
  210|  24.9k|   {
  211|  24.9k|      using Buffer = std::remove_cvref_t<B>;
  212|       |
  213|  24.9k|      if constexpr (vector_like<Buffer>) {
  214|  24.9k|         if (required > b.size()) [[unlikely]] {
  ------------------
  |  Branch (214:14): [True: 230, False: 24.7k]
  ------------------
  215|    230|            grow_buffer(b, required);
  216|    230|         }
  217|  24.9k|         return true;
  218|       |      }
  219|       |      else if constexpr (has_bounded_capacity<Buffer>) {
  220|       |         if (required > buffer_traits<Buffer>::capacity(b)) [[unlikely]] {
  221|       |            ctx.error = error_code::buffer_overflow;
  222|       |            return false;
  223|       |         }
  224|       |         return true;
  225|       |      }
  226|       |      else {
  227|       |         return true; // Raw pointer or other - trust caller
  228|       |      }
  229|  24.9k|   }
_ZN3glz13buffer_traitsINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEE8finalizeERS7_m:
   69|  23.1k|      {
   70|  23.1k|         if constexpr (is_resizable) {
   71|  23.1k|            b.resize(written);
   72|  23.1k|         }
   73|       |         // For fixed buffers: no-op, count is returned in result
   74|  23.1k|      }

_ZN3glz10get_memberIRN9repe_fuzz10member_apiERKMS2_iEEDcOT_OT0_:
  616|   321k|   {
  617|   321k|      using V = std::decay_t<decltype(element)>;
  618|   321k|      if constexpr (std::is_member_object_pointer_v<V>) {
  619|   321k|         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|       |      else {
  639|       |         return element;
  640|       |      }
  641|   321k|   }
_ZN3glz10get_memberIRN9repe_fuzz10member_apiERKMS2_FiiEEEDcOT_OT0_:
  616|   321k|   {
  617|   321k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|   321k|      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|   321k|         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|       |      else {
  639|       |         return element;
  640|       |      }
  641|   321k|   }
_ZN3glz10get_memberIRN9repe_fuzz10member_apiERKMS2_FvvEEEDcOT_OT0_:
  616|   321k|   {
  617|   321k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|   321k|      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|   321k|         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|       |      else {
  639|       |         return element;
  640|       |      }
  641|   321k|   }
_ZN3glz10get_memberIRN9repe_fuzz10member_apiERKMS2_FNS1_5pointERKS4_EEEDcOT_OT0_:
  616|   321k|   {
  617|   321k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|   321k|      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|   321k|         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|       |      else {
  639|       |         return element;
  640|       |      }
  641|   321k|   }
_ZN3glz10get_memberIRN9repe_fuzz5pointERdEEDcOT_OT0_:
  616|   708k|   {
  617|   708k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|   708k|      else {
  639|   708k|         return element;
  640|   708k|      }
  641|   708k|   }
_ZN3glz10get_memberIRN9repe_fuzz10member_apiERKMS2_FNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERKNS1_6nestedEEEEDcOT_OT0_:
  616|   321k|   {
  617|   321k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|   321k|      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|   321k|         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|       |      else {
  639|       |         return element;
  640|       |      }
  641|   321k|   }
_ZN3glz10get_memberIRN9repe_fuzz6nestedERiEEDcOT_OT0_:
  616|   335k|   {
  617|   335k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|   335k|      else {
  639|   335k|         return element;
  640|   335k|      }
  641|   335k|   }
_ZN3glz10get_memberIRN9repe_fuzz6nestedERNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEDcOT_OT0_:
  616|   344k|   {
  617|   344k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|   344k|      else {
  639|   344k|         return element;
  640|   344k|      }
  641|   344k|   }
_ZN3glz8str_viewINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERS7_EENS1_17basic_string_viewIcS4_EEOT0_:
  288|    966|   {
  289|       |      if constexpr (std::same_as<std::decay_t<T>, std::string_view>) {
  290|       |         return value; // already the answer; rebuilding it from data() and size() costs instructions
  291|       |      }
  292|       |      else if constexpr (!char_array_t<T> && std::is_pointer_v<std::decay_t<T>>) {
  293|       |         return value ? std::string_view{value} : std::string_view{};
  294|       |      }
  295|    966|      else if constexpr (has_data<T> && has_size<T>) {
  296|    966|         return std::string_view{value.data(), value.size()};
  297|       |      }
  298|       |      else {
  299|       |         return std::string_view{value};
  300|       |      }
  301|    966|   }
_ZN3glz10get_memberIRN9repe_fuzz8fuzz_apiERiEEDcOT_OT0_:
  616|   375k|   {
  617|   375k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|   375k|      else {
  639|   375k|         return element;
  640|   375k|      }
  641|   375k|   }
_ZN3glz10get_memberIRN9repe_fuzz8fuzz_apiERNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEDcOT_OT0_:
  616|   336k|   {
  617|   336k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|   336k|      else {
  639|   336k|         return element;
  640|   336k|      }
  641|   336k|   }
_ZN3glz10get_memberIRN9repe_fuzz8fuzz_apiERNS1_5pointEEEDcOT_OT0_:
  616|   336k|   {
  617|   336k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|   336k|      else {
  639|   336k|         return element;
  640|   336k|      }
  641|   336k|   }
_ZN3glz10get_memberIRN9repe_fuzz8fuzz_apiERNS1_6nestedEEEDcOT_OT0_:
  616|   336k|   {
  617|   336k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|   336k|      else {
  639|   336k|         return element;
  640|   336k|      }
  641|   336k|   }
_ZN3glz10get_memberIRN9repe_fuzz8fuzz_apiERNSt3__16vectorIiNS4_9allocatorIiEEEEEEDcOT_OT0_:
  616|   347k|   {
  617|   347k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|   347k|      else {
  639|   347k|         return element;
  640|   347k|      }
  641|   347k|   }
_ZN3glz10get_memberIRN9repe_fuzz8fuzz_apiERNSt3__13mapINS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEiNS4_4lessISB_EENS9_INS4_4pairIKSB_iEEEEEEEEDcOT_OT0_:
  616|   337k|   {
  617|   337k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|   337k|      else {
  639|   337k|         return element;
  640|   337k|      }
  641|   337k|   }
_ZN3glz10get_memberIRN9repe_fuzz8fuzz_apiERNSt3__18optionalIdEEEEDcOT_OT0_:
  616|   337k|   {
  617|   337k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|   337k|      else {
  639|   337k|         return element;
  640|   337k|      }
  641|   337k|   }
_ZN3glz10get_memberIRN9repe_fuzz6amountERdEEDcOT_OT0_:
  616|  20.2k|   {
  617|  20.2k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|  20.2k|      else {
  639|  20.2k|         return element;
  640|  20.2k|      }
  641|  20.2k|   }
_ZN3glz10get_memberIRN9repe_fuzz8fuzz_apiERNSt3__17variantIJNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS1_6amountEEEEEEDcOT_OT0_:
  616|   339k|   {
  617|   339k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|   339k|      else {
  639|   339k|         return element;
  640|   339k|      }
  641|   339k|   }
_ZN3glz10get_memberIRN9repe_fuzz8fuzz_apiERNSt3__18functionIFiiEEEEEDcOT_OT0_:
  616|   336k|   {
  617|   336k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|   336k|      else {
  639|   336k|         return element;
  640|   336k|      }
  641|   336k|   }
_ZN3glz10get_memberIRN9repe_fuzz8fuzz_apiERNSt3__18functionIFNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERKSB_EEEEEDcOT_OT0_:
  616|   336k|   {
  617|   336k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|   336k|      else {
  639|   336k|         return element;
  640|   336k|      }
  641|   336k|   }
_ZN3glz10get_memberIRN9repe_fuzz8fuzz_apiERNSt3__18functionIFNS1_5pointERKS6_EEEEEDcOT_OT0_:
  616|   336k|   {
  617|   336k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|   336k|      else {
  639|   336k|         return element;
  640|   336k|      }
  641|   336k|   }
_ZN3glz10get_memberIRN9repe_fuzz8fuzz_apiERNSt3__18functionIFdRNS4_6vectorIdNS4_9allocatorIdEEEEEEEEEDcOT_OT0_:
  616|   335k|   {
  617|   335k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|   335k|      else {
  639|   335k|         return element;
  640|   335k|      }
  641|   335k|   }
_ZN3glz10get_memberIRN9repe_fuzz8fuzz_apiERNSt3__18functionIFvvEEEEEDcOT_OT0_:
  616|   335k|   {
  617|   335k|      using V = std::decay_t<decltype(element)>;
  618|       |      if constexpr (std::is_member_object_pointer_v<V>) {
  619|       |         return value.*element;
  620|       |      }
  621|       |      else if constexpr (std::is_member_function_pointer_v<V>) {
  622|       |         return element;
  623|       |      }
  624|       |      else if constexpr (std::invocable<Element, Value> && not eigen_t<Element>) {
  625|       |         // Eigen places a static_assert inside of the operator()(), so we must target
  626|       |         // matrix types and reject them from the invocable check
  627|       |         // Eigen ought to put the check in the `enable_if` for operator()()
  628|       |         return std::invoke(std::forward<Element>(element), std::forward<Value>(value));
  629|       |      }
  630|       |      else if constexpr (std::is_pointer_v<V> && !std::is_reference_v<Element>) {
  631|       |         if constexpr (std::invocable<decltype(*element), Value>) {
  632|       |            return std::invoke(*element, std::forward<Value>(value));
  633|       |         }
  634|       |         else {
  635|       |            return *element;
  636|       |         }
  637|       |      }
  638|   335k|      else {
  639|   335k|         return element;
  640|   335k|      }
  641|   335k|   }

_ZN3glz11enter_depthITkNS_10is_contextENS_7contextEEEbRT_:
  281|  94.7k|   {
  282|  94.7k|      if (ctx.depth >= max_recursive_depth_limit) [[unlikely]] {
  ------------------
  |  Branch (282:11): [True: 0, False: 94.7k]
  ------------------
  283|      0|         ctx.error = error_code::exceeded_max_recursive_depth;
  284|      0|         return true;
  285|      0|      }
  286|  94.7k|      ++ctx.depth;
  287|  94.7k|      return false;
  288|  94.7k|   }
_ZNK3glz9error_ctxcvbEv:
  136|  23.1k|      operator bool() const noexcept { return ec != error_code::none; }
_ZN3glz18charge_speculationITkNS_10is_contextENS_7contextEEEbRT_m:
  249|    617|   {
  250|    617|      if constexpr (requires { ctx.speculation_budget; }) {
  251|    617|         if (ctx.speculation_budget == 0) {
  ------------------
  |  Branch (251:14): [True: 617, False: 0]
  ------------------
  252|    617|            return true;
  253|    617|         }
  254|      0|         ctx.speculation_budget = consumed >= ctx.speculation_budget ? 1 : ctx.speculation_budget - consumed;
  ------------------
  |  Branch (254:35): [True: 0, False: 0]
  ------------------
  255|      0|         return ctx.speculation_budget > 1;
  256|       |      }
  257|       |      else {
  258|       |         return true;
  259|       |      }
  260|    617|   }
_ZN3glz21speculation_exhaustedITkNS_10is_contextENS_7contextEEEbRT_:
  266|     82|   {
  267|     82|      if constexpr (requires { ctx.speculation_budget; }) {
  268|     82|         return ctx.speculation_budget == 1; // the latched floor; 0 means unbudgeted
  269|       |      }
  270|       |      else {
  271|       |         return false;
  272|       |      }
  273|     82|   }

_ZN3glz23finalize_top_level_readITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETkNS_10is_contextERNS_7contextEEEvOT0_PKcS7_S7_:
  115|   273k|   {
  116|   273k|      if constexpr (Opts.format == JSON && !check_null_terminated(Opts)) {
  117|       |         // Deliberately not [[unlikely]]: a body that ends with the buffer lands here on every
  118|       |         // successful read, which is the ordinary case for a registry parsing a wire span.
  119|       |         // start < it, not !=, because a streaming origin can be empty or overshoot on an error
  120|       |         // path; neither is an absent value.
  121|   273k|         if (ctx.error == error_code::end_reached && ctx.depth == 0 && it == end && start < it) {
  ------------------
  |  Branch (121:14): [True: 11.3k, False: 261k]
  |  Branch (121:54): [True: 5.18k, False: 6.12k]
  |  Branch (121:72): [True: 5.18k, False: 0]
  |  Branch (121:85): [True: 5.18k, False: 0]
  ------------------
  122|  5.18k|            context ws_ctx{}; // only written to when skip_ws parses a comment; the result is unused
  123|  5.18k|            const char* consumed = start;
  124|  5.18k|            skip_ws<Opts>(ws_ctx, consumed, it);
  125|  5.18k|            if (consumed == it) {
  ------------------
  |  Branch (125:17): [True: 778, False: 4.40k]
  ------------------
  126|    778|               ctx.error = error_code::no_read_input;
  127|    778|            }
  128|  5.18k|         }
  129|   273k|      }
  130|   273k|      finalize_read_context<Opts>(ctx);
  131|   273k|   }
_ZN3glz21finalize_read_contextITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETkNS_10is_contextERNS_7contextEEEvOT0_:
   76|   273k|   {
   77|       |      // A partial read stops as soon as it has the fields it was asked for, so it unwinds through
   78|       |      // its enclosing containers on an error code rather than through their closing braces, and
   79|       |      // none of them decrement depth on the way out. Depth is left standing at whatever nesting the
   80|       |      // last field sat at.
   81|       |      //
   82|       |      // That has to be cleared here rather than left for the next read to trip over. This is the
   83|       |      // one path that reports success with depth still raised, and depth is what settle_end_reached
   84|       |      // reads to tell a completed parse from a truncated one -- so a context reused after a partial
   85|       |      // read would see a later well-formed buffer settle to unexpected_end. Reads that end any
   86|       |      // other way either return depth to zero themselves or carry an error, and a context holding
   87|       |      // an error short-circuits the next read before it parses anything.
   88|       |      if constexpr (check_partial_read(Opts)) {
   89|       |         if (ctx.error == error_code::partial_read_complete) [[likely]] {
   90|       |            ctx.error = error_code::none;
   91|       |            ctx.depth = 0;
   92|       |            return;
   93|       |         }
   94|       |      }
   95|   273k|      settle_end_reached(ctx);
   96|   273k|   }
_ZN3glz18settle_end_reachedITkNS_10is_contextERNS_7contextEEEvOT_:
   68|   273k|   {
   69|   273k|      if (ctx.error == error_code::end_reached) {
  ------------------
  |  Branch (69:11): [True: 10.5k, False: 262k]
  ------------------
   70|  10.5k|         ctx.error = (ctx.depth == 0) ? error_code::none : error_code::unexpected_end;
  ------------------
  |  Branch (70:22): [True: 4.40k, False: 6.12k]
  ------------------
   71|  10.5k|      }
   72|   273k|   }

_ZN3glz12format_errorINSt3__117basic_string_viewIcNS1_11char_traitsIcEEEEEENS1_12basic_stringIcS4_NS1_9allocatorIcEEEERKNS_9error_ctxERKT_:
 3349|   155k|   {
 3350|   155k|      const auto error_type_str = meta<error_code>::keys[uint32_t(pe.ec)];
 3351|       |
 3352|   155k|      const auto info = detail::get_source_info(buffer, pe.count);
 3353|   155k|      auto error_str = detail::generate_error_string(error_type_str, info);
 3354|   155k|      if (pe.custom_error_message.size()) {
  ------------------
  |  Branch (3354:11): [True: 0, False: 155k]
  ------------------
 3355|      0|         error_str.append(" ");
 3356|      0|         error_str.append(pe.custom_error_message.begin(), pe.custom_error_message.end());
 3357|      0|      }
 3358|   155k|      return error_str;
 3359|   155k|   }
_ZN3glz11decode_hashILj10EN9repe_fuzz5pointEXtlNS_11hash_info_tIS2_Lm256EEELNS_9hash_typeE1EtlNSt3__15arrayIhLm256EEEtlA256_hLh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh0ELh1ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2EEELm1ELm1EEELS5_1EE2opIRPKcSD_EEmOT_T0_:
 2503|  58.8k|      {
 2504|       |         if constexpr (HashInfo.sized_hash) {
 2505|       |            const auto* c = quote_memchr<HashInfo.min_length>(it, end);
 2506|       |            if (c) [[likely]] {
 2507|       |               const auto n = size_t(static_cast<std::decay_t<decltype(it)>>(c) - it);
 2508|       |               if (n == 0 || n > HashInfo.max_length || HashInfo.unique_index >= size_t(end - it)) [[unlikely]] {
 2509|       |                  return N; // error
 2510|       |               }
 2511|       |
 2512|       |               const auto h = bitmix(uint16_t(it[HashInfo.unique_index]) | (uint16_t(n) << 8), HashInfo.seed);
 2513|       |               return HashInfo.table[h % bsize];
 2514|       |            }
 2515|       |            else [[unlikely]] {
 2516|       |               return N;
 2517|       |            }
 2518|       |         }
 2519|  58.8k|         else {
 2520|  58.8k|            if constexpr (N == 2) {
 2521|       |               if constexpr (uindex > 0) {
 2522|       |                  if (size_t(end - it) <= uindex) [[unlikely]] {
 2523|       |                     return N; // error
 2524|       |                  }
 2525|       |               }
 2526|       |               // Avoids using a hash table
 2527|  58.8k|               constexpr auto first_key_char = reflect<T>::keys[0][uindex];
 2528|  58.8k|               return size_t(bool(it[uindex] ^ first_key_char));
 2529|       |            }
 2530|       |            else {
 2531|       |               if constexpr (uindex > 0) {
 2532|       |                  if (size_t(end - it) <= uindex) [[unlikely]] {
 2533|       |                     return N; // error
 2534|       |                  }
 2535|       |               }
 2536|       |               return HashInfo.table[uint8_t(it[uindex])];
 2537|       |            }
 2538|  58.8k|         }
 2539|  58.8k|      }
_ZN3glz11decode_hashILj10EN9repe_fuzz6nestedEXtlNS_11hash_info_tIS2_Lm256EEELNS_9hash_typeE1EtlNSt3__15arrayIhLm256EEEtlA256_hLh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh0ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh1ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2ELh2EEELm5ELm5EEELS5_1EE2opIRPKcSD_EEmOT_T0_:
 2503|  23.9k|      {
 2504|       |         if constexpr (HashInfo.sized_hash) {
 2505|       |            const auto* c = quote_memchr<HashInfo.min_length>(it, end);
 2506|       |            if (c) [[likely]] {
 2507|       |               const auto n = size_t(static_cast<std::decay_t<decltype(it)>>(c) - it);
 2508|       |               if (n == 0 || n > HashInfo.max_length || HashInfo.unique_index >= size_t(end - it)) [[unlikely]] {
 2509|       |                  return N; // error
 2510|       |               }
 2511|       |
 2512|       |               const auto h = bitmix(uint16_t(it[HashInfo.unique_index]) | (uint16_t(n) << 8), HashInfo.seed);
 2513|       |               return HashInfo.table[h % bsize];
 2514|       |            }
 2515|       |            else [[unlikely]] {
 2516|       |               return N;
 2517|       |            }
 2518|       |         }
 2519|  23.9k|         else {
 2520|  23.9k|            if constexpr (N == 2) {
 2521|       |               if constexpr (uindex > 0) {
 2522|       |                  if (size_t(end - it) <= uindex) [[unlikely]] {
 2523|       |                     return N; // error
 2524|       |                  }
 2525|       |               }
 2526|       |               // Avoids using a hash table
 2527|  23.9k|               constexpr auto first_key_char = reflect<T>::keys[0][uindex];
 2528|  23.9k|               return size_t(bool(it[uindex] ^ first_key_char));
 2529|       |            }
 2530|       |            else {
 2531|       |               if constexpr (uindex > 0) {
 2532|       |                  if (size_t(end - it) <= uindex) [[unlikely]] {
 2533|       |                     return N; // error
 2534|       |                  }
 2535|       |               }
 2536|       |               return HashInfo.table[uint8_t(it[uindex])];
 2537|       |            }
 2538|  23.9k|         }
 2539|  23.9k|      }
_ZN3glz11decode_hashILj10EN9repe_fuzz8fuzz_apiEXtlNS_11hash_info_tIS2_Lm128EEELNS_9hash_typeE2EtlNSt3__15arrayIhLm128EEEtlA128_hLh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh11ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh6ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh9ELh13ELh13ELh13ELh13ELh13ELh12ELh13ELh13ELh13ELh13ELh0ELh13ELh13ELh13ELh13ELh13ELh13ELh5ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh4ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh1ELh13ELh10ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh2ELh3ELh13ELh13ELh13ELh13ELh13ELh13ELh8ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh13ELh7ELh13ELh13ELh13ELh13ELh13ELh13ELh13EEELm4ELm8ELm15149911783463666029ELm18446744073709551615ELb0ELm2EEELS5_2EE2opIRPKcSD_EEmOT_T0_:
 2568|  66.7k|      {
 2569|  66.7k|         if constexpr (HashInfo.front_hash_bytes == 2) {
 2570|  66.7k|            if (size_t(end - it) <= 2) [[unlikely]] {
  ------------------
  |  Branch (2570:17): [True: 111, False: 66.6k]
  ------------------
 2571|    111|               return N; // error
 2572|    111|            }
 2573|  66.6k|            uint16_t h;
 2574|       |            if consteval {
 2575|       |               h = 0;
 2576|       |               for (size_t i = 0; i < 2; ++i) {
 2577|       |                  h |= static_cast<uint16_t>(static_cast<uint8_t>(it[i])) << (8 * i);
 2578|       |               }
 2579|       |            }
 2580|  66.6k|            else {
 2581|  66.6k|               std::memcpy(&h, it, 2);
 2582|       |               if constexpr (std::endian::native == std::endian::big) {
 2583|       |                  h = std::byteswap(h);
 2584|       |               }
 2585|  66.6k|            }
 2586|  66.6k|            return HashInfo.table[bitmix(h, HashInfo.seed) % bsize];
 2587|       |         }
 2588|       |         else if constexpr (HashInfo.front_hash_bytes == 4) {
 2589|       |            if (size_t(end - it) <= 4) [[unlikely]] {
 2590|       |               return N;
 2591|       |            }
 2592|       |            uint32_t h;
 2593|       |            if consteval {
 2594|       |               h = 0;
 2595|       |               for (size_t i = 0; i < 4; ++i) {
 2596|       |                  h |= static_cast<uint32_t>(static_cast<uint8_t>(it[i])) << (8 * i);
 2597|       |               }
 2598|       |            }
 2599|       |            else {
 2600|       |               std::memcpy(&h, it, 4);
 2601|       |               if constexpr (std::endian::native == std::endian::big) {
 2602|       |                  h = std::byteswap(h);
 2603|       |               }
 2604|       |            }
 2605|       |            return HashInfo.table[bitmix(h, HashInfo.seed) % bsize];
 2606|       |         }
 2607|       |         else if constexpr (HashInfo.front_hash_bytes == 8) {
 2608|       |            if (size_t(end - it) <= 8) [[unlikely]] {
 2609|       |               return N;
 2610|       |            }
 2611|       |            uint64_t h;
 2612|       |            if consteval {
 2613|       |               h = 0;
 2614|       |               for (size_t i = 0; i < 8; ++i) {
 2615|       |                  h |= static_cast<uint64_t>(static_cast<uint8_t>(it[i])) << (8 * i);
 2616|       |               }
 2617|       |            }
 2618|       |            else {
 2619|       |               std::memcpy(&h, it, 8);
 2620|       |               if constexpr (std::endian::native == std::endian::big) {
 2621|       |                  h = std::byteswap(h);
 2622|       |               }
 2623|       |            }
 2624|       |            return HashInfo.table[rich_bitmix(h, HashInfo.seed) % bsize];
 2625|       |         }
 2626|       |         else {
 2627|       |            static_assert(false_v<T>, "invalid hash algorithm");
 2628|       |         }
 2629|  66.7k|      }
_ZN3glz6bitmixEmm:
 1531|  66.6k|   {
 1532|  66.6k|      h *= seed;
 1533|  66.6k|      return h ^ std::rotr(h, 49);
 1534|  66.6k|   };

_ZN3glz3getILm0ETkNS_12tuple_detail9indexableERKNS_5tupleIJMN9repe_fuzz10member_apiEiMS4_FiiEMS4_FvvEMS4_FNS3_5pointERKSA_EMS4_FNSt3__112basic_stringIcNSF_11char_traitsIcEENSF_9allocatorIcEEEERKNS3_6nestedEEEEEEEDcOT0_:
  116|   321k|   {
  117|   321k|      using D = std::remove_cvref_t<Tup>;
  118|   321k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   321k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   321k|         using T = typename D::template type_at<I>;
  121|   321k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   321k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   321k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   321k|   }
_ZN3glz3getILm1ETkNS_12tuple_detail9indexableERKNS_5tupleIJMN9repe_fuzz10member_apiEiMS4_FiiEMS4_FvvEMS4_FNS3_5pointERKSA_EMS4_FNSt3__112basic_stringIcNSF_11char_traitsIcEENSF_9allocatorIcEEEERKNS3_6nestedEEEEEEEDcOT0_:
  116|   321k|   {
  117|   321k|      using D = std::remove_cvref_t<Tup>;
  118|   321k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   321k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   321k|         using T = typename D::template type_at<I>;
  121|   321k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   321k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   321k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   321k|   }
_ZN3glz3getILm2ETkNS_12tuple_detail9indexableERKNS_5tupleIJMN9repe_fuzz10member_apiEiMS4_FiiEMS4_FvvEMS4_FNS3_5pointERKSA_EMS4_FNSt3__112basic_stringIcNSF_11char_traitsIcEENSF_9allocatorIcEEEERKNS3_6nestedEEEEEEEDcOT0_:
  116|   321k|   {
  117|   321k|      using D = std::remove_cvref_t<Tup>;
  118|   321k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   321k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   321k|         using T = typename D::template type_at<I>;
  121|   321k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   321k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   321k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   321k|   }
_ZN3glz3getILm3ETkNS_12tuple_detail9indexableERKNS_5tupleIJMN9repe_fuzz10member_apiEiMS4_FiiEMS4_FvvEMS4_FNS3_5pointERKSA_EMS4_FNSt3__112basic_stringIcNSF_11char_traitsIcEENSF_9allocatorIcEEEERKNS3_6nestedEEEEEEEDcOT0_:
  116|   321k|   {
  117|   321k|      using D = std::remove_cvref_t<Tup>;
  118|   321k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   321k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   321k|         using T = typename D::template type_at<I>;
  121|   321k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   321k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   321k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   321k|   }
_ZN3glz3getILm0ETkNS_12tuple_detail9indexableENS_5tupleIJRdS3_EEEEEDcOT0_:
  116|  20.2k|   {
  117|  20.2k|      using D = std::remove_cvref_t<Tup>;
  118|  20.2k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|  20.2k|         static_assert(I < D::N, "glz::get index is out of range");
  120|  20.2k|         using T = typename D::template type_at<I>;
  121|       |         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|       |            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|       |            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|  20.2k|         else {
  128|  20.2k|            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|  20.2k|         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|  20.2k|   }
_ZN3glz3tieIJddEEENS_5tupleIJDpRT_EEES4_:
  325|   372k|   {
  326|   372k|      return {{{ts}...}};
  327|   372k|   }
_ZN3glz3getILm1ETkNS_12tuple_detail9indexableENS_5tupleIJRdS3_EEEEEDcOT0_:
  116|  16.3k|   {
  117|  16.3k|      using D = std::remove_cvref_t<Tup>;
  118|  16.3k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|  16.3k|         static_assert(I < D::N, "glz::get index is out of range");
  120|  16.3k|         using T = typename D::template type_at<I>;
  121|       |         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|       |            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|       |            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|  16.3k|         else {
  128|  16.3k|            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|  16.3k|         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|  16.3k|   }
_ZN3glz3getILm0ETkNS_12tuple_detail9indexableERNS_5tupleIJRdS3_EEEEEDcOT0_:
  116|   336k|   {
  117|   336k|      using D = std::remove_cvref_t<Tup>;
  118|   336k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   336k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   336k|         using T = typename D::template type_at<I>;
  121|   336k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   336k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   336k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   336k|   }
_ZN3glz3getILm1ETkNS_12tuple_detail9indexableERNS_5tupleIJRdS3_EEEEEDcOT0_:
  116|   336k|   {
  117|   336k|      using D = std::remove_cvref_t<Tup>;
  118|   336k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   336k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   336k|         using T = typename D::template type_at<I>;
  121|   336k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   336k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   336k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   336k|   }
_ZN3glz3getILm4ETkNS_12tuple_detail9indexableERKNS_5tupleIJMN9repe_fuzz10member_apiEiMS4_FiiEMS4_FvvEMS4_FNS3_5pointERKSA_EMS4_FNSt3__112basic_stringIcNSF_11char_traitsIcEENSF_9allocatorIcEEEERKNS3_6nestedEEEEEEEDcOT0_:
  116|   321k|   {
  117|   321k|      using D = std::remove_cvref_t<Tup>;
  118|   321k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   321k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   321k|         using T = typename D::template type_at<I>;
  121|   321k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   321k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   321k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   321k|   }
_ZN3glz3tieIJiNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEEENS_5tupleIJDpRT_EEESB_:
  325|   344k|   {
  326|   344k|      return {{{ts}...}};
  327|   344k|   }
_ZN3glz3getILm1ETkNS_12tuple_detail9indexableENS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEEEEDcOT0_:
  116|  8.86k|   {
  117|  8.86k|      using D = std::remove_cvref_t<Tup>;
  118|  8.86k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|  8.86k|         static_assert(I < D::N, "glz::get index is out of range");
  120|  8.86k|         using T = typename D::template type_at<I>;
  121|       |         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|       |            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|       |            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|  8.86k|         else {
  128|  8.86k|            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|  8.86k|         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|  8.86k|   }
_ZN3glz3getILm0ETkNS_12tuple_detail9indexableENS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|  39.9k|   {
  117|  39.9k|      using D = std::remove_cvref_t<Tup>;
  118|  39.9k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|  39.9k|         static_assert(I < D::N, "glz::get index is out of range");
  120|  39.9k|         using T = typename D::template type_at<I>;
  121|       |         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|       |            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|       |            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|  39.9k|         else {
  128|  39.9k|            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|  39.9k|         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|  39.9k|   }
_ZN3glz3tieIJiNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEN9repe_fuzz5pointENS8_6nestedENS1_6vectorIiNS5_IiEEEENS1_3mapIS7_iNS1_4lessIS7_EENS5_INS1_4pairIKS7_iEEEEEENS1_8optionalIdEENS1_7variantIJS7_NS8_6amountEEEENS1_8functionIFiiEEENSR_IFS7_RSI_EEENSR_IFS9_RKS9_EEENSR_IFdRNSB_IdNS5_IdEEEEEEENSR_IFvvEEEEEENS_5tupleIJDpRT_EEES1B_:
  325|   396k|   {
  326|   396k|      return {{{ts}...}};
  327|   396k|   }
_ZN3glz3getILm1ETkNS_12tuple_detail9indexableENS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|    140|   {
  117|    140|      using D = std::remove_cvref_t<Tup>;
  118|    140|      if constexpr (tuple_detail::is_tuple<D>) {
  119|    140|         static_assert(I < D::N, "glz::get index is out of range");
  120|    140|         using T = typename D::template type_at<I>;
  121|       |         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|       |            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|       |            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|    140|         else {
  128|    140|            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|    140|         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|    140|   }
_ZN3glz3getILm2ETkNS_12tuple_detail9indexableENS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|    964|   {
  117|    964|      using D = std::remove_cvref_t<Tup>;
  118|    964|      if constexpr (tuple_detail::is_tuple<D>) {
  119|    964|         static_assert(I < D::N, "glz::get index is out of range");
  120|    964|         using T = typename D::template type_at<I>;
  121|       |         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|       |            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|       |            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|    964|         else {
  128|    964|            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|    964|         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|    964|   }
_ZN3glz3getILm3ETkNS_12tuple_detail9indexableENS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|    684|   {
  117|    684|      using D = std::remove_cvref_t<Tup>;
  118|    684|      if constexpr (tuple_detail::is_tuple<D>) {
  119|    684|         static_assert(I < D::N, "glz::get index is out of range");
  120|    684|         using T = typename D::template type_at<I>;
  121|       |         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|       |            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|       |            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|    684|         else {
  128|    684|            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|    684|         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|    684|   }
_ZN3glz3getILm4ETkNS_12tuple_detail9indexableENS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|  11.6k|   {
  117|  11.6k|      using D = std::remove_cvref_t<Tup>;
  118|  11.6k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|  11.6k|         static_assert(I < D::N, "glz::get index is out of range");
  120|  11.6k|         using T = typename D::template type_at<I>;
  121|       |         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|       |            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|       |            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|  11.6k|         else {
  128|  11.6k|            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|  11.6k|         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|  11.6k|   }
_ZN3glz3getILm5ETkNS_12tuple_detail9indexableENS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|  1.51k|   {
  117|  1.51k|      using D = std::remove_cvref_t<Tup>;
  118|  1.51k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|  1.51k|         static_assert(I < D::N, "glz::get index is out of range");
  120|  1.51k|         using T = typename D::template type_at<I>;
  121|       |         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|       |            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|       |            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|  1.51k|         else {
  128|  1.51k|            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|  1.51k|         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|  1.51k|   }
_ZN3glz3getILm6ETkNS_12tuple_detail9indexableENS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|  1.64k|   {
  117|  1.64k|      using D = std::remove_cvref_t<Tup>;
  118|  1.64k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|  1.64k|         static_assert(I < D::N, "glz::get index is out of range");
  120|  1.64k|         using T = typename D::template type_at<I>;
  121|       |         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|       |            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|       |            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|  1.64k|         else {
  128|  1.64k|            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|  1.64k|         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|  1.64k|   }
_ZN3glz3getILm0ETkNS_12tuple_detail9indexableENS_5tupleIJRdEEEEEDcOT0_:
  116|  20.2k|   {
  117|  20.2k|      using D = std::remove_cvref_t<Tup>;
  118|  20.2k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|  20.2k|         static_assert(I < D::N, "glz::get index is out of range");
  120|  20.2k|         using T = typename D::template type_at<I>;
  121|       |         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|       |            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|       |            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|  20.2k|         else {
  128|  20.2k|            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|  20.2k|         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|  20.2k|   }
_ZN3glz3tieIJdEEENS_5tupleIJDpRT_EEES4_:
  325|  20.2k|   {
  326|  20.2k|      return {{{ts}...}};
  327|  20.2k|   }
_ZN3glz3getILm7ETkNS_12tuple_detail9indexableENS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|  3.41k|   {
  117|  3.41k|      using D = std::remove_cvref_t<Tup>;
  118|  3.41k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|  3.41k|         static_assert(I < D::N, "glz::get index is out of range");
  120|  3.41k|         using T = typename D::template type_at<I>;
  121|       |         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|       |            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|       |            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|  3.41k|         else {
  128|  3.41k|            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|  3.41k|         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|  3.41k|   }
_ZN3glz3getILm8ETkNS_12tuple_detail9indexableENS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|    108|   {
  117|    108|      using D = std::remove_cvref_t<Tup>;
  118|    108|      if constexpr (tuple_detail::is_tuple<D>) {
  119|    108|         static_assert(I < D::N, "glz::get index is out of range");
  120|    108|         using T = typename D::template type_at<I>;
  121|       |         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|       |            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|       |            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|    108|         else {
  128|    108|            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|    108|         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|    108|   }
_ZN3glz3getILm9ETkNS_12tuple_detail9indexableENS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|    145|   {
  117|    145|      using D = std::remove_cvref_t<Tup>;
  118|    145|      if constexpr (tuple_detail::is_tuple<D>) {
  119|    145|         static_assert(I < D::N, "glz::get index is out of range");
  120|    145|         using T = typename D::template type_at<I>;
  121|       |         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|       |            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|       |            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|    145|         else {
  128|    145|            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|    145|         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|    145|   }
_ZN3glz3getILm10ETkNS_12tuple_detail9indexableENS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|    290|   {
  117|    290|      using D = std::remove_cvref_t<Tup>;
  118|    290|      if constexpr (tuple_detail::is_tuple<D>) {
  119|    290|         static_assert(I < D::N, "glz::get index is out of range");
  120|    290|         using T = typename D::template type_at<I>;
  121|       |         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|       |            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|       |            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|    290|         else {
  128|    290|            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|    290|         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|    290|   }
_ZN3glz3getILm11ETkNS_12tuple_detail9indexableENS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|     52|   {
  117|     52|      using D = std::remove_cvref_t<Tup>;
  118|     52|      if constexpr (tuple_detail::is_tuple<D>) {
  119|     52|         static_assert(I < D::N, "glz::get index is out of range");
  120|     52|         using T = typename D::template type_at<I>;
  121|       |         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|       |            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|       |            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|     52|         else {
  128|     52|            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|     52|         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|     52|   }
_ZN3glz3getILm12ETkNS_12tuple_detail9indexableENS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|     62|   {
  117|     62|      using D = std::remove_cvref_t<Tup>;
  118|     62|      if constexpr (tuple_detail::is_tuple<D>) {
  119|     62|         static_assert(I < D::N, "glz::get index is out of range");
  120|     62|         using T = typename D::template type_at<I>;
  121|       |         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|       |            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|       |            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|     62|         else {
  128|     62|            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|     62|         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|     62|   }
_ZN3glz3getILm0ETkNS_12tuple_detail9indexableERNS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|   335k|   {
  117|   335k|      using D = std::remove_cvref_t<Tup>;
  118|   335k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   335k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   335k|         using T = typename D::template type_at<I>;
  121|   335k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   335k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   335k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   335k|   }
_ZN3glz3getILm1ETkNS_12tuple_detail9indexableERNS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|   335k|   {
  117|   335k|      using D = std::remove_cvref_t<Tup>;
  118|   335k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   335k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   335k|         using T = typename D::template type_at<I>;
  121|   335k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   335k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   335k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   335k|   }
_ZN3glz3getILm2ETkNS_12tuple_detail9indexableERNS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|   335k|   {
  117|   335k|      using D = std::remove_cvref_t<Tup>;
  118|   335k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   335k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   335k|         using T = typename D::template type_at<I>;
  121|   335k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   335k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   335k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   335k|   }
_ZN3glz3getILm0ETkNS_12tuple_detail9indexableERNS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEEEEDcOT0_:
  116|   335k|   {
  117|   335k|      using D = std::remove_cvref_t<Tup>;
  118|   335k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   335k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   335k|         using T = typename D::template type_at<I>;
  121|   335k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   335k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   335k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   335k|   }
_ZN3glz3getILm1ETkNS_12tuple_detail9indexableERNS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEEEEEDcOT0_:
  116|   335k|   {
  117|   335k|      using D = std::remove_cvref_t<Tup>;
  118|   335k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   335k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   335k|         using T = typename D::template type_at<I>;
  121|   335k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   335k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   335k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   335k|   }
_ZN3glz3getILm3ETkNS_12tuple_detail9indexableERNS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|   335k|   {
  117|   335k|      using D = std::remove_cvref_t<Tup>;
  118|   335k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   335k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   335k|         using T = typename D::template type_at<I>;
  121|   335k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   335k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   335k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   335k|   }
_ZN3glz3getILm4ETkNS_12tuple_detail9indexableERNS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|   335k|   {
  117|   335k|      using D = std::remove_cvref_t<Tup>;
  118|   335k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   335k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   335k|         using T = typename D::template type_at<I>;
  121|   335k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   335k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   335k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   335k|   }
_ZN3glz3getILm5ETkNS_12tuple_detail9indexableERNS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|   335k|   {
  117|   335k|      using D = std::remove_cvref_t<Tup>;
  118|   335k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   335k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   335k|         using T = typename D::template type_at<I>;
  121|   335k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   335k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   335k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   335k|   }
_ZN3glz3getILm6ETkNS_12tuple_detail9indexableERNS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|   335k|   {
  117|   335k|      using D = std::remove_cvref_t<Tup>;
  118|   335k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   335k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   335k|         using T = typename D::template type_at<I>;
  121|   335k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   335k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   335k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   335k|   }
_ZN3glz3getILm7ETkNS_12tuple_detail9indexableERNS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|   335k|   {
  117|   335k|      using D = std::remove_cvref_t<Tup>;
  118|   335k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   335k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   335k|         using T = typename D::template type_at<I>;
  121|   335k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   335k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   335k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   335k|   }
_ZN3glz3getILm8ETkNS_12tuple_detail9indexableERNS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|   335k|   {
  117|   335k|      using D = std::remove_cvref_t<Tup>;
  118|   335k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   335k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   335k|         using T = typename D::template type_at<I>;
  121|   335k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   335k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   335k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   335k|   }
_ZN3glz3getILm9ETkNS_12tuple_detail9indexableERNS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|   335k|   {
  117|   335k|      using D = std::remove_cvref_t<Tup>;
  118|   335k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   335k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   335k|         using T = typename D::template type_at<I>;
  121|   335k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   335k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   335k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   335k|   }
_ZN3glz3getILm10ETkNS_12tuple_detail9indexableERNS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|   335k|   {
  117|   335k|      using D = std::remove_cvref_t<Tup>;
  118|   335k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   335k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   335k|         using T = typename D::template type_at<I>;
  121|   335k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   335k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   335k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   335k|   }
_ZN3glz3getILm11ETkNS_12tuple_detail9indexableERNS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|   335k|   {
  117|   335k|      using D = std::remove_cvref_t<Tup>;
  118|   335k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   335k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   335k|         using T = typename D::template type_at<I>;
  121|   335k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   335k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   335k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   335k|   }
_ZN3glz3getILm12ETkNS_12tuple_detail9indexableERNS_5tupleIJRiRNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERN9repe_fuzz5pointERNSC_6nestedERNS4_6vectorIiNS8_IiEEEERNS4_3mapISA_iNS4_4lessISA_EENS8_INS4_4pairIKSA_iEEEEEERNS4_8optionalIdEERNS4_7variantIJSA_NSC_6amountEEEERNS4_8functionIFiiEEERNS11_IFSA_RSP_EEERNS11_IFSD_RKSD_EEERNS11_IFdRNSH_IdNS8_IdEEEEEEERNS11_IFvvEEEEEEEEDcOT0_:
  116|   335k|   {
  117|   335k|      using D = std::remove_cvref_t<Tup>;
  118|   335k|      if constexpr (tuple_detail::is_tuple<D>) {
  119|   335k|         static_assert(I < D::N, "glz::get index is out of range");
  120|   335k|         using T = typename D::template type_at<I>;
  121|   335k|         if constexpr (std::is_reference_v<Tup> || std::is_const_v<std::remove_reference_t<Tup>>) {
  122|       |            // An lvalue, or a const tuple of either value category: element access carries the
  123|       |            // constness of the tuple, except for elements that are themselves references.
  124|   335k|            using leaf = tuple_detail::match_const_t<std::remove_reference_t<Tup>, tuple_detail::elem<I, T>>;
  125|   335k|            return (static_cast<leaf&>(tup).value);
  126|       |         }
  127|       |         else {
  128|       |            return static_cast<T&&>(static_cast<tuple_detail::elem<I, T>&>(tup).value);
  129|       |         }
  130|       |      }
  131|       |      else {
  132|       |         return (static_cast<Tup&&>(tup)[I]);
  133|       |      }
  134|   335k|   }

_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEDnTkNS_13output_bufferENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOS9_RT1_:
   78|  20.5k|   {
   79|  20.5k|      context ctx{};
   80|  20.5k|      return write<Opts>(std::forward<T>(value), buffer, ctx);
   81|  20.5k|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEDnTkNS_13output_bufferENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEETkNS_10is_contextERNS_7contextEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSB_RT1_OT2_:
   18|  20.5k|   {
   19|  20.5k|      using traits = buffer_traits<std::remove_cvref_t<Buffer>>;
   20|       |
   21|  20.5k|      if constexpr (traits::is_resizable) {
   22|       |         // A buffer could be size 1, to ensure we have sufficient memory we can't just check `empty()`
   23|  20.5k|         if (buffer.size() < 2 * write_padding_bytes) {
  ------------------
  |  Branch (23:14): [True: 20.5k, False: 0]
  ------------------
   24|  20.5k|            buffer.resize(2 * write_padding_bytes);
   25|  20.5k|         }
   26|  20.5k|      }
   27|  20.5k|      size_t ix = 0; // overwrite index
   28|  20.5k|      to<Opts.format, std::remove_cvref_t<T>>::template op<Opts>(std::forward<T>(value), ctx, buffer, ix);
   29|       |
   30|  20.5k|      if (bool(ctx.error)) [[unlikely]] {
  ------------------
  |  Branch (30:11): [True: 0, False: 20.5k]
  ------------------
   31|      0|         return {ix, ctx.error, ctx.custom_error_message};
   32|      0|      }
   33|       |
   34|  20.5k|      traits::finalize(buffer, ix);
   35|  20.5k|      return {ix, error_code::none, ctx.custom_error_message};
   36|  20.5k|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERiTkNS_13output_bufferENSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSA_RT1_:
   78|    436|   {
   79|    436|      context ctx{};
   80|    436|      return write<Opts>(std::forward<T>(value), buffer, ctx);
   81|    436|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERiTkNS_13output_bufferENSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEETkNS_10is_contextERNS_7contextEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSC_RT1_OT2_:
   18|    436|   {
   19|    436|      using traits = buffer_traits<std::remove_cvref_t<Buffer>>;
   20|       |
   21|    436|      if constexpr (traits::is_resizable) {
   22|       |         // A buffer could be size 1, to ensure we have sufficient memory we can't just check `empty()`
   23|    436|         if (buffer.size() < 2 * write_padding_bytes) {
  ------------------
  |  Branch (23:14): [True: 436, False: 0]
  ------------------
   24|    436|            buffer.resize(2 * write_padding_bytes);
   25|    436|         }
   26|    436|      }
   27|    436|      size_t ix = 0; // overwrite index
   28|    436|      to<Opts.format, std::remove_cvref_t<T>>::template op<Opts>(std::forward<T>(value), ctx, buffer, ix);
   29|       |
   30|    436|      if (bool(ctx.error)) [[unlikely]] {
  ------------------
  |  Branch (30:11): [True: 0, False: 436]
  ------------------
   31|      0|         return {ix, ctx.error, ctx.custom_error_message};
   32|      0|      }
   33|       |
   34|    436|      traits::finalize(buffer, ix);
   35|    436|      return {ix, error_code::none, ctx.custom_error_message};
   36|    436|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEiTkNS_13output_bufferENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOS9_RT1_:
   78|    375|   {
   79|    375|      context ctx{};
   80|    375|      return write<Opts>(std::forward<T>(value), buffer, ctx);
   81|    375|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEiTkNS_13output_bufferENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEETkNS_10is_contextERNS_7contextEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSB_RT1_OT2_:
   18|    375|   {
   19|    375|      using traits = buffer_traits<std::remove_cvref_t<Buffer>>;
   20|       |
   21|    375|      if constexpr (traits::is_resizable) {
   22|       |         // A buffer could be size 1, to ensure we have sufficient memory we can't just check `empty()`
   23|    375|         if (buffer.size() < 2 * write_padding_bytes) {
  ------------------
  |  Branch (23:14): [True: 375, False: 0]
  ------------------
   24|    375|            buffer.resize(2 * write_padding_bytes);
   25|    375|         }
   26|    375|      }
   27|    375|      size_t ix = 0; // overwrite index
   28|    375|      to<Opts.format, std::remove_cvref_t<T>>::template op<Opts>(std::forward<T>(value), ctx, buffer, ix);
   29|       |
   30|    375|      if (bool(ctx.error)) [[unlikely]] {
  ------------------
  |  Branch (30:11): [True: 0, False: 375]
  ------------------
   31|      0|         return {ix, ctx.error, ctx.custom_error_message};
   32|      0|      }
   33|       |
   34|    375|      traits::finalize(buffer, ix);
   35|    375|      return {ix, error_code::none, ctx.custom_error_message};
   36|    375|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz5pointETkNS_13output_bufferENSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSB_RT1_:
   78|    120|   {
   79|    120|      context ctx{};
   80|    120|      return write<Opts>(std::forward<T>(value), buffer, ctx);
   81|    120|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz5pointETkNS_13output_bufferENSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEETkNS_10is_contextERNS_7contextEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSD_RT1_OT2_:
   18|    120|   {
   19|    120|      using traits = buffer_traits<std::remove_cvref_t<Buffer>>;
   20|       |
   21|    120|      if constexpr (traits::is_resizable) {
   22|       |         // A buffer could be size 1, to ensure we have sufficient memory we can't just check `empty()`
   23|    120|         if (buffer.size() < 2 * write_padding_bytes) {
  ------------------
  |  Branch (23:14): [True: 120, False: 0]
  ------------------
   24|    120|            buffer.resize(2 * write_padding_bytes);
   25|    120|         }
   26|    120|      }
   27|    120|      size_t ix = 0; // overwrite index
   28|    120|      to<Opts.format, std::remove_cvref_t<T>>::template op<Opts>(std::forward<T>(value), ctx, buffer, ix);
   29|       |
   30|    120|      if (bool(ctx.error)) [[unlikely]] {
  ------------------
  |  Branch (30:11): [True: 0, False: 120]
  ------------------
   31|      0|         return {ix, ctx.error, ctx.custom_error_message};
   32|      0|      }
   33|       |
   34|    120|      traits::finalize(buffer, ix);
   35|    120|      return {ix, error_code::none, ctx.custom_error_message};
   36|    120|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEETkNS_13output_bufferES8_Q15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOS9_RT1_:
   78|    269|   {
   79|    269|      context ctx{};
   80|    269|      return write<Opts>(std::forward<T>(value), buffer, ctx);
   81|    269|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEENSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEETkNS_13output_bufferES8_TkNS_10is_contextERNS_7contextEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSB_RT1_OT2_:
   18|    269|   {
   19|    269|      using traits = buffer_traits<std::remove_cvref_t<Buffer>>;
   20|       |
   21|    269|      if constexpr (traits::is_resizable) {
   22|       |         // A buffer could be size 1, to ensure we have sufficient memory we can't just check `empty()`
   23|    269|         if (buffer.size() < 2 * write_padding_bytes) {
  ------------------
  |  Branch (23:14): [True: 269, False: 0]
  ------------------
   24|    269|            buffer.resize(2 * write_padding_bytes);
   25|    269|         }
   26|    269|      }
   27|    269|      size_t ix = 0; // overwrite index
   28|    269|      to<Opts.format, std::remove_cvref_t<T>>::template op<Opts>(std::forward<T>(value), ctx, buffer, ix);
   29|       |
   30|    269|      if (bool(ctx.error)) [[unlikely]] {
  ------------------
  |  Branch (30:11): [True: 0, False: 269]
  ------------------
   31|      0|         return {ix, ctx.error, ctx.custom_error_message};
   32|      0|      }
   33|       |
   34|    269|      traits::finalize(buffer, ix);
   35|    269|      return {ix, error_code::none, ctx.custom_error_message};
   36|    269|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz8fuzz_apiETkNS_13output_bufferENSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSC_RT1_:
   78|     62|   {
   79|     62|      context ctx{};
   80|     62|      return write<Opts>(std::forward<T>(value), buffer, ctx);
   81|     62|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz8fuzz_apiETkNS_13output_bufferENSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEETkNS_10is_contextERNS_7contextEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSE_RT1_OT2_:
   18|     62|   {
   19|     62|      using traits = buffer_traits<std::remove_cvref_t<Buffer>>;
   20|       |
   21|     62|      if constexpr (traits::is_resizable) {
   22|       |         // A buffer could be size 1, to ensure we have sufficient memory we can't just check `empty()`
   23|     62|         if (buffer.size() < 2 * write_padding_bytes) {
  ------------------
  |  Branch (23:14): [True: 62, False: 0]
  ------------------
   24|     62|            buffer.resize(2 * write_padding_bytes);
   25|     62|         }
   26|     62|      }
   27|     62|      size_t ix = 0; // overwrite index
   28|     62|      to<Opts.format, std::remove_cvref_t<T>>::template op<Opts>(std::forward<T>(value), ctx, buffer, ix);
   29|       |
   30|     62|      if (bool(ctx.error)) [[unlikely]] {
  ------------------
  |  Branch (30:11): [True: 0, False: 62]
  ------------------
   31|      0|         return {ix, ctx.error, ctx.custom_error_message};
   32|      0|      }
   33|       |
   34|     62|      traits::finalize(buffer, ix);
   35|     62|      return {ix, error_code::none, ctx.custom_error_message};
   36|     62|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEETkNS_13output_bufferES8_Q15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSA_RT1_:
   78|    395|   {
   79|    395|      context ctx{};
   80|    395|      return write<Opts>(std::forward<T>(value), buffer, ctx);
   81|    395|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEETkNS_13output_bufferES8_TkNS_10is_contextERNS_7contextEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSC_RT1_OT2_:
   18|    395|   {
   19|    395|      using traits = buffer_traits<std::remove_cvref_t<Buffer>>;
   20|       |
   21|    395|      if constexpr (traits::is_resizable) {
   22|       |         // A buffer could be size 1, to ensure we have sufficient memory we can't just check `empty()`
   23|    395|         if (buffer.size() < 2 * write_padding_bytes) {
  ------------------
  |  Branch (23:14): [True: 395, False: 0]
  ------------------
   24|    395|            buffer.resize(2 * write_padding_bytes);
   25|    395|         }
   26|    395|      }
   27|    395|      size_t ix = 0; // overwrite index
   28|    395|      to<Opts.format, std::remove_cvref_t<T>>::template op<Opts>(std::forward<T>(value), ctx, buffer, ix);
   29|       |
   30|    395|      if (bool(ctx.error)) [[unlikely]] {
  ------------------
  |  Branch (30:11): [True: 0, False: 395]
  ------------------
   31|      0|         return {ix, ctx.error, ctx.custom_error_message};
   32|      0|      }
   33|       |
   34|    395|      traits::finalize(buffer, ix);
   35|    395|      return {ix, error_code::none, ctx.custom_error_message};
   36|    395|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERdTkNS_13output_bufferENSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSA_RT1_:
   78|    535|   {
   79|    535|      context ctx{};
   80|    535|      return write<Opts>(std::forward<T>(value), buffer, ctx);
   81|    535|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERdTkNS_13output_bufferENSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEETkNS_10is_contextERNS_7contextEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSC_RT1_OT2_:
   18|    535|   {
   19|    535|      using traits = buffer_traits<std::remove_cvref_t<Buffer>>;
   20|       |
   21|    535|      if constexpr (traits::is_resizable) {
   22|       |         // A buffer could be size 1, to ensure we have sufficient memory we can't just check `empty()`
   23|    535|         if (buffer.size() < 2 * write_padding_bytes) {
  ------------------
  |  Branch (23:14): [True: 535, False: 0]
  ------------------
   24|    535|            buffer.resize(2 * write_padding_bytes);
   25|    535|         }
   26|    535|      }
   27|    535|      size_t ix = 0; // overwrite index
   28|    535|      to<Opts.format, std::remove_cvref_t<T>>::template op<Opts>(std::forward<T>(value), ctx, buffer, ix);
   29|       |
   30|    535|      if (bool(ctx.error)) [[unlikely]] {
  ------------------
  |  Branch (30:11): [True: 0, False: 535]
  ------------------
   31|      0|         return {ix, ctx.error, ctx.custom_error_message};
   32|      0|      }
   33|       |
   34|    535|      traits::finalize(buffer, ix);
   35|    535|      return {ix, error_code::none, ctx.custom_error_message};
   36|    535|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz5pointETkNS_13output_bufferENSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSC_RT1_:
   78|    119|   {
   79|    119|      context ctx{};
   80|    119|      return write<Opts>(std::forward<T>(value), buffer, ctx);
   81|    119|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz5pointETkNS_13output_bufferENSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEETkNS_10is_contextERNS_7contextEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSE_RT1_OT2_:
   18|    119|   {
   19|    119|      using traits = buffer_traits<std::remove_cvref_t<Buffer>>;
   20|       |
   21|    119|      if constexpr (traits::is_resizable) {
   22|       |         // A buffer could be size 1, to ensure we have sufficient memory we can't just check `empty()`
   23|    119|         if (buffer.size() < 2 * write_padding_bytes) {
  ------------------
  |  Branch (23:14): [True: 119, False: 0]
  ------------------
   24|    119|            buffer.resize(2 * write_padding_bytes);
   25|    119|         }
   26|    119|      }
   27|    119|      size_t ix = 0; // overwrite index
   28|    119|      to<Opts.format, std::remove_cvref_t<T>>::template op<Opts>(std::forward<T>(value), ctx, buffer, ix);
   29|       |
   30|    119|      if (bool(ctx.error)) [[unlikely]] {
  ------------------
  |  Branch (30:11): [True: 0, False: 119]
  ------------------
   31|      0|         return {ix, ctx.error, ctx.custom_error_message};
   32|      0|      }
   33|       |
   34|    119|      traits::finalize(buffer, ix);
   35|    119|      return {ix, error_code::none, ctx.custom_error_message};
   36|    119|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz6nestedETkNS_13output_bufferENSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSC_RT1_:
   78|     58|   {
   79|     58|      context ctx{};
   80|     58|      return write<Opts>(std::forward<T>(value), buffer, ctx);
   81|     58|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz6nestedETkNS_13output_bufferENSt3__112basic_stringIcNS5_11char_traitsIcEENS5_9allocatorIcEEEETkNS_10is_contextERNS_7contextEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSE_RT1_OT2_:
   18|     58|   {
   19|     58|      using traits = buffer_traits<std::remove_cvref_t<Buffer>>;
   20|       |
   21|     58|      if constexpr (traits::is_resizable) {
   22|       |         // A buffer could be size 1, to ensure we have sufficient memory we can't just check `empty()`
   23|     58|         if (buffer.size() < 2 * write_padding_bytes) {
  ------------------
  |  Branch (23:14): [True: 58, False: 0]
  ------------------
   24|     58|            buffer.resize(2 * write_padding_bytes);
   25|     58|         }
   26|     58|      }
   27|     58|      size_t ix = 0; // overwrite index
   28|     58|      to<Opts.format, std::remove_cvref_t<T>>::template op<Opts>(std::forward<T>(value), ctx, buffer, ix);
   29|       |
   30|     58|      if (bool(ctx.error)) [[unlikely]] {
  ------------------
  |  Branch (30:11): [True: 0, False: 58]
  ------------------
   31|      0|         return {ix, ctx.error, ctx.custom_error_message};
   32|      0|      }
   33|       |
   34|     58|      traits::finalize(buffer, ix);
   35|     58|      return {ix, error_code::none, ctx.custom_error_message};
   36|     58|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__16vectorIiNS2_9allocatorIiEEEETkNS_13output_bufferENS2_12basic_stringIcNS2_11char_traitsIcEENS4_IcEEEEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSD_RT1_:
   78|     58|   {
   79|     58|      context ctx{};
   80|     58|      return write<Opts>(std::forward<T>(value), buffer, ctx);
   81|     58|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__16vectorIiNS2_9allocatorIiEEEETkNS_13output_bufferENS2_12basic_stringIcNS2_11char_traitsIcEENS4_IcEEEETkNS_10is_contextERNS_7contextEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSF_RT1_OT2_:
   18|     58|   {
   19|     58|      using traits = buffer_traits<std::remove_cvref_t<Buffer>>;
   20|       |
   21|     58|      if constexpr (traits::is_resizable) {
   22|       |         // A buffer could be size 1, to ensure we have sufficient memory we can't just check `empty()`
   23|     58|         if (buffer.size() < 2 * write_padding_bytes) {
  ------------------
  |  Branch (23:14): [True: 58, False: 0]
  ------------------
   24|     58|            buffer.resize(2 * write_padding_bytes);
   25|     58|         }
   26|     58|      }
   27|     58|      size_t ix = 0; // overwrite index
   28|     58|      to<Opts.format, std::remove_cvref_t<T>>::template op<Opts>(std::forward<T>(value), ctx, buffer, ix);
   29|       |
   30|     58|      if (bool(ctx.error)) [[unlikely]] {
  ------------------
  |  Branch (30:11): [True: 0, False: 58]
  ------------------
   31|      0|         return {ix, ctx.error, ctx.custom_error_message};
   32|      0|      }
   33|       |
   34|     58|      traits::finalize(buffer, ix);
   35|     58|      return {ix, error_code::none, ctx.custom_error_message};
   36|     58|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__13mapINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEiNS2_4lessIS9_EENS7_INS2_4pairIKS9_iEEEEEETkNS_13output_bufferES9_Q15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSI_RT1_:
   78|     58|   {
   79|     58|      context ctx{};
   80|     58|      return write<Opts>(std::forward<T>(value), buffer, ctx);
   81|     58|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__13mapINS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEiNS2_4lessIS9_EENS7_INS2_4pairIKS9_iEEEEEETkNS_13output_bufferES9_TkNS_10is_contextERNS_7contextEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSK_RT1_OT2_:
   18|     58|   {
   19|     58|      using traits = buffer_traits<std::remove_cvref_t<Buffer>>;
   20|       |
   21|     58|      if constexpr (traits::is_resizable) {
   22|       |         // A buffer could be size 1, to ensure we have sufficient memory we can't just check `empty()`
   23|     58|         if (buffer.size() < 2 * write_padding_bytes) {
  ------------------
  |  Branch (23:14): [True: 58, False: 0]
  ------------------
   24|     58|            buffer.resize(2 * write_padding_bytes);
   25|     58|         }
   26|     58|      }
   27|     58|      size_t ix = 0; // overwrite index
   28|     58|      to<Opts.format, std::remove_cvref_t<T>>::template op<Opts>(std::forward<T>(value), ctx, buffer, ix);
   29|       |
   30|     58|      if (bool(ctx.error)) [[unlikely]] {
  ------------------
  |  Branch (30:11): [True: 0, False: 58]
  ------------------
   31|      0|         return {ix, ctx.error, ctx.custom_error_message};
   32|      0|      }
   33|       |
   34|     58|      traits::finalize(buffer, ix);
   35|     58|      return {ix, error_code::none, ctx.custom_error_message};
   36|     58|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__18optionalIdEETkNS_13output_bufferENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSC_RT1_:
   78|     58|   {
   79|     58|      context ctx{};
   80|     58|      return write<Opts>(std::forward<T>(value), buffer, ctx);
   81|     58|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__18optionalIdEETkNS_13output_bufferENS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEETkNS_10is_contextERNS_7contextEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSE_RT1_OT2_:
   18|     58|   {
   19|     58|      using traits = buffer_traits<std::remove_cvref_t<Buffer>>;
   20|       |
   21|     58|      if constexpr (traits::is_resizable) {
   22|       |         // A buffer could be size 1, to ensure we have sufficient memory we can't just check `empty()`
   23|     58|         if (buffer.size() < 2 * write_padding_bytes) {
  ------------------
  |  Branch (23:14): [True: 58, False: 0]
  ------------------
   24|     58|            buffer.resize(2 * write_padding_bytes);
   25|     58|         }
   26|     58|      }
   27|     58|      size_t ix = 0; // overwrite index
   28|     58|      to<Opts.format, std::remove_cvref_t<T>>::template op<Opts>(std::forward<T>(value), ctx, buffer, ix);
   29|       |
   30|     58|      if (bool(ctx.error)) [[unlikely]] {
  ------------------
  |  Branch (30:11): [True: 0, False: 58]
  ------------------
   31|      0|         return {ix, ctx.error, ctx.custom_error_message};
   32|      0|      }
   33|       |
   34|     58|      traits::finalize(buffer, ix);
   35|     58|      return {ix, error_code::none, ctx.custom_error_message};
   36|     58|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__17variantIJNS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEN9repe_fuzz6amountEEEETkNS_13output_bufferES9_Q15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSE_RT1_:
   78|     58|   {
   79|     58|      context ctx{};
   80|     58|      return write<Opts>(std::forward<T>(value), buffer, ctx);
   81|     58|   }
_ZN3glz5writeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__17variantIJNS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEN9repe_fuzz6amountEEEETkNS_13output_bufferES9_TkNS_10is_contextERNS_7contextEQ15write_supportedIT0_XdtT_6formatEEEENS_9error_ctxEOSG_RT1_OT2_:
   18|     58|   {
   19|     58|      using traits = buffer_traits<std::remove_cvref_t<Buffer>>;
   20|       |
   21|     58|      if constexpr (traits::is_resizable) {
   22|       |         // A buffer could be size 1, to ensure we have sufficient memory we can't just check `empty()`
   23|     58|         if (buffer.size() < 2 * write_padding_bytes) {
  ------------------
  |  Branch (23:14): [True: 58, False: 0]
  ------------------
   24|     58|            buffer.resize(2 * write_padding_bytes);
   25|     58|         }
   26|     58|      }
   27|     58|      size_t ix = 0; // overwrite index
   28|     58|      to<Opts.format, std::remove_cvref_t<T>>::template op<Opts>(std::forward<T>(value), ctx, buffer, ix);
   29|       |
   30|     58|      if (bool(ctx.error)) [[unlikely]] {
  ------------------
  |  Branch (30:11): [True: 0, False: 58]
  ------------------
   31|      0|         return {ix, ctx.error, ctx.custom_error_message};
   32|      0|      }
   33|       |
   34|     58|      traits::finalize(buffer, ix);
   35|     58|      return {ix, error_code::none, ctx.custom_error_message};
   36|     58|   }

_ZN3glz11write_chars2opITnDaXtlNS_9opts_sizeEtlNS_4optsELj10ELb1ELb0ELb1ELb1EEEERNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEETkNS_5num_tERKmTkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_:
  205|   304k|      {
  206|       |         /*if constexpr (std::same_as<std::decay_t<B>, std::string>) {
  207|       |            // more efficient strings in C++23:
  208|       |          https://en.cppreference.com/w/cpp/string/basic_string/resize_and_overwrite
  209|       |          }*/
  210|       |
  211|       |         // https://stackoverflow.com/questions/1701055/what-is-the-maximum-length-in-chars-needed-to-represent-any-double-value
  212|       |         // maximum length for a double should be 24 chars, we use 64 to be sufficient for float128_t
  213|   304k|         if constexpr (resizable<B> && not check_write_unchecked(Opts)) {
  214|   304k|            if (const auto k = ix + 64; k > b.size()) {
  ------------------
  |  Branch (214:41): [True: 0, False: 304k]
  ------------------
  215|      0|               grow_buffer(b, k);
  216|      0|            }
  217|   304k|         }
  218|       |
  219|   304k|         using V = std::decay_t<decltype(value)>;
  220|       |
  221|       |         if constexpr (std::floating_point<V>) {
  222|       |            using opts_type = std::decay_t<decltype(Opts)>;
  223|       |            constexpr bool use_float_format = requires { opts_type::float_format; };
  224|       |
  225|       |            // User-specified float_format takes priority over all other options
  226|       |            if constexpr (use_float_format && is_any_of<V, float, double>) {
  227|       |#if GLZ_USE_STD_FORMAT_FLOAT
  228|       |               // Use std::format with user-provided format string (e.g., "{:.2f}")
  229|       |               // Format string is validated at compile-time via std::format_string
  230|       |               constexpr auto fmt = std::format_string<V>{opts_type::float_format};
  231|       |
  232|       |               if constexpr (check_write_unchecked(Opts)) {
  233|       |                  // Caller guarantees buffer has enough space
  234|       |                  const auto start = reinterpret_cast<char*>(&b[ix]);
  235|       |                  auto result = std::format_to(start, fmt, V(value));
  236|       |                  ix += size_t(result - start);
  237|       |               }
  238|       |               else {
  239|       |                  // format_to_n writes up to 'available' chars and returns total size needed.
  240|       |                  // Common case: output fits in pre-allocated buffer (single pass).
  241|       |                  // Rare case: output exceeds buffer (e.g., "{:.100f}"), requires resize.
  242|       |                  const auto start = reinterpret_cast<char*>(&b[ix]);
  243|       |                  const auto available = b.size() - ix;
  244|       |                  auto [out, size] = std::format_to_n(start, available, fmt, V(value));
  245|       |
  246|       |                  if (static_cast<size_t>(size) > available) {
  247|       |                     // Output was truncated - size tells us exactly how much space we need
  248|       |                     if constexpr (resizable<B>) {
  249|       |                        grow_buffer(b, ix + size);
  250|       |                        std::format_to(reinterpret_cast<char*>(&b[ix]), fmt, V(value));
  251|       |                     }
  252|       |                     else {
  253|       |                        ctx.error = error_code::unexpected_end;
  254|       |                        return;
  255|       |                     }
  256|       |                  }
  257|       |                  ix += size;
  258|       |               }
  259|       |#else
  260|       |               // snprintf fallback for platforms without std::format float support (e.g., iOS < 16.3)
  261|       |               // Convert std::format spec to printf format at compile time
  262|       |               constexpr auto printf_fmt = detail::to_printf_fmt(opts_type::float_format);
  263|       |
  264|       |               const auto start = reinterpret_cast<char*>(&b[ix]);
  265|       |               const auto available = check_write_unchecked(Opts) ? size_t(64) : (b.size() - ix);
  266|       |
  267|       |               // snprintf returns chars that would be written (excluding null), or negative on error
  268|       |               const int len = std::snprintf(start, available, printf_fmt.data, static_cast<double>(value));
  269|       |
  270|       |               if (len < 0) {
  271|       |                  ctx.error = error_code::unexpected_end;
  272|       |                  return;
  273|       |               }
  274|       |
  275|       |               if (static_cast<size_t>(len) >= available) {
  276|       |                  // Output was truncated, need to resize and retry
  277|       |                  if constexpr (resizable<B> && not check_write_unchecked(Opts)) {
  278|       |                     grow_buffer(b, ix + static_cast<size_t>(len) + 1);
  279|       |                     std::snprintf(reinterpret_cast<char*>(&b[ix]), static_cast<size_t>(len) + 1, printf_fmt.data,
  280|       |                                   static_cast<double>(value));
  281|       |                  }
  282|       |                  else {
  283|       |                     ctx.error = error_code::unexpected_end;
  284|       |                     return;
  285|       |                  }
  286|       |               }
  287|       |               ix += static_cast<size_t>(len);
  288|       |#endif
  289|       |            }
  290|       |            else if constexpr (uint8_t(check_float_max_write_precision(Opts)) > 0 &&
  291|       |                               uint8_t(check_float_max_write_precision(Opts)) < sizeof(V)) {
  292|       |               // we cast to a lower precision floating point value before writing out
  293|       |               if constexpr (uint8_t(check_float_max_write_precision(Opts)) == 8) {
  294|       |                  const auto reduced = static_cast<double>(value);
  295|       |                  const auto start = reinterpret_cast<char*>(&b[ix]);
  296|       |                  const auto end = glz::to_chars(start, reduced);
  297|       |                  ix += size_t(end - start);
  298|       |               }
  299|       |               else if constexpr (uint8_t(check_float_max_write_precision(Opts)) == 4) {
  300|       |                  const auto reduced = static_cast<float>(value);
  301|       |                  const auto start = reinterpret_cast<char*>(&b[ix]);
  302|       |                  const auto end = glz::to_chars(start, reduced);
  303|       |                  ix += size_t(end - start);
  304|       |               }
  305|       |               else {
  306|       |                  static_assert(false_v<V>, "invalid float_max_write_precision");
  307|       |               }
  308|       |            }
  309|       |            // Size optimization: pass OptSize=true so the ~17KB pow-10 lookup
  310|       |            // tables are dropped (recomputed on the fly). Much faster than the
  311|       |            // old simple_float::to_chars path at essentially the same footprint.
  312|       |            // See discussion #2519.
  313|       |            else if constexpr (is_size_optimized(Opts) && is_any_of<V, float, double>) {
  314|       |               const auto start = reinterpret_cast<char*>(&b[ix]);
  315|       |               const auto end = glz::to_chars<V, /*OptSize=*/true>(start, V(value));
  316|       |               ix += size_t(end - start);
  317|       |            }
  318|       |            else if constexpr (is_any_of<V, float, double>) {
  319|       |               const auto start = reinterpret_cast<char*>(&b[ix]);
  320|       |               const auto end = glz::to_chars(start, value);
  321|       |               ix += size_t(end - start);
  322|       |            }
  323|       |// float128_t requires std::to_chars for floating-point, unavailable on older Apple platforms (iOS < 16.3)
  324|       |#if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT
  325|       |            else if constexpr (is_float128<V>) {
  326|       |               const auto start = reinterpret_cast<char*>(&b[ix]);
  327|       |               const auto [ptr, ec] = std::to_chars(start, &b[0] + b.size(), value, std::chars_format::general);
  328|       |               if (ec != std::errc()) {
  329|       |                  ctx.error = error_code::unexpected_end;
  330|       |                  return;
  331|       |               }
  332|       |               ix += size_t(ptr - start);
  333|       |            }
  334|       |#endif
  335|       |            else {
  336|       |               static_assert(false_v<V>, "type is not supported");
  337|       |            }
  338|       |         }
  339|       |         else if constexpr (is_any_of<V, int8_t, uint8_t, int16_t, uint16_t>) {
  340|       |            // Small integers: always use to_chars (400B tables)
  341|       |            // The 40KB digit_quads table doesn't help for these small ranges
  342|       |            const auto start = reinterpret_cast<char*>(&b[ix]);
  343|       |            const auto end = glz::to_chars(start, value);
  344|       |            ix += size_t(end - start);
  345|       |         }
  346|   304k|         else if constexpr (is_any_of<V, int32_t, uint32_t, int64_t, uint64_t>) {
  347|   304k|            const auto start = reinterpret_cast<char*>(&b[ix]);
  348|   304k|            if constexpr (is_size_optimized(Opts)) {
  349|       |               // Size mode: use glz::to_chars (400B lookup tables)
  350|   304k|               const auto end = glz::to_chars(start, value);
  351|   304k|               ix += size_t(end - start);
  352|       |            }
  353|       |            else {
  354|       |               // Normal mode: use to_chars_40kb (40KB digit_quads table)
  355|       |               const auto end = glz::to_chars_40kb(start, value);
  356|       |               ix += size_t(end - start);
  357|       |            }
  358|       |         }
  359|       |         else if constexpr (std::integral<V>) {
  360|       |            // Handle other integral types (char, wchar_t, etc.) by casting to sized types
  361|       |            using X = std::decay_t<decltype(sized_integer_conversion<V>())>;
  362|       |            const auto start = reinterpret_cast<char*>(&b[ix]);
  363|       |            if constexpr (is_size_optimized(Opts)) {
  364|       |               // Size mode: use glz::to_chars (400B lookup tables)
  365|       |               const auto end = glz::to_chars(start, static_cast<X>(value));
  366|       |               ix += size_t(end - start);
  367|       |            }
  368|       |            else {
  369|       |               // Normal mode: use to_chars_40kb
  370|       |               const auto end = glz::to_chars_40kb(start, static_cast<X>(value));
  371|       |               ix += size_t(end - start);
  372|       |            }
  373|       |         }
  374|       |         else {
  375|       |            static_assert(false_v<V>, "type is not supported");
  376|       |         }
  377|   304k|      }
_ZN3glz11write_chars2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj128EEERNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEETkNS_5num_tERiTkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_:
  205|    993|      {
  206|       |         /*if constexpr (std::same_as<std::decay_t<B>, std::string>) {
  207|       |            // more efficient strings in C++23:
  208|       |          https://en.cppreference.com/w/cpp/string/basic_string/resize_and_overwrite
  209|       |          }*/
  210|       |
  211|       |         // https://stackoverflow.com/questions/1701055/what-is-the-maximum-length-in-chars-needed-to-represent-any-double-value
  212|       |         // maximum length for a double should be 24 chars, we use 64 to be sufficient for float128_t
  213|       |         if constexpr (resizable<B> && not check_write_unchecked(Opts)) {
  214|       |            if (const auto k = ix + 64; k > b.size()) {
  215|       |               grow_buffer(b, k);
  216|       |            }
  217|       |         }
  218|       |
  219|    993|         using V = std::decay_t<decltype(value)>;
  220|       |
  221|       |         if constexpr (std::floating_point<V>) {
  222|       |            using opts_type = std::decay_t<decltype(Opts)>;
  223|       |            constexpr bool use_float_format = requires { opts_type::float_format; };
  224|       |
  225|       |            // User-specified float_format takes priority over all other options
  226|       |            if constexpr (use_float_format && is_any_of<V, float, double>) {
  227|       |#if GLZ_USE_STD_FORMAT_FLOAT
  228|       |               // Use std::format with user-provided format string (e.g., "{:.2f}")
  229|       |               // Format string is validated at compile-time via std::format_string
  230|       |               constexpr auto fmt = std::format_string<V>{opts_type::float_format};
  231|       |
  232|       |               if constexpr (check_write_unchecked(Opts)) {
  233|       |                  // Caller guarantees buffer has enough space
  234|       |                  const auto start = reinterpret_cast<char*>(&b[ix]);
  235|       |                  auto result = std::format_to(start, fmt, V(value));
  236|       |                  ix += size_t(result - start);
  237|       |               }
  238|       |               else {
  239|       |                  // format_to_n writes up to 'available' chars and returns total size needed.
  240|       |                  // Common case: output fits in pre-allocated buffer (single pass).
  241|       |                  // Rare case: output exceeds buffer (e.g., "{:.100f}"), requires resize.
  242|       |                  const auto start = reinterpret_cast<char*>(&b[ix]);
  243|       |                  const auto available = b.size() - ix;
  244|       |                  auto [out, size] = std::format_to_n(start, available, fmt, V(value));
  245|       |
  246|       |                  if (static_cast<size_t>(size) > available) {
  247|       |                     // Output was truncated - size tells us exactly how much space we need
  248|       |                     if constexpr (resizable<B>) {
  249|       |                        grow_buffer(b, ix + size);
  250|       |                        std::format_to(reinterpret_cast<char*>(&b[ix]), fmt, V(value));
  251|       |                     }
  252|       |                     else {
  253|       |                        ctx.error = error_code::unexpected_end;
  254|       |                        return;
  255|       |                     }
  256|       |                  }
  257|       |                  ix += size;
  258|       |               }
  259|       |#else
  260|       |               // snprintf fallback for platforms without std::format float support (e.g., iOS < 16.3)
  261|       |               // Convert std::format spec to printf format at compile time
  262|       |               constexpr auto printf_fmt = detail::to_printf_fmt(opts_type::float_format);
  263|       |
  264|       |               const auto start = reinterpret_cast<char*>(&b[ix]);
  265|       |               const auto available = check_write_unchecked(Opts) ? size_t(64) : (b.size() - ix);
  266|       |
  267|       |               // snprintf returns chars that would be written (excluding null), or negative on error
  268|       |               const int len = std::snprintf(start, available, printf_fmt.data, static_cast<double>(value));
  269|       |
  270|       |               if (len < 0) {
  271|       |                  ctx.error = error_code::unexpected_end;
  272|       |                  return;
  273|       |               }
  274|       |
  275|       |               if (static_cast<size_t>(len) >= available) {
  276|       |                  // Output was truncated, need to resize and retry
  277|       |                  if constexpr (resizable<B> && not check_write_unchecked(Opts)) {
  278|       |                     grow_buffer(b, ix + static_cast<size_t>(len) + 1);
  279|       |                     std::snprintf(reinterpret_cast<char*>(&b[ix]), static_cast<size_t>(len) + 1, printf_fmt.data,
  280|       |                                   static_cast<double>(value));
  281|       |                  }
  282|       |                  else {
  283|       |                     ctx.error = error_code::unexpected_end;
  284|       |                     return;
  285|       |                  }
  286|       |               }
  287|       |               ix += static_cast<size_t>(len);
  288|       |#endif
  289|       |            }
  290|       |            else if constexpr (uint8_t(check_float_max_write_precision(Opts)) > 0 &&
  291|       |                               uint8_t(check_float_max_write_precision(Opts)) < sizeof(V)) {
  292|       |               // we cast to a lower precision floating point value before writing out
  293|       |               if constexpr (uint8_t(check_float_max_write_precision(Opts)) == 8) {
  294|       |                  const auto reduced = static_cast<double>(value);
  295|       |                  const auto start = reinterpret_cast<char*>(&b[ix]);
  296|       |                  const auto end = glz::to_chars(start, reduced);
  297|       |                  ix += size_t(end - start);
  298|       |               }
  299|       |               else if constexpr (uint8_t(check_float_max_write_precision(Opts)) == 4) {
  300|       |                  const auto reduced = static_cast<float>(value);
  301|       |                  const auto start = reinterpret_cast<char*>(&b[ix]);
  302|       |                  const auto end = glz::to_chars(start, reduced);
  303|       |                  ix += size_t(end - start);
  304|       |               }
  305|       |               else {
  306|       |                  static_assert(false_v<V>, "invalid float_max_write_precision");
  307|       |               }
  308|       |            }
  309|       |            // Size optimization: pass OptSize=true so the ~17KB pow-10 lookup
  310|       |            // tables are dropped (recomputed on the fly). Much faster than the
  311|       |            // old simple_float::to_chars path at essentially the same footprint.
  312|       |            // See discussion #2519.
  313|       |            else if constexpr (is_size_optimized(Opts) && is_any_of<V, float, double>) {
  314|       |               const auto start = reinterpret_cast<char*>(&b[ix]);
  315|       |               const auto end = glz::to_chars<V, /*OptSize=*/true>(start, V(value));
  316|       |               ix += size_t(end - start);
  317|       |            }
  318|       |            else if constexpr (is_any_of<V, float, double>) {
  319|       |               const auto start = reinterpret_cast<char*>(&b[ix]);
  320|       |               const auto end = glz::to_chars(start, value);
  321|       |               ix += size_t(end - start);
  322|       |            }
  323|       |// float128_t requires std::to_chars for floating-point, unavailable on older Apple platforms (iOS < 16.3)
  324|       |#if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT
  325|       |            else if constexpr (is_float128<V>) {
  326|       |               const auto start = reinterpret_cast<char*>(&b[ix]);
  327|       |               const auto [ptr, ec] = std::to_chars(start, &b[0] + b.size(), value, std::chars_format::general);
  328|       |               if (ec != std::errc()) {
  329|       |                  ctx.error = error_code::unexpected_end;
  330|       |                  return;
  331|       |               }
  332|       |               ix += size_t(ptr - start);
  333|       |            }
  334|       |#endif
  335|       |            else {
  336|       |               static_assert(false_v<V>, "type is not supported");
  337|       |            }
  338|       |         }
  339|       |         else if constexpr (is_any_of<V, int8_t, uint8_t, int16_t, uint16_t>) {
  340|       |            // Small integers: always use to_chars (400B tables)
  341|       |            // The 40KB digit_quads table doesn't help for these small ranges
  342|       |            const auto start = reinterpret_cast<char*>(&b[ix]);
  343|       |            const auto end = glz::to_chars(start, value);
  344|       |            ix += size_t(end - start);
  345|       |         }
  346|    993|         else if constexpr (is_any_of<V, int32_t, uint32_t, int64_t, uint64_t>) {
  347|    993|            const auto start = reinterpret_cast<char*>(&b[ix]);
  348|       |            if constexpr (is_size_optimized(Opts)) {
  349|       |               // Size mode: use glz::to_chars (400B lookup tables)
  350|       |               const auto end = glz::to_chars(start, value);
  351|       |               ix += size_t(end - start);
  352|       |            }
  353|    993|            else {
  354|       |               // Normal mode: use to_chars_40kb (40KB digit_quads table)
  355|    993|               const auto end = glz::to_chars_40kb(start, value);
  356|    993|               ix += size_t(end - start);
  357|    993|            }
  358|       |         }
  359|       |         else if constexpr (std::integral<V>) {
  360|       |            // Handle other integral types (char, wchar_t, etc.) by casting to sized types
  361|       |            using X = std::decay_t<decltype(sized_integer_conversion<V>())>;
  362|       |            const auto start = reinterpret_cast<char*>(&b[ix]);
  363|       |            if constexpr (is_size_optimized(Opts)) {
  364|       |               // Size mode: use glz::to_chars (400B lookup tables)
  365|       |               const auto end = glz::to_chars(start, static_cast<X>(value));
  366|       |               ix += size_t(end - start);
  367|       |            }
  368|       |            else {
  369|       |               // Normal mode: use to_chars_40kb
  370|       |               const auto end = glz::to_chars_40kb(start, static_cast<X>(value));
  371|       |               ix += size_t(end - start);
  372|       |            }
  373|       |         }
  374|       |         else {
  375|       |            static_assert(false_v<V>, "type is not supported");
  376|       |         }
  377|    993|      }
_ZN3glz11write_chars2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj128EEERNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEETkNS_5num_tERdTkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_:
  205|  1.13k|      {
  206|       |         /*if constexpr (std::same_as<std::decay_t<B>, std::string>) {
  207|       |            // more efficient strings in C++23:
  208|       |          https://en.cppreference.com/w/cpp/string/basic_string/resize_and_overwrite
  209|       |          }*/
  210|       |
  211|       |         // https://stackoverflow.com/questions/1701055/what-is-the-maximum-length-in-chars-needed-to-represent-any-double-value
  212|       |         // maximum length for a double should be 24 chars, we use 64 to be sufficient for float128_t
  213|       |         if constexpr (resizable<B> && not check_write_unchecked(Opts)) {
  214|       |            if (const auto k = ix + 64; k > b.size()) {
  215|       |               grow_buffer(b, k);
  216|       |            }
  217|       |         }
  218|       |
  219|  1.13k|         using V = std::decay_t<decltype(value)>;
  220|       |
  221|  1.13k|         if constexpr (std::floating_point<V>) {
  222|  1.13k|            using opts_type = std::decay_t<decltype(Opts)>;
  223|  1.13k|            constexpr bool use_float_format = requires { opts_type::float_format; };
  224|       |
  225|       |            // User-specified float_format takes priority over all other options
  226|       |            if constexpr (use_float_format && is_any_of<V, float, double>) {
  227|       |#if GLZ_USE_STD_FORMAT_FLOAT
  228|       |               // Use std::format with user-provided format string (e.g., "{:.2f}")
  229|       |               // Format string is validated at compile-time via std::format_string
  230|       |               constexpr auto fmt = std::format_string<V>{opts_type::float_format};
  231|       |
  232|       |               if constexpr (check_write_unchecked(Opts)) {
  233|       |                  // Caller guarantees buffer has enough space
  234|       |                  const auto start = reinterpret_cast<char*>(&b[ix]);
  235|       |                  auto result = std::format_to(start, fmt, V(value));
  236|       |                  ix += size_t(result - start);
  237|       |               }
  238|       |               else {
  239|       |                  // format_to_n writes up to 'available' chars and returns total size needed.
  240|       |                  // Common case: output fits in pre-allocated buffer (single pass).
  241|       |                  // Rare case: output exceeds buffer (e.g., "{:.100f}"), requires resize.
  242|       |                  const auto start = reinterpret_cast<char*>(&b[ix]);
  243|       |                  const auto available = b.size() - ix;
  244|       |                  auto [out, size] = std::format_to_n(start, available, fmt, V(value));
  245|       |
  246|       |                  if (static_cast<size_t>(size) > available) {
  247|       |                     // Output was truncated - size tells us exactly how much space we need
  248|       |                     if constexpr (resizable<B>) {
  249|       |                        grow_buffer(b, ix + size);
  250|       |                        std::format_to(reinterpret_cast<char*>(&b[ix]), fmt, V(value));
  251|       |                     }
  252|       |                     else {
  253|       |                        ctx.error = error_code::unexpected_end;
  254|       |                        return;
  255|       |                     }
  256|       |                  }
  257|       |                  ix += size;
  258|       |               }
  259|       |#else
  260|       |               // snprintf fallback for platforms without std::format float support (e.g., iOS < 16.3)
  261|       |               // Convert std::format spec to printf format at compile time
  262|       |               constexpr auto printf_fmt = detail::to_printf_fmt(opts_type::float_format);
  263|       |
  264|       |               const auto start = reinterpret_cast<char*>(&b[ix]);
  265|       |               const auto available = check_write_unchecked(Opts) ? size_t(64) : (b.size() - ix);
  266|       |
  267|       |               // snprintf returns chars that would be written (excluding null), or negative on error
  268|       |               const int len = std::snprintf(start, available, printf_fmt.data, static_cast<double>(value));
  269|       |
  270|       |               if (len < 0) {
  271|       |                  ctx.error = error_code::unexpected_end;
  272|       |                  return;
  273|       |               }
  274|       |
  275|       |               if (static_cast<size_t>(len) >= available) {
  276|       |                  // Output was truncated, need to resize and retry
  277|       |                  if constexpr (resizable<B> && not check_write_unchecked(Opts)) {
  278|       |                     grow_buffer(b, ix + static_cast<size_t>(len) + 1);
  279|       |                     std::snprintf(reinterpret_cast<char*>(&b[ix]), static_cast<size_t>(len) + 1, printf_fmt.data,
  280|       |                                   static_cast<double>(value));
  281|       |                  }
  282|       |                  else {
  283|       |                     ctx.error = error_code::unexpected_end;
  284|       |                     return;
  285|       |                  }
  286|       |               }
  287|       |               ix += static_cast<size_t>(len);
  288|       |#endif
  289|       |            }
  290|       |            else if constexpr (uint8_t(check_float_max_write_precision(Opts)) > 0 &&
  291|       |                               uint8_t(check_float_max_write_precision(Opts)) < sizeof(V)) {
  292|       |               // we cast to a lower precision floating point value before writing out
  293|       |               if constexpr (uint8_t(check_float_max_write_precision(Opts)) == 8) {
  294|       |                  const auto reduced = static_cast<double>(value);
  295|       |                  const auto start = reinterpret_cast<char*>(&b[ix]);
  296|       |                  const auto end = glz::to_chars(start, reduced);
  297|       |                  ix += size_t(end - start);
  298|       |               }
  299|       |               else if constexpr (uint8_t(check_float_max_write_precision(Opts)) == 4) {
  300|       |                  const auto reduced = static_cast<float>(value);
  301|       |                  const auto start = reinterpret_cast<char*>(&b[ix]);
  302|       |                  const auto end = glz::to_chars(start, reduced);
  303|       |                  ix += size_t(end - start);
  304|       |               }
  305|       |               else {
  306|       |                  static_assert(false_v<V>, "invalid float_max_write_precision");
  307|       |               }
  308|       |            }
  309|       |            // Size optimization: pass OptSize=true so the ~17KB pow-10 lookup
  310|       |            // tables are dropped (recomputed on the fly). Much faster than the
  311|       |            // old simple_float::to_chars path at essentially the same footprint.
  312|       |            // See discussion #2519.
  313|       |            else if constexpr (is_size_optimized(Opts) && is_any_of<V, float, double>) {
  314|       |               const auto start = reinterpret_cast<char*>(&b[ix]);
  315|       |               const auto end = glz::to_chars<V, /*OptSize=*/true>(start, V(value));
  316|       |               ix += size_t(end - start);
  317|       |            }
  318|  1.13k|            else if constexpr (is_any_of<V, float, double>) {
  319|  1.13k|               const auto start = reinterpret_cast<char*>(&b[ix]);
  320|  1.13k|               const auto end = glz::to_chars(start, value);
  321|  1.13k|               ix += size_t(end - start);
  322|       |            }
  323|       |// float128_t requires std::to_chars for floating-point, unavailable on older Apple platforms (iOS < 16.3)
  324|       |#if !defined(_LIBCPP_VERSION) || _LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT
  325|       |            else if constexpr (is_float128<V>) {
  326|       |               const auto start = reinterpret_cast<char*>(&b[ix]);
  327|       |               const auto [ptr, ec] = std::to_chars(start, &b[0] + b.size(), value, std::chars_format::general);
  328|       |               if (ec != std::errc()) {
  329|       |                  ctx.error = error_code::unexpected_end;
  330|       |                  return;
  331|       |               }
  332|       |               ix += size_t(ptr - start);
  333|       |            }
  334|       |#endif
  335|       |            else {
  336|       |               static_assert(false_v<V>, "type is not supported");
  337|       |            }
  338|       |         }
  339|       |         else if constexpr (is_any_of<V, int8_t, uint8_t, int16_t, uint16_t>) {
  340|       |            // Small integers: always use to_chars (400B tables)
  341|       |            // The 40KB digit_quads table doesn't help for these small ranges
  342|       |            const auto start = reinterpret_cast<char*>(&b[ix]);
  343|       |            const auto end = glz::to_chars(start, value);
  344|       |            ix += size_t(end - start);
  345|       |         }
  346|       |         else if constexpr (is_any_of<V, int32_t, uint32_t, int64_t, uint64_t>) {
  347|       |            const auto start = reinterpret_cast<char*>(&b[ix]);
  348|       |            if constexpr (is_size_optimized(Opts)) {
  349|       |               // Size mode: use glz::to_chars (400B lookup tables)
  350|       |               const auto end = glz::to_chars(start, value);
  351|       |               ix += size_t(end - start);
  352|       |            }
  353|       |            else {
  354|       |               // Normal mode: use to_chars_40kb (40KB digit_quads table)
  355|       |               const auto end = glz::to_chars_40kb(start, value);
  356|       |               ix += size_t(end - start);
  357|       |            }
  358|       |         }
  359|       |         else if constexpr (std::integral<V>) {
  360|       |            // Handle other integral types (char, wchar_t, etc.) by casting to sized types
  361|       |            using X = std::decay_t<decltype(sized_integer_conversion<V>())>;
  362|       |            const auto start = reinterpret_cast<char*>(&b[ix]);
  363|       |            if constexpr (is_size_optimized(Opts)) {
  364|       |               // Size mode: use glz::to_chars (400B lookup tables)
  365|       |               const auto end = glz::to_chars(start, static_cast<X>(value));
  366|       |               ix += size_t(end - start);
  367|       |            }
  368|       |            else {
  369|       |               // Normal mode: use to_chars_40kb
  370|       |               const auto end = glz::to_chars_40kb(start, static_cast<X>(value));
  371|       |               ix += size_t(end - start);
  372|       |            }
  373|       |         }
  374|       |         else {
  375|       |            static_assert(false_v<V>, "type is not supported");
  376|       |         }
  377|  1.13k|      }

_ZN3glz4fromILj10EiE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEERPKcRiTkNS_10is_contextERNS_7contextES5_EEvOT1_OT2_OT0_T3_:
  767|   727k|      {
  768|       |         if constexpr (check_quoted_num(Opts)) {
  769|       |            if (skip_ws<Opts>(ctx, it, end)) {
  770|       |               return;
  771|       |            }
  772|       |            if (match_invalid_end<'"', Opts>(ctx, it, end)) {
  773|       |               return;
  774|       |            }
  775|       |         }
  776|       |
  777|       |         if constexpr (!check_ws_handled(Opts)) {
  778|       |            if (skip_ws<Opts>(ctx, it, end)) {
  779|       |               return;
  780|       |            }
  781|       |         }
  782|       |
  783|   727k|         using V = std::decay_t<decltype(value)>;
  784|   727k|         if constexpr (int_t<V>) {
  785|   727k|            static_assert(sizeof(*it) == sizeof(char));
  786|       |
  787|       |            if constexpr (Opts.null_terminated) {
  788|       |               if (not glz::atoi(value, it)) [[unlikely]] {
  789|       |                  ctx.error = error_code::parse_number_failure;
  790|       |                  return;
  791|       |               }
  792|       |            }
  793|   727k|            else {
  794|   727k|               if (not glz::atoi(value, it, end)) [[unlikely]] {
  ------------------
  |  Branch (794:20): [True: 9.76k, False: 717k]
  ------------------
  795|  9.76k|                  ctx.error = error_code::parse_number_failure;
  796|  9.76k|                  return;
  797|  9.76k|               }
  798|   727k|            }
  799|       |         }
  800|       |         else {
  801|       |// float128_t requires std::from_chars for floating-point, unavailable on older Apple platforms (iOS < 16.3)
  802|       |#if !defined(_LIBCPP_VERSION) || defined(_LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT)
  803|       |            if constexpr (is_float128<V>) {
  804|       |               auto [ptr, ec] = std::from_chars(it, end, value);
  805|       |               if (ec != std::errc()) {
  806|       |                  ctx.error = error_code::parse_number_failure;
  807|       |                  return;
  808|       |               }
  809|       |               it = ptr;
  810|       |            }
  811|       |            else
  812|       |#endif
  813|       |            {
  814|       |               if constexpr (std::is_volatile_v<std::remove_reference_t<decltype(value)>>) {
  815|       |                  // Hardware may interact with value changes, so we parse into a temporary and assign in one
  816|       |                  // place
  817|       |                  V temp;
  818|       |                  if constexpr (is_size_optimized(Opts)) {
  819|       |                     auto [ptr, ec] = simple_float::from_chars<Opts.null_terminated>(it, end, temp);
  820|       |                     if (ec != std::errc{}) [[unlikely]] {
  821|       |                        ctx.error = error_code::parse_number_failure;
  822|       |                        return;
  823|       |                     }
  824|       |                     it = ptr;
  825|       |                  }
  826|       |                  else {
  827|       |                     auto [ptr, ec] = glz::from_chars<Opts.null_terminated>(it, end, temp);
  828|       |                     if (ec != std::errc()) [[unlikely]] {
  829|       |                        ctx.error = error_code::parse_number_failure;
  830|       |                        return;
  831|       |                     }
  832|       |                     it = ptr;
  833|       |                  }
  834|       |                  value = temp;
  835|       |               }
  836|       |               else {
  837|       |                  if constexpr (is_size_optimized(Opts)) {
  838|       |                     auto [ptr, ec] = simple_float::from_chars<Opts.null_terminated>(it, end, value);
  839|       |                     if (ec != std::errc{}) [[unlikely]] {
  840|       |                        ctx.error = error_code::parse_number_failure;
  841|       |                        return;
  842|       |                     }
  843|       |                     it = ptr;
  844|       |                  }
  845|       |                  else {
  846|       |                     auto [ptr, ec] = glz::from_chars<Opts.null_terminated>(it, end, value);
  847|       |                     if (ec != std::errc()) [[unlikely]] {
  848|       |                        ctx.error = error_code::parse_number_failure;
  849|       |                        return;
  850|       |                     }
  851|       |                     it = ptr;
  852|       |                  }
  853|       |               }
  854|       |            }
  855|       |         }
  856|       |
  857|       |         if constexpr (check_quoted_num(Opts)) {
  858|       |            if constexpr (not Opts.null_terminated) {
  859|       |               if (it == end) [[unlikely]] {
  860|       |                  ctx.error = error_code::unexpected_end;
  861|       |                  return;
  862|       |               }
  863|       |            }
  864|       |            if (match<'"'>(ctx, it)) {
  865|       |               return;
  866|       |            }
  867|       |            if constexpr (not Opts.null_terminated) {
  868|       |               if (it == end) {
  869|       |                  ctx.error = error_code::end_reached;
  870|       |                  return;
  871|       |               }
  872|       |            }
  873|       |         }
  874|   727k|         else {
  875|   727k|            if constexpr (not Opts.null_terminated) {
  876|   727k|               if (it == end) {
  ------------------
  |  Branch (876:20): [True: 1.81k, False: 725k]
  ------------------
  877|  1.81k|                  ctx.error = error_code::end_reached;
  878|  1.81k|                  return;
  879|  1.81k|               }
  880|   727k|            }
  881|   727k|         }
  882|   727k|      }
_ZN3glz5parseILj10EE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERiTkNS_10is_contextERNS_7contextERPKcS8_EEvOT0_OT1_OT2_T3_:
   49|  55.1k|      {
   50|       |         if constexpr (const_value_v<T>) {
   51|       |            if constexpr (check_error_on_const_read(Opts)) {
   52|       |               ctx.error = error_code::attempt_const_read;
   53|       |            }
   54|       |            else {
   55|       |               // do not read anything into the const value
   56|       |               skip_value<JSON>::op<Opts>(std::forward<Ctx>(ctx), std::forward<It0>(it), end);
   57|       |            }
   58|       |         }
   59|  55.1k|         else {
   60|  55.1k|            using V = std::remove_cvref_t<T>;
   61|  55.1k|            from<JSON, V>::template op<Opts>(std::forward<T>(value), std::forward<Ctx>(ctx), std::forward<It0>(it),
   62|  55.1k|                                             end);
   63|  55.1k|         }
   64|  55.1k|      }
_ZN3glz4fromILj10EiE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERPKcRiTkNS_10is_contextERNS_7contextES5_EEvOT1_OT2_OT0_T3_:
  767|  55.1k|      {
  768|       |         if constexpr (check_quoted_num(Opts)) {
  769|       |            if (skip_ws<Opts>(ctx, it, end)) {
  770|       |               return;
  771|       |            }
  772|       |            if (match_invalid_end<'"', Opts>(ctx, it, end)) {
  773|       |               return;
  774|       |            }
  775|       |         }
  776|       |
  777|  55.1k|         if constexpr (!check_ws_handled(Opts)) {
  778|  55.1k|            if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (778:17): [True: 159, False: 54.9k]
  ------------------
  779|    159|               return;
  780|    159|            }
  781|  55.1k|         }
  782|       |
  783|  54.9k|         using V = std::decay_t<decltype(value)>;
  784|  55.1k|         if constexpr (int_t<V>) {
  785|  55.1k|            static_assert(sizeof(*it) == sizeof(char));
  786|       |
  787|       |            if constexpr (Opts.null_terminated) {
  788|       |               if (not glz::atoi(value, it)) [[unlikely]] {
  789|       |                  ctx.error = error_code::parse_number_failure;
  790|       |                  return;
  791|       |               }
  792|       |            }
  793|  55.1k|            else {
  794|  55.1k|               if (not glz::atoi(value, it, end)) [[unlikely]] {
  ------------------
  |  Branch (794:20): [True: 53.4k, False: 1.71k]
  ------------------
  795|  53.4k|                  ctx.error = error_code::parse_number_failure;
  796|  53.4k|                  return;
  797|  53.4k|               }
  798|  55.1k|            }
  799|       |         }
  800|       |         else {
  801|       |// float128_t requires std::from_chars for floating-point, unavailable on older Apple platforms (iOS < 16.3)
  802|       |#if !defined(_LIBCPP_VERSION) || defined(_LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT)
  803|       |            if constexpr (is_float128<V>) {
  804|       |               auto [ptr, ec] = std::from_chars(it, end, value);
  805|       |               if (ec != std::errc()) {
  806|       |                  ctx.error = error_code::parse_number_failure;
  807|       |                  return;
  808|       |               }
  809|       |               it = ptr;
  810|       |            }
  811|       |            else
  812|       |#endif
  813|       |            {
  814|       |               if constexpr (std::is_volatile_v<std::remove_reference_t<decltype(value)>>) {
  815|       |                  // Hardware may interact with value changes, so we parse into a temporary and assign in one
  816|       |                  // place
  817|       |                  V temp;
  818|       |                  if constexpr (is_size_optimized(Opts)) {
  819|       |                     auto [ptr, ec] = simple_float::from_chars<Opts.null_terminated>(it, end, temp);
  820|       |                     if (ec != std::errc{}) [[unlikely]] {
  821|       |                        ctx.error = error_code::parse_number_failure;
  822|       |                        return;
  823|       |                     }
  824|       |                     it = ptr;
  825|       |                  }
  826|       |                  else {
  827|       |                     auto [ptr, ec] = glz::from_chars<Opts.null_terminated>(it, end, temp);
  828|       |                     if (ec != std::errc()) [[unlikely]] {
  829|       |                        ctx.error = error_code::parse_number_failure;
  830|       |                        return;
  831|       |                     }
  832|       |                     it = ptr;
  833|       |                  }
  834|       |                  value = temp;
  835|       |               }
  836|       |               else {
  837|       |                  if constexpr (is_size_optimized(Opts)) {
  838|       |                     auto [ptr, ec] = simple_float::from_chars<Opts.null_terminated>(it, end, value);
  839|       |                     if (ec != std::errc{}) [[unlikely]] {
  840|       |                        ctx.error = error_code::parse_number_failure;
  841|       |                        return;
  842|       |                     }
  843|       |                     it = ptr;
  844|       |                  }
  845|       |                  else {
  846|       |                     auto [ptr, ec] = glz::from_chars<Opts.null_terminated>(it, end, value);
  847|       |                     if (ec != std::errc()) [[unlikely]] {
  848|       |                        ctx.error = error_code::parse_number_failure;
  849|       |                        return;
  850|       |                     }
  851|       |                     it = ptr;
  852|       |                  }
  853|       |               }
  854|       |            }
  855|       |         }
  856|       |
  857|       |         if constexpr (check_quoted_num(Opts)) {
  858|       |            if constexpr (not Opts.null_terminated) {
  859|       |               if (it == end) [[unlikely]] {
  860|       |                  ctx.error = error_code::unexpected_end;
  861|       |                  return;
  862|       |               }
  863|       |            }
  864|       |            if (match<'"'>(ctx, it)) {
  865|       |               return;
  866|       |            }
  867|       |            if constexpr (not Opts.null_terminated) {
  868|       |               if (it == end) {
  869|       |                  ctx.error = error_code::end_reached;
  870|       |                  return;
  871|       |               }
  872|       |            }
  873|       |         }
  874|  55.1k|         else {
  875|  55.1k|            if constexpr (not Opts.null_terminated) {
  876|  55.1k|               if (it == end) {
  ------------------
  |  Branch (876:20): [True: 1.01k, False: 54.1k]
  ------------------
  877|  1.01k|                  ctx.error = error_code::end_reached;
  878|  1.01k|                  return;
  879|  1.01k|               }
  880|  55.1k|            }
  881|  55.1k|         }
  882|  55.1k|      }
_ZN3glz5parseILj10EE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz5pointETkNS_10is_contextERNS_7contextERPKcSA_EEvOT0_OT1_OT2_T3_:
   49|  41.4k|      {
   50|       |         if constexpr (const_value_v<T>) {
   51|       |            if constexpr (check_error_on_const_read(Opts)) {
   52|       |               ctx.error = error_code::attempt_const_read;
   53|       |            }
   54|       |            else {
   55|       |               // do not read anything into the const value
   56|       |               skip_value<JSON>::op<Opts>(std::forward<Ctx>(ctx), std::forward<It0>(it), end);
   57|       |            }
   58|       |         }
   59|  41.4k|         else {
   60|  41.4k|            using V = std::remove_cvref_t<T>;
   61|  41.4k|            from<JSON, V>::template op<Opts>(std::forward<T>(value), std::forward<Ctx>(ctx), std::forward<It0>(it),
   62|  41.4k|                                             end);
   63|  41.4k|         }
   64|  41.4k|      }
_ZN3glz4fromILj10EN9repe_fuzz5pointEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnNS_14string_literalEXtlNS6_ILm1EEEEERS2_TkNS_10is_contextERNS_7contextERPKcSC_EEvOT1_OT2_OT3_T4_:
 3044|  41.4k|      {
 3045|  41.4k|         static constexpr auto num_members = reflect<T>::size;
 3046|       |
 3047|  41.4k|         static constexpr auto Opts = opening_handled_off<ws_handled_off<Options>()>();
 3048|  41.4k|         if constexpr (!check_opening_handled(Options)) {
 3049|  41.4k|            if constexpr (!check_ws_handled(Options)) {
 3050|  41.4k|               if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3050:20): [True: 118, False: 41.3k]
  ------------------
 3051|    118|                  return;
 3052|    118|               }
 3053|  41.4k|            }
 3054|  41.4k|            if (match_invalid_end<'{', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3054:17): [True: 16.2k, False: 25.2k]
  ------------------
 3055|  16.2k|               return;
 3056|  16.2k|            }
 3057|  25.2k|            if constexpr (not Opts.null_terminated) {
 3058|  25.2k|               if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3058:20): [True: 0, False: 25.2k]
  ------------------
 3059|      0|                  ctx.error = error_code::unexpected_end;
 3060|      0|                  return;
 3061|      0|               }
 3062|  25.2k|            }
 3063|       |            // one nesting level (see enter_depth): counted in both modes so the limit binds,
 3064|       |            // released at each syntactic close below
 3065|  25.2k|            if (enter_depth(ctx)) [[unlikely]] {
  ------------------
  |  Branch (3065:17): [True: 0, False: 25.2k]
  ------------------
 3066|      0|               return;
 3067|      0|            }
 3068|  25.2k|         }
 3069|  25.2k|         const auto ws_start = it;
 3070|  41.4k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3070:14): [True: 88, False: 41.3k]
  ------------------
 3071|     88|            return;
 3072|     88|         }
 3073|  41.3k|         const size_t ws_size = size_t(it - ws_start);
 3074|       |
 3075|       |         if constexpr ((glaze_object_t<T> || reflectable<T>) && num_members == 0 && Opts.error_on_unknown_keys) {
 3076|       |            if constexpr (not tag.sv().empty()) {
 3077|       |               if (*it == '"') {
 3078|       |                  ++it;
 3079|       |                  if constexpr (not Opts.null_terminated) {
 3080|       |                     if (it == end) [[unlikely]] {
 3081|       |                        ctx.error = error_code::unexpected_end;
 3082|       |                        return;
 3083|       |                     }
 3084|       |                  }
 3085|       |
 3086|       |                  const auto start = it;
 3087|       |                  skip_string_view(ctx, it, end);
 3088|       |                  if (bool(ctx.error)) [[unlikely]]
 3089|       |                     return;
 3090|       |                  if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3091|       |                     return;
 3092|       |                  const sv key{start, size_t(it - start)};
 3093|       |                  ++it;
 3094|       |                  if constexpr (not Opts.null_terminated) {
 3095|       |                     if (it == end) [[unlikely]] {
 3096|       |                        ctx.error = error_code::unexpected_end;
 3097|       |                        return;
 3098|       |                     }
 3099|       |                  }
 3100|       |
 3101|       |                  if (key == tag.sv()) {
 3102|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3103|       |                        return;
 3104|       |                     }
 3105|       |
 3106|       |                     parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3107|       |                     if (bool(ctx.error)) [[unlikely]]
 3108|       |                        return;
 3109|       |
 3110|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 3111|       |                        return;
 3112|       |                     }
 3113|       |                  }
 3114|       |                  else {
 3115|       |                     ctx.error = error_code::unknown_key;
 3116|       |                     return;
 3117|       |                  }
 3118|       |               }
 3119|       |            }
 3120|       |
 3121|       |            if (*it == '}') [[likely]] {
 3122|       |               --ctx.depth;
 3123|       |               if constexpr (glaze_object_t<T> || reflectable<T>) {
 3124|       |                  if constexpr (has_self_constraint_v<T> && !check_skip_self_constraint(Opts)) {
 3125|       |                     auto wrapper = self_constraint_v<T>(value);
 3126|       |                     from<JSON, decltype(wrapper)>::template op<ws_handled<Opts>()>(wrapper, ctx, it, end);
 3127|       |                     if (bool(ctx.error)) {
 3128|       |                        return;
 3129|       |                     }
 3130|       |                  }
 3131|       |               }
 3132|       |               ++it;
 3133|       |               if constexpr (not Opts.null_terminated) {
 3134|       |                  if (it == end) {
 3135|       |                     ctx.error = error_code::end_reached;
 3136|       |                     return;
 3137|       |                  }
 3138|       |               }
 3139|       |               if constexpr (Opts.partial_read) {
 3140|       |                  ctx.error = error_code::partial_read_complete;
 3141|       |               }
 3142|       |               return;
 3143|       |            }
 3144|       |            ctx.error = error_code::unknown_key;
 3145|       |            return;
 3146|       |         }
 3147|  41.3k|         else {
 3148|  41.3k|            decltype(auto) fields = [&]() -> decltype(auto) {
 3149|  41.3k|               if constexpr ((glaze_object_t<T> || reflectable<T>) &&
 3150|  41.3k|                             (Opts.error_on_missing_keys || Opts.partial_read)) {
 3151|  41.3k|                  return bit_array<num_members>{};
 3152|  41.3k|               }
 3153|  41.3k|               else {
 3154|  41.3k|                  return nullptr;
 3155|  41.3k|               }
 3156|  41.3k|            }();
 3157|       |
 3158|  41.3k|            size_t read_count{}; // for partial_read
 3159|       |
 3160|  41.3k|            bool first = true;
 3161|  96.4k|            while (true) {
  ------------------
  |  Branch (3161:20): [True: 56.1k, Folded]
  ------------------
 3162|       |               if constexpr ((glaze_object_t<T> || reflectable<T>) && Opts.partial_read) {
 3163|       |                  static constexpr bit_array<num_members> all_fields = [] {
 3164|       |                     bit_array<num_members> arr{};
 3165|       |                     for (size_t i = 0; i < num_members; ++i) {
 3166|       |                        arr[i] = true;
 3167|       |                     }
 3168|       |                     return arr;
 3169|       |                  }();
 3170|       |
 3171|       |                  if ((all_fields & fields) == all_fields) {
 3172|       |                     ctx.error = error_code::partial_read_complete;
 3173|       |                     --ctx.depth; // as above: an early success still closes this level
 3174|       |                     return;
 3175|       |                  }
 3176|       |               }
 3177|       |
 3178|       |               // Streaming refill point: at start of each iteration, ensure buffer has data
 3179|       |               if constexpr (has_streaming_state<decltype(ctx)>) {
 3180|       |                  if (ctx.stream.enabled()) {
 3181|       |                     const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 3182|       |                     const size_t remaining = ctx.stream.size() - consumed;
 3183|       |                     // Refill when less than half of buffer remains to ensure space for next key-value pair
 3184|       |                     if (remaining <= ctx.stream.size() / 2 || it >= end) {
 3185|       |                        const char* new_it;
 3186|       |                        const char* new_end;
 3187|       |                        ctx.stream.consume_and_refill(consumed, new_it, new_end);
 3188|       |                        it = new_it;
 3189|       |                        end = new_end;
 3190|       |                        if (it >= end && ctx.stream.at_eof()) {
 3191|       |                           ctx.error = error_code::unexpected_end;
 3192|       |                           return;
 3193|       |                        }
 3194|       |                     }
 3195|       |                  }
 3196|       |               }
 3197|       |
 3198|  56.1k|               if (*it == '}') {
  ------------------
  |  Branch (3198:20): [True: 203, False: 55.9k]
  ------------------
 3199|    203|                  --ctx.depth;
 3200|       |                  if constexpr ((glaze_object_t<T> || reflectable<T>) && Opts.error_on_missing_keys) {
 3201|       |                     constexpr auto req_fields = required_fields<T, Opts>();
 3202|       |                     if ((req_fields & fields) != req_fields) {
 3203|       |                        for (size_t i = 0; i < num_members; ++i) {
 3204|       |                           if (not fields[i] && req_fields[i]) {
 3205|       |                              ctx.custom_error_message = reflect<T>::keys[i];
 3206|       |                              // We just return the first missing key in order to avoid heap allocations
 3207|       |                              break;
 3208|       |                           }
 3209|       |                        }
 3210|       |
 3211|       |                        ctx.error = error_code::missing_key;
 3212|       |                        return;
 3213|       |                     }
 3214|       |                  }
 3215|    203|                  if constexpr (glaze_object_t<T> || reflectable<T>) {
 3216|       |                     if constexpr (has_self_constraint_v<T> && !check_skip_self_constraint(Opts)) {
 3217|       |                        auto wrapper = self_constraint_v<T>(value);
 3218|       |                        from<JSON, decltype(wrapper)>::template op<ws_handled<Opts>()>(wrapper, ctx, it, end);
 3219|       |                        if (bool(ctx.error)) {
 3220|       |                           return;
 3221|       |                        }
 3222|       |                     }
 3223|    203|                  }
 3224|    203|                  ++it; // Increment after checking for missing keys so errors are within buffer bounds
 3225|    203|                  if constexpr (not Opts.null_terminated) {
 3226|    203|                     if (it == end) {
  ------------------
  |  Branch (3226:26): [True: 112, False: 91]
  ------------------
 3227|    112|                        ctx.error = error_code::end_reached;
 3228|    112|                        return;
 3229|    112|                     }
 3230|    203|                  }
 3231|     91|                  return;
 3232|    203|               }
 3233|  55.9k|               else if (first) {
  ------------------
  |  Branch (3233:25): [True: 24.9k, False: 31.0k]
  ------------------
 3234|  24.9k|                  first = false;
 3235|  24.9k|               }
 3236|  31.0k|               else {
 3237|  31.0k|                  if (match_invalid_end<',', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3237:23): [True: 657, False: 30.4k]
  ------------------
 3238|    657|                     return;
 3239|    657|                  }
 3240|  30.4k|                  if constexpr (not Opts.null_terminated) {
 3241|  30.4k|                     if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3241:26): [True: 0, False: 30.4k]
  ------------------
 3242|      0|                        ctx.error = error_code::unexpected_end;
 3243|      0|                        return;
 3244|      0|                     }
 3245|  30.4k|                  }
 3246|       |
 3247|       |                  if constexpr ((not Opts.minified) && (num_members > 1 || not Opts.error_on_unknown_keys) &&
 3248|  30.4k|                                (!Opts.comments)) {
 3249|  30.4k|                     if (ws_size && ws_size < size_t(end - it)) {
  ------------------
  |  Branch (3249:26): [True: 22.3k, False: 8.03k]
  |  Branch (3249:37): [True: 21.8k, False: 537]
  ------------------
 3250|  21.8k|                        skip_matching_ws(ws_start, it, ws_size);
 3251|  21.8k|                     }
 3252|  30.4k|                  }
 3253|       |
 3254|  30.4k|                  if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3254:23): [True: 79, False: 30.3k]
  ------------------
 3255|     79|                     return;
 3256|     79|                  }
 3257|  30.4k|               }
 3258|       |
 3259|  55.2k|               constexpr auto reflection_type = glaze_object_t<T> || reflectable<T>;
  ------------------
  |  Branch (3259:49): [Folded, False: 0]
  |  Branch (3259:70): [True: 0, Folded]
  ------------------
 3260|       |
 3261|       |               if constexpr (reflection_type && (num_members == 0)) {
 3262|       |                  if constexpr (Opts.error_on_unknown_keys) {
 3263|       |                     static_assert(false_v<T>, "This should be unreachable");
 3264|       |                  }
 3265|       |                  else {
 3266|       |                     if (match_invalid_end<'"', Opts>(ctx, it, end)) {
 3267|       |                        return;
 3268|       |                     }
 3269|       |
 3270|       |                     // parsing to an empty object, but at this point the JSON presents keys
 3271|       |
 3272|       |                     // Unknown key handler does not unescape keys. Unknown escaped keys are
 3273|       |                     // handled by the user.
 3274|       |
 3275|       |                     const auto start = it;
 3276|       |                     skip_string_view(ctx, it, end);
 3277|       |                     if (bool(ctx.error)) [[unlikely]]
 3278|       |                        return;
 3279|       |                     if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3280|       |                        return;
 3281|       |                     const sv key{start, size_t(it - start)};
 3282|       |                     ++it;
 3283|       |                     if constexpr (not Opts.null_terminated) {
 3284|       |                        if (it == end) [[unlikely]] {
 3285|       |                           ctx.error = error_code::unexpected_end;
 3286|       |                           return;
 3287|       |                        }
 3288|       |                     }
 3289|       |
 3290|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3291|       |                        return;
 3292|       |                     }
 3293|       |
 3294|       |                     // Check if this key is the variant tag that should be skipped
 3295|       |                     if constexpr (not tag.sv().empty()) {
 3296|       |                        if (key == tag.sv()) {
 3297|       |                           // Skip the tag value
 3298|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3299|       |                           if (bool(ctx.error)) [[unlikely]]
 3300|       |                              return;
 3301|       |                           resync_window_end(ctx, end); // a streaming skip refills
 3302|       |                           if (skip_ws<Opts>(ctx, it, end)) {
 3303|       |                              return;
 3304|       |                           }
 3305|       |                           continue;
 3306|       |                        }
 3307|       |                     }
 3308|       |
 3309|       |                     parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3310|       |                     if (bool(ctx.error)) [[unlikely]]
 3311|       |                        return;
 3312|       |                     if constexpr (not Opts.null_terminated) {
 3313|       |                        if (it == end) [[unlikely]] {
 3314|       |                           ctx.error = error_code::unexpected_end;
 3315|       |                           return;
 3316|       |                        }
 3317|       |                     }
 3318|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 3319|       |                        return;
 3320|       |                     }
 3321|       |                  }
 3322|       |               }
 3323|  55.2k|               else if constexpr (reflection_type) {
 3324|  55.2k|                  static_assert(bool(hash_info<T>.type));
 3325|       |
 3326|  55.2k|                  if (*it != '"') [[unlikely]] {
  ------------------
  |  Branch (3326:23): [True: 738, False: 54.5k]
  ------------------
 3327|    738|                     ctx.error = error_code::expected_quote;
 3328|    738|                     return;
 3329|    738|                  }
 3330|  54.5k|                  ++it;
 3331|  54.5k|                  if constexpr (not Opts.null_terminated) {
 3332|  54.5k|                     if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3332:26): [True: 46, False: 54.4k]
  ------------------
 3333|     46|                        ctx.error = error_code::unexpected_end;
 3334|     46|                        return;
 3335|     46|                     }
 3336|  54.5k|                  }
 3337|       |
 3338|       |                  if constexpr (not tag.sv().empty() && not contains_tag<T, tag>()) {
 3339|       |                     // For tagged variants we first check to see if the key matches the tag
 3340|       |                     // We only need to do this if the tag is not part of the keys
 3341|       |
 3342|       |                     const auto start = it;
 3343|       |                     skip_string_view(ctx, it, end);
 3344|       |                     if (bool(ctx.error)) [[unlikely]]
 3345|       |                        return;
 3346|       |                     if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3347|       |                        return;
 3348|       |                     const sv key{start, size_t(it - start)};
 3349|       |                     ++it;
 3350|       |                     if constexpr (not Opts.null_terminated) {
 3351|       |                        if (it == end) [[unlikely]] {
 3352|       |                           ctx.error = error_code::unexpected_end;
 3353|       |                           return;
 3354|       |                        }
 3355|       |                     }
 3356|       |
 3357|       |                     if (key == tag.sv()) {
 3358|       |                        if (parse_ws_colon<Opts>(ctx, it, end)) {
 3359|       |                           return;
 3360|       |                        }
 3361|       |
 3362|       |                        parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3363|       |                        if (bool(ctx.error)) [[unlikely]]
 3364|       |                           return;
 3365|       |
 3366|       |                        if (skip_ws<Opts>(ctx, it, end)) {
 3367|       |                           return;
 3368|       |                        }
 3369|       |                        continue;
 3370|       |                     }
 3371|       |                     else {
 3372|       |                        it = start; // reset the iterator
 3373|       |                     }
 3374|       |                  }
 3375|       |
 3376|       |                  if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
 3377|       |                     size_t index = num_members;
 3378|       |                     parse_and_invoke<Opts, T>(value, ctx, it, end, index);
 3379|       |                     if (bool(ctx.error)) [[unlikely]]
 3380|       |                        return;
 3381|       |                     if (index < num_members) {
 3382|       |                        fields[index] = true;
 3383|       |                     }
 3384|       |                  }
 3385|  54.5k|                  else {
 3386|  54.5k|                     parse_and_invoke<Opts, T>(value, ctx, it, end);
 3387|  54.5k|                     if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (3387:26): [True: 23.1k, False: 31.3k]
  ------------------
 3388|  23.1k|                        return;
 3389|  54.5k|                  }
 3390|       |               }
 3391|       |               else {
 3392|       |                  // For types like std::map, std::unordered_map
 3393|       |
 3394|       |                  auto reading = [&](auto&& key) {
 3395|       |                     if constexpr (Opts.partial_read) {
 3396|       |                        if (auto element = value.find(key); element != value.end()) {
 3397|       |                           ++read_count;
 3398|       |                           parse<JSON>::op<ws_handled<Opts>()>(element->second, ctx, it, end);
 3399|       |                        }
 3400|       |                        else {
 3401|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3402|       |                        }
 3403|       |                     }
 3404|       |                     else {
 3405|       |                        parse<JSON>::op<ws_handled<Opts>()>(value[key], ctx, it, end);
 3406|       |                     }
 3407|       |                  };
 3408|       |
 3409|       |                  // using Key = std::conditional_t<heterogeneous_map<T>, sv, typename T::key_type>;
 3410|       |                  using Key = typename T::key_type;
 3411|       |                  if constexpr (std::is_same_v<Key, std::string>) {
 3412|       |                     ctx.scratch.clear();
 3413|       |                     parse<JSON>::op<Opts>(ctx.scratch, ctx, it, end);
 3414|       |                     if (bool(ctx.error)) [[unlikely]]
 3415|       |                        return;
 3416|       |
 3417|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3418|       |                        return;
 3419|       |                     }
 3420|       |
 3421|       |                     reading(ctx.scratch);
 3422|       |                     if constexpr (Opts.partial_read) {
 3423|       |                        if (read_count == value.size()) {
 3424|       |                           return;
 3425|       |                        }
 3426|       |                     }
 3427|       |                     if (bool(ctx.error)) [[unlikely]]
 3428|       |                        return;
 3429|       |                  }
 3430|       |                  else if constexpr (str_t<Key>) {
 3431|       |                     Key key;
 3432|       |                     parse<JSON>::op<Opts>(key, ctx, it, end);
 3433|       |                     if (bool(ctx.error)) [[unlikely]]
 3434|       |                        return;
 3435|       |
 3436|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3437|       |                        return;
 3438|       |                     }
 3439|       |
 3440|       |                     reading(key);
 3441|       |                     if constexpr (Opts.partial_read) {
 3442|       |                        if (read_count == value.size()) {
 3443|       |                           return;
 3444|       |                        }
 3445|       |                     }
 3446|       |                     if (bool(ctx.error)) [[unlikely]]
 3447|       |                        return;
 3448|       |                  }
 3449|       |                  else {
 3450|       |                     Key key_value{};
 3451|       |                     if constexpr (is_named_enum<Key> || mimics_str_t<Key>) {
 3452|       |                        parse<JSON>::op<Opts>(key_value, ctx, it, end);
 3453|       |                     }
 3454|       |                     else if constexpr (std::is_arithmetic_v<Key>) {
 3455|       |                        // prefer over quoted_t below to avoid double parsing of quoted_t
 3456|       |                        parse<JSON>::op<opt_true<Opts, quoted_num_opt_tag{}>>(key_value, ctx, it, end);
 3457|       |                     }
 3458|       |                     else {
 3459|       |                        parse<JSON>::op<opt_false<Opts, raw_string_opt_tag{}>>(quoted_t<Key>{key_value}, ctx, it, end);
 3460|       |                     }
 3461|       |                     if (bool(ctx.error)) [[unlikely]]
 3462|       |                        return;
 3463|       |
 3464|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3465|       |                        return;
 3466|       |                     }
 3467|       |
 3468|       |                     reading(key_value);
 3469|       |                     if constexpr (Opts.partial_read) {
 3470|       |                        if (read_count == value.size()) {
 3471|       |                           return;
 3472|       |                        }
 3473|       |                     }
 3474|       |                     if (bool(ctx.error)) [[unlikely]]
 3475|       |                        return;
 3476|       |                  }
 3477|       |               }
 3478|       |
 3479|       |               // Streaming refill point: after parsing each key-value pair, refill if buffer is low
 3480|       |               if constexpr (has_streaming_state<decltype(ctx)>) {
 3481|       |                  if (ctx.stream.enabled()) {
 3482|       |                     const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 3483|       |                     // Refill when less than 25% of buffer remains to ensure enough space for next element
 3484|       |                     if (ctx.stream.size() - consumed <= ctx.stream.size() / 4 || it >= end) {
 3485|       |                        const char* new_it;
 3486|       |                        const char* new_end;
 3487|       |                        ctx.stream.consume_and_refill(consumed, new_it, new_end);
 3488|       |                        it = new_it;
 3489|       |                        end = new_end;
 3490|       |                        if (it >= end && ctx.stream.at_eof()) {
 3491|       |                           ctx.error = error_code::unexpected_end;
 3492|       |                           return;
 3493|       |                        }
 3494|       |                     }
 3495|       |                  }
 3496|       |               }
 3497|       |
 3498|  55.2k|               if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3498:20): [True: 179, False: 55.0k]
  ------------------
 3499|    179|                  return;
 3500|    179|               }
 3501|  55.2k|            }
 3502|  41.3k|         }
 3503|  41.3k|      }
_ZZN3glz4fromILj10EN9repe_fuzz5pointEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnNS_14string_literalEXtlNS6_ILm1EEEEERS2_TkNS_10is_contextERNS_7contextERPKcSC_EEvOT1_OT2_OT3_T4_ENKUlvE_clEv:
 3148|  25.0k|            decltype(auto) fields = [&]() -> decltype(auto) {
 3149|       |               if constexpr ((glaze_object_t<T> || reflectable<T>) &&
 3150|       |                             (Opts.error_on_missing_keys || Opts.partial_read)) {
 3151|       |                  return bit_array<num_members>{};
 3152|       |               }
 3153|  25.0k|               else {
 3154|  25.0k|                  return nullptr;
 3155|  25.0k|               }
 3156|  25.0k|            }();
_ZN3glz16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz5pointERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT3_OT4_OT5_DpOT2_:
  376|  58.8k|   {
  377|  58.8k|      constexpr auto N = reflect<T>::size;
  378|       |
  379|       |      if constexpr (N == 1) {
  380|       |         decode_index<Opts, T, 0>(value, ctx, it, end, selected_index...);
  381|       |      }
  382|       |      else if constexpr (check_linear_search(Opts)) {
  383|       |         // Linear search path
  384|       |         auto key_start = it;
  385|       |         const auto index = decode_linear<T>(ctx, it, end);
  386|       |         if (bool(ctx.error)) [[unlikely]]
  387|       |            return;
  388|       |
  389|       |         if (index >= N) [[unlikely]] {
  390|       |            if constexpr (Opts.error_on_unknown_keys) {
  391|       |               ctx.error = error_code::unknown_key;
  392|       |               return;
  393|       |            }
  394|       |            else {
  395|       |               // it sits one past the closing quote, so the raw key spans [key_start, it - 1)
  396|       |               if (validate_utf8_span<Opts>(ctx, key_start, it - 1)) [[unlikely]] {
  397|       |                  return;
  398|       |               }
  399|       |               const sv key{key_start, size_t(it - key_start - 1)};
  400|       |               if constexpr (not Opts.null_terminated) {
  401|       |                  if (it == end) [[unlikely]] {
  402|       |                     ctx.error = error_code::unexpected_end;
  403|       |                     return;
  404|       |                  }
  405|       |               }
  406|       |               if (parse_ws_colon<Opts>(ctx, it, end)) {
  407|       |                  return;
  408|       |               }
  409|       |               parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
  410|       |               return;
  411|       |            }
  412|       |         }
  413|       |
  414|       |         if constexpr (not Opts.null_terminated) {
  415|       |            if (it == end) [[unlikely]] {
  416|       |               ctx.error = error_code::unexpected_end;
  417|       |               return;
  418|       |            }
  419|       |         }
  420|       |         if (skip_ws<Opts>(ctx, it, end)) {
  421|       |            return;
  422|       |         }
  423|       |         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  424|       |            return;
  425|       |         }
  426|       |         if (skip_ws<Opts>(ctx, it, end)) {
  427|       |            return;
  428|       |         }
  429|       |
  430|       |         // Fold expression dispatch - avoids jump table overhead for smaller binary size.
  431|       |         // For linear_search, pass Opts through to the field parser to avoid duplicate template
  432|       |         // instantiations; the whitespace before the value has already been skipped either way.
  433|       |         [&]<size_t... Is>(std::index_sequence<Is...>) {
  434|       |            (void)(((index == Is ? (decode_field_value<Opts, Opts, T, Is>(value, ctx, it, end, selected_index...), true)
  435|       |                                 : false) ||
  436|       |                    ...));
  437|       |         }(std::make_index_sequence<N>{});
  438|       |      }
  439|  58.8k|      else {
  440|       |         // Hash-based lookup
  441|  58.8k|         constexpr auto& HashInfo = hash_info<T>;
  442|  58.8k|         constexpr auto type = HashInfo.type;
  443|  58.8k|         static_assert(bool(type), "invalid hash algorithm");
  444|       |
  445|  58.8k|         const auto index = decode_hash<JSON, T, HashInfo, HashInfo.type>::op(it, end);
  446|       |
  447|  58.8k|         if (index >= N) [[unlikely]] {
  ------------------
  |  Branch (447:14): [True: 0, False: 58.8k]
  ------------------
  448|      0|            if constexpr (Opts.error_on_unknown_keys) {
  449|      0|               ctx.error = error_code::unknown_key;
  450|      0|               return;
  451|       |            }
  452|       |            else {
  453|       |               auto start = it;
  454|       |               skip_string_view(ctx, it, end);
  455|       |               if (bool(ctx.error)) [[unlikely]]
  456|       |                  return;
  457|       |               if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
  458|       |                  return;
  459|       |               const sv key = {start, size_t(it - start)};
  460|       |               ++it; // skip the quote
  461|       |               if constexpr (not Opts.null_terminated) {
  462|       |                  if (it == end) [[unlikely]] {
  463|       |                     ctx.error = error_code::unexpected_end;
  464|       |                     return;
  465|       |                  }
  466|       |               }
  467|       |               if (parse_ws_colon<Opts>(ctx, it, end)) {
  468|       |                  return;
  469|       |               }
  470|       |               parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
  471|       |               return;
  472|       |            }
  473|      0|         }
  474|       |
  475|  58.8k|         if constexpr (N == 2) {
  476|  58.8k|            if (index == 0) {
  ------------------
  |  Branch (476:17): [True: 20.4k, False: 38.4k]
  ------------------
  477|  20.4k|               decode_index<Opts, T, 0>(value, ctx, it, end, selected_index...);
  478|  20.4k|            }
  479|  38.4k|            else {
  480|  38.4k|               decode_index<Opts, T, 1>(value, ctx, it, end, selected_index...);
  481|  38.4k|            }
  482|       |         }
  483|       |         else {
  484|       |            visit<N>([&]<size_t I>() { decode_index<Opts, T, I>(value, ctx, it, end, selected_index...); }, index);
  485|       |         }
  486|  58.8k|      }
  487|  58.8k|   }
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz5pointELm0ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|  20.4k|   {
  312|  20.4k|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|  20.4k|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|  20.4k|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|  20.4k|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 20.3k, False: 29]
  |  Branch (316:36): [True: 20.3k, False: 70]
  ------------------
  317|  20.3k|         it += Length;
  318|  20.3k|         if constexpr (not Opts.null_terminated) {
  319|  20.3k|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 20.3k]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|  20.3k|         }
  324|       |
  325|  20.3k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 25, False: 20.2k]
  ------------------
  326|     25|            return;
  327|     25|         }
  328|  20.2k|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 65, False: 20.2k]
  ------------------
  329|     65|            return;
  330|     65|         }
  331|  20.2k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 25, False: 20.2k]
  ------------------
  332|     25|            return;
  333|     25|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|  20.2k|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|  20.2k|      }
  338|     99|      else [[unlikely]] {
  339|     99|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|     99|      }
  341|  20.4k|   }
_ZN3glz18decode_field_valueITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnDaXtlS1_Lj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEEN9repe_fuzz5pointELm0ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT1_E11reflectableISA_EEEvOT3_OT5_OT6_OT7_DpOT4_:
  245|  20.2k|   {
  246|       |      // Check for null value skipping on read
  247|       |      if constexpr (check_skip_null_members_on_read(Opts)) {
  248|       |         if (*it == 'n') {
  249|       |            ++it;
  250|       |            if constexpr (not Opts.null_terminated) {
  251|       |               if (it == end) [[unlikely]] {
  252|       |                  ctx.error = error_code::unexpected_end;
  253|       |                  return;
  254|       |               }
  255|       |            }
  256|       |            match<"ull", Opts>(ctx, it, end);
  257|       |            if (bool(ctx.error)) [[unlikely]]
  258|       |               return;
  259|       |            // Successfully matched "null", skip it
  260|       |            if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  261|       |               ((selected_index = I), ...); // Mark as handled even if skipped
  262|       |            }
  263|       |            return;
  264|       |         }
  265|       |      }
  266|       |
  267|       |      if constexpr (skipped_by_meta<T, I, operation::parse>) {
  268|       |         skip_value<JSON>::op<Opts>(ctx, it, end);
  269|       |         if (bool(ctx.error)) [[unlikely]]
  270|       |            return; // Propagate error from skip_value
  271|       |      }
  272|  20.2k|      else {
  273|  20.2k|         using V = refl_t<T, I>;
  274|       |
  275|       |         if constexpr (const_value_v<V>) {
  276|       |            if constexpr (check_error_on_const_read(Opts)) {
  277|       |               ctx.error = error_code::attempt_const_read;
  278|       |            }
  279|       |            else {
  280|       |               // do not read anything into the const value
  281|       |               skip_value<JSON>::op<Opts>(ctx, it, end);
  282|       |            }
  283|       |         }
  284|       |         else if constexpr (is_function_ptr_or_ref<V>) {
  285|       |            // Function pointers cannot be deserialized from JSON.
  286|       |            // When write_function_pointers is enabled the writer emits a type-name string,
  287|       |            // but there is nothing meaningful to reconstruct on read — just skip the value.
  288|       |            // When write_function_pointers is off the key is never written, so this branch
  289|       |            // is unreachable in that case.
  290|       |            skip_value<JSON>::op<Opts>(ctx, it, end);
  291|       |         }
  292|       |         else if constexpr (glaze_object_t<T>) {
  293|       |            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(reflect<T>::values)),
  294|       |                                                                       ctx, it, end);
  295|       |         }
  296|  20.2k|         else {
  297|  20.2k|            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(to_tie(value))), ctx,
  298|  20.2k|                                                                       it, end);
  299|  20.2k|         }
  300|  20.2k|      }
  301|       |
  302|       |      // The key was present and handled, even when the value itself was skipped
  303|       |      if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  304|       |         ((selected_index = I), ...);
  305|       |      }
  306|  20.2k|   }
_ZN3glz4fromILj10EdE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEERPKcRdTkNS_10is_contextERNS_7contextES5_EEvOT1_OT2_OT0_T3_:
  767|   274k|      {
  768|       |         if constexpr (check_quoted_num(Opts)) {
  769|       |            if (skip_ws<Opts>(ctx, it, end)) {
  770|       |               return;
  771|       |            }
  772|       |            if (match_invalid_end<'"', Opts>(ctx, it, end)) {
  773|       |               return;
  774|       |            }
  775|       |         }
  776|       |
  777|       |         if constexpr (!check_ws_handled(Opts)) {
  778|       |            if (skip_ws<Opts>(ctx, it, end)) {
  779|       |               return;
  780|       |            }
  781|       |         }
  782|       |
  783|   274k|         using V = std::decay_t<decltype(value)>;
  784|       |         if constexpr (int_t<V>) {
  785|       |            static_assert(sizeof(*it) == sizeof(char));
  786|       |
  787|       |            if constexpr (Opts.null_terminated) {
  788|       |               if (not glz::atoi(value, it)) [[unlikely]] {
  789|       |                  ctx.error = error_code::parse_number_failure;
  790|       |                  return;
  791|       |               }
  792|       |            }
  793|       |            else {
  794|       |               if (not glz::atoi(value, it, end)) [[unlikely]] {
  795|       |                  ctx.error = error_code::parse_number_failure;
  796|       |                  return;
  797|       |               }
  798|       |            }
  799|       |         }
  800|   274k|         else {
  801|       |// float128_t requires std::from_chars for floating-point, unavailable on older Apple platforms (iOS < 16.3)
  802|   274k|#if !defined(_LIBCPP_VERSION) || defined(_LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT)
  803|       |            if constexpr (is_float128<V>) {
  804|       |               auto [ptr, ec] = std::from_chars(it, end, value);
  805|       |               if (ec != std::errc()) {
  806|       |                  ctx.error = error_code::parse_number_failure;
  807|       |                  return;
  808|       |               }
  809|       |               it = ptr;
  810|       |            }
  811|       |            else
  812|       |#endif
  813|   274k|            {
  814|       |               if constexpr (std::is_volatile_v<std::remove_reference_t<decltype(value)>>) {
  815|       |                  // Hardware may interact with value changes, so we parse into a temporary and assign in one
  816|       |                  // place
  817|       |                  V temp;
  818|       |                  if constexpr (is_size_optimized(Opts)) {
  819|       |                     auto [ptr, ec] = simple_float::from_chars<Opts.null_terminated>(it, end, temp);
  820|       |                     if (ec != std::errc{}) [[unlikely]] {
  821|       |                        ctx.error = error_code::parse_number_failure;
  822|       |                        return;
  823|       |                     }
  824|       |                     it = ptr;
  825|       |                  }
  826|       |                  else {
  827|       |                     auto [ptr, ec] = glz::from_chars<Opts.null_terminated>(it, end, temp);
  828|       |                     if (ec != std::errc()) [[unlikely]] {
  829|       |                        ctx.error = error_code::parse_number_failure;
  830|       |                        return;
  831|       |                     }
  832|       |                     it = ptr;
  833|       |                  }
  834|       |                  value = temp;
  835|       |               }
  836|   274k|               else {
  837|       |                  if constexpr (is_size_optimized(Opts)) {
  838|       |                     auto [ptr, ec] = simple_float::from_chars<Opts.null_terminated>(it, end, value);
  839|       |                     if (ec != std::errc{}) [[unlikely]] {
  840|       |                        ctx.error = error_code::parse_number_failure;
  841|       |                        return;
  842|       |                     }
  843|       |                     it = ptr;
  844|       |                  }
  845|   274k|                  else {
  846|   274k|                     auto [ptr, ec] = glz::from_chars<Opts.null_terminated>(it, end, value);
  847|   274k|                     if (ec != std::errc()) [[unlikely]] {
  ------------------
  |  Branch (847:26): [True: 629, False: 273k]
  ------------------
  848|    629|                        ctx.error = error_code::parse_number_failure;
  849|    629|                        return;
  850|    629|                     }
  851|   273k|                     it = ptr;
  852|   273k|                  }
  853|   274k|               }
  854|   274k|            }
  855|   274k|         }
  856|       |
  857|       |         if constexpr (check_quoted_num(Opts)) {
  858|       |            if constexpr (not Opts.null_terminated) {
  859|       |               if (it == end) [[unlikely]] {
  860|       |                  ctx.error = error_code::unexpected_end;
  861|       |                  return;
  862|       |               }
  863|       |            }
  864|       |            if (match<'"'>(ctx, it)) {
  865|       |               return;
  866|       |            }
  867|       |            if constexpr (not Opts.null_terminated) {
  868|       |               if (it == end) {
  869|       |                  ctx.error = error_code::end_reached;
  870|       |                  return;
  871|       |               }
  872|       |            }
  873|       |         }
  874|   274k|         else {
  875|   274k|            if constexpr (not Opts.null_terminated) {
  876|   274k|               if (it == end) {
  ------------------
  |  Branch (876:20): [True: 1.59k, False: 272k]
  ------------------
  877|  1.59k|                  ctx.error = error_code::end_reached;
  878|  1.59k|                  return;
  879|  1.59k|               }
  880|   274k|            }
  881|   274k|         }
  882|   274k|      }
_ZN3glz24decode_index_unknown_keyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz5pointERS3_TkNS_10is_contextERNS_7contextERPKcS8_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT2_OT3_T4_:
  177|  22.0k|   {
  178|  22.0k|      if constexpr (Opts.error_on_unknown_keys) {
  179|  22.0k|         ctx.error = error_code::unknown_key;
  180|       |      }
  181|       |      else {
  182|       |         auto* start = it;
  183|       |         skip_string_view(ctx, it, end);
  184|       |         if (bool(ctx.error)) [[unlikely]]
  185|       |            return;
  186|       |         if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
  187|       |            return;
  188|       |         const sv key = {start, size_t(it - start)};
  189|       |         ++it;
  190|       |         if constexpr (not Opts.null_terminated) {
  191|       |            if (it == end) [[unlikely]] {
  192|       |               ctx.error = error_code::unexpected_end;
  193|       |               return;
  194|       |            }
  195|       |         }
  196|       |
  197|       |         if (parse_ws_colon<Opts>(ctx, it, end)) {
  198|       |            return;
  199|       |         }
  200|       |
  201|       |         parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
  202|       |      }
  203|  22.0k|   }
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz5pointELm1ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|  38.4k|   {
  312|  38.4k|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|  38.4k|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|  38.4k|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|  38.4k|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 38.2k, False: 211]
  |  Branch (316:36): [True: 16.4k, False: 21.7k]
  ------------------
  317|  16.4k|         it += Length;
  318|  16.4k|         if constexpr (not Opts.null_terminated) {
  319|  16.4k|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 16.4k]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|  16.4k|         }
  324|       |
  325|  16.4k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 30, False: 16.4k]
  ------------------
  326|     30|            return;
  327|     30|         }
  328|  16.4k|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 83, False: 16.3k]
  ------------------
  329|     83|            return;
  330|     83|         }
  331|  16.3k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 26, False: 16.3k]
  ------------------
  332|     26|            return;
  333|     26|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|  16.3k|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|  16.3k|      }
  338|  21.9k|      else [[unlikely]] {
  339|  21.9k|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|  21.9k|      }
  341|  38.4k|   }
_ZN3glz18decode_field_valueITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnDaXtlS1_Lj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEEN9repe_fuzz5pointELm1ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT1_E11reflectableISA_EEEvOT3_OT5_OT6_OT7_DpOT4_:
  245|  16.3k|   {
  246|       |      // Check for null value skipping on read
  247|       |      if constexpr (check_skip_null_members_on_read(Opts)) {
  248|       |         if (*it == 'n') {
  249|       |            ++it;
  250|       |            if constexpr (not Opts.null_terminated) {
  251|       |               if (it == end) [[unlikely]] {
  252|       |                  ctx.error = error_code::unexpected_end;
  253|       |                  return;
  254|       |               }
  255|       |            }
  256|       |            match<"ull", Opts>(ctx, it, end);
  257|       |            if (bool(ctx.error)) [[unlikely]]
  258|       |               return;
  259|       |            // Successfully matched "null", skip it
  260|       |            if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  261|       |               ((selected_index = I), ...); // Mark as handled even if skipped
  262|       |            }
  263|       |            return;
  264|       |         }
  265|       |      }
  266|       |
  267|       |      if constexpr (skipped_by_meta<T, I, operation::parse>) {
  268|       |         skip_value<JSON>::op<Opts>(ctx, it, end);
  269|       |         if (bool(ctx.error)) [[unlikely]]
  270|       |            return; // Propagate error from skip_value
  271|       |      }
  272|  16.3k|      else {
  273|  16.3k|         using V = refl_t<T, I>;
  274|       |
  275|       |         if constexpr (const_value_v<V>) {
  276|       |            if constexpr (check_error_on_const_read(Opts)) {
  277|       |               ctx.error = error_code::attempt_const_read;
  278|       |            }
  279|       |            else {
  280|       |               // do not read anything into the const value
  281|       |               skip_value<JSON>::op<Opts>(ctx, it, end);
  282|       |            }
  283|       |         }
  284|       |         else if constexpr (is_function_ptr_or_ref<V>) {
  285|       |            // Function pointers cannot be deserialized from JSON.
  286|       |            // When write_function_pointers is enabled the writer emits a type-name string,
  287|       |            // but there is nothing meaningful to reconstruct on read — just skip the value.
  288|       |            // When write_function_pointers is off the key is never written, so this branch
  289|       |            // is unreachable in that case.
  290|       |            skip_value<JSON>::op<Opts>(ctx, it, end);
  291|       |         }
  292|       |         else if constexpr (glaze_object_t<T>) {
  293|       |            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(reflect<T>::values)),
  294|       |                                                                       ctx, it, end);
  295|       |         }
  296|  16.3k|         else {
  297|  16.3k|            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(to_tie(value))), ctx,
  298|  16.3k|                                                                       it, end);
  299|  16.3k|         }
  300|  16.3k|      }
  301|       |
  302|       |      // The key was present and handled, even when the value itself was skipped
  303|       |      if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  304|       |         ((selected_index = I), ...);
  305|       |      }
  306|  16.3k|   }
_ZN3glz5parseILj10EE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz6nestedETkNS_10is_contextERNS_7contextERPKcSA_EEvOT0_OT1_OT2_T3_:
   49|  27.8k|      {
   50|       |         if constexpr (const_value_v<T>) {
   51|       |            if constexpr (check_error_on_const_read(Opts)) {
   52|       |               ctx.error = error_code::attempt_const_read;
   53|       |            }
   54|       |            else {
   55|       |               // do not read anything into the const value
   56|       |               skip_value<JSON>::op<Opts>(std::forward<Ctx>(ctx), std::forward<It0>(it), end);
   57|       |            }
   58|       |         }
   59|  27.8k|         else {
   60|  27.8k|            using V = std::remove_cvref_t<T>;
   61|  27.8k|            from<JSON, V>::template op<Opts>(std::forward<T>(value), std::forward<Ctx>(ctx), std::forward<It0>(it),
   62|  27.8k|                                             end);
   63|  27.8k|         }
   64|  27.8k|      }
_ZN3glz4fromILj10EN9repe_fuzz6nestedEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnNS_14string_literalEXtlNS6_ILm1EEEEERS2_TkNS_10is_contextERNS_7contextERPKcSC_EEvOT1_OT2_OT3_T4_:
 3044|  27.8k|      {
 3045|  27.8k|         static constexpr auto num_members = reflect<T>::size;
 3046|       |
 3047|  27.8k|         static constexpr auto Opts = opening_handled_off<ws_handled_off<Options>()>();
 3048|  27.8k|         if constexpr (!check_opening_handled(Options)) {
 3049|  27.8k|            if constexpr (!check_ws_handled(Options)) {
 3050|  27.8k|               if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3050:20): [True: 82, False: 27.7k]
  ------------------
 3051|     82|                  return;
 3052|     82|               }
 3053|  27.8k|            }
 3054|  27.8k|            if (match_invalid_end<'{', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3054:17): [True: 10.8k, False: 17.0k]
  ------------------
 3055|  10.8k|               return;
 3056|  10.8k|            }
 3057|  17.0k|            if constexpr (not Opts.null_terminated) {
 3058|  17.0k|               if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3058:20): [True: 0, False: 17.0k]
  ------------------
 3059|      0|                  ctx.error = error_code::unexpected_end;
 3060|      0|                  return;
 3061|      0|               }
 3062|  17.0k|            }
 3063|       |            // one nesting level (see enter_depth): counted in both modes so the limit binds,
 3064|       |            // released at each syntactic close below
 3065|  17.0k|            if (enter_depth(ctx)) [[unlikely]] {
  ------------------
  |  Branch (3065:17): [True: 0, False: 17.0k]
  ------------------
 3066|      0|               return;
 3067|      0|            }
 3068|  17.0k|         }
 3069|  17.0k|         const auto ws_start = it;
 3070|  27.8k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3070:14): [True: 62, False: 27.8k]
  ------------------
 3071|     62|            return;
 3072|     62|         }
 3073|  27.8k|         const size_t ws_size = size_t(it - ws_start);
 3074|       |
 3075|       |         if constexpr ((glaze_object_t<T> || reflectable<T>) && num_members == 0 && Opts.error_on_unknown_keys) {
 3076|       |            if constexpr (not tag.sv().empty()) {
 3077|       |               if (*it == '"') {
 3078|       |                  ++it;
 3079|       |                  if constexpr (not Opts.null_terminated) {
 3080|       |                     if (it == end) [[unlikely]] {
 3081|       |                        ctx.error = error_code::unexpected_end;
 3082|       |                        return;
 3083|       |                     }
 3084|       |                  }
 3085|       |
 3086|       |                  const auto start = it;
 3087|       |                  skip_string_view(ctx, it, end);
 3088|       |                  if (bool(ctx.error)) [[unlikely]]
 3089|       |                     return;
 3090|       |                  if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3091|       |                     return;
 3092|       |                  const sv key{start, size_t(it - start)};
 3093|       |                  ++it;
 3094|       |                  if constexpr (not Opts.null_terminated) {
 3095|       |                     if (it == end) [[unlikely]] {
 3096|       |                        ctx.error = error_code::unexpected_end;
 3097|       |                        return;
 3098|       |                     }
 3099|       |                  }
 3100|       |
 3101|       |                  if (key == tag.sv()) {
 3102|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3103|       |                        return;
 3104|       |                     }
 3105|       |
 3106|       |                     parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3107|       |                     if (bool(ctx.error)) [[unlikely]]
 3108|       |                        return;
 3109|       |
 3110|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 3111|       |                        return;
 3112|       |                     }
 3113|       |                  }
 3114|       |                  else {
 3115|       |                     ctx.error = error_code::unknown_key;
 3116|       |                     return;
 3117|       |                  }
 3118|       |               }
 3119|       |            }
 3120|       |
 3121|       |            if (*it == '}') [[likely]] {
 3122|       |               --ctx.depth;
 3123|       |               if constexpr (glaze_object_t<T> || reflectable<T>) {
 3124|       |                  if constexpr (has_self_constraint_v<T> && !check_skip_self_constraint(Opts)) {
 3125|       |                     auto wrapper = self_constraint_v<T>(value);
 3126|       |                     from<JSON, decltype(wrapper)>::template op<ws_handled<Opts>()>(wrapper, ctx, it, end);
 3127|       |                     if (bool(ctx.error)) {
 3128|       |                        return;
 3129|       |                     }
 3130|       |                  }
 3131|       |               }
 3132|       |               ++it;
 3133|       |               if constexpr (not Opts.null_terminated) {
 3134|       |                  if (it == end) {
 3135|       |                     ctx.error = error_code::end_reached;
 3136|       |                     return;
 3137|       |                  }
 3138|       |               }
 3139|       |               if constexpr (Opts.partial_read) {
 3140|       |                  ctx.error = error_code::partial_read_complete;
 3141|       |               }
 3142|       |               return;
 3143|       |            }
 3144|       |            ctx.error = error_code::unknown_key;
 3145|       |            return;
 3146|       |         }
 3147|  27.8k|         else {
 3148|  27.8k|            decltype(auto) fields = [&]() -> decltype(auto) {
 3149|  27.8k|               if constexpr ((glaze_object_t<T> || reflectable<T>) &&
 3150|  27.8k|                             (Opts.error_on_missing_keys || Opts.partial_read)) {
 3151|  27.8k|                  return bit_array<num_members>{};
 3152|  27.8k|               }
 3153|  27.8k|               else {
 3154|  27.8k|                  return nullptr;
 3155|  27.8k|               }
 3156|  27.8k|            }();
 3157|       |
 3158|  27.8k|            size_t read_count{}; // for partial_read
 3159|       |
 3160|  27.8k|            bool first = true;
 3161|  49.5k|            while (true) {
  ------------------
  |  Branch (3161:20): [True: 22.4k, Folded]
  ------------------
 3162|       |               if constexpr ((glaze_object_t<T> || reflectable<T>) && Opts.partial_read) {
 3163|       |                  static constexpr bit_array<num_members> all_fields = [] {
 3164|       |                     bit_array<num_members> arr{};
 3165|       |                     for (size_t i = 0; i < num_members; ++i) {
 3166|       |                        arr[i] = true;
 3167|       |                     }
 3168|       |                     return arr;
 3169|       |                  }();
 3170|       |
 3171|       |                  if ((all_fields & fields) == all_fields) {
 3172|       |                     ctx.error = error_code::partial_read_complete;
 3173|       |                     --ctx.depth; // as above: an early success still closes this level
 3174|       |                     return;
 3175|       |                  }
 3176|       |               }
 3177|       |
 3178|       |               // Streaming refill point: at start of each iteration, ensure buffer has data
 3179|       |               if constexpr (has_streaming_state<decltype(ctx)>) {
 3180|       |                  if (ctx.stream.enabled()) {
 3181|       |                     const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 3182|       |                     const size_t remaining = ctx.stream.size() - consumed;
 3183|       |                     // Refill when less than half of buffer remains to ensure space for next key-value pair
 3184|       |                     if (remaining <= ctx.stream.size() / 2 || it >= end) {
 3185|       |                        const char* new_it;
 3186|       |                        const char* new_end;
 3187|       |                        ctx.stream.consume_and_refill(consumed, new_it, new_end);
 3188|       |                        it = new_it;
 3189|       |                        end = new_end;
 3190|       |                        if (it >= end && ctx.stream.at_eof()) {
 3191|       |                           ctx.error = error_code::unexpected_end;
 3192|       |                           return;
 3193|       |                        }
 3194|       |                     }
 3195|       |                  }
 3196|       |               }
 3197|       |
 3198|  22.4k|               if (*it == '}') {
  ------------------
  |  Branch (3198:20): [True: 398, False: 22.0k]
  ------------------
 3199|    398|                  --ctx.depth;
 3200|       |                  if constexpr ((glaze_object_t<T> || reflectable<T>) && Opts.error_on_missing_keys) {
 3201|       |                     constexpr auto req_fields = required_fields<T, Opts>();
 3202|       |                     if ((req_fields & fields) != req_fields) {
 3203|       |                        for (size_t i = 0; i < num_members; ++i) {
 3204|       |                           if (not fields[i] && req_fields[i]) {
 3205|       |                              ctx.custom_error_message = reflect<T>::keys[i];
 3206|       |                              // We just return the first missing key in order to avoid heap allocations
 3207|       |                              break;
 3208|       |                           }
 3209|       |                        }
 3210|       |
 3211|       |                        ctx.error = error_code::missing_key;
 3212|       |                        return;
 3213|       |                     }
 3214|       |                  }
 3215|    398|                  if constexpr (glaze_object_t<T> || reflectable<T>) {
 3216|       |                     if constexpr (has_self_constraint_v<T> && !check_skip_self_constraint(Opts)) {
 3217|       |                        auto wrapper = self_constraint_v<T>(value);
 3218|       |                        from<JSON, decltype(wrapper)>::template op<ws_handled<Opts>()>(wrapper, ctx, it, end);
 3219|       |                        if (bool(ctx.error)) {
 3220|       |                           return;
 3221|       |                        }
 3222|       |                     }
 3223|    398|                  }
 3224|    398|                  ++it; // Increment after checking for missing keys so errors are within buffer bounds
 3225|    398|                  if constexpr (not Opts.null_terminated) {
 3226|    398|                     if (it == end) {
  ------------------
  |  Branch (3226:26): [True: 166, False: 232]
  ------------------
 3227|    166|                        ctx.error = error_code::end_reached;
 3228|    166|                        return;
 3229|    166|                     }
 3230|    398|                  }
 3231|    232|                  return;
 3232|    398|               }
 3233|  22.0k|               else if (first) {
  ------------------
  |  Branch (3233:25): [True: 16.8k, False: 5.19k]
  ------------------
 3234|  16.8k|                  first = false;
 3235|  16.8k|               }
 3236|  5.19k|               else {
 3237|  5.19k|                  if (match_invalid_end<',', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3237:23): [True: 152, False: 5.04k]
  ------------------
 3238|    152|                     return;
 3239|    152|                  }
 3240|  5.04k|                  if constexpr (not Opts.null_terminated) {
 3241|  5.04k|                     if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3241:26): [True: 0, False: 5.04k]
  ------------------
 3242|      0|                        ctx.error = error_code::unexpected_end;
 3243|      0|                        return;
 3244|      0|                     }
 3245|  5.04k|                  }
 3246|       |
 3247|       |                  if constexpr ((not Opts.minified) && (num_members > 1 || not Opts.error_on_unknown_keys) &&
 3248|  5.04k|                                (!Opts.comments)) {
 3249|  5.04k|                     if (ws_size && ws_size < size_t(end - it)) {
  ------------------
  |  Branch (3249:26): [True: 4.70k, False: 332]
  |  Branch (3249:37): [True: 4.61k, False: 89]
  ------------------
 3250|  4.61k|                        skip_matching_ws(ws_start, it, ws_size);
 3251|  4.61k|                     }
 3252|  5.04k|                  }
 3253|       |
 3254|  5.04k|                  if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3254:23): [True: 39, False: 5.00k]
  ------------------
 3255|     39|                     return;
 3256|     39|                  }
 3257|  5.04k|               }
 3258|       |
 3259|  21.8k|               constexpr auto reflection_type = glaze_object_t<T> || reflectable<T>;
  ------------------
  |  Branch (3259:49): [Folded, False: 0]
  |  Branch (3259:70): [True: 0, Folded]
  ------------------
 3260|       |
 3261|       |               if constexpr (reflection_type && (num_members == 0)) {
 3262|       |                  if constexpr (Opts.error_on_unknown_keys) {
 3263|       |                     static_assert(false_v<T>, "This should be unreachable");
 3264|       |                  }
 3265|       |                  else {
 3266|       |                     if (match_invalid_end<'"', Opts>(ctx, it, end)) {
 3267|       |                        return;
 3268|       |                     }
 3269|       |
 3270|       |                     // parsing to an empty object, but at this point the JSON presents keys
 3271|       |
 3272|       |                     // Unknown key handler does not unescape keys. Unknown escaped keys are
 3273|       |                     // handled by the user.
 3274|       |
 3275|       |                     const auto start = it;
 3276|       |                     skip_string_view(ctx, it, end);
 3277|       |                     if (bool(ctx.error)) [[unlikely]]
 3278|       |                        return;
 3279|       |                     if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3280|       |                        return;
 3281|       |                     const sv key{start, size_t(it - start)};
 3282|       |                     ++it;
 3283|       |                     if constexpr (not Opts.null_terminated) {
 3284|       |                        if (it == end) [[unlikely]] {
 3285|       |                           ctx.error = error_code::unexpected_end;
 3286|       |                           return;
 3287|       |                        }
 3288|       |                     }
 3289|       |
 3290|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3291|       |                        return;
 3292|       |                     }
 3293|       |
 3294|       |                     // Check if this key is the variant tag that should be skipped
 3295|       |                     if constexpr (not tag.sv().empty()) {
 3296|       |                        if (key == tag.sv()) {
 3297|       |                           // Skip the tag value
 3298|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3299|       |                           if (bool(ctx.error)) [[unlikely]]
 3300|       |                              return;
 3301|       |                           resync_window_end(ctx, end); // a streaming skip refills
 3302|       |                           if (skip_ws<Opts>(ctx, it, end)) {
 3303|       |                              return;
 3304|       |                           }
 3305|       |                           continue;
 3306|       |                        }
 3307|       |                     }
 3308|       |
 3309|       |                     parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3310|       |                     if (bool(ctx.error)) [[unlikely]]
 3311|       |                        return;
 3312|       |                     if constexpr (not Opts.null_terminated) {
 3313|       |                        if (it == end) [[unlikely]] {
 3314|       |                           ctx.error = error_code::unexpected_end;
 3315|       |                           return;
 3316|       |                        }
 3317|       |                     }
 3318|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 3319|       |                        return;
 3320|       |                     }
 3321|       |                  }
 3322|       |               }
 3323|  21.8k|               else if constexpr (reflection_type) {
 3324|  21.8k|                  static_assert(bool(hash_info<T>.type));
 3325|       |
 3326|  21.8k|                  if (*it != '"') [[unlikely]] {
  ------------------
  |  Branch (3326:23): [True: 795, False: 21.0k]
  ------------------
 3327|    795|                     ctx.error = error_code::expected_quote;
 3328|    795|                     return;
 3329|    795|                  }
 3330|  21.0k|                  ++it;
 3331|  21.0k|                  if constexpr (not Opts.null_terminated) {
 3332|  21.0k|                     if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3332:26): [True: 30, False: 21.0k]
  ------------------
 3333|     30|                        ctx.error = error_code::unexpected_end;
 3334|     30|                        return;
 3335|     30|                     }
 3336|  21.0k|                  }
 3337|       |
 3338|       |                  if constexpr (not tag.sv().empty() && not contains_tag<T, tag>()) {
 3339|       |                     // For tagged variants we first check to see if the key matches the tag
 3340|       |                     // We only need to do this if the tag is not part of the keys
 3341|       |
 3342|       |                     const auto start = it;
 3343|       |                     skip_string_view(ctx, it, end);
 3344|       |                     if (bool(ctx.error)) [[unlikely]]
 3345|       |                        return;
 3346|       |                     if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3347|       |                        return;
 3348|       |                     const sv key{start, size_t(it - start)};
 3349|       |                     ++it;
 3350|       |                     if constexpr (not Opts.null_terminated) {
 3351|       |                        if (it == end) [[unlikely]] {
 3352|       |                           ctx.error = error_code::unexpected_end;
 3353|       |                           return;
 3354|       |                        }
 3355|       |                     }
 3356|       |
 3357|       |                     if (key == tag.sv()) {
 3358|       |                        if (parse_ws_colon<Opts>(ctx, it, end)) {
 3359|       |                           return;
 3360|       |                        }
 3361|       |
 3362|       |                        parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3363|       |                        if (bool(ctx.error)) [[unlikely]]
 3364|       |                           return;
 3365|       |
 3366|       |                        if (skip_ws<Opts>(ctx, it, end)) {
 3367|       |                           return;
 3368|       |                        }
 3369|       |                        continue;
 3370|       |                     }
 3371|       |                     else {
 3372|       |                        it = start; // reset the iterator
 3373|       |                     }
 3374|       |                  }
 3375|       |
 3376|       |                  if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
 3377|       |                     size_t index = num_members;
 3378|       |                     parse_and_invoke<Opts, T>(value, ctx, it, end, index);
 3379|       |                     if (bool(ctx.error)) [[unlikely]]
 3380|       |                        return;
 3381|       |                     if (index < num_members) {
 3382|       |                        fields[index] = true;
 3383|       |                     }
 3384|       |                  }
 3385|  21.0k|                  else {
 3386|  21.0k|                     parse_and_invoke<Opts, T>(value, ctx, it, end);
 3387|  21.0k|                     if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (3387:26): [True: 15.4k, False: 5.63k]
  ------------------
 3388|  15.4k|                        return;
 3389|  21.0k|                  }
 3390|       |               }
 3391|       |               else {
 3392|       |                  // For types like std::map, std::unordered_map
 3393|       |
 3394|       |                  auto reading = [&](auto&& key) {
 3395|       |                     if constexpr (Opts.partial_read) {
 3396|       |                        if (auto element = value.find(key); element != value.end()) {
 3397|       |                           ++read_count;
 3398|       |                           parse<JSON>::op<ws_handled<Opts>()>(element->second, ctx, it, end);
 3399|       |                        }
 3400|       |                        else {
 3401|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3402|       |                        }
 3403|       |                     }
 3404|       |                     else {
 3405|       |                        parse<JSON>::op<ws_handled<Opts>()>(value[key], ctx, it, end);
 3406|       |                     }
 3407|       |                  };
 3408|       |
 3409|       |                  // using Key = std::conditional_t<heterogeneous_map<T>, sv, typename T::key_type>;
 3410|       |                  using Key = typename T::key_type;
 3411|       |                  if constexpr (std::is_same_v<Key, std::string>) {
 3412|       |                     ctx.scratch.clear();
 3413|       |                     parse<JSON>::op<Opts>(ctx.scratch, ctx, it, end);
 3414|       |                     if (bool(ctx.error)) [[unlikely]]
 3415|       |                        return;
 3416|       |
 3417|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3418|       |                        return;
 3419|       |                     }
 3420|       |
 3421|       |                     reading(ctx.scratch);
 3422|       |                     if constexpr (Opts.partial_read) {
 3423|       |                        if (read_count == value.size()) {
 3424|       |                           return;
 3425|       |                        }
 3426|       |                     }
 3427|       |                     if (bool(ctx.error)) [[unlikely]]
 3428|       |                        return;
 3429|       |                  }
 3430|       |                  else if constexpr (str_t<Key>) {
 3431|       |                     Key key;
 3432|       |                     parse<JSON>::op<Opts>(key, ctx, it, end);
 3433|       |                     if (bool(ctx.error)) [[unlikely]]
 3434|       |                        return;
 3435|       |
 3436|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3437|       |                        return;
 3438|       |                     }
 3439|       |
 3440|       |                     reading(key);
 3441|       |                     if constexpr (Opts.partial_read) {
 3442|       |                        if (read_count == value.size()) {
 3443|       |                           return;
 3444|       |                        }
 3445|       |                     }
 3446|       |                     if (bool(ctx.error)) [[unlikely]]
 3447|       |                        return;
 3448|       |                  }
 3449|       |                  else {
 3450|       |                     Key key_value{};
 3451|       |                     if constexpr (is_named_enum<Key> || mimics_str_t<Key>) {
 3452|       |                        parse<JSON>::op<Opts>(key_value, ctx, it, end);
 3453|       |                     }
 3454|       |                     else if constexpr (std::is_arithmetic_v<Key>) {
 3455|       |                        // prefer over quoted_t below to avoid double parsing of quoted_t
 3456|       |                        parse<JSON>::op<opt_true<Opts, quoted_num_opt_tag{}>>(key_value, ctx, it, end);
 3457|       |                     }
 3458|       |                     else {
 3459|       |                        parse<JSON>::op<opt_false<Opts, raw_string_opt_tag{}>>(quoted_t<Key>{key_value}, ctx, it, end);
 3460|       |                     }
 3461|       |                     if (bool(ctx.error)) [[unlikely]]
 3462|       |                        return;
 3463|       |
 3464|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3465|       |                        return;
 3466|       |                     }
 3467|       |
 3468|       |                     reading(key_value);
 3469|       |                     if constexpr (Opts.partial_read) {
 3470|       |                        if (read_count == value.size()) {
 3471|       |                           return;
 3472|       |                        }
 3473|       |                     }
 3474|       |                     if (bool(ctx.error)) [[unlikely]]
 3475|       |                        return;
 3476|       |                  }
 3477|       |               }
 3478|       |
 3479|       |               // Streaming refill point: after parsing each key-value pair, refill if buffer is low
 3480|       |               if constexpr (has_streaming_state<decltype(ctx)>) {
 3481|       |                  if (ctx.stream.enabled()) {
 3482|       |                     const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 3483|       |                     // Refill when less than 25% of buffer remains to ensure enough space for next element
 3484|       |                     if (ctx.stream.size() - consumed <= ctx.stream.size() / 4 || it >= end) {
 3485|       |                        const char* new_it;
 3486|       |                        const char* new_end;
 3487|       |                        ctx.stream.consume_and_refill(consumed, new_it, new_end);
 3488|       |                        it = new_it;
 3489|       |                        end = new_end;
 3490|       |                        if (it >= end && ctx.stream.at_eof()) {
 3491|       |                           ctx.error = error_code::unexpected_end;
 3492|       |                           return;
 3493|       |                        }
 3494|       |                     }
 3495|       |                  }
 3496|       |               }
 3497|       |
 3498|  21.8k|               if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3498:20): [True: 85, False: 21.7k]
  ------------------
 3499|     85|                  return;
 3500|     85|               }
 3501|  21.8k|            }
 3502|  27.8k|         }
 3503|  27.8k|      }
_ZZN3glz4fromILj10EN9repe_fuzz6nestedEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnNS_14string_literalEXtlNS6_ILm1EEEEERS2_TkNS_10is_contextERNS_7contextERPKcSC_EEvOT1_OT2_OT3_T4_ENKUlvE_clEv:
 3148|  16.9k|            decltype(auto) fields = [&]() -> decltype(auto) {
 3149|       |               if constexpr ((glaze_object_t<T> || reflectable<T>) &&
 3150|       |                             (Opts.error_on_missing_keys || Opts.partial_read)) {
 3151|       |                  return bit_array<num_members>{};
 3152|       |               }
 3153|  16.9k|               else {
 3154|  16.9k|                  return nullptr;
 3155|  16.9k|               }
 3156|  16.9k|            }();
_ZN3glz16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz6nestedERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT3_OT4_OT5_DpOT2_:
  376|  23.9k|   {
  377|  23.9k|      constexpr auto N = reflect<T>::size;
  378|       |
  379|       |      if constexpr (N == 1) {
  380|       |         decode_index<Opts, T, 0>(value, ctx, it, end, selected_index...);
  381|       |      }
  382|       |      else if constexpr (check_linear_search(Opts)) {
  383|       |         // Linear search path
  384|       |         auto key_start = it;
  385|       |         const auto index = decode_linear<T>(ctx, it, end);
  386|       |         if (bool(ctx.error)) [[unlikely]]
  387|       |            return;
  388|       |
  389|       |         if (index >= N) [[unlikely]] {
  390|       |            if constexpr (Opts.error_on_unknown_keys) {
  391|       |               ctx.error = error_code::unknown_key;
  392|       |               return;
  393|       |            }
  394|       |            else {
  395|       |               // it sits one past the closing quote, so the raw key spans [key_start, it - 1)
  396|       |               if (validate_utf8_span<Opts>(ctx, key_start, it - 1)) [[unlikely]] {
  397|       |                  return;
  398|       |               }
  399|       |               const sv key{key_start, size_t(it - key_start - 1)};
  400|       |               if constexpr (not Opts.null_terminated) {
  401|       |                  if (it == end) [[unlikely]] {
  402|       |                     ctx.error = error_code::unexpected_end;
  403|       |                     return;
  404|       |                  }
  405|       |               }
  406|       |               if (parse_ws_colon<Opts>(ctx, it, end)) {
  407|       |                  return;
  408|       |               }
  409|       |               parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
  410|       |               return;
  411|       |            }
  412|       |         }
  413|       |
  414|       |         if constexpr (not Opts.null_terminated) {
  415|       |            if (it == end) [[unlikely]] {
  416|       |               ctx.error = error_code::unexpected_end;
  417|       |               return;
  418|       |            }
  419|       |         }
  420|       |         if (skip_ws<Opts>(ctx, it, end)) {
  421|       |            return;
  422|       |         }
  423|       |         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  424|       |            return;
  425|       |         }
  426|       |         if (skip_ws<Opts>(ctx, it, end)) {
  427|       |            return;
  428|       |         }
  429|       |
  430|       |         // Fold expression dispatch - avoids jump table overhead for smaller binary size.
  431|       |         // For linear_search, pass Opts through to the field parser to avoid duplicate template
  432|       |         // instantiations; the whitespace before the value has already been skipped either way.
  433|       |         [&]<size_t... Is>(std::index_sequence<Is...>) {
  434|       |            (void)(((index == Is ? (decode_field_value<Opts, Opts, T, Is>(value, ctx, it, end, selected_index...), true)
  435|       |                                 : false) ||
  436|       |                    ...));
  437|       |         }(std::make_index_sequence<N>{});
  438|       |      }
  439|  23.9k|      else {
  440|       |         // Hash-based lookup
  441|  23.9k|         constexpr auto& HashInfo = hash_info<T>;
  442|  23.9k|         constexpr auto type = HashInfo.type;
  443|  23.9k|         static_assert(bool(type), "invalid hash algorithm");
  444|       |
  445|  23.9k|         const auto index = decode_hash<JSON, T, HashInfo, HashInfo.type>::op(it, end);
  446|       |
  447|  23.9k|         if (index >= N) [[unlikely]] {
  ------------------
  |  Branch (447:14): [True: 0, False: 23.9k]
  ------------------
  448|      0|            if constexpr (Opts.error_on_unknown_keys) {
  449|      0|               ctx.error = error_code::unknown_key;
  450|      0|               return;
  451|       |            }
  452|       |            else {
  453|       |               auto start = it;
  454|       |               skip_string_view(ctx, it, end);
  455|       |               if (bool(ctx.error)) [[unlikely]]
  456|       |                  return;
  457|       |               if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
  458|       |                  return;
  459|       |               const sv key = {start, size_t(it - start)};
  460|       |               ++it; // skip the quote
  461|       |               if constexpr (not Opts.null_terminated) {
  462|       |                  if (it == end) [[unlikely]] {
  463|       |                     ctx.error = error_code::unexpected_end;
  464|       |                     return;
  465|       |                  }
  466|       |               }
  467|       |               if (parse_ws_colon<Opts>(ctx, it, end)) {
  468|       |                  return;
  469|       |               }
  470|       |               parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
  471|       |               return;
  472|       |            }
  473|      0|         }
  474|       |
  475|  23.9k|         if constexpr (N == 2) {
  476|  23.9k|            if (index == 0) {
  ------------------
  |  Branch (476:17): [True: 198, False: 23.7k]
  ------------------
  477|    198|               decode_index<Opts, T, 0>(value, ctx, it, end, selected_index...);
  478|    198|            }
  479|  23.7k|            else {
  480|  23.7k|               decode_index<Opts, T, 1>(value, ctx, it, end, selected_index...);
  481|  23.7k|            }
  482|       |         }
  483|       |         else {
  484|       |            visit<N>([&]<size_t I>() { decode_index<Opts, T, I>(value, ctx, it, end, selected_index...); }, index);
  485|       |         }
  486|  23.9k|      }
  487|  23.9k|   }
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz6nestedELm0ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|    198|   {
  312|    198|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|    198|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|    198|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|    198|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 190, False: 8]
  |  Branch (316:36): [True: 0, False: 190]
  ------------------
  317|      0|         it += Length;
  318|      0|         if constexpr (not Opts.null_terminated) {
  319|      0|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 0]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|      0|         }
  324|       |
  325|      0|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 0, False: 0]
  ------------------
  326|      0|            return;
  327|      0|         }
  328|      0|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 0, False: 0]
  ------------------
  329|      0|            return;
  330|      0|         }
  331|      0|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 0, False: 0]
  ------------------
  332|      0|            return;
  333|      0|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|      0|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|      0|      }
  338|    198|      else [[unlikely]] {
  339|    198|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|    198|      }
  341|    198|   }
_ZN3glz24decode_index_unknown_keyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz6nestedERS3_TkNS_10is_contextERNS_7contextERPKcS8_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT2_OT3_T4_:
  177|  14.9k|   {
  178|  14.9k|      if constexpr (Opts.error_on_unknown_keys) {
  179|  14.9k|         ctx.error = error_code::unknown_key;
  180|       |      }
  181|       |      else {
  182|       |         auto* start = it;
  183|       |         skip_string_view(ctx, it, end);
  184|       |         if (bool(ctx.error)) [[unlikely]]
  185|       |            return;
  186|       |         if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
  187|       |            return;
  188|       |         const sv key = {start, size_t(it - start)};
  189|       |         ++it;
  190|       |         if constexpr (not Opts.null_terminated) {
  191|       |            if (it == end) [[unlikely]] {
  192|       |               ctx.error = error_code::unexpected_end;
  193|       |               return;
  194|       |            }
  195|       |         }
  196|       |
  197|       |         if (parse_ws_colon<Opts>(ctx, it, end)) {
  198|       |            return;
  199|       |         }
  200|       |
  201|       |         parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
  202|       |      }
  203|  14.9k|   }
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz6nestedELm1ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|  23.7k|   {
  312|  23.7k|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|  23.7k|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|  23.7k|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|  23.7k|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 22.8k, False: 894]
  |  Branch (316:36): [True: 8.98k, False: 13.9k]
  ------------------
  317|  8.98k|         it += Length;
  318|  8.98k|         if constexpr (not Opts.null_terminated) {
  319|  8.98k|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 8.98k]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|  8.98k|         }
  324|       |
  325|  8.98k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 29, False: 8.95k]
  ------------------
  326|     29|            return;
  327|     29|         }
  328|  8.95k|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 57, False: 8.90k]
  ------------------
  329|     57|            return;
  330|     57|         }
  331|  8.90k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 31, False: 8.86k]
  ------------------
  332|     31|            return;
  333|     31|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|  8.86k|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|  8.86k|      }
  338|  14.7k|      else [[unlikely]] {
  339|  14.7k|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|  14.7k|      }
  341|  23.7k|   }
_ZN3glz18decode_field_valueITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnDaXtlS1_Lj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEEN9repe_fuzz6nestedELm1ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT1_E11reflectableISA_EEEvOT3_OT5_OT6_OT7_DpOT4_:
  245|  8.86k|   {
  246|       |      // Check for null value skipping on read
  247|       |      if constexpr (check_skip_null_members_on_read(Opts)) {
  248|       |         if (*it == 'n') {
  249|       |            ++it;
  250|       |            if constexpr (not Opts.null_terminated) {
  251|       |               if (it == end) [[unlikely]] {
  252|       |                  ctx.error = error_code::unexpected_end;
  253|       |                  return;
  254|       |               }
  255|       |            }
  256|       |            match<"ull", Opts>(ctx, it, end);
  257|       |            if (bool(ctx.error)) [[unlikely]]
  258|       |               return;
  259|       |            // Successfully matched "null", skip it
  260|       |            if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  261|       |               ((selected_index = I), ...); // Mark as handled even if skipped
  262|       |            }
  263|       |            return;
  264|       |         }
  265|       |      }
  266|       |
  267|       |      if constexpr (skipped_by_meta<T, I, operation::parse>) {
  268|       |         skip_value<JSON>::op<Opts>(ctx, it, end);
  269|       |         if (bool(ctx.error)) [[unlikely]]
  270|       |            return; // Propagate error from skip_value
  271|       |      }
  272|  8.86k|      else {
  273|  8.86k|         using V = refl_t<T, I>;
  274|       |
  275|       |         if constexpr (const_value_v<V>) {
  276|       |            if constexpr (check_error_on_const_read(Opts)) {
  277|       |               ctx.error = error_code::attempt_const_read;
  278|       |            }
  279|       |            else {
  280|       |               // do not read anything into the const value
  281|       |               skip_value<JSON>::op<Opts>(ctx, it, end);
  282|       |            }
  283|       |         }
  284|       |         else if constexpr (is_function_ptr_or_ref<V>) {
  285|       |            // Function pointers cannot be deserialized from JSON.
  286|       |            // When write_function_pointers is enabled the writer emits a type-name string,
  287|       |            // but there is nothing meaningful to reconstruct on read — just skip the value.
  288|       |            // When write_function_pointers is off the key is never written, so this branch
  289|       |            // is unreachable in that case.
  290|       |            skip_value<JSON>::op<Opts>(ctx, it, end);
  291|       |         }
  292|       |         else if constexpr (glaze_object_t<T>) {
  293|       |            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(reflect<T>::values)),
  294|       |                                                                       ctx, it, end);
  295|       |         }
  296|  8.86k|         else {
  297|  8.86k|            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(to_tie(value))), ctx,
  298|  8.86k|                                                                       it, end);
  299|  8.86k|         }
  300|  8.86k|      }
  301|       |
  302|       |      // The key was present and handled, even when the value itself was skipped
  303|       |      if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  304|       |         ((selected_index = I), ...);
  305|       |      }
  306|  8.86k|   }
_ZN3glz4fromILj10ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEERPKcSC_S7_TkNS_10is_contextERNS_7contextEQntcl15check_is_paddedTL0__EEEvRT2_OT3_OT0_T1_:
 1043|  11.2k|      {
 1044|       |         if constexpr (check_string_as_number(Opts)) {
 1045|       |            auto start = it;
 1046|       |            skip_number<Opts>(ctx, it, end);
 1047|       |            if (bool(ctx.error)) [[unlikely]] {
 1048|       |               return;
 1049|       |            }
 1050|       |            if (start == it) [[unlikely]] {
 1051|       |               ctx.error = error_code::parse_number_failure;
 1052|       |               return;
 1053|       |            }
 1054|       |            value.append(start, size_t(it - start));
 1055|       |         }
 1056|  11.2k|         else {
 1057|  11.2k|            if constexpr (!check_opening_handled(Opts)) {
 1058|       |               if constexpr (!check_ws_handled(Opts)) {
 1059|       |                  if (skip_ws<Opts>(ctx, it, end)) {
 1060|       |                     return;
 1061|       |                  }
 1062|       |               }
 1063|       |
 1064|  11.2k|               if (match_invalid_end<'"', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (1064:20): [True: 42, False: 11.1k]
  ------------------
 1065|     42|                  return;
 1066|     42|               }
 1067|  11.2k|            }
 1068|       |
 1069|  11.2k|            if constexpr (not check_raw_string(Opts)) {
 1070|  11.2k|               static constexpr auto string_padding_bytes = 8;
 1071|       |
 1072|  11.2k|               if (size_t(end - it) >= 8) {
  ------------------
  |  Branch (1072:20): [True: 10.4k, False: 795]
  ------------------
 1073|  10.4k|                  auto start = it;
 1074|  10.4k|                  uint64_t ascii_acc{};
 1075|  10.4k|                  const auto end8 = end - 8;
 1076|  4.75M|                  while (true) {
  ------------------
  |  Branch (1076:26): [True: 4.75M, Folded]
  ------------------
 1077|  4.75M|                     if (it >= end8) [[unlikely]] {
  ------------------
  |  Branch (1077:26): [True: 973, False: 4.75M]
  ------------------
 1078|    973|                        break;
 1079|    973|                     }
 1080|       |
 1081|  4.75M|                     uint64_t chunk;
 1082|  4.75M|                     std::memcpy(&chunk, it, 8);
 1083|       |                     if constexpr (std::endian::native == std::endian::big) {
 1084|       |                        chunk = std::byteswap(chunk);
 1085|       |                     }
 1086|  4.75M|                     ascii_acc |= chunk;
 1087|  4.75M|                     const uint64_t test_chars = has_quote(chunk);
 1088|  4.75M|                     if (test_chars) {
  ------------------
  |  Branch (1088:26): [True: 10.7k, False: 4.73M]
  ------------------
 1089|  10.7k|                        it += (countr_zero(test_chars) >> 3);
 1090|       |
 1091|  10.7k|                        auto* prev = it - 1;
 1092|  26.5k|                        while (*prev == '\\') {
  ------------------
  |  Branch (1092:32): [True: 15.8k, False: 10.7k]
  ------------------
 1093|  15.8k|                           --prev;
 1094|  15.8k|                        }
 1095|  10.7k|                        if (size_t(it - prev) % 2) {
  ------------------
  |  Branch (1095:29): [True: 9.45k, False: 1.24k]
  ------------------
 1096|  9.45k|                           goto continue_decode;
 1097|  9.45k|                        }
 1098|  1.24k|                        ++it; // skip the escaped quote
 1099|  1.24k|                     }
 1100|  4.73M|                     else {
 1101|  4.73M|                        it += 8;
 1102|  4.73M|                     }
 1103|  4.75M|                  }
 1104|       |
 1105|  1.99k|                  while (it[-1] == '\\') [[unlikely]] {
  ------------------
  |  Branch (1105:26): [True: 1.01k, False: 973]
  ------------------
 1106|       |                     // if we ended on an escape character then we need to rewind
 1107|       |                     // because we lost our context
 1108|  1.01k|                     --it;
 1109|  1.01k|                  }
 1110|       |
 1111|       |                  // The byte-wise tail keeps feeding the accumulator: it has to cover every byte of
 1112|       |                  // the string, or a non-ASCII byte reached here would be waved through unvalidated.
 1113|  5.31k|                  for (; it < end; ++it) {
  ------------------
  |  Branch (1113:26): [True: 5.26k, False: 53]
  ------------------
 1114|  5.26k|                     ascii_acc |= uint8_t(*it);
 1115|  5.26k|                     if (*it == '"') {
  ------------------
  |  Branch (1115:26): [True: 966, False: 4.29k]
  ------------------
 1116|    966|                        auto* prev = it - 1;
 1117|  1.58k|                        while (*prev == '\\') {
  ------------------
  |  Branch (1117:32): [True: 622, False: 966]
  ------------------
 1118|    622|                           --prev;
 1119|    622|                        }
 1120|    966|                        if (size_t(it - prev) % 2) {
  ------------------
  |  Branch (1120:29): [True: 920, False: 46]
  ------------------
 1121|    920|                           goto continue_decode;
 1122|    920|                        }
 1123|    966|                     }
 1124|  5.26k|                  }
 1125|       |
 1126|     53|                  ctx.error = error_code::unexpected_end;
 1127|     53|                  return;
 1128|       |
 1129|  10.3k|               continue_decode:
 1130|       |
 1131|  10.3k|                  if (validate_utf8_span<Opts>(ctx, start, it, ascii_acc)) [[unlikely]] {
  ------------------
  |  Branch (1131:23): [True: 260, False: 10.1k]
  ------------------
 1132|    260|                     return;
 1133|    260|                  }
 1134|       |
 1135|  10.1k|                  const auto available_padding = size_t(end - it);
 1136|  10.1k|                  auto n = size_t(it - start);
 1137|  10.1k|                  if (available_padding >= 8) [[likely]] {
  ------------------
  |  Branch (1137:23): [True: 9.43k, False: 683]
  ------------------
 1138|  9.43k|                     value.resize(n + string_padding_bytes);
 1139|       |
 1140|  9.43k|                     auto* p = value.data();
 1141|       |
 1142|  3.03M|                     while (true) {
  ------------------
  |  Branch (1142:29): [True: 3.03M, Folded]
  ------------------
 1143|  3.03M|                        if (start >= it) {
  ------------------
  |  Branch (1143:29): [True: 6.52k, False: 3.02M]
  ------------------
 1144|  6.52k|                           break;
 1145|  6.52k|                        }
 1146|       |
 1147|  3.02M|                        std::memcpy(p, start, 8);
 1148|  3.02M|                        uint64_t swar;
 1149|  3.02M|                        std::memcpy(&swar, p, 8);
 1150|       |                        if constexpr (std::endian::native == std::endian::big) {
 1151|       |                           swar = std::byteswap(swar);
 1152|       |                        }
 1153|       |
 1154|  3.02M|                        constexpr uint64_t lo7_mask = repeat_byte8(0b01111111);
 1155|  3.02M|                        const uint64_t lo7 = swar & lo7_mask;
 1156|  3.02M|                        const uint64_t backslash = (lo7 ^ repeat_byte8('\\')) + lo7_mask;
 1157|  3.02M|                        const uint64_t less_32 = (swar & repeat_byte8(0b01100000)) + lo7_mask;
 1158|  3.02M|                        uint64_t next = ~((backslash & less_32) | swar);
 1159|       |
 1160|  3.02M|                        next &= repeat_byte8(0b10000000);
 1161|  3.02M|                        if (next == 0) {
  ------------------
  |  Branch (1161:29): [True: 2.94M, False: 76.6k]
  ------------------
 1162|  2.94M|                           start += 8;
 1163|  2.94M|                           p += 8;
 1164|  2.94M|                           continue;
 1165|  2.94M|                        }
 1166|       |
 1167|  76.6k|                        next = countr_zero(next) >> 3;
 1168|  76.6k|                        start += next;
 1169|  76.6k|                        if (start >= it) {
  ------------------
  |  Branch (1169:29): [True: 2.73k, False: 73.8k]
  ------------------
 1170|  2.73k|                           break;
 1171|  2.73k|                        }
 1172|       |
 1173|  73.8k|                        if ((*start & 0b11100000) == 0) [[unlikely]] {
  ------------------
  |  Branch (1173:29): [True: 68, False: 73.8k]
  ------------------
 1174|     68|                           ctx.error = error_code::syntax_error;
 1175|     68|                           return;
 1176|     68|                        }
 1177|  73.8k|                        ++start; // skip the escape
 1178|  73.8k|                        if (*start == 'u') {
  ------------------
  |  Branch (1178:29): [True: 20.2k, False: 53.6k]
  ------------------
 1179|  20.2k|                           ++start;
 1180|  20.2k|                           p += next;
 1181|  20.2k|                           const auto mark = start;
 1182|  20.2k|                           const auto offset = handle_unicode_code_point(start, p, end);
 1183|  20.2k|                           if (offset == 0) [[unlikely]] {
  ------------------
  |  Branch (1183:32): [True: 89, False: 20.1k]
  ------------------
 1184|     89|                              ctx.error = error_code::unicode_escape_conversion_failure;
 1185|     89|                              return;
 1186|     89|                           }
 1187|  20.1k|                           n += offset;
 1188|       |                           // escape + u + unicode code points
 1189|  20.1k|                           n -= 2 + uint32_t(start - mark);
 1190|  20.1k|                        }
 1191|  53.6k|                        else {
 1192|  53.6k|                           p += next;
 1193|  53.6k|                           *p = char_unescape_table[uint8_t(*start)];
 1194|  53.6k|                           if (*p == 0) [[unlikely]] {
  ------------------
  |  Branch (1194:32): [True: 17, False: 53.5k]
  ------------------
 1195|     17|                              ctx.error = error_code::invalid_escape;
 1196|     17|                              return;
 1197|     17|                           }
 1198|  53.5k|                           ++p;
 1199|  53.5k|                           ++start;
 1200|  53.5k|                           --n;
 1201|  53.5k|                        }
 1202|  73.8k|                     }
 1203|       |
 1204|  9.26k|                     value.resize(n);
 1205|  9.26k|                     ++it;
 1206|  9.26k|                  }
 1207|    683|                  else {
 1208|       |                     // For large inputs this case of running out of buffer is very rare
 1209|    683|                     value.resize(n);
 1210|    683|                     auto* p = value.data();
 1211|       |
 1212|    683|                     it = start;
 1213|  3.26M|                     while (it < end) [[likely]] {
  ------------------
  |  Branch (1213:29): [True: 3.26M, False: 0]
  ------------------
 1214|  3.26M|                        if (*it == '"') {
  ------------------
  |  Branch (1214:29): [True: 493, False: 3.26M]
  ------------------
 1215|    493|                           value.resize(size_t(p - value.data()));
 1216|    493|                           ++it;
 1217|    493|                           return;
 1218|    493|                        }
 1219|       |
 1220|  3.26M|                        if ((*it & 0b11100000) == 0) [[unlikely]] {
  ------------------
  |  Branch (1220:29): [True: 64, False: 3.26M]
  ------------------
 1221|     64|                           ctx.error = error_code::syntax_error;
 1222|     64|                           return;
 1223|     64|                        }
 1224|       |
 1225|  3.26M|                        *p = *it;
 1226|       |
 1227|  3.26M|                        if (*it == '\\') {
  ------------------
  |  Branch (1227:29): [True: 4.39k, False: 3.26M]
  ------------------
 1228|  4.39k|                           ++it; // skip the escape
 1229|  4.39k|                           if (*it == 'u') {
  ------------------
  |  Branch (1229:32): [True: 1.29k, False: 3.10k]
  ------------------
 1230|  1.29k|                              ++it;
 1231|  1.29k|                              if (!handle_unicode_code_point(it, p, end)) [[unlikely]] {
  ------------------
  |  Branch (1231:35): [True: 97, False: 1.20k]
  ------------------
 1232|     97|                                 ctx.error = error_code::unicode_escape_conversion_failure;
 1233|     97|                                 return;
 1234|     97|                              }
 1235|  1.29k|                           }
 1236|  3.10k|                           else {
 1237|  3.10k|                              *p = char_unescape_table[uint8_t(*it)];
 1238|  3.10k|                              if (*p == 0) [[unlikely]] {
  ------------------
  |  Branch (1238:35): [True: 29, False: 3.07k]
  ------------------
 1239|     29|                                 ctx.error = error_code::invalid_escape;
 1240|     29|                                 return;
 1241|     29|                              }
 1242|  3.07k|                              ++p;
 1243|  3.07k|                              ++it;
 1244|  3.07k|                           }
 1245|  4.39k|                        }
 1246|  3.26M|                        else {
 1247|  3.26M|                           ++it;
 1248|  3.26M|                           ++p;
 1249|  3.26M|                        }
 1250|  3.26M|                     }
 1251|       |
 1252|      0|                     ctx.error = error_code::unexpected_end;
 1253|      0|                  }
 1254|  10.1k|               }
 1255|    795|               else {
 1256|       |                  // For short strings
 1257|       |
 1258|    795|                  std::array<char, 8> buffer{};
 1259|       |
 1260|    795|                  auto* p = buffer.data();
 1261|    795|                  const auto* const utf8_start = it;
 1262|       |
 1263|  1.86k|                  while (it < end) [[likely]] {
  ------------------
  |  Branch (1263:26): [True: 1.72k, False: 138]
  ------------------
 1264|  1.72k|                     *p = *it;
 1265|  1.72k|                     if (*it == '"') {
  ------------------
  |  Branch (1265:26): [True: 588, False: 1.13k]
  ------------------
 1266|    588|                        if (validate_utf8_span<Opts>(ctx, utf8_start, it)) [[unlikely]] {
  ------------------
  |  Branch (1266:29): [True: 145, False: 443]
  ------------------
 1267|    145|                           return;
 1268|    145|                        }
 1269|    443|                        const size_t n = size_t(p - buffer.data());
 1270|    443|#if __has_cpp_attribute(assume) >= 202207L
 1271|    443|                        [[assume(n <= sizeof(buffer))]];
 1272|    443|#endif
 1273|    443|                        value.assign(buffer.data(), n);
 1274|    443|                        ++it;
 1275|    443|                        if constexpr (not Opts.null_terminated) {
 1276|    443|                           if (it == end) {
  ------------------
  |  Branch (1276:32): [True: 125, False: 318]
  ------------------
 1277|    125|                              ctx.error = error_code::end_reached;
 1278|    125|                              return;
 1279|    125|                           }
 1280|    443|                        }
 1281|    318|                        return;
 1282|    588|                     }
 1283|  1.13k|                     else if (*it == '\\') {
  ------------------
  |  Branch (1283:31): [True: 171, False: 967]
  ------------------
 1284|    171|                        ++it; // skip the escape
 1285|    171|                        if constexpr (not Opts.null_terminated) {
 1286|    171|                           if (it == end) [[unlikely]] {
  ------------------
  |  Branch (1286:32): [True: 13, False: 158]
  ------------------
 1287|     13|                              ctx.error = error_code::unexpected_end;
 1288|     13|                              return;
 1289|     13|                           }
 1290|    171|                        }
 1291|    171|                        if (*it == 'u') {
  ------------------
  |  Branch (1291:29): [True: 99, False: 72]
  ------------------
 1292|     99|                           ++it;
 1293|     99|                           if constexpr (not Opts.null_terminated) {
 1294|     99|                              if (it == end) [[unlikely]] {
  ------------------
  |  Branch (1294:35): [True: 7, False: 92]
  ------------------
 1295|      7|                                 ctx.error = error_code::unexpected_end;
 1296|      7|                                 return;
 1297|      7|                              }
 1298|     99|                           }
 1299|     99|                           if (!handle_unicode_code_point(it, p, end)) [[unlikely]] {
  ------------------
  |  Branch (1299:32): [True: 35, False: 64]
  ------------------
 1300|     35|                              ctx.error = error_code::unicode_escape_conversion_failure;
 1301|     35|                              return;
 1302|     35|                           }
 1303|     99|                        }
 1304|     72|                        else {
 1305|     72|                           *p = char_unescape_table[uint8_t(*it)];
 1306|     72|                           if (*p == 0) [[unlikely]] {
  ------------------
  |  Branch (1306:32): [True: 12, False: 60]
  ------------------
 1307|     12|                              ctx.error = error_code::invalid_escape;
 1308|     12|                              return;
 1309|     12|                           }
 1310|     60|                           ++p;
 1311|     60|                           ++it;
 1312|     60|                        }
 1313|    171|                     }
 1314|    967|                     else if ((*it & 0b11100000) == 0) [[unlikely]] {
  ------------------
  |  Branch (1314:31): [True: 22, False: 945]
  ------------------
 1315|     22|                        ctx.error = error_code::syntax_error;
 1316|     22|                        return;
 1317|     22|                     }
 1318|    945|                     else {
 1319|    945|                        ++it;
 1320|    945|                        ++p;
 1321|    945|                     }
 1322|  1.72k|                  }
 1323|       |
 1324|    138|                  ctx.error = error_code::unexpected_end;
 1325|    138|               }
 1326|       |            }
 1327|       |            else {
 1328|       |               // raw_string
 1329|       |               auto start = it;
 1330|       |               skip_string_view(ctx, it, end);
 1331|       |               if (bool(ctx.error)) [[unlikely]]
 1332|       |                  return;
 1333|       |
 1334|       |               if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]] {
 1335|       |                  return;
 1336|       |               }
 1337|       |
 1338|       |               value.assign(start, size_t(it - start));
 1339|       |               ++it;
 1340|       |            }
 1341|  11.2k|         }
 1342|  11.2k|      }
_ZN3glz5parseILj10EE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz8fuzz_apiETkNS_10is_contextERNS_7contextERPKcSA_EEvOT0_OT1_OT2_T3_:
   49|  24.1k|      {
   50|       |         if constexpr (const_value_v<T>) {
   51|       |            if constexpr (check_error_on_const_read(Opts)) {
   52|       |               ctx.error = error_code::attempt_const_read;
   53|       |            }
   54|       |            else {
   55|       |               // do not read anything into the const value
   56|       |               skip_value<JSON>::op<Opts>(std::forward<Ctx>(ctx), std::forward<It0>(it), end);
   57|       |            }
   58|       |         }
   59|  24.1k|         else {
   60|  24.1k|            using V = std::remove_cvref_t<T>;
   61|  24.1k|            from<JSON, V>::template op<Opts>(std::forward<T>(value), std::forward<Ctx>(ctx), std::forward<It0>(it),
   62|  24.1k|                                             end);
   63|  24.1k|         }
   64|  24.1k|      }
_ZN3glz4fromILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnNS_14string_literalEXtlNS6_ILm1EEEEERS2_TkNS_10is_contextERNS_7contextERPKcSC_EEvOT1_OT2_OT3_T4_:
 3044|  24.1k|      {
 3045|  24.1k|         static constexpr auto num_members = reflect<T>::size;
 3046|       |
 3047|  24.1k|         static constexpr auto Opts = opening_handled_off<ws_handled_off<Options>()>();
 3048|  24.1k|         if constexpr (!check_opening_handled(Options)) {
 3049|  24.1k|            if constexpr (!check_ws_handled(Options)) {
 3050|  24.1k|               if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3050:20): [True: 55, False: 24.0k]
  ------------------
 3051|     55|                  return;
 3052|     55|               }
 3053|  24.1k|            }
 3054|  24.1k|            if (match_invalid_end<'{', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3054:17): [True: 9.26k, False: 14.8k]
  ------------------
 3055|  9.26k|               return;
 3056|  9.26k|            }
 3057|  14.8k|            if constexpr (not Opts.null_terminated) {
 3058|  14.8k|               if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3058:20): [True: 0, False: 14.8k]
  ------------------
 3059|      0|                  ctx.error = error_code::unexpected_end;
 3060|      0|                  return;
 3061|      0|               }
 3062|  14.8k|            }
 3063|       |            // one nesting level (see enter_depth): counted in both modes so the limit binds,
 3064|       |            // released at each syntactic close below
 3065|  14.8k|            if (enter_depth(ctx)) [[unlikely]] {
  ------------------
  |  Branch (3065:17): [True: 0, False: 14.8k]
  ------------------
 3066|      0|               return;
 3067|      0|            }
 3068|  14.8k|         }
 3069|  14.8k|         const auto ws_start = it;
 3070|  24.1k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3070:14): [True: 46, False: 24.0k]
  ------------------
 3071|     46|            return;
 3072|     46|         }
 3073|  24.0k|         const size_t ws_size = size_t(it - ws_start);
 3074|       |
 3075|       |         if constexpr ((glaze_object_t<T> || reflectable<T>) && num_members == 0 && Opts.error_on_unknown_keys) {
 3076|       |            if constexpr (not tag.sv().empty()) {
 3077|       |               if (*it == '"') {
 3078|       |                  ++it;
 3079|       |                  if constexpr (not Opts.null_terminated) {
 3080|       |                     if (it == end) [[unlikely]] {
 3081|       |                        ctx.error = error_code::unexpected_end;
 3082|       |                        return;
 3083|       |                     }
 3084|       |                  }
 3085|       |
 3086|       |                  const auto start = it;
 3087|       |                  skip_string_view(ctx, it, end);
 3088|       |                  if (bool(ctx.error)) [[unlikely]]
 3089|       |                     return;
 3090|       |                  if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3091|       |                     return;
 3092|       |                  const sv key{start, size_t(it - start)};
 3093|       |                  ++it;
 3094|       |                  if constexpr (not Opts.null_terminated) {
 3095|       |                     if (it == end) [[unlikely]] {
 3096|       |                        ctx.error = error_code::unexpected_end;
 3097|       |                        return;
 3098|       |                     }
 3099|       |                  }
 3100|       |
 3101|       |                  if (key == tag.sv()) {
 3102|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3103|       |                        return;
 3104|       |                     }
 3105|       |
 3106|       |                     parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3107|       |                     if (bool(ctx.error)) [[unlikely]]
 3108|       |                        return;
 3109|       |
 3110|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 3111|       |                        return;
 3112|       |                     }
 3113|       |                  }
 3114|       |                  else {
 3115|       |                     ctx.error = error_code::unknown_key;
 3116|       |                     return;
 3117|       |                  }
 3118|       |               }
 3119|       |            }
 3120|       |
 3121|       |            if (*it == '}') [[likely]] {
 3122|       |               --ctx.depth;
 3123|       |               if constexpr (glaze_object_t<T> || reflectable<T>) {
 3124|       |                  if constexpr (has_self_constraint_v<T> && !check_skip_self_constraint(Opts)) {
 3125|       |                     auto wrapper = self_constraint_v<T>(value);
 3126|       |                     from<JSON, decltype(wrapper)>::template op<ws_handled<Opts>()>(wrapper, ctx, it, end);
 3127|       |                     if (bool(ctx.error)) {
 3128|       |                        return;
 3129|       |                     }
 3130|       |                  }
 3131|       |               }
 3132|       |               ++it;
 3133|       |               if constexpr (not Opts.null_terminated) {
 3134|       |                  if (it == end) {
 3135|       |                     ctx.error = error_code::end_reached;
 3136|       |                     return;
 3137|       |                  }
 3138|       |               }
 3139|       |               if constexpr (Opts.partial_read) {
 3140|       |                  ctx.error = error_code::partial_read_complete;
 3141|       |               }
 3142|       |               return;
 3143|       |            }
 3144|       |            ctx.error = error_code::unknown_key;
 3145|       |            return;
 3146|       |         }
 3147|  24.0k|         else {
 3148|  24.0k|            decltype(auto) fields = [&]() -> decltype(auto) {
 3149|  24.0k|               if constexpr ((glaze_object_t<T> || reflectable<T>) &&
 3150|  24.0k|                             (Opts.error_on_missing_keys || Opts.partial_read)) {
 3151|  24.0k|                  return bit_array<num_members>{};
 3152|  24.0k|               }
 3153|  24.0k|               else {
 3154|  24.0k|                  return nullptr;
 3155|  24.0k|               }
 3156|  24.0k|            }();
 3157|       |
 3158|  24.0k|            size_t read_count{}; // for partial_read
 3159|       |
 3160|  24.0k|            bool first = true;
 3161|  91.4k|            while (true) {
  ------------------
  |  Branch (3161:20): [True: 68.0k, Folded]
  ------------------
 3162|       |               if constexpr ((glaze_object_t<T> || reflectable<T>) && Opts.partial_read) {
 3163|       |                  static constexpr bit_array<num_members> all_fields = [] {
 3164|       |                     bit_array<num_members> arr{};
 3165|       |                     for (size_t i = 0; i < num_members; ++i) {
 3166|       |                        arr[i] = true;
 3167|       |                     }
 3168|       |                     return arr;
 3169|       |                  }();
 3170|       |
 3171|       |                  if ((all_fields & fields) == all_fields) {
 3172|       |                     ctx.error = error_code::partial_read_complete;
 3173|       |                     --ctx.depth; // as above: an early success still closes this level
 3174|       |                     return;
 3175|       |                  }
 3176|       |               }
 3177|       |
 3178|       |               // Streaming refill point: at start of each iteration, ensure buffer has data
 3179|       |               if constexpr (has_streaming_state<decltype(ctx)>) {
 3180|       |                  if (ctx.stream.enabled()) {
 3181|       |                     const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 3182|       |                     const size_t remaining = ctx.stream.size() - consumed;
 3183|       |                     // Refill when less than half of buffer remains to ensure space for next key-value pair
 3184|       |                     if (remaining <= ctx.stream.size() / 2 || it >= end) {
 3185|       |                        const char* new_it;
 3186|       |                        const char* new_end;
 3187|       |                        ctx.stream.consume_and_refill(consumed, new_it, new_end);
 3188|       |                        it = new_it;
 3189|       |                        end = new_end;
 3190|       |                        if (it >= end && ctx.stream.at_eof()) {
 3191|       |                           ctx.error = error_code::unexpected_end;
 3192|       |                           return;
 3193|       |                        }
 3194|       |                     }
 3195|       |                  }
 3196|       |               }
 3197|       |
 3198|  68.0k|               if (*it == '}') {
  ------------------
  |  Branch (3198:20): [True: 53, False: 67.9k]
  ------------------
 3199|     53|                  --ctx.depth;
 3200|       |                  if constexpr ((glaze_object_t<T> || reflectable<T>) && Opts.error_on_missing_keys) {
 3201|       |                     constexpr auto req_fields = required_fields<T, Opts>();
 3202|       |                     if ((req_fields & fields) != req_fields) {
 3203|       |                        for (size_t i = 0; i < num_members; ++i) {
 3204|       |                           if (not fields[i] && req_fields[i]) {
 3205|       |                              ctx.custom_error_message = reflect<T>::keys[i];
 3206|       |                              // We just return the first missing key in order to avoid heap allocations
 3207|       |                              break;
 3208|       |                           }
 3209|       |                        }
 3210|       |
 3211|       |                        ctx.error = error_code::missing_key;
 3212|       |                        return;
 3213|       |                     }
 3214|       |                  }
 3215|     53|                  if constexpr (glaze_object_t<T> || reflectable<T>) {
 3216|       |                     if constexpr (has_self_constraint_v<T> && !check_skip_self_constraint(Opts)) {
 3217|       |                        auto wrapper = self_constraint_v<T>(value);
 3218|       |                        from<JSON, decltype(wrapper)>::template op<ws_handled<Opts>()>(wrapper, ctx, it, end);
 3219|       |                        if (bool(ctx.error)) {
 3220|       |                           return;
 3221|       |                        }
 3222|       |                     }
 3223|     53|                  }
 3224|     53|                  ++it; // Increment after checking for missing keys so errors are within buffer bounds
 3225|     53|                  if constexpr (not Opts.null_terminated) {
 3226|     53|                     if (it == end) {
  ------------------
  |  Branch (3226:26): [True: 14, False: 39]
  ------------------
 3227|     14|                        ctx.error = error_code::end_reached;
 3228|     14|                        return;
 3229|     14|                     }
 3230|     53|                  }
 3231|     39|                  return;
 3232|     53|               }
 3233|  67.9k|               else if (first) {
  ------------------
  |  Branch (3233:25): [True: 14.6k, False: 53.3k]
  ------------------
 3234|  14.6k|                  first = false;
 3235|  14.6k|               }
 3236|  53.3k|               else {
 3237|  53.3k|                  if (match_invalid_end<',', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3237:23): [True: 389, False: 52.9k]
  ------------------
 3238|    389|                     return;
 3239|    389|                  }
 3240|  52.9k|                  if constexpr (not Opts.null_terminated) {
 3241|  52.9k|                     if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3241:26): [True: 0, False: 52.9k]
  ------------------
 3242|      0|                        ctx.error = error_code::unexpected_end;
 3243|      0|                        return;
 3244|      0|                     }
 3245|  52.9k|                  }
 3246|       |
 3247|       |                  if constexpr ((not Opts.minified) && (num_members > 1 || not Opts.error_on_unknown_keys) &&
 3248|  52.9k|                                (!Opts.comments)) {
 3249|  52.9k|                     if (ws_size && ws_size < size_t(end - it)) {
  ------------------
  |  Branch (3249:26): [True: 33.1k, False: 19.8k]
  |  Branch (3249:37): [True: 32.6k, False: 452]
  ------------------
 3250|  32.6k|                        skip_matching_ws(ws_start, it, ws_size);
 3251|  32.6k|                     }
 3252|  52.9k|                  }
 3253|       |
 3254|  52.9k|                  if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3254:23): [True: 59, False: 52.8k]
  ------------------
 3255|     59|                     return;
 3256|     59|                  }
 3257|  52.9k|               }
 3258|       |
 3259|  67.5k|               constexpr auto reflection_type = glaze_object_t<T> || reflectable<T>;
  ------------------
  |  Branch (3259:49): [Folded, False: 0]
  |  Branch (3259:70): [True: 0, Folded]
  ------------------
 3260|       |
 3261|       |               if constexpr (reflection_type && (num_members == 0)) {
 3262|       |                  if constexpr (Opts.error_on_unknown_keys) {
 3263|       |                     static_assert(false_v<T>, "This should be unreachable");
 3264|       |                  }
 3265|       |                  else {
 3266|       |                     if (match_invalid_end<'"', Opts>(ctx, it, end)) {
 3267|       |                        return;
 3268|       |                     }
 3269|       |
 3270|       |                     // parsing to an empty object, but at this point the JSON presents keys
 3271|       |
 3272|       |                     // Unknown key handler does not unescape keys. Unknown escaped keys are
 3273|       |                     // handled by the user.
 3274|       |
 3275|       |                     const auto start = it;
 3276|       |                     skip_string_view(ctx, it, end);
 3277|       |                     if (bool(ctx.error)) [[unlikely]]
 3278|       |                        return;
 3279|       |                     if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3280|       |                        return;
 3281|       |                     const sv key{start, size_t(it - start)};
 3282|       |                     ++it;
 3283|       |                     if constexpr (not Opts.null_terminated) {
 3284|       |                        if (it == end) [[unlikely]] {
 3285|       |                           ctx.error = error_code::unexpected_end;
 3286|       |                           return;
 3287|       |                        }
 3288|       |                     }
 3289|       |
 3290|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3291|       |                        return;
 3292|       |                     }
 3293|       |
 3294|       |                     // Check if this key is the variant tag that should be skipped
 3295|       |                     if constexpr (not tag.sv().empty()) {
 3296|       |                        if (key == tag.sv()) {
 3297|       |                           // Skip the tag value
 3298|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3299|       |                           if (bool(ctx.error)) [[unlikely]]
 3300|       |                              return;
 3301|       |                           resync_window_end(ctx, end); // a streaming skip refills
 3302|       |                           if (skip_ws<Opts>(ctx, it, end)) {
 3303|       |                              return;
 3304|       |                           }
 3305|       |                           continue;
 3306|       |                        }
 3307|       |                     }
 3308|       |
 3309|       |                     parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3310|       |                     if (bool(ctx.error)) [[unlikely]]
 3311|       |                        return;
 3312|       |                     if constexpr (not Opts.null_terminated) {
 3313|       |                        if (it == end) [[unlikely]] {
 3314|       |                           ctx.error = error_code::unexpected_end;
 3315|       |                           return;
 3316|       |                        }
 3317|       |                     }
 3318|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 3319|       |                        return;
 3320|       |                     }
 3321|       |                  }
 3322|       |               }
 3323|  67.5k|               else if constexpr (reflection_type) {
 3324|  67.5k|                  static_assert(bool(hash_info<T>.type));
 3325|       |
 3326|  67.5k|                  if (*it != '"') [[unlikely]] {
  ------------------
  |  Branch (3326:23): [True: 749, False: 66.7k]
  ------------------
 3327|    749|                     ctx.error = error_code::expected_quote;
 3328|    749|                     return;
 3329|    749|                  }
 3330|  66.7k|                  ++it;
 3331|  66.7k|                  if constexpr (not Opts.null_terminated) {
 3332|  66.7k|                     if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3332:26): [True: 21, False: 66.7k]
  ------------------
 3333|     21|                        ctx.error = error_code::unexpected_end;
 3334|     21|                        return;
 3335|     21|                     }
 3336|  66.7k|                  }
 3337|       |
 3338|       |                  if constexpr (not tag.sv().empty() && not contains_tag<T, tag>()) {
 3339|       |                     // For tagged variants we first check to see if the key matches the tag
 3340|       |                     // We only need to do this if the tag is not part of the keys
 3341|       |
 3342|       |                     const auto start = it;
 3343|       |                     skip_string_view(ctx, it, end);
 3344|       |                     if (bool(ctx.error)) [[unlikely]]
 3345|       |                        return;
 3346|       |                     if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3347|       |                        return;
 3348|       |                     const sv key{start, size_t(it - start)};
 3349|       |                     ++it;
 3350|       |                     if constexpr (not Opts.null_terminated) {
 3351|       |                        if (it == end) [[unlikely]] {
 3352|       |                           ctx.error = error_code::unexpected_end;
 3353|       |                           return;
 3354|       |                        }
 3355|       |                     }
 3356|       |
 3357|       |                     if (key == tag.sv()) {
 3358|       |                        if (parse_ws_colon<Opts>(ctx, it, end)) {
 3359|       |                           return;
 3360|       |                        }
 3361|       |
 3362|       |                        parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3363|       |                        if (bool(ctx.error)) [[unlikely]]
 3364|       |                           return;
 3365|       |
 3366|       |                        if (skip_ws<Opts>(ctx, it, end)) {
 3367|       |                           return;
 3368|       |                        }
 3369|       |                        continue;
 3370|       |                     }
 3371|       |                     else {
 3372|       |                        it = start; // reset the iterator
 3373|       |                     }
 3374|       |                  }
 3375|       |
 3376|       |                  if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
 3377|       |                     size_t index = num_members;
 3378|       |                     parse_and_invoke<Opts, T>(value, ctx, it, end, index);
 3379|       |                     if (bool(ctx.error)) [[unlikely]]
 3380|       |                        return;
 3381|       |                     if (index < num_members) {
 3382|       |                        fields[index] = true;
 3383|       |                     }
 3384|       |                  }
 3385|  66.7k|                  else {
 3386|  66.7k|                     parse_and_invoke<Opts, T>(value, ctx, it, end);
 3387|  66.7k|                     if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (3387:26): [True: 13.3k, False: 53.4k]
  ------------------
 3388|  13.3k|                        return;
 3389|  66.7k|                  }
 3390|       |               }
 3391|       |               else {
 3392|       |                  // For types like std::map, std::unordered_map
 3393|       |
 3394|       |                  auto reading = [&](auto&& key) {
 3395|       |                     if constexpr (Opts.partial_read) {
 3396|       |                        if (auto element = value.find(key); element != value.end()) {
 3397|       |                           ++read_count;
 3398|       |                           parse<JSON>::op<ws_handled<Opts>()>(element->second, ctx, it, end);
 3399|       |                        }
 3400|       |                        else {
 3401|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3402|       |                        }
 3403|       |                     }
 3404|       |                     else {
 3405|       |                        parse<JSON>::op<ws_handled<Opts>()>(value[key], ctx, it, end);
 3406|       |                     }
 3407|       |                  };
 3408|       |
 3409|       |                  // using Key = std::conditional_t<heterogeneous_map<T>, sv, typename T::key_type>;
 3410|       |                  using Key = typename T::key_type;
 3411|       |                  if constexpr (std::is_same_v<Key, std::string>) {
 3412|       |                     ctx.scratch.clear();
 3413|       |                     parse<JSON>::op<Opts>(ctx.scratch, ctx, it, end);
 3414|       |                     if (bool(ctx.error)) [[unlikely]]
 3415|       |                        return;
 3416|       |
 3417|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3418|       |                        return;
 3419|       |                     }
 3420|       |
 3421|       |                     reading(ctx.scratch);
 3422|       |                     if constexpr (Opts.partial_read) {
 3423|       |                        if (read_count == value.size()) {
 3424|       |                           return;
 3425|       |                        }
 3426|       |                     }
 3427|       |                     if (bool(ctx.error)) [[unlikely]]
 3428|       |                        return;
 3429|       |                  }
 3430|       |                  else if constexpr (str_t<Key>) {
 3431|       |                     Key key;
 3432|       |                     parse<JSON>::op<Opts>(key, ctx, it, end);
 3433|       |                     if (bool(ctx.error)) [[unlikely]]
 3434|       |                        return;
 3435|       |
 3436|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3437|       |                        return;
 3438|       |                     }
 3439|       |
 3440|       |                     reading(key);
 3441|       |                     if constexpr (Opts.partial_read) {
 3442|       |                        if (read_count == value.size()) {
 3443|       |                           return;
 3444|       |                        }
 3445|       |                     }
 3446|       |                     if (bool(ctx.error)) [[unlikely]]
 3447|       |                        return;
 3448|       |                  }
 3449|       |                  else {
 3450|       |                     Key key_value{};
 3451|       |                     if constexpr (is_named_enum<Key> || mimics_str_t<Key>) {
 3452|       |                        parse<JSON>::op<Opts>(key_value, ctx, it, end);
 3453|       |                     }
 3454|       |                     else if constexpr (std::is_arithmetic_v<Key>) {
 3455|       |                        // prefer over quoted_t below to avoid double parsing of quoted_t
 3456|       |                        parse<JSON>::op<opt_true<Opts, quoted_num_opt_tag{}>>(key_value, ctx, it, end);
 3457|       |                     }
 3458|       |                     else {
 3459|       |                        parse<JSON>::op<opt_false<Opts, raw_string_opt_tag{}>>(quoted_t<Key>{key_value}, ctx, it, end);
 3460|       |                     }
 3461|       |                     if (bool(ctx.error)) [[unlikely]]
 3462|       |                        return;
 3463|       |
 3464|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3465|       |                        return;
 3466|       |                     }
 3467|       |
 3468|       |                     reading(key_value);
 3469|       |                     if constexpr (Opts.partial_read) {
 3470|       |                        if (read_count == value.size()) {
 3471|       |                           return;
 3472|       |                        }
 3473|       |                     }
 3474|       |                     if (bool(ctx.error)) [[unlikely]]
 3475|       |                        return;
 3476|       |                  }
 3477|       |               }
 3478|       |
 3479|       |               // Streaming refill point: after parsing each key-value pair, refill if buffer is low
 3480|       |               if constexpr (has_streaming_state<decltype(ctx)>) {
 3481|       |                  if (ctx.stream.enabled()) {
 3482|       |                     const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 3483|       |                     // Refill when less than 25% of buffer remains to ensure enough space for next element
 3484|       |                     if (ctx.stream.size() - consumed <= ctx.stream.size() / 4 || it >= end) {
 3485|       |                        const char* new_it;
 3486|       |                        const char* new_end;
 3487|       |                        ctx.stream.consume_and_refill(consumed, new_it, new_end);
 3488|       |                        it = new_it;
 3489|       |                        end = new_end;
 3490|       |                        if (it >= end && ctx.stream.at_eof()) {
 3491|       |                           ctx.error = error_code::unexpected_end;
 3492|       |                           return;
 3493|       |                        }
 3494|       |                     }
 3495|       |                  }
 3496|       |               }
 3497|       |
 3498|  67.5k|               if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3498:20): [True: 115, False: 67.4k]
  ------------------
 3499|    115|                  return;
 3500|    115|               }
 3501|  67.5k|            }
 3502|  24.0k|         }
 3503|  24.0k|      }
_ZZN3glz4fromILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnNS_14string_literalEXtlNS6_ILm1EEEEERS2_TkNS_10is_contextERNS_7contextERPKcSC_EEvOT1_OT2_OT3_T4_ENKUlvE_clEv:
 3148|  14.7k|            decltype(auto) fields = [&]() -> decltype(auto) {
 3149|       |               if constexpr ((glaze_object_t<T> || reflectable<T>) &&
 3150|       |                             (Opts.error_on_missing_keys || Opts.partial_read)) {
 3151|       |                  return bit_array<num_members>{};
 3152|       |               }
 3153|  14.7k|               else {
 3154|  14.7k|                  return nullptr;
 3155|  14.7k|               }
 3156|  14.7k|            }();
_ZN3glz16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT3_OT4_OT5_DpOT2_:
  376|  66.7k|   {
  377|  66.7k|      constexpr auto N = reflect<T>::size;
  378|       |
  379|       |      if constexpr (N == 1) {
  380|       |         decode_index<Opts, T, 0>(value, ctx, it, end, selected_index...);
  381|       |      }
  382|       |      else if constexpr (check_linear_search(Opts)) {
  383|       |         // Linear search path
  384|       |         auto key_start = it;
  385|       |         const auto index = decode_linear<T>(ctx, it, end);
  386|       |         if (bool(ctx.error)) [[unlikely]]
  387|       |            return;
  388|       |
  389|       |         if (index >= N) [[unlikely]] {
  390|       |            if constexpr (Opts.error_on_unknown_keys) {
  391|       |               ctx.error = error_code::unknown_key;
  392|       |               return;
  393|       |            }
  394|       |            else {
  395|       |               // it sits one past the closing quote, so the raw key spans [key_start, it - 1)
  396|       |               if (validate_utf8_span<Opts>(ctx, key_start, it - 1)) [[unlikely]] {
  397|       |                  return;
  398|       |               }
  399|       |               const sv key{key_start, size_t(it - key_start - 1)};
  400|       |               if constexpr (not Opts.null_terminated) {
  401|       |                  if (it == end) [[unlikely]] {
  402|       |                     ctx.error = error_code::unexpected_end;
  403|       |                     return;
  404|       |                  }
  405|       |               }
  406|       |               if (parse_ws_colon<Opts>(ctx, it, end)) {
  407|       |                  return;
  408|       |               }
  409|       |               parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
  410|       |               return;
  411|       |            }
  412|       |         }
  413|       |
  414|       |         if constexpr (not Opts.null_terminated) {
  415|       |            if (it == end) [[unlikely]] {
  416|       |               ctx.error = error_code::unexpected_end;
  417|       |               return;
  418|       |            }
  419|       |         }
  420|       |         if (skip_ws<Opts>(ctx, it, end)) {
  421|       |            return;
  422|       |         }
  423|       |         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  424|       |            return;
  425|       |         }
  426|       |         if (skip_ws<Opts>(ctx, it, end)) {
  427|       |            return;
  428|       |         }
  429|       |
  430|       |         // Fold expression dispatch - avoids jump table overhead for smaller binary size.
  431|       |         // For linear_search, pass Opts through to the field parser to avoid duplicate template
  432|       |         // instantiations; the whitespace before the value has already been skipped either way.
  433|       |         [&]<size_t... Is>(std::index_sequence<Is...>) {
  434|       |            (void)(((index == Is ? (decode_field_value<Opts, Opts, T, Is>(value, ctx, it, end, selected_index...), true)
  435|       |                                 : false) ||
  436|       |                    ...));
  437|       |         }(std::make_index_sequence<N>{});
  438|       |      }
  439|  66.7k|      else {
  440|       |         // Hash-based lookup
  441|  66.7k|         constexpr auto& HashInfo = hash_info<T>;
  442|  66.7k|         constexpr auto type = HashInfo.type;
  443|  66.7k|         static_assert(bool(type), "invalid hash algorithm");
  444|       |
  445|  66.7k|         const auto index = decode_hash<JSON, T, HashInfo, HashInfo.type>::op(it, end);
  446|       |
  447|  66.7k|         if (index >= N) [[unlikely]] {
  ------------------
  |  Branch (447:14): [True: 4.73k, False: 62.0k]
  ------------------
  448|  4.73k|            if constexpr (Opts.error_on_unknown_keys) {
  449|  4.73k|               ctx.error = error_code::unknown_key;
  450|  4.73k|               return;
  451|       |            }
  452|       |            else {
  453|       |               auto start = it;
  454|       |               skip_string_view(ctx, it, end);
  455|       |               if (bool(ctx.error)) [[unlikely]]
  456|       |                  return;
  457|       |               if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
  458|       |                  return;
  459|       |               const sv key = {start, size_t(it - start)};
  460|       |               ++it; // skip the quote
  461|       |               if constexpr (not Opts.null_terminated) {
  462|       |                  if (it == end) [[unlikely]] {
  463|       |                     ctx.error = error_code::unexpected_end;
  464|       |                     return;
  465|       |                  }
  466|       |               }
  467|       |               if (parse_ws_colon<Opts>(ctx, it, end)) {
  468|       |                  return;
  469|       |               }
  470|       |               parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
  471|       |               return;
  472|       |            }
  473|  4.73k|         }
  474|       |
  475|       |         if constexpr (N == 2) {
  476|       |            if (index == 0) {
  477|       |               decode_index<Opts, T, 0>(value, ctx, it, end, selected_index...);
  478|       |            }
  479|       |            else {
  480|       |               decode_index<Opts, T, 1>(value, ctx, it, end, selected_index...);
  481|       |            }
  482|       |         }
  483|  66.7k|         else {
  484|  66.7k|            visit<N>([&]<size_t I>() { decode_index<Opts, T, I>(value, ctx, it, end, selected_index...); }, index);
  485|  66.7k|         }
  486|  66.7k|      }
  487|  66.7k|   }
_ZZN3glz16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT3_OT4_OT5_DpOT2_ENKUlTnmvE_clILm0EEEDav:
  484|  40.1k|            visit<N>([&]<size_t I>() { decode_index<Opts, T, I>(value, ctx, it, end, selected_index...); }, index);
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm0ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|  40.1k|   {
  312|  40.1k|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|  40.1k|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|  40.1k|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|  40.1k|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 40.1k, False: 20]
  |  Branch (316:36): [True: 40.0k, False: 97]
  ------------------
  317|  40.0k|         it += Length;
  318|  40.0k|         if constexpr (not Opts.null_terminated) {
  319|  40.0k|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 40.0k]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|  40.0k|         }
  324|       |
  325|  40.0k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 20, False: 39.9k]
  ------------------
  326|     20|            return;
  327|     20|         }
  328|  39.9k|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 34, False: 39.9k]
  ------------------
  329|     34|            return;
  330|     34|         }
  331|  39.9k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 20, False: 39.9k]
  ------------------
  332|     20|            return;
  333|     20|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|  39.9k|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|  39.9k|      }
  338|    117|      else [[unlikely]] {
  339|    117|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|    117|      }
  341|  40.1k|   }
_ZN3glz18decode_field_valueITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnDaXtlS1_Lj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEEN9repe_fuzz8fuzz_apiELm0ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT1_E11reflectableISA_EEEvOT3_OT5_OT6_OT7_DpOT4_:
  245|  39.9k|   {
  246|       |      // Check for null value skipping on read
  247|       |      if constexpr (check_skip_null_members_on_read(Opts)) {
  248|       |         if (*it == 'n') {
  249|       |            ++it;
  250|       |            if constexpr (not Opts.null_terminated) {
  251|       |               if (it == end) [[unlikely]] {
  252|       |                  ctx.error = error_code::unexpected_end;
  253|       |                  return;
  254|       |               }
  255|       |            }
  256|       |            match<"ull", Opts>(ctx, it, end);
  257|       |            if (bool(ctx.error)) [[unlikely]]
  258|       |               return;
  259|       |            // Successfully matched "null", skip it
  260|       |            if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  261|       |               ((selected_index = I), ...); // Mark as handled even if skipped
  262|       |            }
  263|       |            return;
  264|       |         }
  265|       |      }
  266|       |
  267|       |      if constexpr (skipped_by_meta<T, I, operation::parse>) {
  268|       |         skip_value<JSON>::op<Opts>(ctx, it, end);
  269|       |         if (bool(ctx.error)) [[unlikely]]
  270|       |            return; // Propagate error from skip_value
  271|       |      }
  272|  39.9k|      else {
  273|  39.9k|         using V = refl_t<T, I>;
  274|       |
  275|       |         if constexpr (const_value_v<V>) {
  276|       |            if constexpr (check_error_on_const_read(Opts)) {
  277|       |               ctx.error = error_code::attempt_const_read;
  278|       |            }
  279|       |            else {
  280|       |               // do not read anything into the const value
  281|       |               skip_value<JSON>::op<Opts>(ctx, it, end);
  282|       |            }
  283|       |         }
  284|       |         else if constexpr (is_function_ptr_or_ref<V>) {
  285|       |            // Function pointers cannot be deserialized from JSON.
  286|       |            // When write_function_pointers is enabled the writer emits a type-name string,
  287|       |            // but there is nothing meaningful to reconstruct on read — just skip the value.
  288|       |            // When write_function_pointers is off the key is never written, so this branch
  289|       |            // is unreachable in that case.
  290|       |            skip_value<JSON>::op<Opts>(ctx, it, end);
  291|       |         }
  292|       |         else if constexpr (glaze_object_t<T>) {
  293|       |            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(reflect<T>::values)),
  294|       |                                                                       ctx, it, end);
  295|       |         }
  296|  39.9k|         else {
  297|  39.9k|            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(to_tie(value))), ctx,
  298|  39.9k|                                                                       it, end);
  299|  39.9k|         }
  300|  39.9k|      }
  301|       |
  302|       |      // The key was present and handled, even when the value itself was skipped
  303|       |      if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  304|       |         ((selected_index = I), ...);
  305|       |      }
  306|  39.9k|   }
_ZN3glz24decode_index_unknown_keyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS3_TkNS_10is_contextERNS_7contextERPKcS8_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT2_OT3_T4_:
  177|    856|   {
  178|    856|      if constexpr (Opts.error_on_unknown_keys) {
  179|    856|         ctx.error = error_code::unknown_key;
  180|       |      }
  181|       |      else {
  182|       |         auto* start = it;
  183|       |         skip_string_view(ctx, it, end);
  184|       |         if (bool(ctx.error)) [[unlikely]]
  185|       |            return;
  186|       |         if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
  187|       |            return;
  188|       |         const sv key = {start, size_t(it - start)};
  189|       |         ++it;
  190|       |         if constexpr (not Opts.null_terminated) {
  191|       |            if (it == end) [[unlikely]] {
  192|       |               ctx.error = error_code::unexpected_end;
  193|       |               return;
  194|       |            }
  195|       |         }
  196|       |
  197|       |         if (parse_ws_colon<Opts>(ctx, it, end)) {
  198|       |            return;
  199|       |         }
  200|       |
  201|       |         parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
  202|       |      }
  203|    856|   }
_ZZN3glz16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT3_OT4_OT5_DpOT2_ENKUlTnmvE_clILm1EEEDav:
  484|    272|            visit<N>([&]<size_t I>() { decode_index<Opts, T, I>(value, ctx, it, end, selected_index...); }, index);
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm1ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|    272|   {
  312|    272|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|    272|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|    272|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|    272|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 266, False: 6]
  |  Branch (316:36): [True: 184, False: 82]
  ------------------
  317|    184|         it += Length;
  318|    184|         if constexpr (not Opts.null_terminated) {
  319|    184|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 184]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|    184|         }
  324|       |
  325|    184|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 14, False: 170]
  ------------------
  326|     14|            return;
  327|     14|         }
  328|    170|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 16, False: 154]
  ------------------
  329|     16|            return;
  330|     16|         }
  331|    154|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 14, False: 140]
  ------------------
  332|     14|            return;
  333|     14|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|    140|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|    140|      }
  338|     88|      else [[unlikely]] {
  339|     88|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|     88|      }
  341|    272|   }
_ZN3glz18decode_field_valueITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnDaXtlS1_Lj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEEN9repe_fuzz8fuzz_apiELm1ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT1_E11reflectableISA_EEEvOT3_OT5_OT6_OT7_DpOT4_:
  245|    140|   {
  246|       |      // Check for null value skipping on read
  247|       |      if constexpr (check_skip_null_members_on_read(Opts)) {
  248|       |         if (*it == 'n') {
  249|       |            ++it;
  250|       |            if constexpr (not Opts.null_terminated) {
  251|       |               if (it == end) [[unlikely]] {
  252|       |                  ctx.error = error_code::unexpected_end;
  253|       |                  return;
  254|       |               }
  255|       |            }
  256|       |            match<"ull", Opts>(ctx, it, end);
  257|       |            if (bool(ctx.error)) [[unlikely]]
  258|       |               return;
  259|       |            // Successfully matched "null", skip it
  260|       |            if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  261|       |               ((selected_index = I), ...); // Mark as handled even if skipped
  262|       |            }
  263|       |            return;
  264|       |         }
  265|       |      }
  266|       |
  267|       |      if constexpr (skipped_by_meta<T, I, operation::parse>) {
  268|       |         skip_value<JSON>::op<Opts>(ctx, it, end);
  269|       |         if (bool(ctx.error)) [[unlikely]]
  270|       |            return; // Propagate error from skip_value
  271|       |      }
  272|    140|      else {
  273|    140|         using V = refl_t<T, I>;
  274|       |
  275|       |         if constexpr (const_value_v<V>) {
  276|       |            if constexpr (check_error_on_const_read(Opts)) {
  277|       |               ctx.error = error_code::attempt_const_read;
  278|       |            }
  279|       |            else {
  280|       |               // do not read anything into the const value
  281|       |               skip_value<JSON>::op<Opts>(ctx, it, end);
  282|       |            }
  283|       |         }
  284|       |         else if constexpr (is_function_ptr_or_ref<V>) {
  285|       |            // Function pointers cannot be deserialized from JSON.
  286|       |            // When write_function_pointers is enabled the writer emits a type-name string,
  287|       |            // but there is nothing meaningful to reconstruct on read — just skip the value.
  288|       |            // When write_function_pointers is off the key is never written, so this branch
  289|       |            // is unreachable in that case.
  290|       |            skip_value<JSON>::op<Opts>(ctx, it, end);
  291|       |         }
  292|       |         else if constexpr (glaze_object_t<T>) {
  293|       |            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(reflect<T>::values)),
  294|       |                                                                       ctx, it, end);
  295|       |         }
  296|    140|         else {
  297|    140|            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(to_tie(value))), ctx,
  298|    140|                                                                       it, end);
  299|    140|         }
  300|    140|      }
  301|       |
  302|       |      // The key was present and handled, even when the value itself was skipped
  303|       |      if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  304|       |         ((selected_index = I), ...);
  305|       |      }
  306|    140|   }
_ZZN3glz16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT3_OT4_OT5_DpOT2_ENKUlTnmvE_clILm2EEEDav:
  484|  1.04k|            visit<N>([&]<size_t I>() { decode_index<Opts, T, I>(value, ctx, it, end, selected_index...); }, index);
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm2ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|  1.04k|   {
  312|  1.04k|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|  1.04k|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|  1.04k|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|  1.04k|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 1.03k, False: 9]
  |  Branch (316:36): [True: 998, False: 35]
  ------------------
  317|    998|         it += Length;
  318|    998|         if constexpr (not Opts.null_terminated) {
  319|    998|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 998]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|    998|         }
  324|       |
  325|    998|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 14, False: 984]
  ------------------
  326|     14|            return;
  327|     14|         }
  328|    984|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 6, False: 978]
  ------------------
  329|      6|            return;
  330|      6|         }
  331|    978|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 14, False: 964]
  ------------------
  332|     14|            return;
  333|     14|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|    964|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|    964|      }
  338|     44|      else [[unlikely]] {
  339|     44|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|     44|      }
  341|  1.04k|   }
_ZN3glz18decode_field_valueITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnDaXtlS1_Lj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEEN9repe_fuzz8fuzz_apiELm2ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT1_E11reflectableISA_EEEvOT3_OT5_OT6_OT7_DpOT4_:
  245|    964|   {
  246|       |      // Check for null value skipping on read
  247|       |      if constexpr (check_skip_null_members_on_read(Opts)) {
  248|       |         if (*it == 'n') {
  249|       |            ++it;
  250|       |            if constexpr (not Opts.null_terminated) {
  251|       |               if (it == end) [[unlikely]] {
  252|       |                  ctx.error = error_code::unexpected_end;
  253|       |                  return;
  254|       |               }
  255|       |            }
  256|       |            match<"ull", Opts>(ctx, it, end);
  257|       |            if (bool(ctx.error)) [[unlikely]]
  258|       |               return;
  259|       |            // Successfully matched "null", skip it
  260|       |            if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  261|       |               ((selected_index = I), ...); // Mark as handled even if skipped
  262|       |            }
  263|       |            return;
  264|       |         }
  265|       |      }
  266|       |
  267|       |      if constexpr (skipped_by_meta<T, I, operation::parse>) {
  268|       |         skip_value<JSON>::op<Opts>(ctx, it, end);
  269|       |         if (bool(ctx.error)) [[unlikely]]
  270|       |            return; // Propagate error from skip_value
  271|       |      }
  272|    964|      else {
  273|    964|         using V = refl_t<T, I>;
  274|       |
  275|       |         if constexpr (const_value_v<V>) {
  276|       |            if constexpr (check_error_on_const_read(Opts)) {
  277|       |               ctx.error = error_code::attempt_const_read;
  278|       |            }
  279|       |            else {
  280|       |               // do not read anything into the const value
  281|       |               skip_value<JSON>::op<Opts>(ctx, it, end);
  282|       |            }
  283|       |         }
  284|       |         else if constexpr (is_function_ptr_or_ref<V>) {
  285|       |            // Function pointers cannot be deserialized from JSON.
  286|       |            // When write_function_pointers is enabled the writer emits a type-name string,
  287|       |            // but there is nothing meaningful to reconstruct on read — just skip the value.
  288|       |            // When write_function_pointers is off the key is never written, so this branch
  289|       |            // is unreachable in that case.
  290|       |            skip_value<JSON>::op<Opts>(ctx, it, end);
  291|       |         }
  292|       |         else if constexpr (glaze_object_t<T>) {
  293|       |            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(reflect<T>::values)),
  294|       |                                                                       ctx, it, end);
  295|       |         }
  296|    964|         else {
  297|    964|            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(to_tie(value))), ctx,
  298|    964|                                                                       it, end);
  299|    964|         }
  300|    964|      }
  301|       |
  302|       |      // The key was present and handled, even when the value itself was skipped
  303|       |      if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  304|       |         ((selected_index = I), ...);
  305|       |      }
  306|    964|   }
_ZN3glz4fromILj10EN9repe_fuzz5pointEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEETnNS_14string_literalEXtlNS6_ILm1EEEEERS2_TkNS_10is_contextERNS_7contextERPKcSC_EEvOT1_OT2_OT3_T4_:
 3044|    964|      {
 3045|    964|         static constexpr auto num_members = reflect<T>::size;
 3046|       |
 3047|    964|         static constexpr auto Opts = opening_handled_off<ws_handled_off<Options>()>();
 3048|    964|         if constexpr (!check_opening_handled(Options)) {
 3049|       |            if constexpr (!check_ws_handled(Options)) {
 3050|       |               if (skip_ws<Opts>(ctx, it, end)) {
 3051|       |                  return;
 3052|       |               }
 3053|       |            }
 3054|    964|            if (match_invalid_end<'{', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3054:17): [True: 24, False: 940]
  ------------------
 3055|     24|               return;
 3056|     24|            }
 3057|    940|            if constexpr (not Opts.null_terminated) {
 3058|    940|               if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3058:20): [True: 0, False: 940]
  ------------------
 3059|      0|                  ctx.error = error_code::unexpected_end;
 3060|      0|                  return;
 3061|      0|               }
 3062|    940|            }
 3063|       |            // one nesting level (see enter_depth): counted in both modes so the limit binds,
 3064|       |            // released at each syntactic close below
 3065|    940|            if (enter_depth(ctx)) [[unlikely]] {
  ------------------
  |  Branch (3065:17): [True: 0, False: 940]
  ------------------
 3066|      0|               return;
 3067|      0|            }
 3068|    940|         }
 3069|    940|         const auto ws_start = it;
 3070|    964|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3070:14): [True: 14, False: 950]
  ------------------
 3071|     14|            return;
 3072|     14|         }
 3073|    950|         const size_t ws_size = size_t(it - ws_start);
 3074|       |
 3075|       |         if constexpr ((glaze_object_t<T> || reflectable<T>) && num_members == 0 && Opts.error_on_unknown_keys) {
 3076|       |            if constexpr (not tag.sv().empty()) {
 3077|       |               if (*it == '"') {
 3078|       |                  ++it;
 3079|       |                  if constexpr (not Opts.null_terminated) {
 3080|       |                     if (it == end) [[unlikely]] {
 3081|       |                        ctx.error = error_code::unexpected_end;
 3082|       |                        return;
 3083|       |                     }
 3084|       |                  }
 3085|       |
 3086|       |                  const auto start = it;
 3087|       |                  skip_string_view(ctx, it, end);
 3088|       |                  if (bool(ctx.error)) [[unlikely]]
 3089|       |                     return;
 3090|       |                  if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3091|       |                     return;
 3092|       |                  const sv key{start, size_t(it - start)};
 3093|       |                  ++it;
 3094|       |                  if constexpr (not Opts.null_terminated) {
 3095|       |                     if (it == end) [[unlikely]] {
 3096|       |                        ctx.error = error_code::unexpected_end;
 3097|       |                        return;
 3098|       |                     }
 3099|       |                  }
 3100|       |
 3101|       |                  if (key == tag.sv()) {
 3102|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3103|       |                        return;
 3104|       |                     }
 3105|       |
 3106|       |                     parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3107|       |                     if (bool(ctx.error)) [[unlikely]]
 3108|       |                        return;
 3109|       |
 3110|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 3111|       |                        return;
 3112|       |                     }
 3113|       |                  }
 3114|       |                  else {
 3115|       |                     ctx.error = error_code::unknown_key;
 3116|       |                     return;
 3117|       |                  }
 3118|       |               }
 3119|       |            }
 3120|       |
 3121|       |            if (*it == '}') [[likely]] {
 3122|       |               --ctx.depth;
 3123|       |               if constexpr (glaze_object_t<T> || reflectable<T>) {
 3124|       |                  if constexpr (has_self_constraint_v<T> && !check_skip_self_constraint(Opts)) {
 3125|       |                     auto wrapper = self_constraint_v<T>(value);
 3126|       |                     from<JSON, decltype(wrapper)>::template op<ws_handled<Opts>()>(wrapper, ctx, it, end);
 3127|       |                     if (bool(ctx.error)) {
 3128|       |                        return;
 3129|       |                     }
 3130|       |                  }
 3131|       |               }
 3132|       |               ++it;
 3133|       |               if constexpr (not Opts.null_terminated) {
 3134|       |                  if (it == end) {
 3135|       |                     ctx.error = error_code::end_reached;
 3136|       |                     return;
 3137|       |                  }
 3138|       |               }
 3139|       |               if constexpr (Opts.partial_read) {
 3140|       |                  ctx.error = error_code::partial_read_complete;
 3141|       |               }
 3142|       |               return;
 3143|       |            }
 3144|       |            ctx.error = error_code::unknown_key;
 3145|       |            return;
 3146|       |         }
 3147|    950|         else {
 3148|    950|            decltype(auto) fields = [&]() -> decltype(auto) {
 3149|    950|               if constexpr ((glaze_object_t<T> || reflectable<T>) &&
 3150|    950|                             (Opts.error_on_missing_keys || Opts.partial_read)) {
 3151|    950|                  return bit_array<num_members>{};
 3152|    950|               }
 3153|    950|               else {
 3154|    950|                  return nullptr;
 3155|    950|               }
 3156|    950|            }();
 3157|       |
 3158|    950|            size_t read_count{}; // for partial_read
 3159|       |
 3160|    950|            bool first = true;
 3161|  5.89k|            while (true) {
  ------------------
  |  Branch (3161:20): [True: 5.16k, Folded]
  ------------------
 3162|       |               if constexpr ((glaze_object_t<T> || reflectable<T>) && Opts.partial_read) {
 3163|       |                  static constexpr bit_array<num_members> all_fields = [] {
 3164|       |                     bit_array<num_members> arr{};
 3165|       |                     for (size_t i = 0; i < num_members; ++i) {
 3166|       |                        arr[i] = true;
 3167|       |                     }
 3168|       |                     return arr;
 3169|       |                  }();
 3170|       |
 3171|       |                  if ((all_fields & fields) == all_fields) {
 3172|       |                     ctx.error = error_code::partial_read_complete;
 3173|       |                     --ctx.depth; // as above: an early success still closes this level
 3174|       |                     return;
 3175|       |                  }
 3176|       |               }
 3177|       |
 3178|       |               // Streaming refill point: at start of each iteration, ensure buffer has data
 3179|       |               if constexpr (has_streaming_state<decltype(ctx)>) {
 3180|       |                  if (ctx.stream.enabled()) {
 3181|       |                     const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 3182|       |                     const size_t remaining = ctx.stream.size() - consumed;
 3183|       |                     // Refill when less than half of buffer remains to ensure space for next key-value pair
 3184|       |                     if (remaining <= ctx.stream.size() / 2 || it >= end) {
 3185|       |                        const char* new_it;
 3186|       |                        const char* new_end;
 3187|       |                        ctx.stream.consume_and_refill(consumed, new_it, new_end);
 3188|       |                        it = new_it;
 3189|       |                        end = new_end;
 3190|       |                        if (it >= end && ctx.stream.at_eof()) {
 3191|       |                           ctx.error = error_code::unexpected_end;
 3192|       |                           return;
 3193|       |                        }
 3194|       |                     }
 3195|       |                  }
 3196|       |               }
 3197|       |
 3198|  5.16k|               if (*it == '}') {
  ------------------
  |  Branch (3198:20): [True: 111, False: 5.05k]
  ------------------
 3199|    111|                  --ctx.depth;
 3200|       |                  if constexpr ((glaze_object_t<T> || reflectable<T>) && Opts.error_on_missing_keys) {
 3201|       |                     constexpr auto req_fields = required_fields<T, Opts>();
 3202|       |                     if ((req_fields & fields) != req_fields) {
 3203|       |                        for (size_t i = 0; i < num_members; ++i) {
 3204|       |                           if (not fields[i] && req_fields[i]) {
 3205|       |                              ctx.custom_error_message = reflect<T>::keys[i];
 3206|       |                              // We just return the first missing key in order to avoid heap allocations
 3207|       |                              break;
 3208|       |                           }
 3209|       |                        }
 3210|       |
 3211|       |                        ctx.error = error_code::missing_key;
 3212|       |                        return;
 3213|       |                     }
 3214|       |                  }
 3215|    111|                  if constexpr (glaze_object_t<T> || reflectable<T>) {
 3216|       |                     if constexpr (has_self_constraint_v<T> && !check_skip_self_constraint(Opts)) {
 3217|       |                        auto wrapper = self_constraint_v<T>(value);
 3218|       |                        from<JSON, decltype(wrapper)>::template op<ws_handled<Opts>()>(wrapper, ctx, it, end);
 3219|       |                        if (bool(ctx.error)) {
 3220|       |                           return;
 3221|       |                        }
 3222|       |                     }
 3223|    111|                  }
 3224|    111|                  ++it; // Increment after checking for missing keys so errors are within buffer bounds
 3225|    111|                  if constexpr (not Opts.null_terminated) {
 3226|    111|                     if (it == end) {
  ------------------
  |  Branch (3226:26): [True: 3, False: 108]
  ------------------
 3227|      3|                        ctx.error = error_code::end_reached;
 3228|      3|                        return;
 3229|      3|                     }
 3230|    111|                  }
 3231|    108|                  return;
 3232|    111|               }
 3233|  5.05k|               else if (first) {
  ------------------
  |  Branch (3233:25): [True: 873, False: 4.18k]
  ------------------
 3234|    873|                  first = false;
 3235|    873|               }
 3236|  4.18k|               else {
 3237|  4.18k|                  if (match_invalid_end<',', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3237:23): [True: 35, False: 4.14k]
  ------------------
 3238|     35|                     return;
 3239|     35|                  }
 3240|  4.14k|                  if constexpr (not Opts.null_terminated) {
 3241|  4.14k|                     if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3241:26): [True: 0, False: 4.14k]
  ------------------
 3242|      0|                        ctx.error = error_code::unexpected_end;
 3243|      0|                        return;
 3244|      0|                     }
 3245|  4.14k|                  }
 3246|       |
 3247|       |                  if constexpr ((not Opts.minified) && (num_members > 1 || not Opts.error_on_unknown_keys) &&
 3248|  4.14k|                                (!Opts.comments)) {
 3249|  4.14k|                     if (ws_size && ws_size < size_t(end - it)) {
  ------------------
  |  Branch (3249:26): [True: 3.88k, False: 258]
  |  Branch (3249:37): [True: 3.64k, False: 249]
  ------------------
 3250|  3.64k|                        skip_matching_ws(ws_start, it, ws_size);
 3251|  3.64k|                     }
 3252|  4.14k|                  }
 3253|       |
 3254|  4.14k|                  if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3254:23): [True: 57, False: 4.09k]
  ------------------
 3255|     57|                     return;
 3256|     57|                  }
 3257|  4.14k|               }
 3258|       |
 3259|  4.96k|               constexpr auto reflection_type = glaze_object_t<T> || reflectable<T>;
  ------------------
  |  Branch (3259:49): [Folded, False: 0]
  |  Branch (3259:70): [True: 0, Folded]
  ------------------
 3260|       |
 3261|       |               if constexpr (reflection_type && (num_members == 0)) {
 3262|       |                  if constexpr (Opts.error_on_unknown_keys) {
 3263|       |                     static_assert(false_v<T>, "This should be unreachable");
 3264|       |                  }
 3265|       |                  else {
 3266|       |                     if (match_invalid_end<'"', Opts>(ctx, it, end)) {
 3267|       |                        return;
 3268|       |                     }
 3269|       |
 3270|       |                     // parsing to an empty object, but at this point the JSON presents keys
 3271|       |
 3272|       |                     // Unknown key handler does not unescape keys. Unknown escaped keys are
 3273|       |                     // handled by the user.
 3274|       |
 3275|       |                     const auto start = it;
 3276|       |                     skip_string_view(ctx, it, end);
 3277|       |                     if (bool(ctx.error)) [[unlikely]]
 3278|       |                        return;
 3279|       |                     if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3280|       |                        return;
 3281|       |                     const sv key{start, size_t(it - start)};
 3282|       |                     ++it;
 3283|       |                     if constexpr (not Opts.null_terminated) {
 3284|       |                        if (it == end) [[unlikely]] {
 3285|       |                           ctx.error = error_code::unexpected_end;
 3286|       |                           return;
 3287|       |                        }
 3288|       |                     }
 3289|       |
 3290|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3291|       |                        return;
 3292|       |                     }
 3293|       |
 3294|       |                     // Check if this key is the variant tag that should be skipped
 3295|       |                     if constexpr (not tag.sv().empty()) {
 3296|       |                        if (key == tag.sv()) {
 3297|       |                           // Skip the tag value
 3298|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3299|       |                           if (bool(ctx.error)) [[unlikely]]
 3300|       |                              return;
 3301|       |                           resync_window_end(ctx, end); // a streaming skip refills
 3302|       |                           if (skip_ws<Opts>(ctx, it, end)) {
 3303|       |                              return;
 3304|       |                           }
 3305|       |                           continue;
 3306|       |                        }
 3307|       |                     }
 3308|       |
 3309|       |                     parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3310|       |                     if (bool(ctx.error)) [[unlikely]]
 3311|       |                        return;
 3312|       |                     if constexpr (not Opts.null_terminated) {
 3313|       |                        if (it == end) [[unlikely]] {
 3314|       |                           ctx.error = error_code::unexpected_end;
 3315|       |                           return;
 3316|       |                        }
 3317|       |                     }
 3318|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 3319|       |                        return;
 3320|       |                     }
 3321|       |                  }
 3322|       |               }
 3323|  4.96k|               else if constexpr (reflection_type) {
 3324|  4.96k|                  static_assert(bool(hash_info<T>.type));
 3325|       |
 3326|  4.96k|                  if (*it != '"') [[unlikely]] {
  ------------------
  |  Branch (3326:23): [True: 546, False: 4.41k]
  ------------------
 3327|    546|                     ctx.error = error_code::expected_quote;
 3328|    546|                     return;
 3329|    546|                  }
 3330|  4.41k|                  ++it;
 3331|  4.41k|                  if constexpr (not Opts.null_terminated) {
 3332|  4.41k|                     if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3332:26): [True: 16, False: 4.40k]
  ------------------
 3333|     16|                        ctx.error = error_code::unexpected_end;
 3334|     16|                        return;
 3335|     16|                     }
 3336|  4.41k|                  }
 3337|       |
 3338|       |                  if constexpr (not tag.sv().empty() && not contains_tag<T, tag>()) {
 3339|       |                     // For tagged variants we first check to see if the key matches the tag
 3340|       |                     // We only need to do this if the tag is not part of the keys
 3341|       |
 3342|       |                     const auto start = it;
 3343|       |                     skip_string_view(ctx, it, end);
 3344|       |                     if (bool(ctx.error)) [[unlikely]]
 3345|       |                        return;
 3346|       |                     if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3347|       |                        return;
 3348|       |                     const sv key{start, size_t(it - start)};
 3349|       |                     ++it;
 3350|       |                     if constexpr (not Opts.null_terminated) {
 3351|       |                        if (it == end) [[unlikely]] {
 3352|       |                           ctx.error = error_code::unexpected_end;
 3353|       |                           return;
 3354|       |                        }
 3355|       |                     }
 3356|       |
 3357|       |                     if (key == tag.sv()) {
 3358|       |                        if (parse_ws_colon<Opts>(ctx, it, end)) {
 3359|       |                           return;
 3360|       |                        }
 3361|       |
 3362|       |                        parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3363|       |                        if (bool(ctx.error)) [[unlikely]]
 3364|       |                           return;
 3365|       |
 3366|       |                        if (skip_ws<Opts>(ctx, it, end)) {
 3367|       |                           return;
 3368|       |                        }
 3369|       |                        continue;
 3370|       |                     }
 3371|       |                     else {
 3372|       |                        it = start; // reset the iterator
 3373|       |                     }
 3374|       |                  }
 3375|       |
 3376|       |                  if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
 3377|       |                     size_t index = num_members;
 3378|       |                     parse_and_invoke<Opts, T>(value, ctx, it, end, index);
 3379|       |                     if (bool(ctx.error)) [[unlikely]]
 3380|       |                        return;
 3381|       |                     if (index < num_members) {
 3382|       |                        fields[index] = true;
 3383|       |                     }
 3384|       |                  }
 3385|  4.41k|                  else {
 3386|  4.41k|                     parse_and_invoke<Opts, T>(value, ctx, it, end);
 3387|  4.41k|                     if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (3387:26): [True: 147, False: 4.27k]
  ------------------
 3388|    147|                        return;
 3389|  4.41k|                  }
 3390|       |               }
 3391|       |               else {
 3392|       |                  // For types like std::map, std::unordered_map
 3393|       |
 3394|       |                  auto reading = [&](auto&& key) {
 3395|       |                     if constexpr (Opts.partial_read) {
 3396|       |                        if (auto element = value.find(key); element != value.end()) {
 3397|       |                           ++read_count;
 3398|       |                           parse<JSON>::op<ws_handled<Opts>()>(element->second, ctx, it, end);
 3399|       |                        }
 3400|       |                        else {
 3401|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3402|       |                        }
 3403|       |                     }
 3404|       |                     else {
 3405|       |                        parse<JSON>::op<ws_handled<Opts>()>(value[key], ctx, it, end);
 3406|       |                     }
 3407|       |                  };
 3408|       |
 3409|       |                  // using Key = std::conditional_t<heterogeneous_map<T>, sv, typename T::key_type>;
 3410|       |                  using Key = typename T::key_type;
 3411|       |                  if constexpr (std::is_same_v<Key, std::string>) {
 3412|       |                     ctx.scratch.clear();
 3413|       |                     parse<JSON>::op<Opts>(ctx.scratch, ctx, it, end);
 3414|       |                     if (bool(ctx.error)) [[unlikely]]
 3415|       |                        return;
 3416|       |
 3417|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3418|       |                        return;
 3419|       |                     }
 3420|       |
 3421|       |                     reading(ctx.scratch);
 3422|       |                     if constexpr (Opts.partial_read) {
 3423|       |                        if (read_count == value.size()) {
 3424|       |                           return;
 3425|       |                        }
 3426|       |                     }
 3427|       |                     if (bool(ctx.error)) [[unlikely]]
 3428|       |                        return;
 3429|       |                  }
 3430|       |                  else if constexpr (str_t<Key>) {
 3431|       |                     Key key;
 3432|       |                     parse<JSON>::op<Opts>(key, ctx, it, end);
 3433|       |                     if (bool(ctx.error)) [[unlikely]]
 3434|       |                        return;
 3435|       |
 3436|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3437|       |                        return;
 3438|       |                     }
 3439|       |
 3440|       |                     reading(key);
 3441|       |                     if constexpr (Opts.partial_read) {
 3442|       |                        if (read_count == value.size()) {
 3443|       |                           return;
 3444|       |                        }
 3445|       |                     }
 3446|       |                     if (bool(ctx.error)) [[unlikely]]
 3447|       |                        return;
 3448|       |                  }
 3449|       |                  else {
 3450|       |                     Key key_value{};
 3451|       |                     if constexpr (is_named_enum<Key> || mimics_str_t<Key>) {
 3452|       |                        parse<JSON>::op<Opts>(key_value, ctx, it, end);
 3453|       |                     }
 3454|       |                     else if constexpr (std::is_arithmetic_v<Key>) {
 3455|       |                        // prefer over quoted_t below to avoid double parsing of quoted_t
 3456|       |                        parse<JSON>::op<opt_true<Opts, quoted_num_opt_tag{}>>(key_value, ctx, it, end);
 3457|       |                     }
 3458|       |                     else {
 3459|       |                        parse<JSON>::op<opt_false<Opts, raw_string_opt_tag{}>>(quoted_t<Key>{key_value}, ctx, it, end);
 3460|       |                     }
 3461|       |                     if (bool(ctx.error)) [[unlikely]]
 3462|       |                        return;
 3463|       |
 3464|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3465|       |                        return;
 3466|       |                     }
 3467|       |
 3468|       |                     reading(key_value);
 3469|       |                     if constexpr (Opts.partial_read) {
 3470|       |                        if (read_count == value.size()) {
 3471|       |                           return;
 3472|       |                        }
 3473|       |                     }
 3474|       |                     if (bool(ctx.error)) [[unlikely]]
 3475|       |                        return;
 3476|       |                  }
 3477|       |               }
 3478|       |
 3479|       |               // Streaming refill point: after parsing each key-value pair, refill if buffer is low
 3480|       |               if constexpr (has_streaming_state<decltype(ctx)>) {
 3481|       |                  if (ctx.stream.enabled()) {
 3482|       |                     const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 3483|       |                     // Refill when less than 25% of buffer remains to ensure enough space for next element
 3484|       |                     if (ctx.stream.size() - consumed <= ctx.stream.size() / 4 || it >= end) {
 3485|       |                        const char* new_it;
 3486|       |                        const char* new_end;
 3487|       |                        ctx.stream.consume_and_refill(consumed, new_it, new_end);
 3488|       |                        it = new_it;
 3489|       |                        end = new_end;
 3490|       |                        if (it >= end && ctx.stream.at_eof()) {
 3491|       |                           ctx.error = error_code::unexpected_end;
 3492|       |                           return;
 3493|       |                        }
 3494|       |                     }
 3495|       |                  }
 3496|       |               }
 3497|       |
 3498|  4.96k|               if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3498:20): [True: 14, False: 4.94k]
  ------------------
 3499|     14|                  return;
 3500|     14|               }
 3501|  4.96k|            }
 3502|    950|         }
 3503|    950|      }
_ZZN3glz4fromILj10EN9repe_fuzz5pointEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEETnNS_14string_literalEXtlNS6_ILm1EEEEERS2_TkNS_10is_contextERNS_7contextERPKcSC_EEvOT1_OT2_OT3_T4_ENKUlvE_clEv:
 3148|    926|            decltype(auto) fields = [&]() -> decltype(auto) {
 3149|       |               if constexpr ((glaze_object_t<T> || reflectable<T>) &&
 3150|       |                             (Opts.error_on_missing_keys || Opts.partial_read)) {
 3151|       |                  return bit_array<num_members>{};
 3152|       |               }
 3153|    926|               else {
 3154|    926|                  return nullptr;
 3155|    926|               }
 3156|    926|            }();
_ZZN3glz16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT3_OT4_OT5_DpOT2_ENKUlTnmvE_clILm3EEEDav:
  484|    752|            visit<N>([&]<size_t I>() { decode_index<Opts, T, I>(value, ctx, it, end, selected_index...); }, index);
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm3ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|    752|   {
  312|    752|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|    752|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|    752|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|    752|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 745, False: 7]
  |  Branch (316:36): [True: 720, False: 25]
  ------------------
  317|    720|         it += Length;
  318|    720|         if constexpr (not Opts.null_terminated) {
  319|    720|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 720]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|    720|         }
  324|       |
  325|    720|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 14, False: 706]
  ------------------
  326|     14|            return;
  327|     14|         }
  328|    706|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 8, False: 698]
  ------------------
  329|      8|            return;
  330|      8|         }
  331|    698|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 14, False: 684]
  ------------------
  332|     14|            return;
  333|     14|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|    684|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|    684|      }
  338|     32|      else [[unlikely]] {
  339|     32|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|     32|      }
  341|    752|   }
_ZN3glz18decode_field_valueITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnDaXtlS1_Lj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEEN9repe_fuzz8fuzz_apiELm3ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT1_E11reflectableISA_EEEvOT3_OT5_OT6_OT7_DpOT4_:
  245|    684|   {
  246|       |      // Check for null value skipping on read
  247|       |      if constexpr (check_skip_null_members_on_read(Opts)) {
  248|       |         if (*it == 'n') {
  249|       |            ++it;
  250|       |            if constexpr (not Opts.null_terminated) {
  251|       |               if (it == end) [[unlikely]] {
  252|       |                  ctx.error = error_code::unexpected_end;
  253|       |                  return;
  254|       |               }
  255|       |            }
  256|       |            match<"ull", Opts>(ctx, it, end);
  257|       |            if (bool(ctx.error)) [[unlikely]]
  258|       |               return;
  259|       |            // Successfully matched "null", skip it
  260|       |            if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  261|       |               ((selected_index = I), ...); // Mark as handled even if skipped
  262|       |            }
  263|       |            return;
  264|       |         }
  265|       |      }
  266|       |
  267|       |      if constexpr (skipped_by_meta<T, I, operation::parse>) {
  268|       |         skip_value<JSON>::op<Opts>(ctx, it, end);
  269|       |         if (bool(ctx.error)) [[unlikely]]
  270|       |            return; // Propagate error from skip_value
  271|       |      }
  272|    684|      else {
  273|    684|         using V = refl_t<T, I>;
  274|       |
  275|       |         if constexpr (const_value_v<V>) {
  276|       |            if constexpr (check_error_on_const_read(Opts)) {
  277|       |               ctx.error = error_code::attempt_const_read;
  278|       |            }
  279|       |            else {
  280|       |               // do not read anything into the const value
  281|       |               skip_value<JSON>::op<Opts>(ctx, it, end);
  282|       |            }
  283|       |         }
  284|       |         else if constexpr (is_function_ptr_or_ref<V>) {
  285|       |            // Function pointers cannot be deserialized from JSON.
  286|       |            // When write_function_pointers is enabled the writer emits a type-name string,
  287|       |            // but there is nothing meaningful to reconstruct on read — just skip the value.
  288|       |            // When write_function_pointers is off the key is never written, so this branch
  289|       |            // is unreachable in that case.
  290|       |            skip_value<JSON>::op<Opts>(ctx, it, end);
  291|       |         }
  292|       |         else if constexpr (glaze_object_t<T>) {
  293|       |            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(reflect<T>::values)),
  294|       |                                                                       ctx, it, end);
  295|       |         }
  296|    684|         else {
  297|    684|            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(to_tie(value))), ctx,
  298|    684|                                                                       it, end);
  299|    684|         }
  300|    684|      }
  301|       |
  302|       |      // The key was present and handled, even when the value itself was skipped
  303|       |      if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  304|       |         ((selected_index = I), ...);
  305|       |      }
  306|    684|   }
_ZN3glz4fromILj10EN9repe_fuzz6nestedEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEETnNS_14string_literalEXtlNS6_ILm1EEEEERS2_TkNS_10is_contextERNS_7contextERPKcSC_EEvOT1_OT2_OT3_T4_:
 3044|    684|      {
 3045|    684|         static constexpr auto num_members = reflect<T>::size;
 3046|       |
 3047|    684|         static constexpr auto Opts = opening_handled_off<ws_handled_off<Options>()>();
 3048|    684|         if constexpr (!check_opening_handled(Options)) {
 3049|       |            if constexpr (!check_ws_handled(Options)) {
 3050|       |               if (skip_ws<Opts>(ctx, it, end)) {
 3051|       |                  return;
 3052|       |               }
 3053|       |            }
 3054|    684|            if (match_invalid_end<'{', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3054:17): [True: 8, False: 676]
  ------------------
 3055|      8|               return;
 3056|      8|            }
 3057|    676|            if constexpr (not Opts.null_terminated) {
 3058|    676|               if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3058:20): [True: 0, False: 676]
  ------------------
 3059|      0|                  ctx.error = error_code::unexpected_end;
 3060|      0|                  return;
 3061|      0|               }
 3062|    676|            }
 3063|       |            // one nesting level (see enter_depth): counted in both modes so the limit binds,
 3064|       |            // released at each syntactic close below
 3065|    676|            if (enter_depth(ctx)) [[unlikely]] {
  ------------------
  |  Branch (3065:17): [True: 0, False: 676]
  ------------------
 3066|      0|               return;
 3067|      0|            }
 3068|    676|         }
 3069|    676|         const auto ws_start = it;
 3070|    684|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3070:14): [True: 14, False: 670]
  ------------------
 3071|     14|            return;
 3072|     14|         }
 3073|    670|         const size_t ws_size = size_t(it - ws_start);
 3074|       |
 3075|       |         if constexpr ((glaze_object_t<T> || reflectable<T>) && num_members == 0 && Opts.error_on_unknown_keys) {
 3076|       |            if constexpr (not tag.sv().empty()) {
 3077|       |               if (*it == '"') {
 3078|       |                  ++it;
 3079|       |                  if constexpr (not Opts.null_terminated) {
 3080|       |                     if (it == end) [[unlikely]] {
 3081|       |                        ctx.error = error_code::unexpected_end;
 3082|       |                        return;
 3083|       |                     }
 3084|       |                  }
 3085|       |
 3086|       |                  const auto start = it;
 3087|       |                  skip_string_view(ctx, it, end);
 3088|       |                  if (bool(ctx.error)) [[unlikely]]
 3089|       |                     return;
 3090|       |                  if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3091|       |                     return;
 3092|       |                  const sv key{start, size_t(it - start)};
 3093|       |                  ++it;
 3094|       |                  if constexpr (not Opts.null_terminated) {
 3095|       |                     if (it == end) [[unlikely]] {
 3096|       |                        ctx.error = error_code::unexpected_end;
 3097|       |                        return;
 3098|       |                     }
 3099|       |                  }
 3100|       |
 3101|       |                  if (key == tag.sv()) {
 3102|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3103|       |                        return;
 3104|       |                     }
 3105|       |
 3106|       |                     parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3107|       |                     if (bool(ctx.error)) [[unlikely]]
 3108|       |                        return;
 3109|       |
 3110|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 3111|       |                        return;
 3112|       |                     }
 3113|       |                  }
 3114|       |                  else {
 3115|       |                     ctx.error = error_code::unknown_key;
 3116|       |                     return;
 3117|       |                  }
 3118|       |               }
 3119|       |            }
 3120|       |
 3121|       |            if (*it == '}') [[likely]] {
 3122|       |               --ctx.depth;
 3123|       |               if constexpr (glaze_object_t<T> || reflectable<T>) {
 3124|       |                  if constexpr (has_self_constraint_v<T> && !check_skip_self_constraint(Opts)) {
 3125|       |                     auto wrapper = self_constraint_v<T>(value);
 3126|       |                     from<JSON, decltype(wrapper)>::template op<ws_handled<Opts>()>(wrapper, ctx, it, end);
 3127|       |                     if (bool(ctx.error)) {
 3128|       |                        return;
 3129|       |                     }
 3130|       |                  }
 3131|       |               }
 3132|       |               ++it;
 3133|       |               if constexpr (not Opts.null_terminated) {
 3134|       |                  if (it == end) {
 3135|       |                     ctx.error = error_code::end_reached;
 3136|       |                     return;
 3137|       |                  }
 3138|       |               }
 3139|       |               if constexpr (Opts.partial_read) {
 3140|       |                  ctx.error = error_code::partial_read_complete;
 3141|       |               }
 3142|       |               return;
 3143|       |            }
 3144|       |            ctx.error = error_code::unknown_key;
 3145|       |            return;
 3146|       |         }
 3147|    670|         else {
 3148|    670|            decltype(auto) fields = [&]() -> decltype(auto) {
 3149|    670|               if constexpr ((glaze_object_t<T> || reflectable<T>) &&
 3150|    670|                             (Opts.error_on_missing_keys || Opts.partial_read)) {
 3151|    670|                  return bit_array<num_members>{};
 3152|    670|               }
 3153|    670|               else {
 3154|    670|                  return nullptr;
 3155|    670|               }
 3156|    670|            }();
 3157|       |
 3158|    670|            size_t read_count{}; // for partial_read
 3159|       |
 3160|    670|            bool first = true;
 3161|  4.01k|            while (true) {
  ------------------
  |  Branch (3161:20): [True: 3.47k, Folded]
  ------------------
 3162|       |               if constexpr ((glaze_object_t<T> || reflectable<T>) && Opts.partial_read) {
 3163|       |                  static constexpr bit_array<num_members> all_fields = [] {
 3164|       |                     bit_array<num_members> arr{};
 3165|       |                     for (size_t i = 0; i < num_members; ++i) {
 3166|       |                        arr[i] = true;
 3167|       |                     }
 3168|       |                     return arr;
 3169|       |                  }();
 3170|       |
 3171|       |                  if ((all_fields & fields) == all_fields) {
 3172|       |                     ctx.error = error_code::partial_read_complete;
 3173|       |                     --ctx.depth; // as above: an early success still closes this level
 3174|       |                     return;
 3175|       |                  }
 3176|       |               }
 3177|       |
 3178|       |               // Streaming refill point: at start of each iteration, ensure buffer has data
 3179|       |               if constexpr (has_streaming_state<decltype(ctx)>) {
 3180|       |                  if (ctx.stream.enabled()) {
 3181|       |                     const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 3182|       |                     const size_t remaining = ctx.stream.size() - consumed;
 3183|       |                     // Refill when less than half of buffer remains to ensure space for next key-value pair
 3184|       |                     if (remaining <= ctx.stream.size() / 2 || it >= end) {
 3185|       |                        const char* new_it;
 3186|       |                        const char* new_end;
 3187|       |                        ctx.stream.consume_and_refill(consumed, new_it, new_end);
 3188|       |                        it = new_it;
 3189|       |                        end = new_end;
 3190|       |                        if (it >= end && ctx.stream.at_eof()) {
 3191|       |                           ctx.error = error_code::unexpected_end;
 3192|       |                           return;
 3193|       |                        }
 3194|       |                     }
 3195|       |                  }
 3196|       |               }
 3197|       |
 3198|  3.47k|               if (*it == '}') {
  ------------------
  |  Branch (3198:20): [True: 73, False: 3.40k]
  ------------------
 3199|     73|                  --ctx.depth;
 3200|       |                  if constexpr ((glaze_object_t<T> || reflectable<T>) && Opts.error_on_missing_keys) {
 3201|       |                     constexpr auto req_fields = required_fields<T, Opts>();
 3202|       |                     if ((req_fields & fields) != req_fields) {
 3203|       |                        for (size_t i = 0; i < num_members; ++i) {
 3204|       |                           if (not fields[i] && req_fields[i]) {
 3205|       |                              ctx.custom_error_message = reflect<T>::keys[i];
 3206|       |                              // We just return the first missing key in order to avoid heap allocations
 3207|       |                              break;
 3208|       |                           }
 3209|       |                        }
 3210|       |
 3211|       |                        ctx.error = error_code::missing_key;
 3212|       |                        return;
 3213|       |                     }
 3214|       |                  }
 3215|     73|                  if constexpr (glaze_object_t<T> || reflectable<T>) {
 3216|       |                     if constexpr (has_self_constraint_v<T> && !check_skip_self_constraint(Opts)) {
 3217|       |                        auto wrapper = self_constraint_v<T>(value);
 3218|       |                        from<JSON, decltype(wrapper)>::template op<ws_handled<Opts>()>(wrapper, ctx, it, end);
 3219|       |                        if (bool(ctx.error)) {
 3220|       |                           return;
 3221|       |                        }
 3222|       |                     }
 3223|     73|                  }
 3224|     73|                  ++it; // Increment after checking for missing keys so errors are within buffer bounds
 3225|     73|                  if constexpr (not Opts.null_terminated) {
 3226|     73|                     if (it == end) {
  ------------------
  |  Branch (3226:26): [True: 3, False: 70]
  ------------------
 3227|      3|                        ctx.error = error_code::end_reached;
 3228|      3|                        return;
 3229|      3|                     }
 3230|     73|                  }
 3231|     70|                  return;
 3232|     73|               }
 3233|  3.40k|               else if (first) {
  ------------------
  |  Branch (3233:25): [True: 589, False: 2.81k]
  ------------------
 3234|    589|                  first = false;
 3235|    589|               }
 3236|  2.81k|               else {
 3237|  2.81k|                  if (match_invalid_end<',', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3237:23): [True: 12, False: 2.80k]
  ------------------
 3238|     12|                     return;
 3239|     12|                  }
 3240|  2.80k|                  if constexpr (not Opts.null_terminated) {
 3241|  2.80k|                     if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3241:26): [True: 0, False: 2.80k]
  ------------------
 3242|      0|                        ctx.error = error_code::unexpected_end;
 3243|      0|                        return;
 3244|      0|                     }
 3245|  2.80k|                  }
 3246|       |
 3247|       |                  if constexpr ((not Opts.minified) && (num_members > 1 || not Opts.error_on_unknown_keys) &&
 3248|  2.80k|                                (!Opts.comments)) {
 3249|  2.80k|                     if (ws_size && ws_size < size_t(end - it)) {
  ------------------
  |  Branch (3249:26): [True: 2.59k, False: 206]
  |  Branch (3249:37): [True: 2.48k, False: 108]
  ------------------
 3250|  2.48k|                        skip_matching_ws(ws_start, it, ws_size);
 3251|  2.48k|                     }
 3252|  2.80k|                  }
 3253|       |
 3254|  2.80k|                  if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3254:23): [True: 37, False: 2.76k]
  ------------------
 3255|     37|                     return;
 3256|     37|                  }
 3257|  2.80k|               }
 3258|       |
 3259|  3.35k|               constexpr auto reflection_type = glaze_object_t<T> || reflectable<T>;
  ------------------
  |  Branch (3259:49): [Folded, False: 0]
  |  Branch (3259:70): [True: 0, Folded]
  ------------------
 3260|       |
 3261|       |               if constexpr (reflection_type && (num_members == 0)) {
 3262|       |                  if constexpr (Opts.error_on_unknown_keys) {
 3263|       |                     static_assert(false_v<T>, "This should be unreachable");
 3264|       |                  }
 3265|       |                  else {
 3266|       |                     if (match_invalid_end<'"', Opts>(ctx, it, end)) {
 3267|       |                        return;
 3268|       |                     }
 3269|       |
 3270|       |                     // parsing to an empty object, but at this point the JSON presents keys
 3271|       |
 3272|       |                     // Unknown key handler does not unescape keys. Unknown escaped keys are
 3273|       |                     // handled by the user.
 3274|       |
 3275|       |                     const auto start = it;
 3276|       |                     skip_string_view(ctx, it, end);
 3277|       |                     if (bool(ctx.error)) [[unlikely]]
 3278|       |                        return;
 3279|       |                     if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3280|       |                        return;
 3281|       |                     const sv key{start, size_t(it - start)};
 3282|       |                     ++it;
 3283|       |                     if constexpr (not Opts.null_terminated) {
 3284|       |                        if (it == end) [[unlikely]] {
 3285|       |                           ctx.error = error_code::unexpected_end;
 3286|       |                           return;
 3287|       |                        }
 3288|       |                     }
 3289|       |
 3290|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3291|       |                        return;
 3292|       |                     }
 3293|       |
 3294|       |                     // Check if this key is the variant tag that should be skipped
 3295|       |                     if constexpr (not tag.sv().empty()) {
 3296|       |                        if (key == tag.sv()) {
 3297|       |                           // Skip the tag value
 3298|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3299|       |                           if (bool(ctx.error)) [[unlikely]]
 3300|       |                              return;
 3301|       |                           resync_window_end(ctx, end); // a streaming skip refills
 3302|       |                           if (skip_ws<Opts>(ctx, it, end)) {
 3303|       |                              return;
 3304|       |                           }
 3305|       |                           continue;
 3306|       |                        }
 3307|       |                     }
 3308|       |
 3309|       |                     parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3310|       |                     if (bool(ctx.error)) [[unlikely]]
 3311|       |                        return;
 3312|       |                     if constexpr (not Opts.null_terminated) {
 3313|       |                        if (it == end) [[unlikely]] {
 3314|       |                           ctx.error = error_code::unexpected_end;
 3315|       |                           return;
 3316|       |                        }
 3317|       |                     }
 3318|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 3319|       |                        return;
 3320|       |                     }
 3321|       |                  }
 3322|       |               }
 3323|  3.35k|               else if constexpr (reflection_type) {
 3324|  3.35k|                  static_assert(bool(hash_info<T>.type));
 3325|       |
 3326|  3.35k|                  if (*it != '"') [[unlikely]] {
  ------------------
  |  Branch (3326:23): [True: 392, False: 2.96k]
  ------------------
 3327|    392|                     ctx.error = error_code::expected_quote;
 3328|    392|                     return;
 3329|    392|                  }
 3330|  2.96k|                  ++it;
 3331|  2.96k|                  if constexpr (not Opts.null_terminated) {
 3332|  2.96k|                     if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3332:26): [True: 4, False: 2.95k]
  ------------------
 3333|      4|                        ctx.error = error_code::unexpected_end;
 3334|      4|                        return;
 3335|      4|                     }
 3336|  2.96k|                  }
 3337|       |
 3338|       |                  if constexpr (not tag.sv().empty() && not contains_tag<T, tag>()) {
 3339|       |                     // For tagged variants we first check to see if the key matches the tag
 3340|       |                     // We only need to do this if the tag is not part of the keys
 3341|       |
 3342|       |                     const auto start = it;
 3343|       |                     skip_string_view(ctx, it, end);
 3344|       |                     if (bool(ctx.error)) [[unlikely]]
 3345|       |                        return;
 3346|       |                     if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3347|       |                        return;
 3348|       |                     const sv key{start, size_t(it - start)};
 3349|       |                     ++it;
 3350|       |                     if constexpr (not Opts.null_terminated) {
 3351|       |                        if (it == end) [[unlikely]] {
 3352|       |                           ctx.error = error_code::unexpected_end;
 3353|       |                           return;
 3354|       |                        }
 3355|       |                     }
 3356|       |
 3357|       |                     if (key == tag.sv()) {
 3358|       |                        if (parse_ws_colon<Opts>(ctx, it, end)) {
 3359|       |                           return;
 3360|       |                        }
 3361|       |
 3362|       |                        parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3363|       |                        if (bool(ctx.error)) [[unlikely]]
 3364|       |                           return;
 3365|       |
 3366|       |                        if (skip_ws<Opts>(ctx, it, end)) {
 3367|       |                           return;
 3368|       |                        }
 3369|       |                        continue;
 3370|       |                     }
 3371|       |                     else {
 3372|       |                        it = start; // reset the iterator
 3373|       |                     }
 3374|       |                  }
 3375|       |
 3376|       |                  if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
 3377|       |                     size_t index = num_members;
 3378|       |                     parse_and_invoke<Opts, T>(value, ctx, it, end, index);
 3379|       |                     if (bool(ctx.error)) [[unlikely]]
 3380|       |                        return;
 3381|       |                     if (index < num_members) {
 3382|       |                        fields[index] = true;
 3383|       |                     }
 3384|       |                  }
 3385|  2.96k|                  else {
 3386|  2.96k|                     parse_and_invoke<Opts, T>(value, ctx, it, end);
 3387|  2.96k|                     if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (3387:26): [True: 134, False: 2.82k]
  ------------------
 3388|    134|                        return;
 3389|  2.96k|                  }
 3390|       |               }
 3391|       |               else {
 3392|       |                  // For types like std::map, std::unordered_map
 3393|       |
 3394|       |                  auto reading = [&](auto&& key) {
 3395|       |                     if constexpr (Opts.partial_read) {
 3396|       |                        if (auto element = value.find(key); element != value.end()) {
 3397|       |                           ++read_count;
 3398|       |                           parse<JSON>::op<ws_handled<Opts>()>(element->second, ctx, it, end);
 3399|       |                        }
 3400|       |                        else {
 3401|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3402|       |                        }
 3403|       |                     }
 3404|       |                     else {
 3405|       |                        parse<JSON>::op<ws_handled<Opts>()>(value[key], ctx, it, end);
 3406|       |                     }
 3407|       |                  };
 3408|       |
 3409|       |                  // using Key = std::conditional_t<heterogeneous_map<T>, sv, typename T::key_type>;
 3410|       |                  using Key = typename T::key_type;
 3411|       |                  if constexpr (std::is_same_v<Key, std::string>) {
 3412|       |                     ctx.scratch.clear();
 3413|       |                     parse<JSON>::op<Opts>(ctx.scratch, ctx, it, end);
 3414|       |                     if (bool(ctx.error)) [[unlikely]]
 3415|       |                        return;
 3416|       |
 3417|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3418|       |                        return;
 3419|       |                     }
 3420|       |
 3421|       |                     reading(ctx.scratch);
 3422|       |                     if constexpr (Opts.partial_read) {
 3423|       |                        if (read_count == value.size()) {
 3424|       |                           return;
 3425|       |                        }
 3426|       |                     }
 3427|       |                     if (bool(ctx.error)) [[unlikely]]
 3428|       |                        return;
 3429|       |                  }
 3430|       |                  else if constexpr (str_t<Key>) {
 3431|       |                     Key key;
 3432|       |                     parse<JSON>::op<Opts>(key, ctx, it, end);
 3433|       |                     if (bool(ctx.error)) [[unlikely]]
 3434|       |                        return;
 3435|       |
 3436|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3437|       |                        return;
 3438|       |                     }
 3439|       |
 3440|       |                     reading(key);
 3441|       |                     if constexpr (Opts.partial_read) {
 3442|       |                        if (read_count == value.size()) {
 3443|       |                           return;
 3444|       |                        }
 3445|       |                     }
 3446|       |                     if (bool(ctx.error)) [[unlikely]]
 3447|       |                        return;
 3448|       |                  }
 3449|       |                  else {
 3450|       |                     Key key_value{};
 3451|       |                     if constexpr (is_named_enum<Key> || mimics_str_t<Key>) {
 3452|       |                        parse<JSON>::op<Opts>(key_value, ctx, it, end);
 3453|       |                     }
 3454|       |                     else if constexpr (std::is_arithmetic_v<Key>) {
 3455|       |                        // prefer over quoted_t below to avoid double parsing of quoted_t
 3456|       |                        parse<JSON>::op<opt_true<Opts, quoted_num_opt_tag{}>>(key_value, ctx, it, end);
 3457|       |                     }
 3458|       |                     else {
 3459|       |                        parse<JSON>::op<opt_false<Opts, raw_string_opt_tag{}>>(quoted_t<Key>{key_value}, ctx, it, end);
 3460|       |                     }
 3461|       |                     if (bool(ctx.error)) [[unlikely]]
 3462|       |                        return;
 3463|       |
 3464|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3465|       |                        return;
 3466|       |                     }
 3467|       |
 3468|       |                     reading(key_value);
 3469|       |                     if constexpr (Opts.partial_read) {
 3470|       |                        if (read_count == value.size()) {
 3471|       |                           return;
 3472|       |                        }
 3473|       |                     }
 3474|       |                     if (bool(ctx.error)) [[unlikely]]
 3475|       |                        return;
 3476|       |                  }
 3477|       |               }
 3478|       |
 3479|       |               // Streaming refill point: after parsing each key-value pair, refill if buffer is low
 3480|       |               if constexpr (has_streaming_state<decltype(ctx)>) {
 3481|       |                  if (ctx.stream.enabled()) {
 3482|       |                     const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 3483|       |                     // Refill when less than 25% of buffer remains to ensure enough space for next element
 3484|       |                     if (ctx.stream.size() - consumed <= ctx.stream.size() / 4 || it >= end) {
 3485|       |                        const char* new_it;
 3486|       |                        const char* new_end;
 3487|       |                        ctx.stream.consume_and_refill(consumed, new_it, new_end);
 3488|       |                        it = new_it;
 3489|       |                        end = new_end;
 3490|       |                        if (it >= end && ctx.stream.at_eof()) {
 3491|       |                           ctx.error = error_code::unexpected_end;
 3492|       |                           return;
 3493|       |                        }
 3494|       |                     }
 3495|       |                  }
 3496|       |               }
 3497|       |
 3498|  3.35k|               if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3498:20): [True: 10, False: 3.34k]
  ------------------
 3499|     10|                  return;
 3500|     10|               }
 3501|  3.35k|            }
 3502|    670|         }
 3503|    670|      }
_ZZN3glz4fromILj10EN9repe_fuzz6nestedEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEETnNS_14string_literalEXtlNS6_ILm1EEEEERS2_TkNS_10is_contextERNS_7contextERPKcSC_EEvOT1_OT2_OT3_T4_ENKUlvE_clEv:
 3148|    662|            decltype(auto) fields = [&]() -> decltype(auto) {
 3149|       |               if constexpr ((glaze_object_t<T> || reflectable<T>) &&
 3150|       |                             (Opts.error_on_missing_keys || Opts.partial_read)) {
 3151|       |                  return bit_array<num_members>{};
 3152|       |               }
 3153|    662|               else {
 3154|    662|                  return nullptr;
 3155|    662|               }
 3156|    662|            }();
_ZZN3glz16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT3_OT4_OT5_DpOT2_ENKUlTnmvE_clILm4EEEDav:
  484|  11.7k|            visit<N>([&]<size_t I>() { decode_index<Opts, T, I>(value, ctx, it, end, selected_index...); }, index);
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm4ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|  11.7k|   {
  312|  11.7k|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|  11.7k|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|  11.7k|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|  11.7k|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 11.7k, False: 8]
  |  Branch (316:36): [True: 11.6k, False: 32]
  ------------------
  317|  11.6k|         it += Length;
  318|  11.6k|         if constexpr (not Opts.null_terminated) {
  319|  11.6k|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 11.6k]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|  11.6k|         }
  324|       |
  325|  11.6k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 14, False: 11.6k]
  ------------------
  326|     14|            return;
  327|     14|         }
  328|  11.6k|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 23, False: 11.6k]
  ------------------
  329|     23|            return;
  330|     23|         }
  331|  11.6k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 14, False: 11.6k]
  ------------------
  332|     14|            return;
  333|     14|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|  11.6k|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|  11.6k|      }
  338|     40|      else [[unlikely]] {
  339|     40|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|     40|      }
  341|  11.7k|   }
_ZN3glz18decode_field_valueITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnDaXtlS1_Lj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEEN9repe_fuzz8fuzz_apiELm4ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT1_E11reflectableISA_EEEvOT3_OT5_OT6_OT7_DpOT4_:
  245|  11.6k|   {
  246|       |      // Check for null value skipping on read
  247|       |      if constexpr (check_skip_null_members_on_read(Opts)) {
  248|       |         if (*it == 'n') {
  249|       |            ++it;
  250|       |            if constexpr (not Opts.null_terminated) {
  251|       |               if (it == end) [[unlikely]] {
  252|       |                  ctx.error = error_code::unexpected_end;
  253|       |                  return;
  254|       |               }
  255|       |            }
  256|       |            match<"ull", Opts>(ctx, it, end);
  257|       |            if (bool(ctx.error)) [[unlikely]]
  258|       |               return;
  259|       |            // Successfully matched "null", skip it
  260|       |            if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  261|       |               ((selected_index = I), ...); // Mark as handled even if skipped
  262|       |            }
  263|       |            return;
  264|       |         }
  265|       |      }
  266|       |
  267|       |      if constexpr (skipped_by_meta<T, I, operation::parse>) {
  268|       |         skip_value<JSON>::op<Opts>(ctx, it, end);
  269|       |         if (bool(ctx.error)) [[unlikely]]
  270|       |            return; // Propagate error from skip_value
  271|       |      }
  272|  11.6k|      else {
  273|  11.6k|         using V = refl_t<T, I>;
  274|       |
  275|       |         if constexpr (const_value_v<V>) {
  276|       |            if constexpr (check_error_on_const_read(Opts)) {
  277|       |               ctx.error = error_code::attempt_const_read;
  278|       |            }
  279|       |            else {
  280|       |               // do not read anything into the const value
  281|       |               skip_value<JSON>::op<Opts>(ctx, it, end);
  282|       |            }
  283|       |         }
  284|       |         else if constexpr (is_function_ptr_or_ref<V>) {
  285|       |            // Function pointers cannot be deserialized from JSON.
  286|       |            // When write_function_pointers is enabled the writer emits a type-name string,
  287|       |            // but there is nothing meaningful to reconstruct on read — just skip the value.
  288|       |            // When write_function_pointers is off the key is never written, so this branch
  289|       |            // is unreachable in that case.
  290|       |            skip_value<JSON>::op<Opts>(ctx, it, end);
  291|       |         }
  292|       |         else if constexpr (glaze_object_t<T>) {
  293|       |            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(reflect<T>::values)),
  294|       |                                                                       ctx, it, end);
  295|       |         }
  296|  11.6k|         else {
  297|  11.6k|            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(to_tie(value))), ctx,
  298|  11.6k|                                                                       it, end);
  299|  11.6k|         }
  300|  11.6k|      }
  301|       |
  302|       |      // The key was present and handled, even when the value itself was skipped
  303|       |      if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  304|       |         ((selected_index = I), ...);
  305|       |      }
  306|  11.6k|   }
_ZN3glz4fromILj10ENSt3__16vectorIiNS1_9allocatorIiEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEERS5_TkNS_10is_contextERNS_7contextERPKcSD_EEvOT0_OT1_OT2_T3_:
 2308|  11.6k|      {
 2309|  11.6k|         constexpr auto Opts = ws_handled_off<Options>();
 2310|       |         if constexpr (!check_ws_handled(Options)) {
 2311|       |            if (skip_ws<Opts>(ctx, it, end)) {
 2312|       |               return;
 2313|       |            }
 2314|       |         }
 2315|       |
 2316|  11.6k|         if (match_invalid_end<'[', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2316:14): [True: 13, False: 11.6k]
  ------------------
 2317|     13|            return;
 2318|     13|         }
 2319|       |         // one nesting level (see enter_depth): counted in both modes so the limit binds,
 2320|       |         // released at each syntactic close below
 2321|  11.6k|         if (enter_depth(ctx)) [[unlikely]] {
  ------------------
  |  Branch (2321:14): [True: 0, False: 11.6k]
  ------------------
 2322|      0|            return;
 2323|      0|         }
 2324|       |
 2325|  11.6k|         const auto ws_start = it;
 2326|  11.6k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2326:14): [True: 16, False: 11.6k]
  ------------------
 2327|     16|            return;
 2328|     16|         }
 2329|       |
 2330|  11.6k|         if (*it == ']') {
  ------------------
  |  Branch (2330:14): [True: 816, False: 10.8k]
  ------------------
 2331|    816|            --ctx.depth;
 2332|    816|            ++it;
 2333|    816|            if constexpr ((resizable<T> || is_inplace_vector<T>) && not check_append_arrays(Opts)) {
 2334|    816|               value.clear();
 2335|       |
 2336|       |               if constexpr (check_shrink_to_fit(Opts) && has_shrink_to_fit<T>) {
 2337|       |                  value.shrink_to_fit();
 2338|       |               }
 2339|    816|            }
 2340|    816|            return;
 2341|    816|         }
 2342|       |
 2343|  10.8k|         const size_t ws_size = size_t(it - ws_start);
 2344|       |
 2345|  10.8k|         static constexpr bool should_append = (resizable<T> || is_inplace_vector<T>) && check_append_arrays(Opts);
  ------------------
  |  Branch (2345:49): [True: 10.8k, Folded]
  |  Branch (2345:65): [Folded, False: 0]
  |  Branch (2345:90): [Folded, False: 0]
  ------------------
 2346|  10.8k|         if constexpr (not should_append) {
 2347|  10.8k|            const auto n = value.size();
 2348|       |
 2349|  10.8k|            auto value_it = value.begin();
 2350|       |
 2351|  49.8k|            for (size_t i = 0; i < n; ++i) {
  ------------------
  |  Branch (2351:32): [True: 43.1k, False: 6.65k]
  ------------------
 2352|  43.1k|               parse<JSON>::op<ws_handled<Opts>()>(*value_it++, ctx, it, end);
 2353|  43.1k|               if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (2353:20): [True: 695, False: 42.4k]
  ------------------
 2354|    695|                  return;
 2355|  42.4k|               if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2355:20): [True: 36, False: 42.4k]
  ------------------
 2356|     36|                  return;
 2357|     36|               }
 2358|  42.4k|               if (*it == ',') {
  ------------------
  |  Branch (2358:20): [True: 39.0k, False: 3.35k]
  ------------------
 2359|  39.0k|                  ++it;
 2360|       |
 2361|  39.0k|                  if constexpr (!Opts.minified && !Opts.comments) {
 2362|  39.0k|                     if (ws_size && ws_size < size_t(end - it)) {
  ------------------
  |  Branch (2362:26): [True: 20.7k, False: 18.3k]
  |  Branch (2362:37): [True: 20.4k, False: 340]
  ------------------
 2363|  20.4k|                        skip_matching_ws(ws_start, it, ws_size);
 2364|  20.4k|                     }
 2365|  39.0k|                  }
 2366|       |
 2367|  39.0k|                  if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2367:23): [True: 63, False: 39.0k]
  ------------------
 2368|     63|                     return;
 2369|     63|                  }
 2370|  39.0k|               }
 2371|  3.35k|               else if (*it == ']') {
  ------------------
  |  Branch (2371:25): [True: 3.12k, False: 229]
  ------------------
 2372|  3.12k|                  --ctx.depth;
 2373|  3.12k|                  ++it;
 2374|  3.12k|                  if constexpr (erasable<T>) {
 2375|  3.12k|                     value.erase(value_it,
 2376|  3.12k|                                 value.end()); // use erase rather than resize for non-default constructible elements
 2377|       |
 2378|       |                     if constexpr (check_shrink_to_fit(Opts) && has_shrink_to_fit<T>) {
 2379|       |                        value.shrink_to_fit();
 2380|       |                     }
 2381|  3.12k|                  }
 2382|  3.12k|                  return;
 2383|  3.12k|               }
 2384|    229|               else [[unlikely]] {
 2385|    229|                  ctx.error = error_code::expected_bracket;
 2386|    229|                  return;
 2387|    229|               }
 2388|  42.4k|            }
 2389|  10.8k|         }
 2390|       |
 2391|       |         if constexpr (Opts.partial_read) {
 2392|       |            // partial_read stops early on a success path, so give the level back like the
 2393|       |            // syntactic-close paths do; otherwise it accumulates across reads sharing a context.
 2394|       |            --ctx.depth;
 2395|       |            return;
 2396|       |         }
 2397|  10.8k|         else {
 2398|       |            // growing
 2399|  10.8k|            if constexpr (emplace_backable<T> || has_try_emplace_back<T>) {
 2400|   372k|               while (it < end) {
  ------------------
  |  Branch (2400:23): [True: 368k, False: 4.14k]
  ------------------
 2401|       |                  // Streaming refill point: at start of each iteration, ensure buffer has data
 2402|       |                  if constexpr (has_streaming_state<decltype(ctx)>) {
 2403|       |                     if (ctx.stream.enabled()) {
 2404|       |                        const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 2405|       |                        const size_t remaining = ctx.stream.size() - consumed;
 2406|       |                        // Refill when less than half of buffer remains to ensure space for next element
 2407|       |                        if (remaining <= ctx.stream.size() / 2 || it >= end) {
 2408|       |                           const char* new_it;
 2409|       |                           const char* new_end;
 2410|       |                           ctx.stream.consume_and_refill(consumed, new_it, new_end);
 2411|       |                           it = new_it;
 2412|       |                           end = new_end;
 2413|       |                           if (it >= end && ctx.stream.at_eof()) {
 2414|       |                              break; // No more data, exit loop normally
 2415|       |                           }
 2416|       |                        }
 2417|       |                     }
 2418|       |                  }
 2419|       |
 2420|       |                  if constexpr (has_try_emplace_back<T>) {
 2421|       |                     if (value.try_emplace_back())
 2422|       |                        parse<JSON>::op<ws_handled<Opts>()>(value.back(), ctx, it, end);
 2423|       |                     else
 2424|       |                        ctx.error = error_code::exceeded_static_array_size;
 2425|       |                  }
 2426|   368k|                  else {
 2427|   368k|                     parse<JSON>::op<ws_handled<Opts>()>(value.emplace_back(), ctx, it, end);
 2428|   368k|                  }
 2429|       |
 2430|   368k|                  if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (2430:23): [True: 1.64k, False: 366k]
  ------------------
 2431|  1.64k|                     return;
 2432|       |
 2433|       |                  // Streaming refill point: after parsing each element, refill if buffer is low
 2434|       |                  if constexpr (has_streaming_state<decltype(ctx)>) {
 2435|       |                     if (ctx.stream.enabled()) {
 2436|       |                        const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 2437|       |                        // Refill when less than 25% of buffer remains to ensure enough space for next element
 2438|       |                        if (ctx.stream.size() - consumed <= ctx.stream.size() / 4 || it >= end) {
 2439|       |                           const char* new_it;
 2440|       |                           const char* new_end;
 2441|       |                           ctx.stream.consume_and_refill(consumed, new_it, new_end);
 2442|       |                           it = new_it;
 2443|       |                           end = new_end;
 2444|       |                           if (it >= end && ctx.stream.at_eof()) {
 2445|       |                              ctx.error = error_code::unexpected_end;
 2446|       |                              return;
 2447|       |                           }
 2448|       |                        }
 2449|       |                     }
 2450|       |                  }
 2451|       |
 2452|   366k|                  if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2452:23): [True: 42, False: 366k]
  ------------------
 2453|     42|                     return;
 2454|     42|                  }
 2455|   366k|                  if (*it == ',') [[likely]] {
  ------------------
  |  Branch (2455:23): [True: 361k, False: 4.88k]
  ------------------
 2456|   361k|                     ++it;
 2457|       |
 2458|   361k|                     if constexpr (!Opts.minified && !Opts.comments) {
 2459|   361k|                        if (ws_size && ws_size < size_t(end - it)) {
  ------------------
  |  Branch (2459:29): [True: 248k, False: 113k]
  |  Branch (2459:40): [True: 247k, False: 401]
  ------------------
 2460|   247k|                           skip_matching_ws(ws_start, it, ws_size);
 2461|   247k|                        }
 2462|   361k|                     }
 2463|       |
 2464|   361k|                     if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2464:26): [True: 86, False: 361k]
  ------------------
 2465|     86|                        return;
 2466|     86|                     }
 2467|   361k|                  }
 2468|  4.88k|                  else if (*it == ']') {
  ------------------
  |  Branch (2468:28): [True: 4.48k, False: 403]
  ------------------
 2469|  4.48k|                     --ctx.depth;
 2470|  4.48k|                     ++it;
 2471|       |                     if constexpr (check_shrink_to_fit(Opts) && has_shrink_to_fit<T>) {
 2472|       |                        value.shrink_to_fit();
 2473|       |                     }
 2474|  4.48k|                     return;
 2475|  4.48k|                  }
 2476|    403|                  else [[unlikely]] {
 2477|    403|                     ctx.error = error_code::expected_bracket;
 2478|    403|                     return;
 2479|    403|                  }
 2480|   366k|               }
 2481|       |
 2482|       |               // A valid array always returns from inside the loop upon reaching ']'.
 2483|       |               // For a null-terminated buffer the loop can only exit here by falling
 2484|       |               // through when `it` reaches the terminator without a closing bracket,
 2485|       |               // which means the input was truncated (e.g. "[", "[1," or "[1,2,").
 2486|       |               // Non-null-terminated buffers surface this through skip_ws/depth
 2487|       |               // tracking (or the streaming refill break), so this guard is limited
 2488|       |               // to the null-terminated case.
 2489|       |               if constexpr (Opts.null_terminated) {
 2490|       |                  ctx.error = error_code::unexpected_end;
 2491|       |               }
 2492|       |            }
 2493|       |            else {
 2494|       |               ctx.error = error_code::exceeded_static_array_size;
 2495|       |            }
 2496|  10.8k|         }
 2497|  10.8k|      }
_ZN3glz5parseILj10EE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEERiTkNS_10is_contextERNS_7contextERPKcS8_EEvOT0_OT1_OT2_T3_:
   49|   687k|      {
   50|       |         if constexpr (const_value_v<T>) {
   51|       |            if constexpr (check_error_on_const_read(Opts)) {
   52|       |               ctx.error = error_code::attempt_const_read;
   53|       |            }
   54|       |            else {
   55|       |               // do not read anything into the const value
   56|       |               skip_value<JSON>::op<Opts>(std::forward<Ctx>(ctx), std::forward<It0>(it), end);
   57|       |            }
   58|       |         }
   59|   687k|         else {
   60|   687k|            using V = std::remove_cvref_t<T>;
   61|   687k|            from<JSON, V>::template op<Opts>(std::forward<T>(value), std::forward<Ctx>(ctx), std::forward<It0>(it),
   62|   687k|                                             end);
   63|   687k|         }
   64|   687k|      }
_ZZN3glz16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT3_OT4_OT5_DpOT2_ENKUlTnmvE_clILm5EEEDav:
  484|  1.58k|            visit<N>([&]<size_t I>() { decode_index<Opts, T, I>(value, ctx, it, end, selected_index...); }, index);
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm5ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|  1.58k|   {
  312|  1.58k|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|  1.58k|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|  1.58k|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|  1.58k|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 1.57k, False: 8]
  |  Branch (316:36): [True: 1.54k, False: 28]
  ------------------
  317|  1.54k|         it += Length;
  318|  1.54k|         if constexpr (not Opts.null_terminated) {
  319|  1.54k|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 1.54k]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|  1.54k|         }
  324|       |
  325|  1.54k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 14, False: 1.53k]
  ------------------
  326|     14|            return;
  327|     14|         }
  328|  1.53k|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 10, False: 1.52k]
  ------------------
  329|     10|            return;
  330|     10|         }
  331|  1.52k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 14, False: 1.51k]
  ------------------
  332|     14|            return;
  333|     14|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|  1.51k|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|  1.51k|      }
  338|     36|      else [[unlikely]] {
  339|     36|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|     36|      }
  341|  1.58k|   }
_ZN3glz18decode_field_valueITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnDaXtlS1_Lj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEEN9repe_fuzz8fuzz_apiELm5ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT1_E11reflectableISA_EEEvOT3_OT5_OT6_OT7_DpOT4_:
  245|  1.51k|   {
  246|       |      // Check for null value skipping on read
  247|       |      if constexpr (check_skip_null_members_on_read(Opts)) {
  248|       |         if (*it == 'n') {
  249|       |            ++it;
  250|       |            if constexpr (not Opts.null_terminated) {
  251|       |               if (it == end) [[unlikely]] {
  252|       |                  ctx.error = error_code::unexpected_end;
  253|       |                  return;
  254|       |               }
  255|       |            }
  256|       |            match<"ull", Opts>(ctx, it, end);
  257|       |            if (bool(ctx.error)) [[unlikely]]
  258|       |               return;
  259|       |            // Successfully matched "null", skip it
  260|       |            if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  261|       |               ((selected_index = I), ...); // Mark as handled even if skipped
  262|       |            }
  263|       |            return;
  264|       |         }
  265|       |      }
  266|       |
  267|       |      if constexpr (skipped_by_meta<T, I, operation::parse>) {
  268|       |         skip_value<JSON>::op<Opts>(ctx, it, end);
  269|       |         if (bool(ctx.error)) [[unlikely]]
  270|       |            return; // Propagate error from skip_value
  271|       |      }
  272|  1.51k|      else {
  273|  1.51k|         using V = refl_t<T, I>;
  274|       |
  275|       |         if constexpr (const_value_v<V>) {
  276|       |            if constexpr (check_error_on_const_read(Opts)) {
  277|       |               ctx.error = error_code::attempt_const_read;
  278|       |            }
  279|       |            else {
  280|       |               // do not read anything into the const value
  281|       |               skip_value<JSON>::op<Opts>(ctx, it, end);
  282|       |            }
  283|       |         }
  284|       |         else if constexpr (is_function_ptr_or_ref<V>) {
  285|       |            // Function pointers cannot be deserialized from JSON.
  286|       |            // When write_function_pointers is enabled the writer emits a type-name string,
  287|       |            // but there is nothing meaningful to reconstruct on read — just skip the value.
  288|       |            // When write_function_pointers is off the key is never written, so this branch
  289|       |            // is unreachable in that case.
  290|       |            skip_value<JSON>::op<Opts>(ctx, it, end);
  291|       |         }
  292|       |         else if constexpr (glaze_object_t<T>) {
  293|       |            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(reflect<T>::values)),
  294|       |                                                                       ctx, it, end);
  295|       |         }
  296|  1.51k|         else {
  297|  1.51k|            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(to_tie(value))), ctx,
  298|  1.51k|                                                                       it, end);
  299|  1.51k|         }
  300|  1.51k|      }
  301|       |
  302|       |      // The key was present and handled, even when the value itself was skipped
  303|       |      if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  304|       |         ((selected_index = I), ...);
  305|       |      }
  306|  1.51k|   }
_ZN3glz4fromILj10ENSt3__13mapINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEiNS1_4lessIS8_EENS6_INS1_4pairIKS8_iEEEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEETnNS_14string_literalEXtlNSJ_ILm1EEEEERSF_TkNS_10is_contextERNS_7contextERPKcSP_EEvOT1_OT2_OT3_T4_:
 3044|  1.51k|      {
 3045|  1.51k|         static constexpr auto num_members = reflect<T>::size;
 3046|       |
 3047|  1.51k|         static constexpr auto Opts = opening_handled_off<ws_handled_off<Options>()>();
 3048|  1.51k|         if constexpr (!check_opening_handled(Options)) {
 3049|       |            if constexpr (!check_ws_handled(Options)) {
 3050|       |               if (skip_ws<Opts>(ctx, it, end)) {
 3051|       |                  return;
 3052|       |               }
 3053|       |            }
 3054|  1.51k|            if (match_invalid_end<'{', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3054:17): [True: 16, False: 1.49k]
  ------------------
 3055|     16|               return;
 3056|     16|            }
 3057|  1.49k|            if constexpr (not Opts.null_terminated) {
 3058|  1.49k|               if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3058:20): [True: 0, False: 1.49k]
  ------------------
 3059|      0|                  ctx.error = error_code::unexpected_end;
 3060|      0|                  return;
 3061|      0|               }
 3062|  1.49k|            }
 3063|       |            // one nesting level (see enter_depth): counted in both modes so the limit binds,
 3064|       |            // released at each syntactic close below
 3065|  1.49k|            if (enter_depth(ctx)) [[unlikely]] {
  ------------------
  |  Branch (3065:17): [True: 0, False: 1.49k]
  ------------------
 3066|      0|               return;
 3067|      0|            }
 3068|  1.49k|         }
 3069|  1.49k|         const auto ws_start = it;
 3070|  1.51k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3070:14): [True: 12, False: 1.49k]
  ------------------
 3071|     12|            return;
 3072|     12|         }
 3073|  1.49k|         const size_t ws_size = size_t(it - ws_start);
 3074|       |
 3075|       |         if constexpr ((glaze_object_t<T> || reflectable<T>) && num_members == 0 && Opts.error_on_unknown_keys) {
 3076|       |            if constexpr (not tag.sv().empty()) {
 3077|       |               if (*it == '"') {
 3078|       |                  ++it;
 3079|       |                  if constexpr (not Opts.null_terminated) {
 3080|       |                     if (it == end) [[unlikely]] {
 3081|       |                        ctx.error = error_code::unexpected_end;
 3082|       |                        return;
 3083|       |                     }
 3084|       |                  }
 3085|       |
 3086|       |                  const auto start = it;
 3087|       |                  skip_string_view(ctx, it, end);
 3088|       |                  if (bool(ctx.error)) [[unlikely]]
 3089|       |                     return;
 3090|       |                  if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3091|       |                     return;
 3092|       |                  const sv key{start, size_t(it - start)};
 3093|       |                  ++it;
 3094|       |                  if constexpr (not Opts.null_terminated) {
 3095|       |                     if (it == end) [[unlikely]] {
 3096|       |                        ctx.error = error_code::unexpected_end;
 3097|       |                        return;
 3098|       |                     }
 3099|       |                  }
 3100|       |
 3101|       |                  if (key == tag.sv()) {
 3102|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3103|       |                        return;
 3104|       |                     }
 3105|       |
 3106|       |                     parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3107|       |                     if (bool(ctx.error)) [[unlikely]]
 3108|       |                        return;
 3109|       |
 3110|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 3111|       |                        return;
 3112|       |                     }
 3113|       |                  }
 3114|       |                  else {
 3115|       |                     ctx.error = error_code::unknown_key;
 3116|       |                     return;
 3117|       |                  }
 3118|       |               }
 3119|       |            }
 3120|       |
 3121|       |            if (*it == '}') [[likely]] {
 3122|       |               --ctx.depth;
 3123|       |               if constexpr (glaze_object_t<T> || reflectable<T>) {
 3124|       |                  if constexpr (has_self_constraint_v<T> && !check_skip_self_constraint(Opts)) {
 3125|       |                     auto wrapper = self_constraint_v<T>(value);
 3126|       |                     from<JSON, decltype(wrapper)>::template op<ws_handled<Opts>()>(wrapper, ctx, it, end);
 3127|       |                     if (bool(ctx.error)) {
 3128|       |                        return;
 3129|       |                     }
 3130|       |                  }
 3131|       |               }
 3132|       |               ++it;
 3133|       |               if constexpr (not Opts.null_terminated) {
 3134|       |                  if (it == end) {
 3135|       |                     ctx.error = error_code::end_reached;
 3136|       |                     return;
 3137|       |                  }
 3138|       |               }
 3139|       |               if constexpr (Opts.partial_read) {
 3140|       |                  ctx.error = error_code::partial_read_complete;
 3141|       |               }
 3142|       |               return;
 3143|       |            }
 3144|       |            ctx.error = error_code::unknown_key;
 3145|       |            return;
 3146|       |         }
 3147|  1.49k|         else {
 3148|  1.49k|            decltype(auto) fields = [&]() -> decltype(auto) {
 3149|  1.49k|               if constexpr ((glaze_object_t<T> || reflectable<T>) &&
 3150|  1.49k|                             (Opts.error_on_missing_keys || Opts.partial_read)) {
 3151|  1.49k|                  return bit_array<num_members>{};
 3152|  1.49k|               }
 3153|  1.49k|               else {
 3154|  1.49k|                  return nullptr;
 3155|  1.49k|               }
 3156|  1.49k|            }();
 3157|       |
 3158|  1.49k|            size_t read_count{}; // for partial_read
 3159|       |
 3160|  1.49k|            bool first = true;
 3161|  26.2k|            while (true) {
  ------------------
  |  Branch (3161:20): [True: 25.2k, Folded]
  ------------------
 3162|       |               if constexpr ((glaze_object_t<T> || reflectable<T>) && Opts.partial_read) {
 3163|       |                  static constexpr bit_array<num_members> all_fields = [] {
 3164|       |                     bit_array<num_members> arr{};
 3165|       |                     for (size_t i = 0; i < num_members; ++i) {
 3166|       |                        arr[i] = true;
 3167|       |                     }
 3168|       |                     return arr;
 3169|       |                  }();
 3170|       |
 3171|       |                  if ((all_fields & fields) == all_fields) {
 3172|       |                     ctx.error = error_code::partial_read_complete;
 3173|       |                     --ctx.depth; // as above: an early success still closes this level
 3174|       |                     return;
 3175|       |                  }
 3176|       |               }
 3177|       |
 3178|       |               // Streaming refill point: at start of each iteration, ensure buffer has data
 3179|       |               if constexpr (has_streaming_state<decltype(ctx)>) {
 3180|       |                  if (ctx.stream.enabled()) {
 3181|       |                     const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 3182|       |                     const size_t remaining = ctx.stream.size() - consumed;
 3183|       |                     // Refill when less than half of buffer remains to ensure space for next key-value pair
 3184|       |                     if (remaining <= ctx.stream.size() / 2 || it >= end) {
 3185|       |                        const char* new_it;
 3186|       |                        const char* new_end;
 3187|       |                        ctx.stream.consume_and_refill(consumed, new_it, new_end);
 3188|       |                        it = new_it;
 3189|       |                        end = new_end;
 3190|       |                        if (it >= end && ctx.stream.at_eof()) {
 3191|       |                           ctx.error = error_code::unexpected_end;
 3192|       |                           return;
 3193|       |                        }
 3194|       |                     }
 3195|       |                  }
 3196|       |               }
 3197|       |
 3198|  25.2k|               if (*it == '}') {
  ------------------
  |  Branch (3198:20): [True: 144, False: 25.0k]
  ------------------
 3199|    144|                  --ctx.depth;
 3200|       |                  if constexpr ((glaze_object_t<T> || reflectable<T>) && Opts.error_on_missing_keys) {
 3201|       |                     constexpr auto req_fields = required_fields<T, Opts>();
 3202|       |                     if ((req_fields & fields) != req_fields) {
 3203|       |                        for (size_t i = 0; i < num_members; ++i) {
 3204|       |                           if (not fields[i] && req_fields[i]) {
 3205|       |                              ctx.custom_error_message = reflect<T>::keys[i];
 3206|       |                              // We just return the first missing key in order to avoid heap allocations
 3207|       |                              break;
 3208|       |                           }
 3209|       |                        }
 3210|       |
 3211|       |                        ctx.error = error_code::missing_key;
 3212|       |                        return;
 3213|       |                     }
 3214|       |                  }
 3215|       |                  if constexpr (glaze_object_t<T> || reflectable<T>) {
 3216|       |                     if constexpr (has_self_constraint_v<T> && !check_skip_self_constraint(Opts)) {
 3217|       |                        auto wrapper = self_constraint_v<T>(value);
 3218|       |                        from<JSON, decltype(wrapper)>::template op<ws_handled<Opts>()>(wrapper, ctx, it, end);
 3219|       |                        if (bool(ctx.error)) {
 3220|       |                           return;
 3221|       |                        }
 3222|       |                     }
 3223|       |                  }
 3224|    144|                  ++it; // Increment after checking for missing keys so errors are within buffer bounds
 3225|    144|                  if constexpr (not Opts.null_terminated) {
 3226|    144|                     if (it == end) {
  ------------------
  |  Branch (3226:26): [True: 3, False: 141]
  ------------------
 3227|      3|                        ctx.error = error_code::end_reached;
 3228|      3|                        return;
 3229|      3|                     }
 3230|    144|                  }
 3231|    141|                  return;
 3232|    144|               }
 3233|  25.0k|               else if (first) {
  ------------------
  |  Branch (3233:25): [True: 1.43k, False: 23.6k]
  ------------------
 3234|  1.43k|                  first = false;
 3235|  1.43k|               }
 3236|  23.6k|               else {
 3237|  23.6k|                  if (match_invalid_end<',', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3237:23): [True: 282, False: 23.3k]
  ------------------
 3238|    282|                     return;
 3239|    282|                  }
 3240|  23.3k|                  if constexpr (not Opts.null_terminated) {
 3241|  23.3k|                     if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3241:26): [True: 0, False: 23.3k]
  ------------------
 3242|      0|                        ctx.error = error_code::unexpected_end;
 3243|      0|                        return;
 3244|      0|                     }
 3245|  23.3k|                  }
 3246|       |
 3247|       |                  if constexpr ((not Opts.minified) && (num_members > 1 || not Opts.error_on_unknown_keys) &&
 3248|       |                                (!Opts.comments)) {
 3249|       |                     if (ws_size && ws_size < size_t(end - it)) {
 3250|       |                        skip_matching_ws(ws_start, it, ws_size);
 3251|       |                     }
 3252|       |                  }
 3253|       |
 3254|  23.3k|                  if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3254:23): [True: 16, False: 23.3k]
  ------------------
 3255|     16|                     return;
 3256|     16|                  }
 3257|  23.3k|               }
 3258|       |
 3259|  24.7k|               constexpr auto reflection_type = glaze_object_t<T> || reflectable<T>;
  ------------------
  |  Branch (3259:49): [Folded, False: 0]
  |  Branch (3259:70): [Folded, False: 0]
  ------------------
 3260|       |
 3261|       |               if constexpr (reflection_type && (num_members == 0)) {
 3262|       |                  if constexpr (Opts.error_on_unknown_keys) {
 3263|       |                     static_assert(false_v<T>, "This should be unreachable");
 3264|       |                  }
 3265|       |                  else {
 3266|       |                     if (match_invalid_end<'"', Opts>(ctx, it, end)) {
 3267|       |                        return;
 3268|       |                     }
 3269|       |
 3270|       |                     // parsing to an empty object, but at this point the JSON presents keys
 3271|       |
 3272|       |                     // Unknown key handler does not unescape keys. Unknown escaped keys are
 3273|       |                     // handled by the user.
 3274|       |
 3275|       |                     const auto start = it;
 3276|       |                     skip_string_view(ctx, it, end);
 3277|       |                     if (bool(ctx.error)) [[unlikely]]
 3278|       |                        return;
 3279|       |                     if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3280|       |                        return;
 3281|       |                     const sv key{start, size_t(it - start)};
 3282|       |                     ++it;
 3283|       |                     if constexpr (not Opts.null_terminated) {
 3284|       |                        if (it == end) [[unlikely]] {
 3285|       |                           ctx.error = error_code::unexpected_end;
 3286|       |                           return;
 3287|       |                        }
 3288|       |                     }
 3289|       |
 3290|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3291|       |                        return;
 3292|       |                     }
 3293|       |
 3294|       |                     // Check if this key is the variant tag that should be skipped
 3295|       |                     if constexpr (not tag.sv().empty()) {
 3296|       |                        if (key == tag.sv()) {
 3297|       |                           // Skip the tag value
 3298|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3299|       |                           if (bool(ctx.error)) [[unlikely]]
 3300|       |                              return;
 3301|       |                           resync_window_end(ctx, end); // a streaming skip refills
 3302|       |                           if (skip_ws<Opts>(ctx, it, end)) {
 3303|       |                              return;
 3304|       |                           }
 3305|       |                           continue;
 3306|       |                        }
 3307|       |                     }
 3308|       |
 3309|       |                     parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3310|       |                     if (bool(ctx.error)) [[unlikely]]
 3311|       |                        return;
 3312|       |                     if constexpr (not Opts.null_terminated) {
 3313|       |                        if (it == end) [[unlikely]] {
 3314|       |                           ctx.error = error_code::unexpected_end;
 3315|       |                           return;
 3316|       |                        }
 3317|       |                     }
 3318|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 3319|       |                        return;
 3320|       |                     }
 3321|       |                  }
 3322|       |               }
 3323|       |               else if constexpr (reflection_type) {
 3324|       |                  static_assert(bool(hash_info<T>.type));
 3325|       |
 3326|       |                  if (*it != '"') [[unlikely]] {
 3327|       |                     ctx.error = error_code::expected_quote;
 3328|       |                     return;
 3329|       |                  }
 3330|       |                  ++it;
 3331|       |                  if constexpr (not Opts.null_terminated) {
 3332|       |                     if (it == end) [[unlikely]] {
 3333|       |                        ctx.error = error_code::unexpected_end;
 3334|       |                        return;
 3335|       |                     }
 3336|       |                  }
 3337|       |
 3338|       |                  if constexpr (not tag.sv().empty() && not contains_tag<T, tag>()) {
 3339|       |                     // For tagged variants we first check to see if the key matches the tag
 3340|       |                     // We only need to do this if the tag is not part of the keys
 3341|       |
 3342|       |                     const auto start = it;
 3343|       |                     skip_string_view(ctx, it, end);
 3344|       |                     if (bool(ctx.error)) [[unlikely]]
 3345|       |                        return;
 3346|       |                     if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3347|       |                        return;
 3348|       |                     const sv key{start, size_t(it - start)};
 3349|       |                     ++it;
 3350|       |                     if constexpr (not Opts.null_terminated) {
 3351|       |                        if (it == end) [[unlikely]] {
 3352|       |                           ctx.error = error_code::unexpected_end;
 3353|       |                           return;
 3354|       |                        }
 3355|       |                     }
 3356|       |
 3357|       |                     if (key == tag.sv()) {
 3358|       |                        if (parse_ws_colon<Opts>(ctx, it, end)) {
 3359|       |                           return;
 3360|       |                        }
 3361|       |
 3362|       |                        parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3363|       |                        if (bool(ctx.error)) [[unlikely]]
 3364|       |                           return;
 3365|       |
 3366|       |                        if (skip_ws<Opts>(ctx, it, end)) {
 3367|       |                           return;
 3368|       |                        }
 3369|       |                        continue;
 3370|       |                     }
 3371|       |                     else {
 3372|       |                        it = start; // reset the iterator
 3373|       |                     }
 3374|       |                  }
 3375|       |
 3376|       |                  if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
 3377|       |                     size_t index = num_members;
 3378|       |                     parse_and_invoke<Opts, T>(value, ctx, it, end, index);
 3379|       |                     if (bool(ctx.error)) [[unlikely]]
 3380|       |                        return;
 3381|       |                     if (index < num_members) {
 3382|       |                        fields[index] = true;
 3383|       |                     }
 3384|       |                  }
 3385|       |                  else {
 3386|       |                     parse_and_invoke<Opts, T>(value, ctx, it, end);
 3387|       |                     if (bool(ctx.error)) [[unlikely]]
 3388|       |                        return;
 3389|       |                  }
 3390|       |               }
 3391|  24.7k|               else {
 3392|       |                  // For types like std::map, std::unordered_map
 3393|       |
 3394|  24.7k|                  auto reading = [&](auto&& key) {
 3395|  24.7k|                     if constexpr (Opts.partial_read) {
 3396|  24.7k|                        if (auto element = value.find(key); element != value.end()) {
 3397|  24.7k|                           ++read_count;
 3398|  24.7k|                           parse<JSON>::op<ws_handled<Opts>()>(element->second, ctx, it, end);
 3399|  24.7k|                        }
 3400|  24.7k|                        else {
 3401|  24.7k|                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3402|  24.7k|                        }
 3403|  24.7k|                     }
 3404|  24.7k|                     else {
 3405|  24.7k|                        parse<JSON>::op<ws_handled<Opts>()>(value[key], ctx, it, end);
 3406|  24.7k|                     }
 3407|  24.7k|                  };
 3408|       |
 3409|       |                  // using Key = std::conditional_t<heterogeneous_map<T>, sv, typename T::key_type>;
 3410|  24.7k|                  using Key = typename T::key_type;
 3411|  24.7k|                  if constexpr (std::is_same_v<Key, std::string>) {
 3412|  24.7k|                     ctx.scratch.clear();
 3413|  24.7k|                     parse<JSON>::op<Opts>(ctx.scratch, ctx, it, end);
 3414|  24.7k|                     if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (3414:26): [True: 209, False: 24.5k]
  ------------------
 3415|    209|                        return;
 3416|       |
 3417|  24.5k|                     if (parse_ws_colon<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3417:26): [True: 103, False: 24.4k]
  ------------------
 3418|    103|                        return;
 3419|    103|                     }
 3420|       |
 3421|  24.4k|                     reading(ctx.scratch);
 3422|       |                     if constexpr (Opts.partial_read) {
 3423|       |                        if (read_count == value.size()) {
 3424|       |                           return;
 3425|       |                        }
 3426|       |                     }
 3427|  24.4k|                     if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (3427:26): [True: 684, False: 23.7k]
  ------------------
 3428|    684|                        return;
 3429|       |                  }
 3430|       |                  else if constexpr (str_t<Key>) {
 3431|       |                     Key key;
 3432|       |                     parse<JSON>::op<Opts>(key, ctx, it, end);
 3433|       |                     if (bool(ctx.error)) [[unlikely]]
 3434|       |                        return;
 3435|       |
 3436|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3437|       |                        return;
 3438|       |                     }
 3439|       |
 3440|       |                     reading(key);
 3441|       |                     if constexpr (Opts.partial_read) {
 3442|       |                        if (read_count == value.size()) {
 3443|       |                           return;
 3444|       |                        }
 3445|       |                     }
 3446|       |                     if (bool(ctx.error)) [[unlikely]]
 3447|       |                        return;
 3448|       |                  }
 3449|       |                  else {
 3450|       |                     Key key_value{};
 3451|       |                     if constexpr (is_named_enum<Key> || mimics_str_t<Key>) {
 3452|       |                        parse<JSON>::op<Opts>(key_value, ctx, it, end);
 3453|       |                     }
 3454|       |                     else if constexpr (std::is_arithmetic_v<Key>) {
 3455|       |                        // prefer over quoted_t below to avoid double parsing of quoted_t
 3456|       |                        parse<JSON>::op<opt_true<Opts, quoted_num_opt_tag{}>>(key_value, ctx, it, end);
 3457|       |                     }
 3458|       |                     else {
 3459|       |                        parse<JSON>::op<opt_false<Opts, raw_string_opt_tag{}>>(quoted_t<Key>{key_value}, ctx, it, end);
 3460|       |                     }
 3461|       |                     if (bool(ctx.error)) [[unlikely]]
 3462|       |                        return;
 3463|       |
 3464|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3465|       |                        return;
 3466|       |                     }
 3467|       |
 3468|       |                     reading(key_value);
 3469|       |                     if constexpr (Opts.partial_read) {
 3470|       |                        if (read_count == value.size()) {
 3471|       |                           return;
 3472|       |                        }
 3473|       |                     }
 3474|       |                     if (bool(ctx.error)) [[unlikely]]
 3475|       |                        return;
 3476|       |                  }
 3477|  24.7k|               }
 3478|       |
 3479|       |               // Streaming refill point: after parsing each key-value pair, refill if buffer is low
 3480|       |               if constexpr (has_streaming_state<decltype(ctx)>) {
 3481|       |                  if (ctx.stream.enabled()) {
 3482|       |                     const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 3483|       |                     // Refill when less than 25% of buffer remains to ensure enough space for next element
 3484|       |                     if (ctx.stream.size() - consumed <= ctx.stream.size() / 4 || it >= end) {
 3485|       |                        const char* new_it;
 3486|       |                        const char* new_end;
 3487|       |                        ctx.stream.consume_and_refill(consumed, new_it, new_end);
 3488|       |                        it = new_it;
 3489|       |                        end = new_end;
 3490|       |                        if (it >= end && ctx.stream.at_eof()) {
 3491|       |                           ctx.error = error_code::unexpected_end;
 3492|       |                           return;
 3493|       |                        }
 3494|       |                     }
 3495|       |                  }
 3496|       |               }
 3497|       |
 3498|  24.7k|               if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3498:20): [True: 45, False: 24.7k]
  ------------------
 3499|     45|                  return;
 3500|     45|               }
 3501|  24.7k|            }
 3502|  1.49k|         }
 3503|  1.49k|      }
_ZZN3glz4fromILj10ENSt3__13mapINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEiNS1_4lessIS8_EENS6_INS1_4pairIKS8_iEEEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEETnNS_14string_literalEXtlNSJ_ILm1EEEEERSF_TkNS_10is_contextERNS_7contextERPKcSP_EEvOT1_OT2_OT3_T4_ENKUlvE_clEv:
 3148|  1.48k|            decltype(auto) fields = [&]() -> decltype(auto) {
 3149|       |               if constexpr ((glaze_object_t<T> || reflectable<T>) &&
 3150|       |                             (Opts.error_on_missing_keys || Opts.partial_read)) {
 3151|       |                  return bit_array<num_members>{};
 3152|       |               }
 3153|  1.48k|               else {
 3154|  1.48k|                  return nullptr;
 3155|  1.48k|               }
 3156|  1.48k|            }();
_ZN3glz5parseILj10EE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEETkNS_10is_contextERNS_7contextERPKcSF_EEvOT0_OT1_OT2_T3_:
   49|   111k|      {
   50|       |         if constexpr (const_value_v<T>) {
   51|       |            if constexpr (check_error_on_const_read(Opts)) {
   52|       |               ctx.error = error_code::attempt_const_read;
   53|       |            }
   54|       |            else {
   55|       |               // do not read anything into the const value
   56|       |               skip_value<JSON>::op<Opts>(std::forward<Ctx>(ctx), std::forward<It0>(it), end);
   57|       |            }
   58|       |         }
   59|   111k|         else {
   60|   111k|            using V = std::remove_cvref_t<T>;
   61|   111k|            from<JSON, V>::template op<Opts>(std::forward<T>(value), std::forward<Ctx>(ctx), std::forward<It0>(it),
   62|   111k|                                             end);
   63|   111k|         }
   64|   111k|      }
_ZN3glz4fromILj10ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERPKcSC_S7_TkNS_10is_contextERNS_7contextEQntcl15check_is_paddedTL0__EEEvRT2_OT3_OT0_T1_:
 1043|   111k|      {
 1044|       |         if constexpr (check_string_as_number(Opts)) {
 1045|       |            auto start = it;
 1046|       |            skip_number<Opts>(ctx, it, end);
 1047|       |            if (bool(ctx.error)) [[unlikely]] {
 1048|       |               return;
 1049|       |            }
 1050|       |            if (start == it) [[unlikely]] {
 1051|       |               ctx.error = error_code::parse_number_failure;
 1052|       |               return;
 1053|       |            }
 1054|       |            value.append(start, size_t(it - start));
 1055|       |         }
 1056|   111k|         else {
 1057|   111k|            if constexpr (!check_opening_handled(Opts)) {
 1058|   111k|               if constexpr (!check_ws_handled(Opts)) {
 1059|   111k|                  if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (1059:23): [True: 119, False: 111k]
  ------------------
 1060|    119|                     return;
 1061|    119|                  }
 1062|   111k|               }
 1063|       |
 1064|   111k|               if (match_invalid_end<'"', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (1064:20): [True: 39.0k, False: 72.1k]
  ------------------
 1065|  39.0k|                  return;
 1066|  39.0k|               }
 1067|   111k|            }
 1068|       |
 1069|   111k|            if constexpr (not check_raw_string(Opts)) {
 1070|   111k|               static constexpr auto string_padding_bytes = 8;
 1071|       |
 1072|   111k|               if (size_t(end - it) >= 8) {
  ------------------
  |  Branch (1072:20): [True: 69.8k, False: 41.3k]
  ------------------
 1073|  69.8k|                  auto start = it;
 1074|  69.8k|                  uint64_t ascii_acc{};
 1075|  69.8k|                  const auto end8 = end - 8;
 1076|  9.99M|                  while (true) {
  ------------------
  |  Branch (1076:26): [True: 9.99M, Folded]
  ------------------
 1077|  9.99M|                     if (it >= end8) [[unlikely]] {
  ------------------
  |  Branch (1077:26): [True: 2.10k, False: 9.99M]
  ------------------
 1078|  2.10k|                        break;
 1079|  2.10k|                     }
 1080|       |
 1081|  9.99M|                     uint64_t chunk;
 1082|  9.99M|                     std::memcpy(&chunk, it, 8);
 1083|       |                     if constexpr (std::endian::native == std::endian::big) {
 1084|       |                        chunk = std::byteswap(chunk);
 1085|       |                     }
 1086|  9.99M|                     ascii_acc |= chunk;
 1087|  9.99M|                     const uint64_t test_chars = has_quote(chunk);
 1088|  9.99M|                     if (test_chars) {
  ------------------
  |  Branch (1088:26): [True: 71.3k, False: 9.92M]
  ------------------
 1089|  71.3k|                        it += (countr_zero(test_chars) >> 3);
 1090|       |
 1091|  71.3k|                        auto* prev = it - 1;
 1092|   129k|                        while (*prev == '\\') {
  ------------------
  |  Branch (1092:32): [True: 57.9k, False: 71.3k]
  ------------------
 1093|  57.9k|                           --prev;
 1094|  57.9k|                        }
 1095|  71.3k|                        if (size_t(it - prev) % 2) {
  ------------------
  |  Branch (1095:29): [True: 67.7k, False: 3.59k]
  ------------------
 1096|  67.7k|                           goto continue_decode;
 1097|  67.7k|                        }
 1098|  3.59k|                        ++it; // skip the escaped quote
 1099|  3.59k|                     }
 1100|  9.92M|                     else {
 1101|  9.92M|                        it += 8;
 1102|  9.92M|                     }
 1103|  9.99M|                  }
 1104|       |
 1105|  3.03k|                  while (it[-1] == '\\') [[unlikely]] {
  ------------------
  |  Branch (1105:26): [True: 934, False: 2.10k]
  ------------------
 1106|       |                     // if we ended on an escape character then we need to rewind
 1107|       |                     // because we lost our context
 1108|    934|                     --it;
 1109|    934|                  }
 1110|       |
 1111|       |                  // The byte-wise tail keeps feeding the accumulator: it has to cover every byte of
 1112|       |                  // the string, or a non-ASCII byte reached here would be waved through unvalidated.
 1113|  10.1k|                  for (; it < end; ++it) {
  ------------------
  |  Branch (1113:26): [True: 9.90k, False: 197]
  ------------------
 1114|  9.90k|                     ascii_acc |= uint8_t(*it);
 1115|  9.90k|                     if (*it == '"') {
  ------------------
  |  Branch (1115:26): [True: 1.99k, False: 7.91k]
  ------------------
 1116|  1.99k|                        auto* prev = it - 1;
 1117|  2.61k|                        while (*prev == '\\') {
  ------------------
  |  Branch (1117:32): [True: 620, False: 1.99k]
  ------------------
 1118|    620|                           --prev;
 1119|    620|                        }
 1120|  1.99k|                        if (size_t(it - prev) % 2) {
  ------------------
  |  Branch (1120:29): [True: 1.90k, False: 84]
  ------------------
 1121|  1.90k|                           goto continue_decode;
 1122|  1.90k|                        }
 1123|  1.99k|                     }
 1124|  9.90k|                  }
 1125|       |
 1126|    197|                  ctx.error = error_code::unexpected_end;
 1127|    197|                  return;
 1128|       |
 1129|  69.6k|               continue_decode:
 1130|       |
 1131|  69.6k|                  if (validate_utf8_span<Opts>(ctx, start, it, ascii_acc)) [[unlikely]] {
  ------------------
  |  Branch (1131:23): [True: 550, False: 69.0k]
  ------------------
 1132|    550|                     return;
 1133|    550|                  }
 1134|       |
 1135|  69.0k|                  const auto available_padding = size_t(end - it);
 1136|  69.0k|                  auto n = size_t(it - start);
 1137|  69.0k|                  if (available_padding >= 8) [[likely]] {
  ------------------
  |  Branch (1137:23): [True: 66.8k, False: 2.18k]
  ------------------
 1138|  66.8k|                     value.resize(n + string_padding_bytes);
 1139|       |
 1140|  66.8k|                     auto* p = value.data();
 1141|       |
 1142|  6.34M|                     while (true) {
  ------------------
  |  Branch (1142:29): [True: 6.34M, Folded]
  ------------------
 1143|  6.34M|                        if (start >= it) {
  ------------------
  |  Branch (1143:29): [True: 60.1k, False: 6.28M]
  ------------------
 1144|  60.1k|                           break;
 1145|  60.1k|                        }
 1146|       |
 1147|  6.28M|                        std::memcpy(p, start, 8);
 1148|  6.28M|                        uint64_t swar;
 1149|  6.28M|                        std::memcpy(&swar, p, 8);
 1150|       |                        if constexpr (std::endian::native == std::endian::big) {
 1151|       |                           swar = std::byteswap(swar);
 1152|       |                        }
 1153|       |
 1154|  6.28M|                        constexpr uint64_t lo7_mask = repeat_byte8(0b01111111);
 1155|  6.28M|                        const uint64_t lo7 = swar & lo7_mask;
 1156|  6.28M|                        const uint64_t backslash = (lo7 ^ repeat_byte8('\\')) + lo7_mask;
 1157|  6.28M|                        const uint64_t less_32 = (swar & repeat_byte8(0b01100000)) + lo7_mask;
 1158|  6.28M|                        uint64_t next = ~((backslash & less_32) | swar);
 1159|       |
 1160|  6.28M|                        next &= repeat_byte8(0b10000000);
 1161|  6.28M|                        if (next == 0) {
  ------------------
  |  Branch (1161:29): [True: 6.24M, False: 47.9k]
  ------------------
 1162|  6.24M|                           start += 8;
 1163|  6.24M|                           p += 8;
 1164|  6.24M|                           continue;
 1165|  6.24M|                        }
 1166|       |
 1167|  47.9k|                        next = countr_zero(next) >> 3;
 1168|  47.9k|                        start += next;
 1169|  47.9k|                        if (start >= it) {
  ------------------
  |  Branch (1169:29): [True: 6.40k, False: 41.5k]
  ------------------
 1170|  6.40k|                           break;
 1171|  6.40k|                        }
 1172|       |
 1173|  41.5k|                        if ((*start & 0b11100000) == 0) [[unlikely]] {
  ------------------
  |  Branch (1173:29): [True: 107, False: 41.4k]
  ------------------
 1174|    107|                           ctx.error = error_code::syntax_error;
 1175|    107|                           return;
 1176|    107|                        }
 1177|  41.4k|                        ++start; // skip the escape
 1178|  41.4k|                        if (*start == 'u') {
  ------------------
  |  Branch (1178:29): [True: 6.67k, False: 34.7k]
  ------------------
 1179|  6.67k|                           ++start;
 1180|  6.67k|                           p += next;
 1181|  6.67k|                           const auto mark = start;
 1182|  6.67k|                           const auto offset = handle_unicode_code_point(start, p, end);
 1183|  6.67k|                           if (offset == 0) [[unlikely]] {
  ------------------
  |  Branch (1183:32): [True: 186, False: 6.48k]
  ------------------
 1184|    186|                              ctx.error = error_code::unicode_escape_conversion_failure;
 1185|    186|                              return;
 1186|    186|                           }
 1187|  6.48k|                           n += offset;
 1188|       |                           // escape + u + unicode code points
 1189|  6.48k|                           n -= 2 + uint32_t(start - mark);
 1190|  6.48k|                        }
 1191|  34.7k|                        else {
 1192|  34.7k|                           p += next;
 1193|  34.7k|                           *p = char_unescape_table[uint8_t(*start)];
 1194|  34.7k|                           if (*p == 0) [[unlikely]] {
  ------------------
  |  Branch (1194:32): [True: 41, False: 34.7k]
  ------------------
 1195|     41|                              ctx.error = error_code::invalid_escape;
 1196|     41|                              return;
 1197|     41|                           }
 1198|  34.7k|                           ++p;
 1199|  34.7k|                           ++start;
 1200|  34.7k|                           --n;
 1201|  34.7k|                        }
 1202|  41.4k|                     }
 1203|       |
 1204|  66.5k|                     value.resize(n);
 1205|  66.5k|                     ++it;
 1206|  66.5k|                  }
 1207|  2.18k|                  else {
 1208|       |                     // For large inputs this case of running out of buffer is very rare
 1209|  2.18k|                     value.resize(n);
 1210|  2.18k|                     auto* p = value.data();
 1211|       |
 1212|  2.18k|                     it = start;
 1213|   127k|                     while (it < end) [[likely]] {
  ------------------
  |  Branch (1213:29): [True: 127k, False: 0]
  ------------------
 1214|   127k|                        if (*it == '"') {
  ------------------
  |  Branch (1214:29): [True: 1.80k, False: 126k]
  ------------------
 1215|  1.80k|                           value.resize(size_t(p - value.data()));
 1216|  1.80k|                           ++it;
 1217|  1.80k|                           return;
 1218|  1.80k|                        }
 1219|       |
 1220|   126k|                        if ((*it & 0b11100000) == 0) [[unlikely]] {
  ------------------
  |  Branch (1220:29): [True: 135, False: 126k]
  ------------------
 1221|    135|                           ctx.error = error_code::syntax_error;
 1222|    135|                           return;
 1223|    135|                        }
 1224|       |
 1225|   126k|                        *p = *it;
 1226|       |
 1227|   126k|                        if (*it == '\\') {
  ------------------
  |  Branch (1227:29): [True: 4.20k, False: 121k]
  ------------------
 1228|  4.20k|                           ++it; // skip the escape
 1229|  4.20k|                           if (*it == 'u') {
  ------------------
  |  Branch (1229:32): [True: 1.71k, False: 2.49k]
  ------------------
 1230|  1.71k|                              ++it;
 1231|  1.71k|                              if (!handle_unicode_code_point(it, p, end)) [[unlikely]] {
  ------------------
  |  Branch (1231:35): [True: 206, False: 1.50k]
  ------------------
 1232|    206|                                 ctx.error = error_code::unicode_escape_conversion_failure;
 1233|    206|                                 return;
 1234|    206|                              }
 1235|  1.71k|                           }
 1236|  2.49k|                           else {
 1237|  2.49k|                              *p = char_unescape_table[uint8_t(*it)];
 1238|  2.49k|                              if (*p == 0) [[unlikely]] {
  ------------------
  |  Branch (1238:35): [True: 40, False: 2.45k]
  ------------------
 1239|     40|                                 ctx.error = error_code::invalid_escape;
 1240|     40|                                 return;
 1241|     40|                              }
 1242|  2.45k|                              ++p;
 1243|  2.45k|                              ++it;
 1244|  2.45k|                           }
 1245|  4.20k|                        }
 1246|   121k|                        else {
 1247|   121k|                           ++it;
 1248|   121k|                           ++p;
 1249|   121k|                        }
 1250|   126k|                     }
 1251|       |
 1252|      0|                     ctx.error = error_code::unexpected_end;
 1253|      0|                  }
 1254|  69.0k|               }
 1255|  41.3k|               else {
 1256|       |                  // For short strings
 1257|       |
 1258|  41.3k|                  std::array<char, 8> buffer{};
 1259|       |
 1260|  41.3k|                  auto* p = buffer.data();
 1261|  41.3k|                  const auto* const utf8_start = it;
 1262|       |
 1263|  44.7k|                  while (it < end) [[likely]] {
  ------------------
  |  Branch (1263:26): [True: 5.32k, False: 39.4k]
  ------------------
 1264|  5.32k|                     *p = *it;
 1265|  5.32k|                     if (*it == '"') {
  ------------------
  |  Branch (1265:26): [True: 1.73k, False: 3.59k]
  ------------------
 1266|  1.73k|                        if (validate_utf8_span<Opts>(ctx, utf8_start, it)) [[unlikely]] {
  ------------------
  |  Branch (1266:29): [True: 272, False: 1.46k]
  ------------------
 1267|    272|                           return;
 1268|    272|                        }
 1269|  1.46k|                        const size_t n = size_t(p - buffer.data());
 1270|  1.46k|#if __has_cpp_attribute(assume) >= 202207L
 1271|  1.46k|                        [[assume(n <= sizeof(buffer))]];
 1272|  1.46k|#endif
 1273|  1.46k|                        value.assign(buffer.data(), n);
 1274|  1.46k|                        ++it;
 1275|  1.46k|                        if constexpr (not Opts.null_terminated) {
 1276|  1.46k|                           if (it == end) {
  ------------------
  |  Branch (1276:32): [True: 288, False: 1.17k]
  ------------------
 1277|    288|                              ctx.error = error_code::end_reached;
 1278|    288|                              return;
 1279|    288|                           }
 1280|  1.46k|                        }
 1281|  1.17k|                        return;
 1282|  1.73k|                     }
 1283|  3.59k|                     else if (*it == '\\') {
  ------------------
  |  Branch (1283:31): [True: 334, False: 3.25k]
  ------------------
 1284|    334|                        ++it; // skip the escape
 1285|    334|                        if constexpr (not Opts.null_terminated) {
 1286|    334|                           if (it == end) [[unlikely]] {
  ------------------
  |  Branch (1286:32): [True: 25, False: 309]
  ------------------
 1287|     25|                              ctx.error = error_code::unexpected_end;
 1288|     25|                              return;
 1289|     25|                           }
 1290|    334|                        }
 1291|    334|                        if (*it == 'u') {
  ------------------
  |  Branch (1291:29): [True: 200, False: 134]
  ------------------
 1292|    200|                           ++it;
 1293|    200|                           if constexpr (not Opts.null_terminated) {
 1294|    200|                              if (it == end) [[unlikely]] {
  ------------------
  |  Branch (1294:35): [True: 13, False: 187]
  ------------------
 1295|     13|                                 ctx.error = error_code::unexpected_end;
 1296|     13|                                 return;
 1297|     13|                              }
 1298|    200|                           }
 1299|    200|                           if (!handle_unicode_code_point(it, p, end)) [[unlikely]] {
  ------------------
  |  Branch (1299:32): [True: 49, False: 151]
  ------------------
 1300|     49|                              ctx.error = error_code::unicode_escape_conversion_failure;
 1301|     49|                              return;
 1302|     49|                           }
 1303|    200|                        }
 1304|    134|                        else {
 1305|    134|                           *p = char_unescape_table[uint8_t(*it)];
 1306|    134|                           if (*p == 0) [[unlikely]] {
  ------------------
  |  Branch (1306:32): [True: 29, False: 105]
  ------------------
 1307|     29|                              ctx.error = error_code::invalid_escape;
 1308|     29|                              return;
 1309|     29|                           }
 1310|    105|                           ++p;
 1311|    105|                           ++it;
 1312|    105|                        }
 1313|    334|                     }
 1314|  3.25k|                     else if ((*it & 0b11100000) == 0) [[unlikely]] {
  ------------------
  |  Branch (1314:31): [True: 118, False: 3.14k]
  ------------------
 1315|    118|                        ctx.error = error_code::syntax_error;
 1316|    118|                        return;
 1317|    118|                     }
 1318|  3.14k|                     else {
 1319|  3.14k|                        ++it;
 1320|  3.14k|                        ++p;
 1321|  3.14k|                     }
 1322|  5.32k|                  }
 1323|       |
 1324|  39.4k|                  ctx.error = error_code::unexpected_end;
 1325|  39.4k|               }
 1326|       |            }
 1327|       |            else {
 1328|       |               // raw_string
 1329|       |               auto start = it;
 1330|       |               skip_string_view(ctx, it, end);
 1331|       |               if (bool(ctx.error)) [[unlikely]]
 1332|       |                  return;
 1333|       |
 1334|       |               if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]] {
 1335|       |                  return;
 1336|       |               }
 1337|       |
 1338|       |               value.assign(start, size_t(it - start));
 1339|       |               ++it;
 1340|       |            }
 1341|   111k|         }
 1342|   111k|      }
_ZN3glz14parse_ws_colonITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETkNS_10is_contextENS_7contextERPKcS4_EEbRT0_OT1_T2_:
  159|  68.3k|   {
  160|  68.3k|      if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (160:11): [True: 182, False: 68.1k]
  ------------------
  161|    182|         return true;
  162|    182|      }
  163|  68.1k|      if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (163:11): [True: 380, False: 67.7k]
  ------------------
  164|    380|         return true;
  165|    380|      }
  166|  67.7k|      if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (166:11): [True: 154, False: 67.5k]
  ------------------
  167|    154|         return true;
  168|    154|      }
  169|  67.5k|      return false;
  170|  67.7k|   }
_ZZN3glz4fromILj10ENSt3__13mapINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEiNS1_4lessIS8_EENS6_INS1_4pairIKS8_iEEEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEETnNS_14string_literalEXtlNSJ_ILm1EEEEERSF_TkNS_10is_contextERNS_7contextERPKcSP_EEvOT1_OT2_OT3_T4_ENKUlOT_E_clIRS8_EEDaSZ_:
 3394|  24.4k|                  auto reading = [&](auto&& key) {
 3395|       |                     if constexpr (Opts.partial_read) {
 3396|       |                        if (auto element = value.find(key); element != value.end()) {
 3397|       |                           ++read_count;
 3398|       |                           parse<JSON>::op<ws_handled<Opts>()>(element->second, ctx, it, end);
 3399|       |                        }
 3400|       |                        else {
 3401|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3402|       |                        }
 3403|       |                     }
 3404|  24.4k|                     else {
 3405|  24.4k|                        parse<JSON>::op<ws_handled<Opts>()>(value[key], ctx, it, end);
 3406|  24.4k|                     }
 3407|  24.4k|                  };
_ZZN3glz16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT3_OT4_OT5_DpOT2_ENKUlTnmvE_clILm6EEEDav:
  484|  1.71k|            visit<N>([&]<size_t I>() { decode_index<Opts, T, I>(value, ctx, it, end, selected_index...); }, index);
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm6ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|  1.71k|   {
  312|  1.71k|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|  1.71k|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|  1.71k|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|  1.71k|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 1.70k, False: 8]
  |  Branch (316:36): [True: 1.69k, False: 10]
  ------------------
  317|  1.69k|         it += Length;
  318|  1.69k|         if constexpr (not Opts.null_terminated) {
  319|  1.69k|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 1.69k]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|  1.69k|         }
  324|       |
  325|  1.69k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 16, False: 1.67k]
  ------------------
  326|     16|            return;
  327|     16|         }
  328|  1.67k|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 16, False: 1.66k]
  ------------------
  329|     16|            return;
  330|     16|         }
  331|  1.66k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 16, False: 1.64k]
  ------------------
  332|     16|            return;
  333|     16|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|  1.64k|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|  1.64k|      }
  338|     18|      else [[unlikely]] {
  339|     18|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|     18|      }
  341|  1.71k|   }
_ZN3glz18decode_field_valueITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnDaXtlS1_Lj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEEN9repe_fuzz8fuzz_apiELm6ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT1_E11reflectableISA_EEEvOT3_OT5_OT6_OT7_DpOT4_:
  245|  1.64k|   {
  246|       |      // Check for null value skipping on read
  247|       |      if constexpr (check_skip_null_members_on_read(Opts)) {
  248|       |         if (*it == 'n') {
  249|       |            ++it;
  250|       |            if constexpr (not Opts.null_terminated) {
  251|       |               if (it == end) [[unlikely]] {
  252|       |                  ctx.error = error_code::unexpected_end;
  253|       |                  return;
  254|       |               }
  255|       |            }
  256|       |            match<"ull", Opts>(ctx, it, end);
  257|       |            if (bool(ctx.error)) [[unlikely]]
  258|       |               return;
  259|       |            // Successfully matched "null", skip it
  260|       |            if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  261|       |               ((selected_index = I), ...); // Mark as handled even if skipped
  262|       |            }
  263|       |            return;
  264|       |         }
  265|       |      }
  266|       |
  267|       |      if constexpr (skipped_by_meta<T, I, operation::parse>) {
  268|       |         skip_value<JSON>::op<Opts>(ctx, it, end);
  269|       |         if (bool(ctx.error)) [[unlikely]]
  270|       |            return; // Propagate error from skip_value
  271|       |      }
  272|  1.64k|      else {
  273|  1.64k|         using V = refl_t<T, I>;
  274|       |
  275|       |         if constexpr (const_value_v<V>) {
  276|       |            if constexpr (check_error_on_const_read(Opts)) {
  277|       |               ctx.error = error_code::attempt_const_read;
  278|       |            }
  279|       |            else {
  280|       |               // do not read anything into the const value
  281|       |               skip_value<JSON>::op<Opts>(ctx, it, end);
  282|       |            }
  283|       |         }
  284|       |         else if constexpr (is_function_ptr_or_ref<V>) {
  285|       |            // Function pointers cannot be deserialized from JSON.
  286|       |            // When write_function_pointers is enabled the writer emits a type-name string,
  287|       |            // but there is nothing meaningful to reconstruct on read — just skip the value.
  288|       |            // When write_function_pointers is off the key is never written, so this branch
  289|       |            // is unreachable in that case.
  290|       |            skip_value<JSON>::op<Opts>(ctx, it, end);
  291|       |         }
  292|       |         else if constexpr (glaze_object_t<T>) {
  293|       |            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(reflect<T>::values)),
  294|       |                                                                       ctx, it, end);
  295|       |         }
  296|  1.64k|         else {
  297|  1.64k|            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(to_tie(value))), ctx,
  298|  1.64k|                                                                       it, end);
  299|  1.64k|         }
  300|  1.64k|      }
  301|       |
  302|       |      // The key was present and handled, even when the value itself was skipped
  303|       |      if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  304|       |         ((selected_index = I), ...);
  305|       |      }
  306|  1.64k|   }
_ZN3glz4fromILj10ENSt3__18optionalIdEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEERS3_TkNS_10is_contextERNS_7contextERPKcSB_EEvOT0_OT1_OT2_T3_:
 5088|  1.64k|      {
 5089|  1.64k|         constexpr auto Opts = ws_handled_off<Options>();
 5090|       |         if constexpr (!check_ws_handled(Options)) {
 5091|       |            if (skip_ws<Opts>(ctx, it, end)) {
 5092|       |               return;
 5093|       |            }
 5094|       |         }
 5095|       |
 5096|  1.64k|         if (*it == 'n') {
  ------------------
  |  Branch (5096:14): [True: 757, False: 888]
  ------------------
 5097|    757|            ++it;
 5098|    757|            if constexpr (not Opts.null_terminated) {
 5099|    757|               if (it == end) [[unlikely]] {
  ------------------
  |  Branch (5099:20): [True: 3, False: 754]
  ------------------
 5100|      3|                  ctx.error = error_code::unexpected_end;
 5101|      3|                  return;
 5102|      3|               }
 5103|    757|            }
 5104|    754|            match<"ull", Opts>(ctx, it, end);
 5105|    757|            if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (5105:17): [True: 42, False: 715]
  ------------------
 5106|     42|               return;
 5107|    715|            if constexpr (requires { value.reset(); }) {
 5108|    715|               value.reset();
 5109|    715|            }
 5110|    715|         }
 5111|    888|         else {
 5112|    888|            if constexpr (nullable_value_t<T>) {
 5113|    888|               if (not value.has_value()) {
  ------------------
  |  Branch (5113:20): [True: 502, False: 386]
  ------------------
 5114|       |                  if constexpr (constructible<T>) {
 5115|       |                     value = meta_construct_v<T>();
 5116|       |                  }
 5117|    502|                  else if constexpr (requires { value.emplace(); }) {
 5118|    502|                     value.emplace();
 5119|       |                  }
 5120|       |                  else {
 5121|       |                     static_assert(false_v<T>,
 5122|       |                                   "Your nullable type must have `emplace()` or be glz::meta constructible, or "
 5123|       |                                   "create a custom glz::from specialization");
 5124|       |                  }
 5125|    502|               }
 5126|    888|               parse<JSON>::op<Opts>(value.value(), ctx, it, end);
 5127|       |            }
 5128|       |            else {
 5129|       |               if (!value) {
 5130|       |                  if (!nullable_emplace<Opts>(value, ctx)) {
 5131|       |                     return;
 5132|       |                  }
 5133|       |               }
 5134|       |               parse<JSON>::op<Opts>(*value, ctx, it, end);
 5135|       |            }
 5136|    888|         }
 5137|  1.64k|      }
_ZN3glz5parseILj10EE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERdTkNS_10is_contextERNS_7contextERPKcS8_EEvOT0_OT1_OT2_T3_:
   49|  28.3k|      {
   50|       |         if constexpr (const_value_v<T>) {
   51|       |            if constexpr (check_error_on_const_read(Opts)) {
   52|       |               ctx.error = error_code::attempt_const_read;
   53|       |            }
   54|       |            else {
   55|       |               // do not read anything into the const value
   56|       |               skip_value<JSON>::op<Opts>(std::forward<Ctx>(ctx), std::forward<It0>(it), end);
   57|       |            }
   58|       |         }
   59|  28.3k|         else {
   60|  28.3k|            using V = std::remove_cvref_t<T>;
   61|  28.3k|            from<JSON, V>::template op<Opts>(std::forward<T>(value), std::forward<Ctx>(ctx), std::forward<It0>(it),
   62|  28.3k|                                             end);
   63|  28.3k|         }
   64|  28.3k|      }
_ZN3glz4fromILj10EdE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERPKcRdTkNS_10is_contextERNS_7contextES5_EEvOT1_OT2_OT0_T3_:
  767|  28.3k|      {
  768|       |         if constexpr (check_quoted_num(Opts)) {
  769|       |            if (skip_ws<Opts>(ctx, it, end)) {
  770|       |               return;
  771|       |            }
  772|       |            if (match_invalid_end<'"', Opts>(ctx, it, end)) {
  773|       |               return;
  774|       |            }
  775|       |         }
  776|       |
  777|  28.3k|         if constexpr (!check_ws_handled(Opts)) {
  778|  28.3k|            if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (778:17): [True: 40, False: 28.3k]
  ------------------
  779|     40|               return;
  780|     40|            }
  781|  28.3k|         }
  782|       |
  783|  28.3k|         using V = std::decay_t<decltype(value)>;
  784|       |         if constexpr (int_t<V>) {
  785|       |            static_assert(sizeof(*it) == sizeof(char));
  786|       |
  787|       |            if constexpr (Opts.null_terminated) {
  788|       |               if (not glz::atoi(value, it)) [[unlikely]] {
  789|       |                  ctx.error = error_code::parse_number_failure;
  790|       |                  return;
  791|       |               }
  792|       |            }
  793|       |            else {
  794|       |               if (not glz::atoi(value, it, end)) [[unlikely]] {
  795|       |                  ctx.error = error_code::parse_number_failure;
  796|       |                  return;
  797|       |               }
  798|       |            }
  799|       |         }
  800|  28.3k|         else {
  801|       |// float128_t requires std::from_chars for floating-point, unavailable on older Apple platforms (iOS < 16.3)
  802|  28.3k|#if !defined(_LIBCPP_VERSION) || defined(_LIBCPP_AVAILABILITY_HAS_TO_CHARS_FLOATING_POINT)
  803|       |            if constexpr (is_float128<V>) {
  804|       |               auto [ptr, ec] = std::from_chars(it, end, value);
  805|       |               if (ec != std::errc()) {
  806|       |                  ctx.error = error_code::parse_number_failure;
  807|       |                  return;
  808|       |               }
  809|       |               it = ptr;
  810|       |            }
  811|       |            else
  812|       |#endif
  813|  28.3k|            {
  814|       |               if constexpr (std::is_volatile_v<std::remove_reference_t<decltype(value)>>) {
  815|       |                  // Hardware may interact with value changes, so we parse into a temporary and assign in one
  816|       |                  // place
  817|       |                  V temp;
  818|       |                  if constexpr (is_size_optimized(Opts)) {
  819|       |                     auto [ptr, ec] = simple_float::from_chars<Opts.null_terminated>(it, end, temp);
  820|       |                     if (ec != std::errc{}) [[unlikely]] {
  821|       |                        ctx.error = error_code::parse_number_failure;
  822|       |                        return;
  823|       |                     }
  824|       |                     it = ptr;
  825|       |                  }
  826|       |                  else {
  827|       |                     auto [ptr, ec] = glz::from_chars<Opts.null_terminated>(it, end, temp);
  828|       |                     if (ec != std::errc()) [[unlikely]] {
  829|       |                        ctx.error = error_code::parse_number_failure;
  830|       |                        return;
  831|       |                     }
  832|       |                     it = ptr;
  833|       |                  }
  834|       |                  value = temp;
  835|       |               }
  836|  28.3k|               else {
  837|       |                  if constexpr (is_size_optimized(Opts)) {
  838|       |                     auto [ptr, ec] = simple_float::from_chars<Opts.null_terminated>(it, end, value);
  839|       |                     if (ec != std::errc{}) [[unlikely]] {
  840|       |                        ctx.error = error_code::parse_number_failure;
  841|       |                        return;
  842|       |                     }
  843|       |                     it = ptr;
  844|       |                  }
  845|  28.3k|                  else {
  846|  28.3k|                     auto [ptr, ec] = glz::from_chars<Opts.null_terminated>(it, end, value);
  847|  28.3k|                     if (ec != std::errc()) [[unlikely]] {
  ------------------
  |  Branch (847:26): [True: 23.7k, False: 4.64k]
  ------------------
  848|  23.7k|                        ctx.error = error_code::parse_number_failure;
  849|  23.7k|                        return;
  850|  23.7k|                     }
  851|  4.64k|                     it = ptr;
  852|  4.64k|                  }
  853|  28.3k|               }
  854|  28.3k|            }
  855|  28.3k|         }
  856|       |
  857|       |         if constexpr (check_quoted_num(Opts)) {
  858|       |            if constexpr (not Opts.null_terminated) {
  859|       |               if (it == end) [[unlikely]] {
  860|       |                  ctx.error = error_code::unexpected_end;
  861|       |                  return;
  862|       |               }
  863|       |            }
  864|       |            if (match<'"'>(ctx, it)) {
  865|       |               return;
  866|       |            }
  867|       |            if constexpr (not Opts.null_terminated) {
  868|       |               if (it == end) {
  869|       |                  ctx.error = error_code::end_reached;
  870|       |                  return;
  871|       |               }
  872|       |            }
  873|       |         }
  874|  28.3k|         else {
  875|  28.3k|            if constexpr (not Opts.null_terminated) {
  876|  28.3k|               if (it == end) {
  ------------------
  |  Branch (876:20): [True: 2.83k, False: 25.5k]
  ------------------
  877|  2.83k|                  ctx.error = error_code::end_reached;
  878|  2.83k|                  return;
  879|  2.83k|               }
  880|  28.3k|            }
  881|  28.3k|         }
  882|  28.3k|      }
_ZZN3glz16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT3_OT4_OT5_DpOT2_ENKUlTnmvE_clILm7EEEDav:
  484|  3.65k|            visit<N>([&]<size_t I>() { decode_index<Opts, T, I>(value, ctx, it, end, selected_index...); }, index);
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm7ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|  3.65k|   {
  312|  3.65k|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|  3.65k|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|  3.65k|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|  3.65k|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 3.63k, False: 14]
  |  Branch (316:36): [True: 3.45k, False: 178]
  ------------------
  317|  3.45k|         it += Length;
  318|  3.45k|         if constexpr (not Opts.null_terminated) {
  319|  3.45k|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 3.45k]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|  3.45k|         }
  324|       |
  325|  3.45k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 14, False: 3.44k]
  ------------------
  326|     14|            return;
  327|     14|         }
  328|  3.44k|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 16, False: 3.42k]
  ------------------
  329|     16|            return;
  330|     16|         }
  331|  3.42k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 12, False: 3.41k]
  ------------------
  332|     12|            return;
  333|     12|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|  3.41k|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|  3.41k|      }
  338|    192|      else [[unlikely]] {
  339|    192|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|    192|      }
  341|  3.65k|   }
_ZN3glz18decode_field_valueITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnDaXtlS1_Lj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEEN9repe_fuzz8fuzz_apiELm7ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT1_E11reflectableISA_EEEvOT3_OT5_OT6_OT7_DpOT4_:
  245|  3.41k|   {
  246|       |      // Check for null value skipping on read
  247|       |      if constexpr (check_skip_null_members_on_read(Opts)) {
  248|       |         if (*it == 'n') {
  249|       |            ++it;
  250|       |            if constexpr (not Opts.null_terminated) {
  251|       |               if (it == end) [[unlikely]] {
  252|       |                  ctx.error = error_code::unexpected_end;
  253|       |                  return;
  254|       |               }
  255|       |            }
  256|       |            match<"ull", Opts>(ctx, it, end);
  257|       |            if (bool(ctx.error)) [[unlikely]]
  258|       |               return;
  259|       |            // Successfully matched "null", skip it
  260|       |            if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  261|       |               ((selected_index = I), ...); // Mark as handled even if skipped
  262|       |            }
  263|       |            return;
  264|       |         }
  265|       |      }
  266|       |
  267|       |      if constexpr (skipped_by_meta<T, I, operation::parse>) {
  268|       |         skip_value<JSON>::op<Opts>(ctx, it, end);
  269|       |         if (bool(ctx.error)) [[unlikely]]
  270|       |            return; // Propagate error from skip_value
  271|       |      }
  272|  3.41k|      else {
  273|  3.41k|         using V = refl_t<T, I>;
  274|       |
  275|       |         if constexpr (const_value_v<V>) {
  276|       |            if constexpr (check_error_on_const_read(Opts)) {
  277|       |               ctx.error = error_code::attempt_const_read;
  278|       |            }
  279|       |            else {
  280|       |               // do not read anything into the const value
  281|       |               skip_value<JSON>::op<Opts>(ctx, it, end);
  282|       |            }
  283|       |         }
  284|       |         else if constexpr (is_function_ptr_or_ref<V>) {
  285|       |            // Function pointers cannot be deserialized from JSON.
  286|       |            // When write_function_pointers is enabled the writer emits a type-name string,
  287|       |            // but there is nothing meaningful to reconstruct on read — just skip the value.
  288|       |            // When write_function_pointers is off the key is never written, so this branch
  289|       |            // is unreachable in that case.
  290|       |            skip_value<JSON>::op<Opts>(ctx, it, end);
  291|       |         }
  292|       |         else if constexpr (glaze_object_t<T>) {
  293|       |            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(reflect<T>::values)),
  294|       |                                                                       ctx, it, end);
  295|       |         }
  296|  3.41k|         else {
  297|  3.41k|            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(to_tie(value))), ctx,
  298|  3.41k|                                                                       it, end);
  299|  3.41k|         }
  300|  3.41k|      }
  301|       |
  302|       |      // The key was present and handled, even when the value itself was skipped
  303|       |      if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  304|       |         ((selected_index = I), ...);
  305|       |      }
  306|  3.41k|   }
_ZN3glz4fromILj10ENSt3__17variantIJNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEN9repe_fuzz6amountEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEERSB_TkNS_10is_contextERNS_7contextERPKcSJ_EEvOT0_OT1_OT2_T3_:
 4065|  3.41k|      {
 4066|       |         if constexpr (tagging == variant_tagging_kind::adjacent) {
 4067|       |            read_adjacent<Options>(value, ctx, it, end);
 4068|       |         }
 4069|  3.41k|         else {
 4070|  3.41k|            read_deduced<Options>(value, ctx, it, end);
 4071|  3.41k|         }
 4072|  3.41k|      }
_ZN3glz4fromILj10ENSt3__17variantIJNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEN9repe_fuzz6amountEEEEE12read_deducedITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEERSB_TkNS_10is_contextERNS_7contextERPKcSJ_EEvOT0_OT1_OT2_T3_:
 4076|  3.41k|      {
 4077|  3.41k|         constexpr auto Opts = ws_handled_off<Options>();
 4078|  3.41k|         if constexpr (variant_is_auto_deducible<T>()) {
 4079|       |            if constexpr (not check_ws_handled(Options)) {
 4080|       |               if (skip_ws<Opts>(ctx, it, end)) {
 4081|       |                  return;
 4082|       |               }
 4083|       |            }
 4084|       |
 4085|  3.41k|            switch (*it) {
 4086|      5|            case '\0':
  ------------------
  |  Branch (4086:13): [True: 5, False: 3.41k]
  ------------------
 4087|      5|               ctx.error = error_code::unexpected_end;
 4088|      5|               return;
 4089|  2.14k|            case '{': {
  ------------------
  |  Branch (4089:13): [True: 2.14k, False: 1.26k]
  ------------------
 4090|       |               // This branch consumes the brace itself and hands the object to a reader with
 4091|       |               // `opening_handled`, which therefore does not count the level -- but does release it at
 4092|       |               // the closing brace. So the level is taken here, in both buffer modes, and paid back by
 4093|       |               // the reader below.
 4094|  2.14k|               if (enter_depth(ctx)) [[unlikely]] {
  ------------------
  |  Branch (4094:20): [True: 0, False: 2.14k]
  ------------------
 4095|      0|                  return;
 4096|      0|               }
 4097|       |
 4098|  2.14k|               ++it;
 4099|  2.14k|               if constexpr (not Opts.null_terminated) {
 4100|  2.14k|                  if (it == end) [[unlikely]] {
  ------------------
  |  Branch (4100:23): [True: 5, False: 2.14k]
  ------------------
 4101|      5|                     ctx.error = error_code::unexpected_end;
 4102|      5|                     return;
 4103|      5|                  }
 4104|  2.14k|               }
 4105|  2.14k|               using type_counts = variant_type_count<T>;
 4106|  2.14k|               constexpr auto n_object_candidates = variant_object_candidate_count_v<Opts, T>;
 4107|       |               if constexpr (n_object_candidates < 1) {
 4108|       |                  ctx.error = error_code::no_matching_variant_type;
 4109|       |                  return;
 4110|       |               }
 4111|  2.14k|               else if constexpr (n_object_candidates == 1 && tag_v<T>.empty()) {
 4112|  2.14k|                  constexpr auto first_idx = variant_first_object_candidate_v<Opts, T>;
 4113|  2.14k|                  using V = std::variant_alternative_t<first_idx, T>;
 4114|  2.14k|                  if (!std::holds_alternative<V>(value)) value = V{};
  ------------------
  |  Branch (4114:23): [True: 1.21k, False: 936]
  ------------------
 4115|  2.14k|                  parse<JSON>::op<opening_handled<Opts>()>(std::get<V>(value), ctx, it, end);
 4116|  2.14k|                  return;
 4117|       |               }
 4118|       |               else {
 4119|       |                  auto possible_types = bit_array<std::variant_size_v<T>>{}.flip();
 4120|       |                  static constexpr auto& deduction_bits = variant_deduction_bits<T>;
 4121|       |                  static constexpr size_t deduction_key_count = variant_deduction_key_count<T>;
 4122|       |                  static constexpr auto tag_literal = string_literal_from_view<tag_v<T>.size()>(tag_v<T>);
 4123|       |
 4124|       |                  // Track if we've encountered a tag and what value it had
 4125|       |                  std::optional<size_t> tag_specified_index{};
 4126|       |
 4127|       |                  if (skip_ws<Opts>(ctx, it, end)) {
 4128|       |                     return;
 4129|       |                  }
 4130|       |                  // Once the reader knows which alternative this object holds it may have to read
 4131|       |                  // it again from here. Anchor the position rather than keep the pointer: the scan
 4132|       |                  // below skips values, and a streaming skip refills, which moves the window out
 4133|       |                  // from under a raw pointer (see rewind_anchor).
 4134|       |                  auto start = make_rewind_anchor(ctx, it);
 4135|       |                  bool first_key = true;
 4136|       |                  // Parse bifurcation for tagged variants:
 4137|       |                  //
 4138|       |                  // Without this optimization, tagged variant parsing always uses two passes:
 4139|       |                  //   1. Scan all keys to find the tag (e.g. "type"), skipping values
 4140|       |                  //   2. Reset `it = start` and re-parse the entire object into the resolved type
 4141|       |                  //
 4142|       |                  // When the tag is the first key, the second pass redundantly re-reads every
 4143|       |                  // field that follows it. This lambda avoids that: if the tag was the first key,
 4144|       |                  // it advances past the trailing comma so the object parser picks up at the
 4145|       |                  // second field. If the tag was found later, it falls back to the full re-parse.
 4146|       |                  //
 4147|       |                  // One exception: if the tag name is also a field on the resolved struct
 4148|       |                  // (contains_tag), we must re-parse regardless so the value is stored in
 4149|       |                  // the struct field. This override is applied inside each std::visit lambda.
 4150|       |                  //
 4151|       |                  // Either way the rewind can fail under a streaming read: the window only holds so
 4152|       |                  // much, and an object wider than it has no start left to return to.
 4153|       |                  auto position_after_tag = [&] {
 4154|       |                     if (first_key) {
 4155|       |                        if (*it == ',') ++it; // skip comma; handles tag-only objects where *it == '}'
 4156|       |                        return true;
 4157|       |                     }
 4158|       |                     return start.rewind(ctx, it, end); // tag came later, re-parse from the beginning
 4159|       |                  };
 4160|       |                  // `first_key` also answers "were we reset to the object start", which is what
 4161|       |                  // position_after_tag does for every key but the first.
 4162|       |                  for (; *it != '}'; first_key = false) {
 4163|       |                     if (!first_key) {
 4164|       |                        if (match_invalid_end<',', Opts>(ctx, it, end)) {
 4165|       |                           return;
 4166|       |                        }
 4167|       |                     }
 4168|       |
 4169|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 4170|       |                        return;
 4171|       |                     }
 4172|       |                     if (match_invalid_end<'"', Opts>(ctx, it, end)) {
 4173|       |                        return;
 4174|       |                     }
 4175|       |
 4176|       |                     auto* key_start = it;
 4177|       |                     skip_string_view(ctx, it, end);
 4178|       |                     if (bool(ctx.error)) [[unlikely]]
 4179|       |                        return;
 4180|       |                     if (validate_utf8_span<Opts>(ctx, key_start, it)) [[unlikely]]
 4181|       |                        return;
 4182|       |                     const sv key = {key_start, size_t(it - key_start)};
 4183|       |
 4184|       |                     if (match_invalid_end<'"', Opts>(ctx, it, end)) {
 4185|       |                        return;
 4186|       |                     }
 4187|       |
 4188|       |                     if constexpr (deduction_key_count > 0) {
 4189|       |                        // We first check if a tag is defined and see if the key matches the tag
 4190|       |                        if constexpr (not tag_v<T>.empty()) {
 4191|       |                           if (key == tag_v<T>) {
 4192|       |                              if (parse_ws_colon<Opts>(ctx, it, end)) {
 4193|       |                                 return;
 4194|       |                              }
 4195|       |
 4196|       |                              using id_type = std::decay_t<decltype(ids_v<T>[0])>;
 4197|       |
 4198|       |                              std::conditional_t<std::integral<id_type>, id_type, sv> type_id{};
 4199|       |                              if constexpr (std::integral<id_type>) {
 4200|       |                                 from<JSON, id_type>::template op<ws_handled<Opts>()>(type_id, ctx, it, end);
 4201|       |                              }
 4202|       |                              else {
 4203|       |                                 // The id is turned into an index below and never leaves this
 4204|       |                                 // reader, so the view of the window it borrows cannot outlive it.
 4205|       |                                 parse_transient_string_view<ws_handled<Opts>()>(type_id, ctx, it, end);
 4206|       |                              }
 4207|       |                              if (bool(ctx.error)) [[unlikely]]
 4208|       |                                 return;
 4209|       |                              if (skip_ws<Opts>(ctx, it, end)) {
 4210|       |                                 return;
 4211|       |                              }
 4212|       |                              if (!(*it == ',' || *it == '}')) [[unlikely]] {
 4213|       |                                 ctx.error = error_code::syntax_error;
 4214|       |                                 return;
 4215|       |                              }
 4216|       |
 4217|       |                              size_t type_index;
 4218|       |                              if constexpr (std::integral<id_type>) {
 4219|       |                                 type_index = variant_id_to_index<T>::op(type_id);
 4220|       |                              }
 4221|       |                              else {
 4222|       |                                 type_index = variant_id_to_index<T>::op(
 4223|       |                                    type_id.data(), type_id.data() + type_id.size(), type_id.size());
 4224|       |                              }
 4225|       |                              if (type_index < ids_v<T>.size()) [[likely]] {
 4226|       |                                 // Check if the deduced types include the tag-specified type
 4227|       |                                 // If not, the tag doesn't match the fields
 4228|       |                                 // We're already inside if constexpr (deduction_registry.size()), so we know deduction
 4229|       |                                 // is happening. At this point, possible_types has been narrowed by field deduction.
 4230|       |                                 // Check if the tag-specified type is still possible
 4231|       |                                 const bool type_is_possible = possible_types[type_index];
 4232|       |                                 if (!type_is_possible) {
 4233|       |                                    // Tag specifies a type that doesn't match the fields seen so far
 4234|       |                                    ctx.error = error_code::no_matching_variant_type;
 4235|       |                                    return;
 4236|       |                                 }
 4237|       |
 4238|       |                                 if (!position_after_tag()) return;
 4239|       |                                 tag_specified_index = type_index; // Store the tag-specified type
 4240|       |                                 if (value.index() != type_index) emplace_runtime_variant(value, type_index);
 4241|       |                                 std::visit(
 4242|       |                                    [&](auto&& v) {
 4243|       |                                       using V = std::decay_t<decltype(v)>;
 4244|       |                                       constexpr bool is_object =
 4245|       |                                          (glaze_object_t<V> || reflectable<V>) && not custom_read<V>;
 4246|       |                                       if constexpr (variant_unit_alternative<V>) {
 4247|       |                                          // A unit alternative carries no data; its object holds only the
 4248|       |                                          // discriminator. Consume that body through an empty reflected object so
 4249|       |                                          // unknown-key policy and terminator handling match every other alternative.
 4250|       |                                          detail::variant_unit_body unit_body{};
 4251|       |                                          from<JSON, detail::variant_unit_body>::template op<opening_handled<Opts>(),
 4252|       |                                                                                             tag_literal>(unit_body,
 4253|       |                                                                                                          ctx, it, end);
 4254|       |                                       }
 4255|       |                                       else if constexpr (is_object) {
 4256|       |                                          if constexpr (contains_tag<V, tag_literal>()) {
 4257|       |                                             // tag is a struct field, must re-parse
 4258|       |                                             if (!start.rewind(ctx, it, end)) return;
 4259|       |                                          }
 4260|       |                                          from<JSON, V>::template op<opening_handled<Opts>(), tag_literal>(v, ctx, it,
 4261|       |                                                                                                           end);
 4262|       |                                       }
 4263|       |                                       else if constexpr (is_memory_object<V>) {
 4264|       |                                          if (!v) {
 4265|       |                                             if constexpr (is_specialization_v<V, std::optional>) {
 4266|       |                                                if constexpr (requires { v.emplace(); }) {
 4267|       |                                                   v.emplace();
 4268|       |                                                }
 4269|       |                                                else {
 4270|       |                                                   v = typename V::value_type{};
 4271|       |                                                }
 4272|       |                                             }
 4273|       |                                             else if constexpr (is_specialization_v<V, std::unique_ptr>)
 4274|       |                                                v = std::make_unique<typename V::element_type>();
 4275|       |                                             else if constexpr (is_specialization_v<V, std::shared_ptr>)
 4276|       |                                                v = std::make_shared<typename V::element_type>();
 4277|       |                                             else if constexpr (constructible<V>) {
 4278|       |                                                v = meta_construct_v<V>();
 4279|       |                                             }
 4280|       |                                             else if constexpr (std::is_pointer_v<V> &&
 4281|       |                                                                can_allocate_raw_pointer<Opts,
 4282|       |                                                                                         std::decay_t<decltype(ctx)>>) {
 4283|       |                                                if (!try_allocate_raw_pointer<Opts>(v, ctx)) {
 4284|       |                                                   return;
 4285|       |                                                }
 4286|       |                                             }
 4287|       |                                             else {
 4288|       |                                                ctx.error = error_code::invalid_nullable_read;
 4289|       |                                                return;
 4290|       |                                                // Cannot read into unset nullable that is not std::optional,
 4291|       |                                                // std::unique_ptr, or std::shared_ptr
 4292|       |                                             }
 4293|       |                                          }
 4294|       |                                          if constexpr (contains_tag<memory_type<V>, tag_literal>()) {
 4295|       |                                             // tag is a struct field, must re-parse
 4296|       |                                             if (!start.rewind(ctx, it, end)) return;
 4297|       |                                          }
 4298|       |                                          from<JSON, memory_type<V>>::template op<opening_handled<Opts>(), tag_literal>(
 4299|       |                                             *v, ctx, it, end);
 4300|       |                                       }
 4301|       |                                       else if constexpr (custom_read<V>) {
 4302|       |                                          // Custom handlers parse the remaining body themselves and do not
 4303|       |                                          // accept the tag template parameter; the tag was already consumed.
 4304|       |                                          // This only works when the tag was the first key. If it came later,
 4305|       |                                          // we were reset to the object start and the custom handler would
 4306|       |                                          // absorb the tag, so error rather than corrupt the value.
 4307|       |                                          if (!first_key) {
 4308|       |                                             ctx.error = error_code::feature_not_supported;
 4309|       |                                             ctx.custom_error_message =
 4310|       |                                                "the tag must be the first key for a custom variant alternative";
 4311|       |                                             return;
 4312|       |                                          }
 4313|       |                                          from<JSON, V>::template op<opening_handled<Opts>()>(v, ctx, it, end);
 4314|       |                                       }
 4315|       |                                    },
 4316|       |                                    value);
 4317|       |
 4318|       |                                 return; // we've decoded our target type
 4319|       |                              }
 4320|       |                              else [[unlikely]] {
 4321|       |                                 // Check if we have a default type (ids array shorter than variant)
 4322|       |                                 constexpr auto ids_size = ids_v<T>.size();
 4323|       |                                 constexpr auto variant_size = std::variant_size_v<T>;
 4324|       |                                 if constexpr (ids_size < variant_size) {
 4325|       |                                    // Use the first unlabeled type as the default
 4326|       |                                    const auto default_type_index = ids_size;
 4327|       |
 4328|       |                                    if (!position_after_tag()) return;
 4329|       |                                    tag_specified_index = default_type_index; // Store the default type index
 4330|       |                                    if (value.index() != default_type_index)
 4331|       |                                       emplace_runtime_variant(value, default_type_index);
 4332|       |                                    std::visit(
 4333|       |                                       [&](auto&& v) {
 4334|       |                                          using V = std::decay_t<decltype(v)>;
 4335|       |                                          constexpr bool is_object =
 4336|       |                                             (glaze_object_t<V> || reflectable<V>) && not custom_read<V>;
 4337|       |                                          if constexpr (variant_unit_alternative<V>) {
 4338|       |                                             // A unit alternative carries no data; its object holds only the
 4339|       |                                             // discriminator. Consume that body through an empty reflected object so
 4340|       |                                             // unknown-key policy and terminator handling match every other
 4341|       |                                             // alternative.
 4342|       |                                             detail::variant_unit_body unit_body{};
 4343|       |                                             from<JSON, detail::variant_unit_body>::template op<opening_handled<Opts>(),
 4344|       |                                                                                                tag_literal>(
 4345|       |                                                unit_body, ctx, it, end);
 4346|       |                                          }
 4347|       |                                          else if constexpr (is_object) {
 4348|       |                                             if constexpr (contains_tag<V, tag_literal>()) {
 4349|       |                                                // tag is a struct field, must re-parse
 4350|       |                                                if (!start.rewind(ctx, it, end)) return;
 4351|       |                                             }
 4352|       |                                             from<JSON, V>::template op<opening_handled<Opts>()>(v, ctx, it, end);
 4353|       |                                          }
 4354|       |                                          else if constexpr (is_memory_object<V>) {
 4355|       |                                             if (!v) {
 4356|       |                                                if constexpr (is_specialization_v<V, std::optional>) {
 4357|       |                                                   if constexpr (requires { v.emplace(); }) {
 4358|       |                                                      v.emplace();
 4359|       |                                                   }
 4360|       |                                                   else {
 4361|       |                                                      v = typename V::value_type{};
 4362|       |                                                   }
 4363|       |                                                }
 4364|       |                                                else if constexpr (is_specialization_v<V, std::unique_ptr>)
 4365|       |                                                   v = std::make_unique<typename V::element_type>();
 4366|       |                                                else if constexpr (is_specialization_v<V, std::shared_ptr>)
 4367|       |                                                   v = std::make_shared<typename V::element_type>();
 4368|       |                                                else if constexpr (constructible<V>) {
 4369|       |                                                   v = meta_construct_v<V>();
 4370|       |                                                }
 4371|       |                                                else if constexpr (std::is_pointer_v<V> &&
 4372|       |                                                                   can_allocate_raw_pointer<
 4373|       |                                                                      Opts, std::decay_t<decltype(ctx)>>) {
 4374|       |                                                   if (!try_allocate_raw_pointer<Opts>(v, ctx)) {
 4375|       |                                                      return;
 4376|       |                                                   }
 4377|       |                                                }
 4378|       |                                                else {
 4379|       |                                                   ctx.error = error_code::invalid_nullable_read;
 4380|       |                                                   return;
 4381|       |                                                }
 4382|       |                                             }
 4383|       |                                             if constexpr (contains_tag<memory_type<V>, tag_literal>()) {
 4384|       |                                                // tag is a struct field, must re-parse
 4385|       |                                                if (!start.rewind(ctx, it, end)) return;
 4386|       |                                             }
 4387|       |                                             from<JSON, memory_type<V>>::template op<opening_handled<Opts>()>(*v, ctx,
 4388|       |                                                                                                              it, end);
 4389|       |                                          }
 4390|       |                                          else if constexpr (custom_read<V>) {
 4391|       |                                             // Custom handlers parse the remaining body themselves; this only
 4392|       |                                             // works when the tag was the first key (see above). If it came
 4393|       |                                             // later we were reset to the object start, so error rather than
 4394|       |                                             // let the custom handler absorb the tag.
 4395|       |                                             if (!first_key) {
 4396|       |                                                ctx.error = error_code::feature_not_supported;
 4397|       |                                                ctx.custom_error_message =
 4398|       |                                                   "the tag must be the first key for a custom variant alternative";
 4399|       |                                                return;
 4400|       |                                             }
 4401|       |                                             from<JSON, V>::template op<opening_handled<Opts>()>(v, ctx, it, end);
 4402|       |                                          }
 4403|       |                                       },
 4404|       |                                       value);
 4405|       |
 4406|       |                                    return;
 4407|       |                                 }
 4408|       |                                 else {
 4409|       |                                    ctx.error = error_code::no_matching_variant_type;
 4410|       |                                    ctx.custom_error_message = variant_ids_string_v<T>;
 4411|       |                                    return;
 4412|       |                                 }
 4413|       |                              }
 4414|       |                           }
 4415|       |                        }
 4416|       |
 4417|       |                        // Inline decode_hash lookup for variant deduction
 4418|       |                        using deduction_keys_t = keys_wrapper<variant_deduction_keys<T>>;
 4419|       |                        constexpr auto& DeductionHashInfo = hash_info<deduction_keys_t>;
 4420|       |                        const auto deduction_index =
 4421|       |                           decode_hash_with_size<JSON, deduction_keys_t, DeductionHashInfo, DeductionHashInfo.type>::op(
 4422|       |                              key.data(), key.data() + key.size(), key.size());
 4423|       |                        if (deduction_index < deduction_key_count && variant_deduction_keys<T>[deduction_index] == key)
 4424|       |                           [[likely]] {
 4425|       |                           possible_types &= deduction_bits[deduction_index];
 4426|       |                        }
 4427|       |                        else if constexpr (Opts.error_on_unknown_keys) {
 4428|       |                           ctx.error = error_code::unknown_key;
 4429|       |                           return;
 4430|       |                        }
 4431|       |                     }
 4432|       |                     else if constexpr (not tag_v<T>.empty()) {
 4433|       |                        // empty object case for variant, if there are no normal elements
 4434|       |                        if (key == tag_v<T>) {
 4435|       |                           if (parse_ws_colon<Opts>(ctx, it, end)) {
 4436|       |                              return;
 4437|       |                           }
 4438|       |
 4439|       |                           // The id is turned into an index below and never leaves this reader,
 4440|       |                           // so the view of the window it borrows cannot outlive that window.
 4441|       |                           std::string_view type_id{};
 4442|       |                           parse_transient_string_view<ws_handled<Opts>()>(type_id, ctx, it, end);
 4443|       |                           if (bool(ctx.error)) [[unlikely]]
 4444|       |                              return;
 4445|       |                           if (skip_ws<Opts>(ctx, it, end)) {
 4446|       |                              return;
 4447|       |                           }
 4448|       |
 4449|       |                           const auto type_index = variant_id_to_index<T>::op(
 4450|       |                              type_id.data(), type_id.data() + type_id.size(), type_id.size());
 4451|       |                           if (type_index < ids_v<T>.size()) [[likely]] {
 4452|       |                              if (!position_after_tag()) return;
 4453|       |                              tag_specified_index = type_index; // Store the tag-specified type
 4454|       |                              if (value.index() != type_index) emplace_runtime_variant(value, type_index);
 4455|       |                           }
 4456|       |                           else {
 4457|       |                              // Check if we have a default type (ids array shorter than variant)
 4458|       |                              constexpr auto ids_size = ids_v<T>.size();
 4459|       |                              constexpr auto variant_size = std::variant_size_v<T>;
 4460|       |                              if constexpr (ids_size < variant_size) {
 4461|       |                                 // Use the first unlabeled type as the default
 4462|       |                                 if (!position_after_tag()) return;
 4463|       |                                 const auto default_index = ids_size;
 4464|       |                                 tag_specified_index = default_index; // Store the default type index
 4465|       |                                 if (value.index() != default_index) emplace_runtime_variant(value, default_index);
 4466|       |                              }
 4467|       |                              else {
 4468|       |                                 ctx.error = error_code::no_matching_variant_type;
 4469|       |                                 ctx.custom_error_message = variant_ids_string_v<T>;
 4470|       |                                 return;
 4471|       |                              }
 4472|       |                           }
 4473|       |                           // Parse the type (handles tag skipping and unknown keys)
 4474|       |                           std::visit(
 4475|       |                              [&](auto&& v) {
 4476|       |                                 using V = std::decay_t<decltype(v)>;
 4477|       |                                 if constexpr (custom_read<V>) {
 4478|       |                                    // Custom handlers parse the remaining object body themselves and do not
 4479|       |                                    // accept the tag template parameter that reflected objects use to skip an
 4480|       |                                    // interior tag key. That only works when the tag is the first key (it was
 4481|       |                                    // just consumed). If the tag came after other keys, position_after_tag()
 4482|       |                                    // reset us to the object start and the custom handler would absorb the tag
 4483|       |                                    // into its value, so error here rather than corrupt the result.
 4484|       |                                    if (!first_key) {
 4485|       |                                       ctx.error = error_code::feature_not_supported;
 4486|       |                                       ctx.custom_error_message =
 4487|       |                                          "the tag must be the first key for a custom variant alternative";
 4488|       |                                       return;
 4489|       |                                    }
 4490|       |                                    from<JSON, V>::template op<opening_handled<Opts>()>(v, ctx, it, end);
 4491|       |                                 }
 4492|       |                                 else {
 4493|       |                                    if constexpr (contains_tag<V, tag_literal>()) {
 4494|       |                                       // tag is a struct field, must re-parse
 4495|       |                                       if (!start.rewind(ctx, it, end)) return;
 4496|       |                                    }
 4497|       |                                    from<JSON, V>::template op<opening_handled<Opts>(), tag_literal>(v, ctx, it, end);
 4498|       |                                 }
 4499|       |                              },
 4500|       |                              value);
 4501|       |                           return;
 4502|       |                        }
 4503|       |                        else if constexpr (Opts.error_on_unknown_keys) {
 4504|       |                           ctx.error = error_code::unknown_key;
 4505|       |                           return;
 4506|       |                        }
 4507|       |                        else {
 4508|       |                           // Skip unknown key's value (non-tag key in empty variant)
 4509|       |                           if (parse_ws_colon<Opts>(ctx, it, end)) {
 4510|       |                              return;
 4511|       |                           }
 4512|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 4513|       |                           if (bool(ctx.error)) [[unlikely]]
 4514|       |                              return;
 4515|       |                           resync_window_end(ctx, end); // a streaming skip refills
 4516|       |                           if (skip_ws<Opts>(ctx, it, end)) {
 4517|       |                              return;
 4518|       |                           }
 4519|       |                           continue; // Continue loop to find the tag
 4520|       |                        }
 4521|       |                     }
 4522|       |                     else if constexpr (Opts.error_on_unknown_keys) {
 4523|       |                        ctx.error = error_code::unknown_key;
 4524|       |                        return;
 4525|       |                     }
 4526|       |
 4527|       |                     auto matching_types = possible_types.popcount();
 4528|       |                     if (matching_types == 0) {
 4529|       |                        ctx.error = error_code::no_matching_variant_type;
 4530|       |                        return;
 4531|       |                     }
 4532|       |                     // Only short-circuit for variants without tags
 4533|       |                     else if constexpr (tag_v<T>.empty()) {
 4534|       |                        if (matching_types == 1) {
 4535|       |                           if (!start.rewind(ctx, it, end)) return;
 4536|       |                           const auto type_index = possible_types.countr_zero();
 4537|       |
 4538|       |                           if (value.index() != static_cast<size_t>(type_index))
 4539|       |                              emplace_runtime_variant(value, type_index);
 4540|       |                           std::visit(
 4541|       |                              [&](auto&& v) {
 4542|       |                                 using V = std::decay_t<decltype(v)>;
 4543|       |                                 constexpr bool is_object = (glaze_object_t<V> || reflectable<V>) && not custom_read<V>;
 4544|       |                                 if constexpr (variant_unit_alternative<V>) {
 4545|       |                                    // A unit alternative carries no data; its object holds only the discriminator.
 4546|       |                                    // Consume that body through an empty reflected object so unknown-key policy and
 4547|       |                                    // terminator handling match every other alternative.
 4548|       |                                    detail::variant_unit_body unit_body{};
 4549|       |                                    from<JSON, detail::variant_unit_body>::template op<opening_handled<Opts>(),
 4550|       |                                                                                       tag_literal>(unit_body, ctx, it,
 4551|       |                                                                                                    end);
 4552|       |                                 }
 4553|       |                                 else if constexpr (is_object) {
 4554|       |                                    from<JSON, V>::template op<opening_handled<Opts>(), tag_literal>(v, ctx, it, end);
 4555|       |                                 }
 4556|       |                                 else if constexpr (is_memory_object<V>) {
 4557|       |                                    if (!v) {
 4558|       |                                       if constexpr (is_specialization_v<V, std::optional>) {
 4559|       |                                          if constexpr (requires { v.emplace(); }) {
 4560|       |                                             v.emplace();
 4561|       |                                          }
 4562|       |                                          else {
 4563|       |                                             v = typename V::value_type{};
 4564|       |                                          }
 4565|       |                                       }
 4566|       |                                       else if constexpr (is_specialization_v<V, std::unique_ptr>)
 4567|       |                                          v = std::make_unique<typename V::element_type>();
 4568|       |                                       else if constexpr (is_specialization_v<V, std::shared_ptr>)
 4569|       |                                          v = std::make_shared<typename V::element_type>();
 4570|       |                                       else if constexpr (constructible<V>) {
 4571|       |                                          v = meta_construct_v<V>();
 4572|       |                                       }
 4573|       |                                       else if constexpr (std::is_pointer_v<V> &&
 4574|       |                                                          can_allocate_raw_pointer<Opts, std::decay_t<decltype(ctx)>>) {
 4575|       |                                          if (!try_allocate_raw_pointer<Opts>(v, ctx)) {
 4576|       |                                             return;
 4577|       |                                          }
 4578|       |                                       }
 4579|       |                                       else {
 4580|       |                                          ctx.error = error_code::invalid_nullable_read;
 4581|       |                                          return;
 4582|       |                                          // Cannot read into unset nullable that is not std::optional,
 4583|       |                                          // std::unique_ptr, or std::shared_ptr
 4584|       |                                       }
 4585|       |                                    }
 4586|       |                                    from<JSON, memory_type<V>>::template op<opening_handled<Opts>(), tag_literal>(
 4587|       |                                       *v, ctx, it, end);
 4588|       |                                 }
 4589|       |                                 else if constexpr (custom_read<V>) {
 4590|       |                                    // Custom handlers parse the remaining body themselves.
 4591|       |                                    from<JSON, V>::template op<opening_handled<Opts>()>(v, ctx, it, end);
 4592|       |                                 }
 4593|       |                              },
 4594|       |                              value);
 4595|       |
 4596|       |                           return; // we've decoded our target type
 4597|       |                        }
 4598|       |                     }
 4599|       |                     // For tagged variants, continue processing to validate tags
 4600|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 4601|       |                        return;
 4602|       |                     }
 4603|       |
 4604|       |                     skip_value<JSON>::op<Opts>(ctx, it, end);
 4605|       |                     if (bool(ctx.error)) [[unlikely]]
 4606|       |                        return;
 4607|       |                     resync_window_end(ctx, end); // a streaming skip refills
 4608|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 4609|       |                        return;
 4610|       |                     }
 4611|       |                  }
 4612|       |                  // Only apply ambiguous variant resolution if we have multiple object types
 4613|       |                  if constexpr ((type_counts::n_object + type_counts::n_nullable_object) > 1) {
 4614|       |                     // After parsing all keys, check if we have multiple matching types
 4615|       |                     // If so, choose the one with the fewest fields
 4616|       |                     auto final_matching = possible_types.popcount();
 4617|       |                     if (final_matching == 0) {
 4618|       |                        ctx.error = error_code::no_matching_variant_type;
 4619|       |                     }
 4620|       |                     else if (final_matching == 1) {
 4621|       |                        // Single type remains after field deduction
 4622|       |                        const auto type_index = possible_types.countr_zero();
 4623|       |
 4624|       |                        // Validate against tag if one was specified
 4625|       |                        if (tag_specified_index.has_value() &&
 4626|       |                            tag_specified_index.value() != static_cast<size_t>(type_index)) {
 4627|       |                           ctx.error = error_code::no_matching_variant_type;
 4628|       |                           return;
 4629|       |                        }
 4630|       |
 4631|       |                        if (!start.rewind(ctx, it, end)) return;
 4632|       |                        if (value.index() != static_cast<size_t>(type_index))
 4633|       |                           emplace_runtime_variant(value, type_index);
 4634|       |                        std::visit(
 4635|       |                           [&](auto&& v) {
 4636|       |                              using V = std::decay_t<decltype(v)>;
 4637|       |                              constexpr bool is_object = (glaze_object_t<V> || reflectable<V>) && not custom_read<V>;
 4638|       |                              if constexpr (variant_unit_alternative<V>) {
 4639|       |                                 // A unit alternative carries no data; its object holds only the discriminator.
 4640|       |                                 // Consume that body through an empty reflected object so unknown-key policy and
 4641|       |                                 // terminator handling match every other alternative.
 4642|       |                                 detail::variant_unit_body unit_body{};
 4643|       |                                 from<JSON, detail::variant_unit_body>::template op<opening_handled<Opts>(),
 4644|       |                                                                                    tag_literal>(unit_body, ctx, it,
 4645|       |                                                                                                 end);
 4646|       |                              }
 4647|       |                              else if constexpr (is_object) {
 4648|       |                                 from<JSON, V>::template op<opening_handled<Opts>(), tag_literal>(v, ctx, it, end);
 4649|       |                              }
 4650|       |                              else if constexpr (is_memory_object<V>) {
 4651|       |                                 if (!v) {
 4652|       |                                    if constexpr (is_specialization_v<V, std::optional>) {
 4653|       |                                       if constexpr (requires { v.emplace(); }) {
 4654|       |                                          v.emplace();
 4655|       |                                       }
 4656|       |                                       else {
 4657|       |                                          v = typename V::value_type{};
 4658|       |                                       }
 4659|       |                                    }
 4660|       |                                    else if constexpr (is_specialization_v<V, std::unique_ptr>)
 4661|       |                                       v = std::make_unique<typename V::element_type>();
 4662|       |                                    else if constexpr (is_specialization_v<V, std::shared_ptr>)
 4663|       |                                       v = std::make_shared<typename V::element_type>();
 4664|       |                                    else if constexpr (constructible<V>) {
 4665|       |                                       v = meta_construct_v<V>();
 4666|       |                                    }
 4667|       |                                    else if constexpr (std::is_pointer_v<V> &&
 4668|       |                                                       can_allocate_raw_pointer<Opts, std::decay_t<decltype(ctx)>>) {
 4669|       |                                       if (!try_allocate_raw_pointer<Opts>(v, ctx)) {
 4670|       |                                          return;
 4671|       |                                       }
 4672|       |                                    }
 4673|       |                                    else {
 4674|       |                                       ctx.error = error_code::invalid_nullable_read;
 4675|       |                                       return;
 4676|       |                                    }
 4677|       |                                 }
 4678|       |                                 from<JSON, memory_type<V>>::template op<opening_handled<Opts>(), tag_literal>(*v, ctx,
 4679|       |                                                                                                               it, end);
 4680|       |                              }
 4681|       |                              else if constexpr (custom_read<V>) {
 4682|       |                                 // Custom handlers parse the remaining body themselves.
 4683|       |                                 from<JSON, V>::template op<opening_handled<Opts>()>(v, ctx, it, end);
 4684|       |                              }
 4685|       |                           },
 4686|       |                           value);
 4687|       |                     }
 4688|       |                     else if (final_matching > 1) {
 4689|       |                        constexpr auto N = std::variant_size_v<T>;
 4690|       |
 4691|       |                        // Compile-time array of field counts for each variant type
 4692|       |                        constexpr auto field_counts = []<size_t... I>(std::index_sequence<I...>) {
 4693|       |                           return std::array<size_t, N> {
 4694|       |                              ([]<size_t J = I>() -> size_t {
 4695|       |                                 using V = std::decay_t<std::variant_alternative_t<J, T>>;
 4696|       |                                 if constexpr (glaze_object_t<V> || reflectable<V>) {
 4697|       |                                    return reflect<V>::size;
 4698|       |                                 }
 4699|       |                                 else if constexpr (is_memory_object<V>) {
 4700|       |                                    using X = memory_type<V>;
 4701|       |                                    if constexpr (glaze_object_t<X> || reflectable<X>) {
 4702|       |                                       return reflect<X>::size;
 4703|       |                                    }
 4704|       |                                    else {
 4705|       |                                       return (std::numeric_limits<size_t>::max)();
 4706|       |                                    }
 4707|       |                                 }
 4708|       |                                 else {
 4709|       |                                    return (std::numeric_limits<size_t>::max)();
 4710|       |                                 }
 4711|       |                              }.template operator()<I>())...
 4712|       |                           };
 4713|       |                        }(std::make_index_sequence<N>{});
 4714|       |
 4715|       |                        // Find the type with minimum field count among the possible types
 4716|       |                        size_t min_fields = (std::numeric_limits<size_t>::max)();
 4717|       |                        size_t chosen_index = N; // Invalid index initially
 4718|       |
 4719|       |                        for (size_t i = 0; i < N; ++i) {
 4720|       |                           if (possible_types[i] && field_counts[i] < min_fields) {
 4721|       |                              min_fields = field_counts[i];
 4722|       |                              chosen_index = i;
 4723|       |                           }
 4724|       |                        }
 4725|       |
 4726|       |                        if (chosen_index < N) {
 4727|       |                           // Validate against tag if one was specified
 4728|       |                           if (tag_specified_index.has_value() && tag_specified_index.value() != chosen_index) {
 4729|       |                              ctx.error = error_code::no_matching_variant_type;
 4730|       |                              return;
 4731|       |                           }
 4732|       |
 4733|       |                           if (!start.rewind(ctx, it, end)) return;
 4734|       |                           if (value.index() != chosen_index) emplace_runtime_variant(value, chosen_index);
 4735|       |                           std::visit(
 4736|       |                              [&](auto&& v) {
 4737|       |                                 using V = std::decay_t<decltype(v)>;
 4738|       |                                 constexpr bool is_object = (glaze_object_t<V> || reflectable<V>) && not custom_read<V>;
 4739|       |                                 if constexpr (variant_unit_alternative<V>) {
 4740|       |                                    // A unit alternative carries no data; its object holds only the discriminator.
 4741|       |                                    // Consume that body through an empty reflected object so unknown-key policy and
 4742|       |                                    // terminator handling match every other alternative.
 4743|       |                                    detail::variant_unit_body unit_body{};
 4744|       |                                    from<JSON, detail::variant_unit_body>::template op<opening_handled<Opts>(),
 4745|       |                                                                                       tag_literal>(unit_body, ctx, it,
 4746|       |                                                                                                    end);
 4747|       |                                 }
 4748|       |                                 else if constexpr (is_object) {
 4749|       |                                    from<JSON, V>::template op<opening_handled<Opts>(), tag_literal>(v, ctx, it, end);
 4750|       |                                 }
 4751|       |                                 else if constexpr (is_memory_object<V>) {
 4752|       |                                    if (!v) {
 4753|       |                                       if constexpr (is_specialization_v<V, std::optional>) {
 4754|       |                                          if constexpr (requires { v.emplace(); }) {
 4755|       |                                             v.emplace();
 4756|       |                                          }
 4757|       |                                          else {
 4758|       |                                             v = typename V::value_type{};
 4759|       |                                          }
 4760|       |                                       }
 4761|       |                                       else if constexpr (is_specialization_v<V, std::unique_ptr>)
 4762|       |                                          v = std::make_unique<typename V::element_type>();
 4763|       |                                       else if constexpr (is_specialization_v<V, std::shared_ptr>)
 4764|       |                                          v = std::make_shared<typename V::element_type>();
 4765|       |                                       else if constexpr (constructible<V>) {
 4766|       |                                          v = meta_construct_v<V>();
 4767|       |                                       }
 4768|       |                                       else if constexpr (std::is_pointer_v<V> &&
 4769|       |                                                          can_allocate_raw_pointer<Opts, std::decay_t<decltype(ctx)>>) {
 4770|       |                                          if (!try_allocate_raw_pointer<Opts>(v, ctx)) {
 4771|       |                                             return;
 4772|       |                                          }
 4773|       |                                       }
 4774|       |                                       else {
 4775|       |                                          ctx.error = error_code::invalid_nullable_read;
 4776|       |                                          return;
 4777|       |                                       }
 4778|       |                                    }
 4779|       |                                    from<JSON, memory_type<V>>::template op<opening_handled<Opts>(), tag_literal>(
 4780|       |                                       *v, ctx, it, end);
 4781|       |                                 }
 4782|       |                                 else if constexpr (custom_read<V>) {
 4783|       |                                    // Custom handlers parse the remaining body themselves.
 4784|       |                                    from<JSON, V>::template op<opening_handled<Opts>()>(v, ctx, it, end);
 4785|       |                                 }
 4786|       |                              },
 4787|       |                              value);
 4788|       |                        }
 4789|       |                        else {
 4790|       |                           ctx.error = error_code::no_matching_variant_type;
 4791|       |                        }
 4792|       |                     }
 4793|       |                  }
 4794|       |                  else {
 4795|       |                     // For variants with 0 or 1 object types, use the original error handling
 4796|       |                     ctx.error = error_code::no_matching_variant_type;
 4797|       |                  }
 4798|       |               }
 4799|      0|               break;
 4800|  2.14k|            }
 4801|      5|            case '[':
  ------------------
  |  Branch (4801:13): [True: 5, False: 3.41k]
  ------------------
 4802|       |               // As with '{' above: the array reader each alternative goes through counts the level.
 4803|      5|               process_variant_alternatives<T, is_variant_array>::template op<Opts>(value, ctx, it, end);
 4804|      5|               break;
 4805|  1.24k|            case '"': {
  ------------------
  |  Branch (4805:13): [True: 1.24k, False: 2.17k]
  ------------------
 4806|  1.24k|               process_variant_alternatives<T, is_variant_str>::template op<Opts>(value, ctx, it, end);
 4807|  1.24k|               break;
 4808|  2.14k|            }
 4809|      3|            case 't':
  ------------------
  |  Branch (4809:13): [True: 3, False: 3.41k]
  ------------------
 4810|      6|            case 'f': {
  ------------------
  |  Branch (4810:13): [True: 3, False: 3.41k]
  ------------------
 4811|      6|               process_variant_alternatives<T, is_variant_bool>::template op<Opts>(value, ctx, it, end);
 4812|      6|               break;
 4813|      3|            }
 4814|      3|            case 'n':
  ------------------
  |  Branch (4814:13): [True: 3, False: 3.41k]
  ------------------
 4815|      3|               if constexpr (variant_count_v<T, is_variant_null> == 0) {
 4816|      3|                  ctx.error = error_code::no_matching_variant_type;
 4817|       |               }
 4818|       |               else {
 4819|       |                  constexpr auto first_idx = variant_first_index_v<T, is_variant_null>;
 4820|       |                  using V = std::variant_alternative_t<first_idx, T>;
 4821|       |                  if (!std::holds_alternative<V>(value)) value = V{};
 4822|       |                  match<"null", Opts>(ctx, it, end);
 4823|       |               }
 4824|      3|               break;
 4825|      5|            default: {
  ------------------
  |  Branch (4825:13): [True: 5, False: 3.41k]
  ------------------
 4826|       |               // Not bool, string, object, or array so must be number or null
 4827|      5|               process_variant_alternatives<T, is_variant_num>::template op<Opts>(value, ctx, it, end);
 4828|      5|            }
 4829|  3.41k|            }
 4830|       |         }
 4831|       |         else {
 4832|       |            // For non-auto-deducible variants, try each type until one succeeds
 4833|       |            constexpr auto N = std::variant_size_v<T>;
 4834|       |            bool parsed = false;
 4835|       |            bool exhausted = false; // speculation budget spent; see charge_speculation
 4836|       |
 4837|       |            for_each<N>([&]<size_t I>() {
 4838|       |               if (parsed || exhausted || variant_alternative_exhausted(ctx)) return;
 4839|       |
 4840|       |               auto copy_it = it;
 4841|       |               // A rejected alternative may have bailed out inside a container, which leaves its
 4842|       |               // nesting level counted (see enter_depth), so the depth rewinds with the iterator.
 4843|       |               const auto copy_depth = ctx.depth;
 4844|       |
 4845|       |               // Try parsing as this type
 4846|       |               if (value.index() != I) {
 4847|       |                  emplace_runtime_variant(value, I);
 4848|       |               }
 4849|       |
 4850|       |               std::visit([&](auto&& v) { parse<JSON>::op<Options>(v, ctx, it, end); }, value);
 4851|       |               if (bool(ctx.error) && !charge_speculation(ctx, size_t(it - copy_it))) {
 4852|       |                  exhausted = true; // only rejected attempts are charged; see charge_speculation
 4853|       |               }
 4854|       |
 4855|       |               if (!bool(ctx.error)) {
 4856|       |                  parsed = true;
 4857|       |               }
 4858|       |               else if constexpr (not Options.null_terminated) {
 4859|       |                  // In non-null-terminated mode, if we hit end_reached after advancing the iterator,
 4860|       |                  // it means we successfully parsed the value but couldn't skip trailing whitespace
 4861|       |                  if (ctx.error == error_code::end_reached && it > copy_it && not speculation_exhausted(ctx)) {
 4862|       |                     // We advanced the iterator, so we did parse something -- unless what advanced it
 4863|       |                     // was an abandoned attempt, which is what a spent speculation budget means.
 4864|       |                     parsed = true;
 4865|       |                     ctx.error = error_code::none;
 4866|       |                  }
 4867|       |                  else {
 4868|       |                     // Reset for next attempt (unless this is the last type)
 4869|       |                     it = copy_it;
 4870|       |                     rewind_depth<Options>(ctx, copy_depth);
 4871|       |                     if constexpr (I + 1 < N) {
 4872|       |                        if (not exhausted && not variant_alternative_exhausted(ctx)) {
 4873|       |                           ctx.error = error_code::none; // Clear error for next attempt
 4874|       |                        }
 4875|       |                     }
 4876|       |                  }
 4877|       |               }
 4878|       |               else {
 4879|       |                  // Reset for next attempt (unless this is the last type)
 4880|       |                  it = copy_it;
 4881|       |                  rewind_depth<Options>(ctx, copy_depth);
 4882|       |                  if constexpr (I + 1 < N) {
 4883|       |                     if (not exhausted && not variant_alternative_exhausted(ctx)) {
 4884|       |                        ctx.error = error_code::none; // Clear error for next attempt
 4885|       |                     }
 4886|       |                  }
 4887|       |               }
 4888|       |            });
 4889|       |         }
 4890|  3.41k|      }
_ZN3glz5parseILj10EE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj1EEERN9repe_fuzz6amountETkNS_10is_contextERNS_7contextERPKcSA_EEvOT0_OT1_OT2_T3_:
   49|  10.4k|      {
   50|       |         if constexpr (const_value_v<T>) {
   51|       |            if constexpr (check_error_on_const_read(Opts)) {
   52|       |               ctx.error = error_code::attempt_const_read;
   53|       |            }
   54|       |            else {
   55|       |               // do not read anything into the const value
   56|       |               skip_value<JSON>::op<Opts>(std::forward<Ctx>(ctx), std::forward<It0>(it), end);
   57|       |            }
   58|       |         }
   59|  10.4k|         else {
   60|  10.4k|            using V = std::remove_cvref_t<T>;
   61|  10.4k|            from<JSON, V>::template op<Opts>(std::forward<T>(value), std::forward<Ctx>(ctx), std::forward<It0>(it),
   62|  10.4k|                                             end);
   63|  10.4k|         }
   64|  10.4k|      }
_ZN3glz4fromILj10EN9repe_fuzz6amountEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj1EEETnNS_14string_literalEXtlNS6_ILm1EEEEERS2_TkNS_10is_contextERNS_7contextERPKcSC_EEvOT1_OT2_OT3_T4_:
 3044|  10.4k|      {
 3045|  10.4k|         static constexpr auto num_members = reflect<T>::size;
 3046|       |
 3047|  10.4k|         static constexpr auto Opts = opening_handled_off<ws_handled_off<Options>()>();
 3048|       |         if constexpr (!check_opening_handled(Options)) {
 3049|       |            if constexpr (!check_ws_handled(Options)) {
 3050|       |               if (skip_ws<Opts>(ctx, it, end)) {
 3051|       |                  return;
 3052|       |               }
 3053|       |            }
 3054|       |            if (match_invalid_end<'{', Opts>(ctx, it, end)) {
 3055|       |               return;
 3056|       |            }
 3057|       |            if constexpr (not Opts.null_terminated) {
 3058|       |               if (it == end) [[unlikely]] {
 3059|       |                  ctx.error = error_code::unexpected_end;
 3060|       |                  return;
 3061|       |               }
 3062|       |            }
 3063|       |            // one nesting level (see enter_depth): counted in both modes so the limit binds,
 3064|       |            // released at each syntactic close below
 3065|       |            if (enter_depth(ctx)) [[unlikely]] {
 3066|       |               return;
 3067|       |            }
 3068|       |         }
 3069|  10.4k|         const auto ws_start = it;
 3070|  10.4k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3070:14): [True: 32, False: 10.4k]
  ------------------
 3071|     32|            return;
 3072|     32|         }
 3073|  10.4k|         const size_t ws_size = size_t(it - ws_start);
 3074|       |
 3075|       |         if constexpr ((glaze_object_t<T> || reflectable<T>) && num_members == 0 && Opts.error_on_unknown_keys) {
 3076|       |            if constexpr (not tag.sv().empty()) {
 3077|       |               if (*it == '"') {
 3078|       |                  ++it;
 3079|       |                  if constexpr (not Opts.null_terminated) {
 3080|       |                     if (it == end) [[unlikely]] {
 3081|       |                        ctx.error = error_code::unexpected_end;
 3082|       |                        return;
 3083|       |                     }
 3084|       |                  }
 3085|       |
 3086|       |                  const auto start = it;
 3087|       |                  skip_string_view(ctx, it, end);
 3088|       |                  if (bool(ctx.error)) [[unlikely]]
 3089|       |                     return;
 3090|       |                  if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3091|       |                     return;
 3092|       |                  const sv key{start, size_t(it - start)};
 3093|       |                  ++it;
 3094|       |                  if constexpr (not Opts.null_terminated) {
 3095|       |                     if (it == end) [[unlikely]] {
 3096|       |                        ctx.error = error_code::unexpected_end;
 3097|       |                        return;
 3098|       |                     }
 3099|       |                  }
 3100|       |
 3101|       |                  if (key == tag.sv()) {
 3102|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3103|       |                        return;
 3104|       |                     }
 3105|       |
 3106|       |                     parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3107|       |                     if (bool(ctx.error)) [[unlikely]]
 3108|       |                        return;
 3109|       |
 3110|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 3111|       |                        return;
 3112|       |                     }
 3113|       |                  }
 3114|       |                  else {
 3115|       |                     ctx.error = error_code::unknown_key;
 3116|       |                     return;
 3117|       |                  }
 3118|       |               }
 3119|       |            }
 3120|       |
 3121|       |            if (*it == '}') [[likely]] {
 3122|       |               --ctx.depth;
 3123|       |               if constexpr (glaze_object_t<T> || reflectable<T>) {
 3124|       |                  if constexpr (has_self_constraint_v<T> && !check_skip_self_constraint(Opts)) {
 3125|       |                     auto wrapper = self_constraint_v<T>(value);
 3126|       |                     from<JSON, decltype(wrapper)>::template op<ws_handled<Opts>()>(wrapper, ctx, it, end);
 3127|       |                     if (bool(ctx.error)) {
 3128|       |                        return;
 3129|       |                     }
 3130|       |                  }
 3131|       |               }
 3132|       |               ++it;
 3133|       |               if constexpr (not Opts.null_terminated) {
 3134|       |                  if (it == end) {
 3135|       |                     ctx.error = error_code::end_reached;
 3136|       |                     return;
 3137|       |                  }
 3138|       |               }
 3139|       |               if constexpr (Opts.partial_read) {
 3140|       |                  ctx.error = error_code::partial_read_complete;
 3141|       |               }
 3142|       |               return;
 3143|       |            }
 3144|       |            ctx.error = error_code::unknown_key;
 3145|       |            return;
 3146|       |         }
 3147|  10.4k|         else {
 3148|  10.4k|            decltype(auto) fields = [&]() -> decltype(auto) {
 3149|  10.4k|               if constexpr ((glaze_object_t<T> || reflectable<T>) &&
 3150|  10.4k|                             (Opts.error_on_missing_keys || Opts.partial_read)) {
 3151|  10.4k|                  return bit_array<num_members>{};
 3152|  10.4k|               }
 3153|  10.4k|               else {
 3154|  10.4k|                  return nullptr;
 3155|  10.4k|               }
 3156|  10.4k|            }();
 3157|       |
 3158|  10.4k|            size_t read_count{}; // for partial_read
 3159|       |
 3160|  10.4k|            bool first = true;
 3161|  38.4k|            while (true) {
  ------------------
  |  Branch (3161:20): [True: 30.3k, Folded]
  ------------------
 3162|       |               if constexpr ((glaze_object_t<T> || reflectable<T>) && Opts.partial_read) {
 3163|       |                  static constexpr bit_array<num_members> all_fields = [] {
 3164|       |                     bit_array<num_members> arr{};
 3165|       |                     for (size_t i = 0; i < num_members; ++i) {
 3166|       |                        arr[i] = true;
 3167|       |                     }
 3168|       |                     return arr;
 3169|       |                  }();
 3170|       |
 3171|       |                  if ((all_fields & fields) == all_fields) {
 3172|       |                     ctx.error = error_code::partial_read_complete;
 3173|       |                     --ctx.depth; // as above: an early success still closes this level
 3174|       |                     return;
 3175|       |                  }
 3176|       |               }
 3177|       |
 3178|       |               // Streaming refill point: at start of each iteration, ensure buffer has data
 3179|       |               if constexpr (has_streaming_state<decltype(ctx)>) {
 3180|       |                  if (ctx.stream.enabled()) {
 3181|       |                     const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 3182|       |                     const size_t remaining = ctx.stream.size() - consumed;
 3183|       |                     // Refill when less than half of buffer remains to ensure space for next key-value pair
 3184|       |                     if (remaining <= ctx.stream.size() / 2 || it >= end) {
 3185|       |                        const char* new_it;
 3186|       |                        const char* new_end;
 3187|       |                        ctx.stream.consume_and_refill(consumed, new_it, new_end);
 3188|       |                        it = new_it;
 3189|       |                        end = new_end;
 3190|       |                        if (it >= end && ctx.stream.at_eof()) {
 3191|       |                           ctx.error = error_code::unexpected_end;
 3192|       |                           return;
 3193|       |                        }
 3194|       |                     }
 3195|       |                  }
 3196|       |               }
 3197|       |
 3198|  30.3k|               if (*it == '}') {
  ------------------
  |  Branch (3198:20): [True: 2.13k, False: 28.2k]
  ------------------
 3199|  2.13k|                  --ctx.depth;
 3200|       |                  if constexpr ((glaze_object_t<T> || reflectable<T>) && Opts.error_on_missing_keys) {
 3201|       |                     constexpr auto req_fields = required_fields<T, Opts>();
 3202|       |                     if ((req_fields & fields) != req_fields) {
 3203|       |                        for (size_t i = 0; i < num_members; ++i) {
 3204|       |                           if (not fields[i] && req_fields[i]) {
 3205|       |                              ctx.custom_error_message = reflect<T>::keys[i];
 3206|       |                              // We just return the first missing key in order to avoid heap allocations
 3207|       |                              break;
 3208|       |                           }
 3209|       |                        }
 3210|       |
 3211|       |                        ctx.error = error_code::missing_key;
 3212|       |                        return;
 3213|       |                     }
 3214|       |                  }
 3215|  2.13k|                  if constexpr (glaze_object_t<T> || reflectable<T>) {
 3216|       |                     if constexpr (has_self_constraint_v<T> && !check_skip_self_constraint(Opts)) {
 3217|       |                        auto wrapper = self_constraint_v<T>(value);
 3218|       |                        from<JSON, decltype(wrapper)>::template op<ws_handled<Opts>()>(wrapper, ctx, it, end);
 3219|       |                        if (bool(ctx.error)) {
 3220|       |                           return;
 3221|       |                        }
 3222|       |                     }
 3223|  2.13k|                  }
 3224|  2.13k|                  ++it; // Increment after checking for missing keys so errors are within buffer bounds
 3225|  2.13k|                  if constexpr (not Opts.null_terminated) {
 3226|  2.13k|                     if (it == end) {
  ------------------
  |  Branch (3226:26): [True: 19, False: 2.11k]
  ------------------
 3227|     19|                        ctx.error = error_code::end_reached;
 3228|     19|                        return;
 3229|     19|                     }
 3230|  2.13k|                  }
 3231|  2.11k|                  return;
 3232|  2.13k|               }
 3233|  28.2k|               else if (first) {
  ------------------
  |  Branch (3233:25): [True: 8.32k, False: 19.9k]
  ------------------
 3234|  8.32k|                  first = false;
 3235|  8.32k|               }
 3236|  19.9k|               else {
 3237|  19.9k|                  if (match_invalid_end<',', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3237:23): [True: 202, False: 19.7k]
  ------------------
 3238|    202|                     return;
 3239|    202|                  }
 3240|  19.7k|                  if constexpr (not Opts.null_terminated) {
 3241|  19.7k|                     if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3241:26): [True: 0, False: 19.7k]
  ------------------
 3242|      0|                        ctx.error = error_code::unexpected_end;
 3243|      0|                        return;
 3244|      0|                     }
 3245|  19.7k|                  }
 3246|       |
 3247|       |                  if constexpr ((not Opts.minified) && (num_members > 1 || not Opts.error_on_unknown_keys) &&
 3248|       |                                (!Opts.comments)) {
 3249|       |                     if (ws_size && ws_size < size_t(end - it)) {
 3250|       |                        skip_matching_ws(ws_start, it, ws_size);
 3251|       |                     }
 3252|       |                  }
 3253|       |
 3254|  19.7k|                  if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3254:23): [True: 23, False: 19.6k]
  ------------------
 3255|     23|                     return;
 3256|     23|                  }
 3257|  19.7k|               }
 3258|       |
 3259|  28.0k|               constexpr auto reflection_type = glaze_object_t<T> || reflectable<T>;
  ------------------
  |  Branch (3259:49): [Folded, False: 0]
  |  Branch (3259:70): [True: 0, Folded]
  ------------------
 3260|       |
 3261|       |               if constexpr (reflection_type && (num_members == 0)) {
 3262|       |                  if constexpr (Opts.error_on_unknown_keys) {
 3263|       |                     static_assert(false_v<T>, "This should be unreachable");
 3264|       |                  }
 3265|       |                  else {
 3266|       |                     if (match_invalid_end<'"', Opts>(ctx, it, end)) {
 3267|       |                        return;
 3268|       |                     }
 3269|       |
 3270|       |                     // parsing to an empty object, but at this point the JSON presents keys
 3271|       |
 3272|       |                     // Unknown key handler does not unescape keys. Unknown escaped keys are
 3273|       |                     // handled by the user.
 3274|       |
 3275|       |                     const auto start = it;
 3276|       |                     skip_string_view(ctx, it, end);
 3277|       |                     if (bool(ctx.error)) [[unlikely]]
 3278|       |                        return;
 3279|       |                     if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3280|       |                        return;
 3281|       |                     const sv key{start, size_t(it - start)};
 3282|       |                     ++it;
 3283|       |                     if constexpr (not Opts.null_terminated) {
 3284|       |                        if (it == end) [[unlikely]] {
 3285|       |                           ctx.error = error_code::unexpected_end;
 3286|       |                           return;
 3287|       |                        }
 3288|       |                     }
 3289|       |
 3290|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3291|       |                        return;
 3292|       |                     }
 3293|       |
 3294|       |                     // Check if this key is the variant tag that should be skipped
 3295|       |                     if constexpr (not tag.sv().empty()) {
 3296|       |                        if (key == tag.sv()) {
 3297|       |                           // Skip the tag value
 3298|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3299|       |                           if (bool(ctx.error)) [[unlikely]]
 3300|       |                              return;
 3301|       |                           resync_window_end(ctx, end); // a streaming skip refills
 3302|       |                           if (skip_ws<Opts>(ctx, it, end)) {
 3303|       |                              return;
 3304|       |                           }
 3305|       |                           continue;
 3306|       |                        }
 3307|       |                     }
 3308|       |
 3309|       |                     parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3310|       |                     if (bool(ctx.error)) [[unlikely]]
 3311|       |                        return;
 3312|       |                     if constexpr (not Opts.null_terminated) {
 3313|       |                        if (it == end) [[unlikely]] {
 3314|       |                           ctx.error = error_code::unexpected_end;
 3315|       |                           return;
 3316|       |                        }
 3317|       |                     }
 3318|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 3319|       |                        return;
 3320|       |                     }
 3321|       |                  }
 3322|       |               }
 3323|  28.0k|               else if constexpr (reflection_type) {
 3324|  28.0k|                  static_assert(bool(hash_info<T>.type));
 3325|       |
 3326|  28.0k|                  if (*it != '"') [[unlikely]] {
  ------------------
  |  Branch (3326:23): [True: 328, False: 27.6k]
  ------------------
 3327|    328|                     ctx.error = error_code::expected_quote;
 3328|    328|                     return;
 3329|    328|                  }
 3330|  27.6k|                  ++it;
 3331|  27.6k|                  if constexpr (not Opts.null_terminated) {
 3332|  27.6k|                     if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3332:26): [True: 17, False: 27.6k]
  ------------------
 3333|     17|                        ctx.error = error_code::unexpected_end;
 3334|     17|                        return;
 3335|     17|                     }
 3336|  27.6k|                  }
 3337|       |
 3338|       |                  if constexpr (not tag.sv().empty() && not contains_tag<T, tag>()) {
 3339|       |                     // For tagged variants we first check to see if the key matches the tag
 3340|       |                     // We only need to do this if the tag is not part of the keys
 3341|       |
 3342|       |                     const auto start = it;
 3343|       |                     skip_string_view(ctx, it, end);
 3344|       |                     if (bool(ctx.error)) [[unlikely]]
 3345|       |                        return;
 3346|       |                     if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3347|       |                        return;
 3348|       |                     const sv key{start, size_t(it - start)};
 3349|       |                     ++it;
 3350|       |                     if constexpr (not Opts.null_terminated) {
 3351|       |                        if (it == end) [[unlikely]] {
 3352|       |                           ctx.error = error_code::unexpected_end;
 3353|       |                           return;
 3354|       |                        }
 3355|       |                     }
 3356|       |
 3357|       |                     if (key == tag.sv()) {
 3358|       |                        if (parse_ws_colon<Opts>(ctx, it, end)) {
 3359|       |                           return;
 3360|       |                        }
 3361|       |
 3362|       |                        parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3363|       |                        if (bool(ctx.error)) [[unlikely]]
 3364|       |                           return;
 3365|       |
 3366|       |                        if (skip_ws<Opts>(ctx, it, end)) {
 3367|       |                           return;
 3368|       |                        }
 3369|       |                        continue;
 3370|       |                     }
 3371|       |                     else {
 3372|       |                        it = start; // reset the iterator
 3373|       |                     }
 3374|       |                  }
 3375|       |
 3376|       |                  if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
 3377|       |                     size_t index = num_members;
 3378|       |                     parse_and_invoke<Opts, T>(value, ctx, it, end, index);
 3379|       |                     if (bool(ctx.error)) [[unlikely]]
 3380|       |                        return;
 3381|       |                     if (index < num_members) {
 3382|       |                        fields[index] = true;
 3383|       |                     }
 3384|       |                  }
 3385|  27.6k|                  else {
 3386|  27.6k|                     parse_and_invoke<Opts, T>(value, ctx, it, end);
 3387|  27.6k|                     if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (3387:26): [True: 7.73k, False: 19.9k]
  ------------------
 3388|  7.73k|                        return;
 3389|  27.6k|                  }
 3390|       |               }
 3391|       |               else {
 3392|       |                  // For types like std::map, std::unordered_map
 3393|       |
 3394|       |                  auto reading = [&](auto&& key) {
 3395|       |                     if constexpr (Opts.partial_read) {
 3396|       |                        if (auto element = value.find(key); element != value.end()) {
 3397|       |                           ++read_count;
 3398|       |                           parse<JSON>::op<ws_handled<Opts>()>(element->second, ctx, it, end);
 3399|       |                        }
 3400|       |                        else {
 3401|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3402|       |                        }
 3403|       |                     }
 3404|       |                     else {
 3405|       |                        parse<JSON>::op<ws_handled<Opts>()>(value[key], ctx, it, end);
 3406|       |                     }
 3407|       |                  };
 3408|       |
 3409|       |                  // using Key = std::conditional_t<heterogeneous_map<T>, sv, typename T::key_type>;
 3410|       |                  using Key = typename T::key_type;
 3411|       |                  if constexpr (std::is_same_v<Key, std::string>) {
 3412|       |                     ctx.scratch.clear();
 3413|       |                     parse<JSON>::op<Opts>(ctx.scratch, ctx, it, end);
 3414|       |                     if (bool(ctx.error)) [[unlikely]]
 3415|       |                        return;
 3416|       |
 3417|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3418|       |                        return;
 3419|       |                     }
 3420|       |
 3421|       |                     reading(ctx.scratch);
 3422|       |                     if constexpr (Opts.partial_read) {
 3423|       |                        if (read_count == value.size()) {
 3424|       |                           return;
 3425|       |                        }
 3426|       |                     }
 3427|       |                     if (bool(ctx.error)) [[unlikely]]
 3428|       |                        return;
 3429|       |                  }
 3430|       |                  else if constexpr (str_t<Key>) {
 3431|       |                     Key key;
 3432|       |                     parse<JSON>::op<Opts>(key, ctx, it, end);
 3433|       |                     if (bool(ctx.error)) [[unlikely]]
 3434|       |                        return;
 3435|       |
 3436|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3437|       |                        return;
 3438|       |                     }
 3439|       |
 3440|       |                     reading(key);
 3441|       |                     if constexpr (Opts.partial_read) {
 3442|       |                        if (read_count == value.size()) {
 3443|       |                           return;
 3444|       |                        }
 3445|       |                     }
 3446|       |                     if (bool(ctx.error)) [[unlikely]]
 3447|       |                        return;
 3448|       |                  }
 3449|       |                  else {
 3450|       |                     Key key_value{};
 3451|       |                     if constexpr (is_named_enum<Key> || mimics_str_t<Key>) {
 3452|       |                        parse<JSON>::op<Opts>(key_value, ctx, it, end);
 3453|       |                     }
 3454|       |                     else if constexpr (std::is_arithmetic_v<Key>) {
 3455|       |                        // prefer over quoted_t below to avoid double parsing of quoted_t
 3456|       |                        parse<JSON>::op<opt_true<Opts, quoted_num_opt_tag{}>>(key_value, ctx, it, end);
 3457|       |                     }
 3458|       |                     else {
 3459|       |                        parse<JSON>::op<opt_false<Opts, raw_string_opt_tag{}>>(quoted_t<Key>{key_value}, ctx, it, end);
 3460|       |                     }
 3461|       |                     if (bool(ctx.error)) [[unlikely]]
 3462|       |                        return;
 3463|       |
 3464|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3465|       |                        return;
 3466|       |                     }
 3467|       |
 3468|       |                     reading(key_value);
 3469|       |                     if constexpr (Opts.partial_read) {
 3470|       |                        if (read_count == value.size()) {
 3471|       |                           return;
 3472|       |                        }
 3473|       |                     }
 3474|       |                     if (bool(ctx.error)) [[unlikely]]
 3475|       |                        return;
 3476|       |                  }
 3477|       |               }
 3478|       |
 3479|       |               // Streaming refill point: after parsing each key-value pair, refill if buffer is low
 3480|       |               if constexpr (has_streaming_state<decltype(ctx)>) {
 3481|       |                  if (ctx.stream.enabled()) {
 3482|       |                     const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 3483|       |                     // Refill when less than 25% of buffer remains to ensure enough space for next element
 3484|       |                     if (ctx.stream.size() - consumed <= ctx.stream.size() / 4 || it >= end) {
 3485|       |                        const char* new_it;
 3486|       |                        const char* new_end;
 3487|       |                        ctx.stream.consume_and_refill(consumed, new_it, new_end);
 3488|       |                        it = new_it;
 3489|       |                        end = new_end;
 3490|       |                        if (it >= end && ctx.stream.at_eof()) {
 3491|       |                           ctx.error = error_code::unexpected_end;
 3492|       |                           return;
 3493|       |                        }
 3494|       |                     }
 3495|       |                  }
 3496|       |               }
 3497|       |
 3498|  28.0k|               if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3498:20): [True: 22, False: 27.9k]
  ------------------
 3499|     22|                  return;
 3500|     22|               }
 3501|  28.0k|            }
 3502|  10.4k|         }
 3503|  10.4k|      }
_ZZN3glz4fromILj10EN9repe_fuzz6amountEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj1EEETnNS_14string_literalEXtlNS6_ILm1EEEEERS2_TkNS_10is_contextERNS_7contextERPKcSC_EEvOT1_OT2_OT3_T4_ENKUlvE_clEv:
 3148|  10.4k|            decltype(auto) fields = [&]() -> decltype(auto) {
 3149|       |               if constexpr ((glaze_object_t<T> || reflectable<T>) &&
 3150|       |                             (Opts.error_on_missing_keys || Opts.partial_read)) {
 3151|       |                  return bit_array<num_members>{};
 3152|       |               }
 3153|  10.4k|               else {
 3154|  10.4k|                  return nullptr;
 3155|  10.4k|               }
 3156|  10.4k|            }();
_ZN3glz16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz6amountERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT3_OT4_OT5_DpOT2_:
  376|  27.6k|   {
  377|  27.6k|      constexpr auto N = reflect<T>::size;
  378|       |
  379|  27.6k|      if constexpr (N == 1) {
  380|  27.6k|         decode_index<Opts, T, 0>(value, ctx, it, end, selected_index...);
  381|       |      }
  382|       |      else if constexpr (check_linear_search(Opts)) {
  383|       |         // Linear search path
  384|       |         auto key_start = it;
  385|       |         const auto index = decode_linear<T>(ctx, it, end);
  386|       |         if (bool(ctx.error)) [[unlikely]]
  387|       |            return;
  388|       |
  389|       |         if (index >= N) [[unlikely]] {
  390|       |            if constexpr (Opts.error_on_unknown_keys) {
  391|       |               ctx.error = error_code::unknown_key;
  392|       |               return;
  393|       |            }
  394|       |            else {
  395|       |               // it sits one past the closing quote, so the raw key spans [key_start, it - 1)
  396|       |               if (validate_utf8_span<Opts>(ctx, key_start, it - 1)) [[unlikely]] {
  397|       |                  return;
  398|       |               }
  399|       |               const sv key{key_start, size_t(it - key_start - 1)};
  400|       |               if constexpr (not Opts.null_terminated) {
  401|       |                  if (it == end) [[unlikely]] {
  402|       |                     ctx.error = error_code::unexpected_end;
  403|       |                     return;
  404|       |                  }
  405|       |               }
  406|       |               if (parse_ws_colon<Opts>(ctx, it, end)) {
  407|       |                  return;
  408|       |               }
  409|       |               parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
  410|       |               return;
  411|       |            }
  412|       |         }
  413|       |
  414|       |         if constexpr (not Opts.null_terminated) {
  415|       |            if (it == end) [[unlikely]] {
  416|       |               ctx.error = error_code::unexpected_end;
  417|       |               return;
  418|       |            }
  419|       |         }
  420|       |         if (skip_ws<Opts>(ctx, it, end)) {
  421|       |            return;
  422|       |         }
  423|       |         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  424|       |            return;
  425|       |         }
  426|       |         if (skip_ws<Opts>(ctx, it, end)) {
  427|       |            return;
  428|       |         }
  429|       |
  430|       |         // Fold expression dispatch - avoids jump table overhead for smaller binary size.
  431|       |         // For linear_search, pass Opts through to the field parser to avoid duplicate template
  432|       |         // instantiations; the whitespace before the value has already been skipped either way.
  433|       |         [&]<size_t... Is>(std::index_sequence<Is...>) {
  434|       |            (void)(((index == Is ? (decode_field_value<Opts, Opts, T, Is>(value, ctx, it, end, selected_index...), true)
  435|       |                                 : false) ||
  436|       |                    ...));
  437|       |         }(std::make_index_sequence<N>{});
  438|       |      }
  439|       |      else {
  440|       |         // Hash-based lookup
  441|       |         constexpr auto& HashInfo = hash_info<T>;
  442|       |         constexpr auto type = HashInfo.type;
  443|       |         static_assert(bool(type), "invalid hash algorithm");
  444|       |
  445|       |         const auto index = decode_hash<JSON, T, HashInfo, HashInfo.type>::op(it, end);
  446|       |
  447|       |         if (index >= N) [[unlikely]] {
  448|       |            if constexpr (Opts.error_on_unknown_keys) {
  449|       |               ctx.error = error_code::unknown_key;
  450|       |               return;
  451|       |            }
  452|       |            else {
  453|       |               auto start = it;
  454|       |               skip_string_view(ctx, it, end);
  455|       |               if (bool(ctx.error)) [[unlikely]]
  456|       |                  return;
  457|       |               if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
  458|       |                  return;
  459|       |               const sv key = {start, size_t(it - start)};
  460|       |               ++it; // skip the quote
  461|       |               if constexpr (not Opts.null_terminated) {
  462|       |                  if (it == end) [[unlikely]] {
  463|       |                     ctx.error = error_code::unexpected_end;
  464|       |                     return;
  465|       |                  }
  466|       |               }
  467|       |               if (parse_ws_colon<Opts>(ctx, it, end)) {
  468|       |                  return;
  469|       |               }
  470|       |               parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
  471|       |               return;
  472|       |            }
  473|       |         }
  474|       |
  475|       |         if constexpr (N == 2) {
  476|       |            if (index == 0) {
  477|       |               decode_index<Opts, T, 0>(value, ctx, it, end, selected_index...);
  478|       |            }
  479|       |            else {
  480|       |               decode_index<Opts, T, 1>(value, ctx, it, end, selected_index...);
  481|       |            }
  482|       |         }
  483|       |         else {
  484|       |            visit<N>([&]<size_t I>() { decode_index<Opts, T, I>(value, ctx, it, end, selected_index...); }, index);
  485|       |         }
  486|       |      }
  487|  27.6k|   }
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz6amountELm0ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|  27.6k|   {
  312|  27.6k|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|  27.6k|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|  27.6k|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|  27.6k|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 27.2k, False: 442]
  |  Branch (316:36): [True: 20.2k, False: 6.94k]
  ------------------
  317|  20.2k|         it += Length;
  318|  20.2k|         if constexpr (not Opts.null_terminated) {
  319|  20.2k|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 20.2k]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|  20.2k|         }
  324|       |
  325|  20.2k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 13, False: 20.2k]
  ------------------
  326|     13|            return;
  327|     13|         }
  328|  20.2k|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 22, False: 20.2k]
  ------------------
  329|     22|            return;
  330|     22|         }
  331|  20.2k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 13, False: 20.2k]
  ------------------
  332|     13|            return;
  333|     13|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|  20.2k|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|  20.2k|      }
  338|  7.38k|      else [[unlikely]] {
  339|  7.38k|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|  7.38k|      }
  341|  27.6k|   }
_ZN3glz18decode_field_valueITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnDaXtlS1_Lj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEEN9repe_fuzz6amountELm0ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT1_E11reflectableISA_EEEvOT3_OT5_OT6_OT7_DpOT4_:
  245|  20.2k|   {
  246|       |      // Check for null value skipping on read
  247|       |      if constexpr (check_skip_null_members_on_read(Opts)) {
  248|       |         if (*it == 'n') {
  249|       |            ++it;
  250|       |            if constexpr (not Opts.null_terminated) {
  251|       |               if (it == end) [[unlikely]] {
  252|       |                  ctx.error = error_code::unexpected_end;
  253|       |                  return;
  254|       |               }
  255|       |            }
  256|       |            match<"ull", Opts>(ctx, it, end);
  257|       |            if (bool(ctx.error)) [[unlikely]]
  258|       |               return;
  259|       |            // Successfully matched "null", skip it
  260|       |            if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  261|       |               ((selected_index = I), ...); // Mark as handled even if skipped
  262|       |            }
  263|       |            return;
  264|       |         }
  265|       |      }
  266|       |
  267|       |      if constexpr (skipped_by_meta<T, I, operation::parse>) {
  268|       |         skip_value<JSON>::op<Opts>(ctx, it, end);
  269|       |         if (bool(ctx.error)) [[unlikely]]
  270|       |            return; // Propagate error from skip_value
  271|       |      }
  272|  20.2k|      else {
  273|  20.2k|         using V = refl_t<T, I>;
  274|       |
  275|       |         if constexpr (const_value_v<V>) {
  276|       |            if constexpr (check_error_on_const_read(Opts)) {
  277|       |               ctx.error = error_code::attempt_const_read;
  278|       |            }
  279|       |            else {
  280|       |               // do not read anything into the const value
  281|       |               skip_value<JSON>::op<Opts>(ctx, it, end);
  282|       |            }
  283|       |         }
  284|       |         else if constexpr (is_function_ptr_or_ref<V>) {
  285|       |            // Function pointers cannot be deserialized from JSON.
  286|       |            // When write_function_pointers is enabled the writer emits a type-name string,
  287|       |            // but there is nothing meaningful to reconstruct on read — just skip the value.
  288|       |            // When write_function_pointers is off the key is never written, so this branch
  289|       |            // is unreachable in that case.
  290|       |            skip_value<JSON>::op<Opts>(ctx, it, end);
  291|       |         }
  292|       |         else if constexpr (glaze_object_t<T>) {
  293|       |            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(reflect<T>::values)),
  294|       |                                                                       ctx, it, end);
  295|       |         }
  296|  20.2k|         else {
  297|  20.2k|            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(to_tie(value))), ctx,
  298|  20.2k|                                                                       it, end);
  299|  20.2k|         }
  300|  20.2k|      }
  301|       |
  302|       |      // The key was present and handled, even when the value itself was skipped
  303|       |      if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  304|       |         ((selected_index = I), ...);
  305|       |      }
  306|  20.2k|   }
_ZN3glz24decode_index_unknown_keyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz6amountERS3_TkNS_10is_contextERNS_7contextERPKcS8_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT2_OT3_T4_:
  177|  7.38k|   {
  178|  7.38k|      if constexpr (Opts.error_on_unknown_keys) {
  179|  7.38k|         ctx.error = error_code::unknown_key;
  180|       |      }
  181|       |      else {
  182|       |         auto* start = it;
  183|       |         skip_string_view(ctx, it, end);
  184|       |         if (bool(ctx.error)) [[unlikely]]
  185|       |            return;
  186|       |         if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
  187|       |            return;
  188|       |         const sv key = {start, size_t(it - start)};
  189|       |         ++it;
  190|       |         if constexpr (not Opts.null_terminated) {
  191|       |            if (it == end) [[unlikely]] {
  192|       |               ctx.error = error_code::unexpected_end;
  193|       |               return;
  194|       |            }
  195|       |         }
  196|       |
  197|       |         if (parse_ws_colon<Opts>(ctx, it, end)) {
  198|       |            return;
  199|       |         }
  200|       |
  201|       |         parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
  202|       |      }
  203|  7.38k|   }
_ZN3glz28process_variant_alternativesINSt3__17variantIJNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEN9repe_fuzz6amountEEEENS_16is_variant_arrayEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERSB_TkNS_10is_contextERNS_7contextERPKcSK_EEvOT0_OT1_OT2_T3_:
 3725|  1.95k|      {
 3726|  1.95k|         constexpr auto category_count = variant_count_v<Variant, Trait>;
 3727|       |
 3728|  1.95k|         if constexpr (category_count == 0) {
 3729|  1.95k|            ctx.error = error_code::no_matching_variant_type;
 3730|       |         }
 3731|       |         else {
 3732|       |            constexpr auto N = std::variant_size_v<Variant>;
 3733|       |            constexpr auto const_count = variant_filtered_count_v<Variant, Trait, true>;
 3734|       |            constexpr auto non_const_count = variant_filtered_count_v<Variant, Trait, false>;
 3735|       |
 3736|       |            bool found_match{};
 3737|       |            // Set when the speculative parsing budget runs out; see charge_speculation. An ambiguous
 3738|       |            // nest re-parses the same subtree per alternative at every level, which is exponential,
 3739|       |            // so the budget stops it and the failure already in hand is reported.
 3740|       |            bool exhausted{};
 3741|       |
 3742|       |            // First pass: const glaze types in this category
 3743|       |            if constexpr (const_count > 0) {
 3744|       |               for_each<N>([&]<size_t I>() {
 3745|       |                  if (found_match || exhausted || variant_alternative_exhausted(ctx)) {
 3746|       |                     return;
 3747|       |                  }
 3748|       |                  using V = std::variant_alternative_t<I, Variant>;
 3749|       |                  if constexpr (Trait<V>::value && glaze_const_value_t<V>) {
 3750|       |                     // run time substitute to compare to const value
 3751|       |                     std::remove_const_t<std::remove_pointer_t<std::remove_const_t<meta_wrapper_t<V>>>> substitute{};
 3752|       |                     auto copy_it{it};
 3753|       |                     // A rejected alternative may have bailed out inside a container, which leaves its
 3754|       |                     // nesting level counted (see enter_depth). Rewind the depth with the iterator so
 3755|       |                     // trying N alternatives cannot spend N levels of the recursion budget.
 3756|       |                     const auto copy_depth{ctx.depth};
 3757|       |                     parse<JSON>::op<ws_handled<Options>()>(substitute, ctx, it, end);
 3758|       |                     static constexpr auto const_value{*meta_wrapper_v<V>};
 3759|       |                     if (substitute == const_value) {
 3760|       |                        found_match = true;
 3761|       |                        if (!std::holds_alternative<V>(value)) {
 3762|       |                           value = V{};
 3763|       |                        }
 3764|       |                     }
 3765|       |                     else {
 3766|       |                        // Rejected: charge the bytes it parsed before we rewind. See charge_speculation.
 3767|       |                        if (!charge_speculation(ctx, size_t(it - copy_it))) {
 3768|       |                           exhausted = true;
 3769|       |                        }
 3770|       |                        if constexpr (not Options.null_terminated) {
 3771|       |                           if (ctx.error == error_code::end_reached && not exhausted) {
 3772|       |                              ctx.error = error_code::none;
 3773|       |                           }
 3774|       |                        }
 3775|       |                        it = copy_it;
 3776|       |                        rewind_depth<Options>(ctx, copy_depth);
 3777|       |                     }
 3778|       |                  }
 3779|       |               });
 3780|       |               if (found_match) {
 3781|       |                  return;
 3782|       |               }
 3783|       |            }
 3784|       |
 3785|       |            // Second pass: non-const types in this category
 3786|       |            if constexpr (non_const_count > 0) {
 3787|       |               // Track position within matching types for "is last" check.
 3788|       |               // We iterate over all variant indices but only process matching types,
 3789|       |               // so we need runtime tracking (vs the old tuple-based approach where
 3790|       |               // the loop index directly corresponded to position in filtered set).
 3791|       |               // This has negligible cost: one increment per matching type.
 3792|       |               size_t non_const_idx = 0;
 3793|       |
 3794|       |               for_each<N>([&]<size_t I>() {
 3795|       |                  if (found_match || exhausted || variant_alternative_exhausted(ctx)) {
 3796|       |                     return;
 3797|       |                  }
 3798|       |                  using V = std::variant_alternative_t<I, Variant>;
 3799|       |                  if constexpr (Trait<V>::value && !glaze_const_value_t<V>) {
 3800|       |                     auto copy_it{it};
 3801|       |                     const auto copy_depth{ctx.depth}; // rewound with `it`; see the note above
 3802|       |                     if (!std::holds_alternative<V>(value)) {
 3803|       |                        value = V{};
 3804|       |                     }
 3805|       |                     parse<JSON>::op<ws_handled<Options>()>(std::get<V>(value), ctx, it, end);
 3806|       |                     if (bool(ctx.error) && !charge_speculation(ctx, size_t(it - copy_it))) {
 3807|       |                        exhausted = true; // only rejected attempts are charged; see charge_speculation
 3808|       |                     }
 3809|       |                     if (!bool(ctx.error)) {
 3810|       |                        found_match = true;
 3811|       |                     }
 3812|       |                     else if constexpr (not Options.null_terminated) {
 3813|       |                        constexpr bool is_complete_type =
 3814|       |                           num_t<V> || bool_t<V> || string_t<V> || std::is_enum_v<V> || tuple_t<V> || is_std_tuple<V>;
 3815|       |
 3816|       |                        if constexpr (is_complete_type) {
 3817|       |                           if (ctx.error == error_code::end_reached && it > copy_it && not speculation_exhausted(ctx)) {
 3818|       |                              found_match = true;
 3819|       |                              ctx.error = error_code::none;
 3820|       |                           }
 3821|       |                           else {
 3822|       |                              it = copy_it;
 3823|       |                              rewind_depth<Options>(ctx, copy_depth);
 3824|       |                              if (non_const_idx + 1 < non_const_count && not exhausted &&
 3825|       |                                  not variant_alternative_exhausted(ctx)) {
 3826|       |                                 ctx.error = error_code::none;
 3827|       |                              }
 3828|       |                           }
 3829|       |                        }
 3830|       |                        else {
 3831|       |                           it = copy_it;
 3832|       |                           rewind_depth<Options>(ctx, copy_depth);
 3833|       |                           if (non_const_idx + 1 < non_const_count && not exhausted &&
 3834|       |                               not variant_alternative_exhausted(ctx)) {
 3835|       |                              ctx.error = error_code::none;
 3836|       |                           }
 3837|       |                        }
 3838|       |                     }
 3839|       |                     else {
 3840|       |                        it = copy_it;
 3841|       |                        rewind_depth<Options>(ctx, copy_depth);
 3842|       |                        if (non_const_idx + 1 < non_const_count && not exhausted &&
 3843|       |                            not variant_alternative_exhausted(ctx)) {
 3844|       |                           ctx.error = error_code::none;
 3845|       |                        }
 3846|       |                     }
 3847|       |                     ++non_const_idx;
 3848|       |                  }
 3849|       |               });
 3850|       |               if (!found_match) {
 3851|       |                  if constexpr (non_const_count == 1) {
 3852|       |                     // Keep the specific error from the single type we tried
 3853|       |                  }
 3854|       |                  else if (not exhausted && not variant_alternative_exhausted(ctx)) {
 3855|       |                     // Over-nested input is not a failure of the alternative set; keep saying so.
 3856|       |                     ctx.error = error_code::no_matching_variant_type;
 3857|       |                  }
 3858|       |               }
 3859|       |            }
 3860|       |            else {
 3861|       |               ctx.error = error_code::no_matching_variant_type;
 3862|       |            }
 3863|       |         }
 3864|  1.95k|      }
_ZN3glz28process_variant_alternativesINSt3__17variantIJNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEN9repe_fuzz6amountEEEENS_14is_variant_strEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERSB_TkNS_10is_contextERNS_7contextERPKcSK_EEvOT0_OT1_OT2_T3_:
 3725|  2.21k|      {
 3726|  2.21k|         constexpr auto category_count = variant_count_v<Variant, Trait>;
 3727|       |
 3728|       |         if constexpr (category_count == 0) {
 3729|       |            ctx.error = error_code::no_matching_variant_type;
 3730|       |         }
 3731|  2.21k|         else {
 3732|  2.21k|            constexpr auto N = std::variant_size_v<Variant>;
 3733|  2.21k|            constexpr auto const_count = variant_filtered_count_v<Variant, Trait, true>;
 3734|  2.21k|            constexpr auto non_const_count = variant_filtered_count_v<Variant, Trait, false>;
 3735|       |
 3736|  2.21k|            bool found_match{};
 3737|       |            // Set when the speculative parsing budget runs out; see charge_speculation. An ambiguous
 3738|       |            // nest re-parses the same subtree per alternative at every level, which is exponential,
 3739|       |            // so the budget stops it and the failure already in hand is reported.
 3740|  2.21k|            bool exhausted{};
 3741|       |
 3742|       |            // First pass: const glaze types in this category
 3743|       |            if constexpr (const_count > 0) {
 3744|       |               for_each<N>([&]<size_t I>() {
 3745|       |                  if (found_match || exhausted || variant_alternative_exhausted(ctx)) {
 3746|       |                     return;
 3747|       |                  }
 3748|       |                  using V = std::variant_alternative_t<I, Variant>;
 3749|       |                  if constexpr (Trait<V>::value && glaze_const_value_t<V>) {
 3750|       |                     // run time substitute to compare to const value
 3751|       |                     std::remove_const_t<std::remove_pointer_t<std::remove_const_t<meta_wrapper_t<V>>>> substitute{};
 3752|       |                     auto copy_it{it};
 3753|       |                     // A rejected alternative may have bailed out inside a container, which leaves its
 3754|       |                     // nesting level counted (see enter_depth). Rewind the depth with the iterator so
 3755|       |                     // trying N alternatives cannot spend N levels of the recursion budget.
 3756|       |                     const auto copy_depth{ctx.depth};
 3757|       |                     parse<JSON>::op<ws_handled<Options>()>(substitute, ctx, it, end);
 3758|       |                     static constexpr auto const_value{*meta_wrapper_v<V>};
 3759|       |                     if (substitute == const_value) {
 3760|       |                        found_match = true;
 3761|       |                        if (!std::holds_alternative<V>(value)) {
 3762|       |                           value = V{};
 3763|       |                        }
 3764|       |                     }
 3765|       |                     else {
 3766|       |                        // Rejected: charge the bytes it parsed before we rewind. See charge_speculation.
 3767|       |                        if (!charge_speculation(ctx, size_t(it - copy_it))) {
 3768|       |                           exhausted = true;
 3769|       |                        }
 3770|       |                        if constexpr (not Options.null_terminated) {
 3771|       |                           if (ctx.error == error_code::end_reached && not exhausted) {
 3772|       |                              ctx.error = error_code::none;
 3773|       |                           }
 3774|       |                        }
 3775|       |                        it = copy_it;
 3776|       |                        rewind_depth<Options>(ctx, copy_depth);
 3777|       |                     }
 3778|       |                  }
 3779|       |               });
 3780|       |               if (found_match) {
 3781|       |                  return;
 3782|       |               }
 3783|       |            }
 3784|       |
 3785|       |            // Second pass: non-const types in this category
 3786|  2.21k|            if constexpr (non_const_count > 0) {
 3787|       |               // Track position within matching types for "is last" check.
 3788|       |               // We iterate over all variant indices but only process matching types,
 3789|       |               // so we need runtime tracking (vs the old tuple-based approach where
 3790|       |               // the loop index directly corresponded to position in filtered set).
 3791|       |               // This has negligible cost: one increment per matching type.
 3792|  2.21k|               size_t non_const_idx = 0;
 3793|       |
 3794|  2.21k|               for_each<N>([&]<size_t I>() {
 3795|  2.21k|                  if (found_match || exhausted || variant_alternative_exhausted(ctx)) {
 3796|  2.21k|                     return;
 3797|  2.21k|                  }
 3798|  2.21k|                  using V = std::variant_alternative_t<I, Variant>;
 3799|  2.21k|                  if constexpr (Trait<V>::value && !glaze_const_value_t<V>) {
 3800|  2.21k|                     auto copy_it{it};
 3801|  2.21k|                     const auto copy_depth{ctx.depth}; // rewound with `it`; see the note above
 3802|  2.21k|                     if (!std::holds_alternative<V>(value)) {
 3803|  2.21k|                        value = V{};
 3804|  2.21k|                     }
 3805|  2.21k|                     parse<JSON>::op<ws_handled<Options>()>(std::get<V>(value), ctx, it, end);
 3806|  2.21k|                     if (bool(ctx.error) && !charge_speculation(ctx, size_t(it - copy_it))) {
 3807|  2.21k|                        exhausted = true; // only rejected attempts are charged; see charge_speculation
 3808|  2.21k|                     }
 3809|  2.21k|                     if (!bool(ctx.error)) {
 3810|  2.21k|                        found_match = true;
 3811|  2.21k|                     }
 3812|  2.21k|                     else if constexpr (not Options.null_terminated) {
 3813|  2.21k|                        constexpr bool is_complete_type =
 3814|  2.21k|                           num_t<V> || bool_t<V> || string_t<V> || std::is_enum_v<V> || tuple_t<V> || is_std_tuple<V>;
 3815|       |
 3816|  2.21k|                        if constexpr (is_complete_type) {
 3817|  2.21k|                           if (ctx.error == error_code::end_reached && it > copy_it && not speculation_exhausted(ctx)) {
 3818|  2.21k|                              found_match = true;
 3819|  2.21k|                              ctx.error = error_code::none;
 3820|  2.21k|                           }
 3821|  2.21k|                           else {
 3822|  2.21k|                              it = copy_it;
 3823|  2.21k|                              rewind_depth<Options>(ctx, copy_depth);
 3824|  2.21k|                              if (non_const_idx + 1 < non_const_count && not exhausted &&
 3825|  2.21k|                                  not variant_alternative_exhausted(ctx)) {
 3826|  2.21k|                                 ctx.error = error_code::none;
 3827|  2.21k|                              }
 3828|  2.21k|                           }
 3829|  2.21k|                        }
 3830|  2.21k|                        else {
 3831|  2.21k|                           it = copy_it;
 3832|  2.21k|                           rewind_depth<Options>(ctx, copy_depth);
 3833|  2.21k|                           if (non_const_idx + 1 < non_const_count && not exhausted &&
 3834|  2.21k|                               not variant_alternative_exhausted(ctx)) {
 3835|  2.21k|                              ctx.error = error_code::none;
 3836|  2.21k|                           }
 3837|  2.21k|                        }
 3838|  2.21k|                     }
 3839|  2.21k|                     else {
 3840|  2.21k|                        it = copy_it;
 3841|  2.21k|                        rewind_depth<Options>(ctx, copy_depth);
 3842|  2.21k|                        if (non_const_idx + 1 < non_const_count && not exhausted &&
 3843|  2.21k|                            not variant_alternative_exhausted(ctx)) {
 3844|  2.21k|                           ctx.error = error_code::none;
 3845|  2.21k|                        }
 3846|  2.21k|                     }
 3847|  2.21k|                     ++non_const_idx;
 3848|  2.21k|                  }
 3849|  2.21k|               });
 3850|  2.21k|               if (!found_match) {
  ------------------
  |  Branch (3850:20): [True: 535, False: 1.68k]
  ------------------
 3851|    535|                  if constexpr (non_const_count == 1) {
 3852|       |                     // Keep the specific error from the single type we tried
 3853|       |                  }
 3854|       |                  else if (not exhausted && not variant_alternative_exhausted(ctx)) {
 3855|       |                     // Over-nested input is not a failure of the alternative set; keep saying so.
 3856|       |                     ctx.error = error_code::no_matching_variant_type;
 3857|       |                  }
 3858|    535|               }
 3859|       |            }
 3860|       |            else {
 3861|       |               ctx.error = error_code::no_matching_variant_type;
 3862|       |            }
 3863|  2.21k|         }
 3864|  2.21k|      }
_ZZN3glz28process_variant_alternativesINSt3__17variantIJNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEN9repe_fuzz6amountEEEENS_14is_variant_strEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERSB_TkNS_10is_contextERNS_7contextERPKcSK_EEvOT0_OT1_OT2_T3_ENKUlTnmvE_clILm0EEEDav:
 3794|  2.21k|               for_each<N>([&]<size_t I>() {
 3795|  2.21k|                  if (found_match || exhausted || variant_alternative_exhausted(ctx)) {
  ------------------
  |  Branch (3795:23): [True: 0, False: 2.21k]
  |  Branch (3795:38): [True: 0, False: 2.21k]
  |  Branch (3795:51): [True: 0, False: 2.21k]
  ------------------
 3796|      0|                     return;
 3797|      0|                  }
 3798|  2.21k|                  using V = std::variant_alternative_t<I, Variant>;
 3799|  2.21k|                  if constexpr (Trait<V>::value && !glaze_const_value_t<V>) {
 3800|  2.21k|                     auto copy_it{it};
 3801|  2.21k|                     const auto copy_depth{ctx.depth}; // rewound with `it`; see the note above
 3802|  2.21k|                     if (!std::holds_alternative<V>(value)) {
  ------------------
  |  Branch (3802:26): [True: 1.01k, False: 1.20k]
  ------------------
 3803|  1.01k|                        value = V{};
 3804|  1.01k|                     }
 3805|  2.21k|                     parse<JSON>::op<ws_handled<Options>()>(std::get<V>(value), ctx, it, end);
 3806|  2.21k|                     if (bool(ctx.error) && !charge_speculation(ctx, size_t(it - copy_it))) {
  ------------------
  |  Branch (3806:26): [True: 617, False: 1.59k]
  |  Branch (3806:45): [True: 0, False: 617]
  ------------------
 3807|      0|                        exhausted = true; // only rejected attempts are charged; see charge_speculation
 3808|      0|                     }
 3809|  2.21k|                     if (!bool(ctx.error)) {
  ------------------
  |  Branch (3809:26): [True: 1.59k, False: 617]
  ------------------
 3810|  1.59k|                        found_match = true;
 3811|  1.59k|                     }
 3812|    617|                     else if constexpr (not Options.null_terminated) {
 3813|    617|                        constexpr bool is_complete_type =
 3814|    617|                           num_t<V> || bool_t<V> || string_t<V> || std::is_enum_v<V> || tuple_t<V> || is_std_tuple<V>;
  ------------------
  |  Branch (3814:28): [Folded, False: 0]
  |  Branch (3814:40): [Folded, False: 0]
  |  Branch (3814:53): [True: 0, Folded]
  |  Branch (3814:68): [Folded, False: 0]
  |  Branch (3814:89): [Folded, False: 0]
  |  Branch (3814:103): [Folded, False: 0]
  ------------------
 3815|       |
 3816|    617|                        if constexpr (is_complete_type) {
 3817|    617|                           if (ctx.error == error_code::end_reached && it > copy_it && not speculation_exhausted(ctx)) {
  ------------------
  |  Branch (3817:32): [True: 82, False: 535]
  |  Branch (3817:72): [True: 82, False: 0]
  |  Branch (3817:88): [True: 82, False: 0]
  ------------------
 3818|     82|                              found_match = true;
 3819|     82|                              ctx.error = error_code::none;
 3820|     82|                           }
 3821|    535|                           else {
 3822|    535|                              it = copy_it;
 3823|    535|                              rewind_depth<Options>(ctx, copy_depth);
 3824|    535|                              if (non_const_idx + 1 < non_const_count && not exhausted &&
  ------------------
  |  Branch (3824:35): [True: 0, False: 535]
  |  Branch (3824:74): [True: 0, False: 0]
  ------------------
 3825|      0|                                  not variant_alternative_exhausted(ctx)) {
  ------------------
  |  Branch (3825:35): [True: 0, False: 0]
  ------------------
 3826|      0|                                 ctx.error = error_code::none;
 3827|      0|                              }
 3828|    535|                           }
 3829|       |                        }
 3830|       |                        else {
 3831|       |                           it = copy_it;
 3832|       |                           rewind_depth<Options>(ctx, copy_depth);
 3833|       |                           if (non_const_idx + 1 < non_const_count && not exhausted &&
 3834|       |                               not variant_alternative_exhausted(ctx)) {
 3835|       |                              ctx.error = error_code::none;
 3836|       |                           }
 3837|       |                        }
 3838|       |                     }
 3839|       |                     else {
 3840|       |                        it = copy_it;
 3841|       |                        rewind_depth<Options>(ctx, copy_depth);
 3842|       |                        if (non_const_idx + 1 < non_const_count && not exhausted &&
 3843|       |                            not variant_alternative_exhausted(ctx)) {
 3844|       |                           ctx.error = error_code::none;
 3845|       |                        }
 3846|       |                     }
 3847|  2.21k|                     ++non_const_idx;
 3848|  2.21k|                  }
 3849|  2.21k|               });
_ZN3glz29variant_alternative_exhaustedITkNS_10is_contextENS_7contextEEEbRT_:
 3714|  2.75k|   {
 3715|  2.75k|      return ctx.error == error_code::exceeded_max_recursive_depth;
 3716|  2.75k|   }
_ZN3glz5parseILj10EE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEERNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEETkNS_10is_contextERNS_7contextERPKcSF_EEvOT0_OT1_OT2_T3_:
   49|  2.21k|      {
   50|       |         if constexpr (const_value_v<T>) {
   51|       |            if constexpr (check_error_on_const_read(Opts)) {
   52|       |               ctx.error = error_code::attempt_const_read;
   53|       |            }
   54|       |            else {
   55|       |               // do not read anything into the const value
   56|       |               skip_value<JSON>::op<Opts>(std::forward<Ctx>(ctx), std::forward<It0>(it), end);
   57|       |            }
   58|       |         }
   59|  2.21k|         else {
   60|  2.21k|            using V = std::remove_cvref_t<T>;
   61|  2.21k|            from<JSON, V>::template op<Opts>(std::forward<T>(value), std::forward<Ctx>(ctx), std::forward<It0>(it),
   62|  2.21k|                                             end);
   63|  2.21k|         }
   64|  2.21k|      }
_ZN3glz12rewind_depthITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETkNS_10is_contextENS_7contextEEEvRT0_j:
 3697|    535|   {
 3698|    535|      if (ctx.error == error_code::exceeded_max_recursive_depth) [[unlikely]] {
  ------------------
  |  Branch (3698:11): [True: 0, False: 535]
  ------------------
 3699|      0|         return;
 3700|      0|      }
 3701|       |      if constexpr (Opts.null_terminated) {
 3702|       |         ctx.depth = depth;
 3703|       |      }
 3704|    535|      else {
 3705|    535|         if (ctx.error != error_code::end_reached && ctx.error != error_code::unexpected_end) {
  ------------------
  |  Branch (3705:14): [True: 535, False: 0]
  |  Branch (3705:54): [True: 439, False: 96]
  ------------------
 3706|    439|            ctx.depth = depth;
 3707|    439|         }
 3708|    535|      }
 3709|    535|   }
_ZZN3glz28process_variant_alternativesINSt3__17variantIJNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEN9repe_fuzz6amountEEEENS_14is_variant_strEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERSB_TkNS_10is_contextERNS_7contextERPKcSK_EEvOT0_OT1_OT2_T3_ENKUlTnmvE_clILm1EEEDav:
 3794|  2.21k|               for_each<N>([&]<size_t I>() {
 3795|  2.21k|                  if (found_match || exhausted || variant_alternative_exhausted(ctx)) {
  ------------------
  |  Branch (3795:23): [True: 1.68k, False: 535]
  |  Branch (3795:38): [True: 0, False: 535]
  |  Branch (3795:51): [True: 0, False: 535]
  ------------------
 3796|  1.68k|                     return;
 3797|  1.68k|                  }
 3798|    535|                  using V = std::variant_alternative_t<I, Variant>;
 3799|       |                  if constexpr (Trait<V>::value && !glaze_const_value_t<V>) {
 3800|       |                     auto copy_it{it};
 3801|       |                     const auto copy_depth{ctx.depth}; // rewound with `it`; see the note above
 3802|       |                     if (!std::holds_alternative<V>(value)) {
 3803|       |                        value = V{};
 3804|       |                     }
 3805|       |                     parse<JSON>::op<ws_handled<Options>()>(std::get<V>(value), ctx, it, end);
 3806|       |                     if (bool(ctx.error) && !charge_speculation(ctx, size_t(it - copy_it))) {
 3807|       |                        exhausted = true; // only rejected attempts are charged; see charge_speculation
 3808|       |                     }
 3809|       |                     if (!bool(ctx.error)) {
 3810|       |                        found_match = true;
 3811|       |                     }
 3812|       |                     else if constexpr (not Options.null_terminated) {
 3813|       |                        constexpr bool is_complete_type =
 3814|       |                           num_t<V> || bool_t<V> || string_t<V> || std::is_enum_v<V> || tuple_t<V> || is_std_tuple<V>;
 3815|       |
 3816|       |                        if constexpr (is_complete_type) {
 3817|       |                           if (ctx.error == error_code::end_reached && it > copy_it && not speculation_exhausted(ctx)) {
 3818|       |                              found_match = true;
 3819|       |                              ctx.error = error_code::none;
 3820|       |                           }
 3821|       |                           else {
 3822|       |                              it = copy_it;
 3823|       |                              rewind_depth<Options>(ctx, copy_depth);
 3824|       |                              if (non_const_idx + 1 < non_const_count && not exhausted &&
 3825|       |                                  not variant_alternative_exhausted(ctx)) {
 3826|       |                                 ctx.error = error_code::none;
 3827|       |                              }
 3828|       |                           }
 3829|       |                        }
 3830|       |                        else {
 3831|       |                           it = copy_it;
 3832|       |                           rewind_depth<Options>(ctx, copy_depth);
 3833|       |                           if (non_const_idx + 1 < non_const_count && not exhausted &&
 3834|       |                               not variant_alternative_exhausted(ctx)) {
 3835|       |                              ctx.error = error_code::none;
 3836|       |                           }
 3837|       |                        }
 3838|       |                     }
 3839|       |                     else {
 3840|       |                        it = copy_it;
 3841|       |                        rewind_depth<Options>(ctx, copy_depth);
 3842|       |                        if (non_const_idx + 1 < non_const_count && not exhausted &&
 3843|       |                            not variant_alternative_exhausted(ctx)) {
 3844|       |                           ctx.error = error_code::none;
 3845|       |                        }
 3846|       |                     }
 3847|       |                     ++non_const_idx;
 3848|       |                  }
 3849|    535|               });
_ZN3glz28process_variant_alternativesINSt3__17variantIJNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEN9repe_fuzz6amountEEEENS_15is_variant_boolEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERSB_TkNS_10is_contextERNS_7contextERPKcSK_EEvOT0_OT1_OT2_T3_:
 3725|     13|      {
 3726|     13|         constexpr auto category_count = variant_count_v<Variant, Trait>;
 3727|       |
 3728|     13|         if constexpr (category_count == 0) {
 3729|     13|            ctx.error = error_code::no_matching_variant_type;
 3730|       |         }
 3731|       |         else {
 3732|       |            constexpr auto N = std::variant_size_v<Variant>;
 3733|       |            constexpr auto const_count = variant_filtered_count_v<Variant, Trait, true>;
 3734|       |            constexpr auto non_const_count = variant_filtered_count_v<Variant, Trait, false>;
 3735|       |
 3736|       |            bool found_match{};
 3737|       |            // Set when the speculative parsing budget runs out; see charge_speculation. An ambiguous
 3738|       |            // nest re-parses the same subtree per alternative at every level, which is exponential,
 3739|       |            // so the budget stops it and the failure already in hand is reported.
 3740|       |            bool exhausted{};
 3741|       |
 3742|       |            // First pass: const glaze types in this category
 3743|       |            if constexpr (const_count > 0) {
 3744|       |               for_each<N>([&]<size_t I>() {
 3745|       |                  if (found_match || exhausted || variant_alternative_exhausted(ctx)) {
 3746|       |                     return;
 3747|       |                  }
 3748|       |                  using V = std::variant_alternative_t<I, Variant>;
 3749|       |                  if constexpr (Trait<V>::value && glaze_const_value_t<V>) {
 3750|       |                     // run time substitute to compare to const value
 3751|       |                     std::remove_const_t<std::remove_pointer_t<std::remove_const_t<meta_wrapper_t<V>>>> substitute{};
 3752|       |                     auto copy_it{it};
 3753|       |                     // A rejected alternative may have bailed out inside a container, which leaves its
 3754|       |                     // nesting level counted (see enter_depth). Rewind the depth with the iterator so
 3755|       |                     // trying N alternatives cannot spend N levels of the recursion budget.
 3756|       |                     const auto copy_depth{ctx.depth};
 3757|       |                     parse<JSON>::op<ws_handled<Options>()>(substitute, ctx, it, end);
 3758|       |                     static constexpr auto const_value{*meta_wrapper_v<V>};
 3759|       |                     if (substitute == const_value) {
 3760|       |                        found_match = true;
 3761|       |                        if (!std::holds_alternative<V>(value)) {
 3762|       |                           value = V{};
 3763|       |                        }
 3764|       |                     }
 3765|       |                     else {
 3766|       |                        // Rejected: charge the bytes it parsed before we rewind. See charge_speculation.
 3767|       |                        if (!charge_speculation(ctx, size_t(it - copy_it))) {
 3768|       |                           exhausted = true;
 3769|       |                        }
 3770|       |                        if constexpr (not Options.null_terminated) {
 3771|       |                           if (ctx.error == error_code::end_reached && not exhausted) {
 3772|       |                              ctx.error = error_code::none;
 3773|       |                           }
 3774|       |                        }
 3775|       |                        it = copy_it;
 3776|       |                        rewind_depth<Options>(ctx, copy_depth);
 3777|       |                     }
 3778|       |                  }
 3779|       |               });
 3780|       |               if (found_match) {
 3781|       |                  return;
 3782|       |               }
 3783|       |            }
 3784|       |
 3785|       |            // Second pass: non-const types in this category
 3786|       |            if constexpr (non_const_count > 0) {
 3787|       |               // Track position within matching types for "is last" check.
 3788|       |               // We iterate over all variant indices but only process matching types,
 3789|       |               // so we need runtime tracking (vs the old tuple-based approach where
 3790|       |               // the loop index directly corresponded to position in filtered set).
 3791|       |               // This has negligible cost: one increment per matching type.
 3792|       |               size_t non_const_idx = 0;
 3793|       |
 3794|       |               for_each<N>([&]<size_t I>() {
 3795|       |                  if (found_match || exhausted || variant_alternative_exhausted(ctx)) {
 3796|       |                     return;
 3797|       |                  }
 3798|       |                  using V = std::variant_alternative_t<I, Variant>;
 3799|       |                  if constexpr (Trait<V>::value && !glaze_const_value_t<V>) {
 3800|       |                     auto copy_it{it};
 3801|       |                     const auto copy_depth{ctx.depth}; // rewound with `it`; see the note above
 3802|       |                     if (!std::holds_alternative<V>(value)) {
 3803|       |                        value = V{};
 3804|       |                     }
 3805|       |                     parse<JSON>::op<ws_handled<Options>()>(std::get<V>(value), ctx, it, end);
 3806|       |                     if (bool(ctx.error) && !charge_speculation(ctx, size_t(it - copy_it))) {
 3807|       |                        exhausted = true; // only rejected attempts are charged; see charge_speculation
 3808|       |                     }
 3809|       |                     if (!bool(ctx.error)) {
 3810|       |                        found_match = true;
 3811|       |                     }
 3812|       |                     else if constexpr (not Options.null_terminated) {
 3813|       |                        constexpr bool is_complete_type =
 3814|       |                           num_t<V> || bool_t<V> || string_t<V> || std::is_enum_v<V> || tuple_t<V> || is_std_tuple<V>;
 3815|       |
 3816|       |                        if constexpr (is_complete_type) {
 3817|       |                           if (ctx.error == error_code::end_reached && it > copy_it && not speculation_exhausted(ctx)) {
 3818|       |                              found_match = true;
 3819|       |                              ctx.error = error_code::none;
 3820|       |                           }
 3821|       |                           else {
 3822|       |                              it = copy_it;
 3823|       |                              rewind_depth<Options>(ctx, copy_depth);
 3824|       |                              if (non_const_idx + 1 < non_const_count && not exhausted &&
 3825|       |                                  not variant_alternative_exhausted(ctx)) {
 3826|       |                                 ctx.error = error_code::none;
 3827|       |                              }
 3828|       |                           }
 3829|       |                        }
 3830|       |                        else {
 3831|       |                           it = copy_it;
 3832|       |                           rewind_depth<Options>(ctx, copy_depth);
 3833|       |                           if (non_const_idx + 1 < non_const_count && not exhausted &&
 3834|       |                               not variant_alternative_exhausted(ctx)) {
 3835|       |                              ctx.error = error_code::none;
 3836|       |                           }
 3837|       |                        }
 3838|       |                     }
 3839|       |                     else {
 3840|       |                        it = copy_it;
 3841|       |                        rewind_depth<Options>(ctx, copy_depth);
 3842|       |                        if (non_const_idx + 1 < non_const_count && not exhausted &&
 3843|       |                            not variant_alternative_exhausted(ctx)) {
 3844|       |                           ctx.error = error_code::none;
 3845|       |                        }
 3846|       |                     }
 3847|       |                     ++non_const_idx;
 3848|       |                  }
 3849|       |               });
 3850|       |               if (!found_match) {
 3851|       |                  if constexpr (non_const_count == 1) {
 3852|       |                     // Keep the specific error from the single type we tried
 3853|       |                  }
 3854|       |                  else if (not exhausted && not variant_alternative_exhausted(ctx)) {
 3855|       |                     // Over-nested input is not a failure of the alternative set; keep saying so.
 3856|       |                     ctx.error = error_code::no_matching_variant_type;
 3857|       |                  }
 3858|       |               }
 3859|       |            }
 3860|       |            else {
 3861|       |               ctx.error = error_code::no_matching_variant_type;
 3862|       |            }
 3863|       |         }
 3864|     13|      }
_ZN3glz28process_variant_alternativesINSt3__17variantIJNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEN9repe_fuzz6amountEEEENS_14is_variant_numEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERSB_TkNS_10is_contextERNS_7contextERPKcSK_EEvOT0_OT1_OT2_T3_:
 3725|  2.23k|      {
 3726|  2.23k|         constexpr auto category_count = variant_count_v<Variant, Trait>;
 3727|       |
 3728|  2.23k|         if constexpr (category_count == 0) {
 3729|  2.23k|            ctx.error = error_code::no_matching_variant_type;
 3730|       |         }
 3731|       |         else {
 3732|       |            constexpr auto N = std::variant_size_v<Variant>;
 3733|       |            constexpr auto const_count = variant_filtered_count_v<Variant, Trait, true>;
 3734|       |            constexpr auto non_const_count = variant_filtered_count_v<Variant, Trait, false>;
 3735|       |
 3736|       |            bool found_match{};
 3737|       |            // Set when the speculative parsing budget runs out; see charge_speculation. An ambiguous
 3738|       |            // nest re-parses the same subtree per alternative at every level, which is exponential,
 3739|       |            // so the budget stops it and the failure already in hand is reported.
 3740|       |            bool exhausted{};
 3741|       |
 3742|       |            // First pass: const glaze types in this category
 3743|       |            if constexpr (const_count > 0) {
 3744|       |               for_each<N>([&]<size_t I>() {
 3745|       |                  if (found_match || exhausted || variant_alternative_exhausted(ctx)) {
 3746|       |                     return;
 3747|       |                  }
 3748|       |                  using V = std::variant_alternative_t<I, Variant>;
 3749|       |                  if constexpr (Trait<V>::value && glaze_const_value_t<V>) {
 3750|       |                     // run time substitute to compare to const value
 3751|       |                     std::remove_const_t<std::remove_pointer_t<std::remove_const_t<meta_wrapper_t<V>>>> substitute{};
 3752|       |                     auto copy_it{it};
 3753|       |                     // A rejected alternative may have bailed out inside a container, which leaves its
 3754|       |                     // nesting level counted (see enter_depth). Rewind the depth with the iterator so
 3755|       |                     // trying N alternatives cannot spend N levels of the recursion budget.
 3756|       |                     const auto copy_depth{ctx.depth};
 3757|       |                     parse<JSON>::op<ws_handled<Options>()>(substitute, ctx, it, end);
 3758|       |                     static constexpr auto const_value{*meta_wrapper_v<V>};
 3759|       |                     if (substitute == const_value) {
 3760|       |                        found_match = true;
 3761|       |                        if (!std::holds_alternative<V>(value)) {
 3762|       |                           value = V{};
 3763|       |                        }
 3764|       |                     }
 3765|       |                     else {
 3766|       |                        // Rejected: charge the bytes it parsed before we rewind. See charge_speculation.
 3767|       |                        if (!charge_speculation(ctx, size_t(it - copy_it))) {
 3768|       |                           exhausted = true;
 3769|       |                        }
 3770|       |                        if constexpr (not Options.null_terminated) {
 3771|       |                           if (ctx.error == error_code::end_reached && not exhausted) {
 3772|       |                              ctx.error = error_code::none;
 3773|       |                           }
 3774|       |                        }
 3775|       |                        it = copy_it;
 3776|       |                        rewind_depth<Options>(ctx, copy_depth);
 3777|       |                     }
 3778|       |                  }
 3779|       |               });
 3780|       |               if (found_match) {
 3781|       |                  return;
 3782|       |               }
 3783|       |            }
 3784|       |
 3785|       |            // Second pass: non-const types in this category
 3786|       |            if constexpr (non_const_count > 0) {
 3787|       |               // Track position within matching types for "is last" check.
 3788|       |               // We iterate over all variant indices but only process matching types,
 3789|       |               // so we need runtime tracking (vs the old tuple-based approach where
 3790|       |               // the loop index directly corresponded to position in filtered set).
 3791|       |               // This has negligible cost: one increment per matching type.
 3792|       |               size_t non_const_idx = 0;
 3793|       |
 3794|       |               for_each<N>([&]<size_t I>() {
 3795|       |                  if (found_match || exhausted || variant_alternative_exhausted(ctx)) {
 3796|       |                     return;
 3797|       |                  }
 3798|       |                  using V = std::variant_alternative_t<I, Variant>;
 3799|       |                  if constexpr (Trait<V>::value && !glaze_const_value_t<V>) {
 3800|       |                     auto copy_it{it};
 3801|       |                     const auto copy_depth{ctx.depth}; // rewound with `it`; see the note above
 3802|       |                     if (!std::holds_alternative<V>(value)) {
 3803|       |                        value = V{};
 3804|       |                     }
 3805|       |                     parse<JSON>::op<ws_handled<Options>()>(std::get<V>(value), ctx, it, end);
 3806|       |                     if (bool(ctx.error) && !charge_speculation(ctx, size_t(it - copy_it))) {
 3807|       |                        exhausted = true; // only rejected attempts are charged; see charge_speculation
 3808|       |                     }
 3809|       |                     if (!bool(ctx.error)) {
 3810|       |                        found_match = true;
 3811|       |                     }
 3812|       |                     else if constexpr (not Options.null_terminated) {
 3813|       |                        constexpr bool is_complete_type =
 3814|       |                           num_t<V> || bool_t<V> || string_t<V> || std::is_enum_v<V> || tuple_t<V> || is_std_tuple<V>;
 3815|       |
 3816|       |                        if constexpr (is_complete_type) {
 3817|       |                           if (ctx.error == error_code::end_reached && it > copy_it && not speculation_exhausted(ctx)) {
 3818|       |                              found_match = true;
 3819|       |                              ctx.error = error_code::none;
 3820|       |                           }
 3821|       |                           else {
 3822|       |                              it = copy_it;
 3823|       |                              rewind_depth<Options>(ctx, copy_depth);
 3824|       |                              if (non_const_idx + 1 < non_const_count && not exhausted &&
 3825|       |                                  not variant_alternative_exhausted(ctx)) {
 3826|       |                                 ctx.error = error_code::none;
 3827|       |                              }
 3828|       |                           }
 3829|       |                        }
 3830|       |                        else {
 3831|       |                           it = copy_it;
 3832|       |                           rewind_depth<Options>(ctx, copy_depth);
 3833|       |                           if (non_const_idx + 1 < non_const_count && not exhausted &&
 3834|       |                               not variant_alternative_exhausted(ctx)) {
 3835|       |                              ctx.error = error_code::none;
 3836|       |                           }
 3837|       |                        }
 3838|       |                     }
 3839|       |                     else {
 3840|       |                        it = copy_it;
 3841|       |                        rewind_depth<Options>(ctx, copy_depth);
 3842|       |                        if (non_const_idx + 1 < non_const_count && not exhausted &&
 3843|       |                            not variant_alternative_exhausted(ctx)) {
 3844|       |                           ctx.error = error_code::none;
 3845|       |                        }
 3846|       |                     }
 3847|       |                     ++non_const_idx;
 3848|       |                  }
 3849|       |               });
 3850|       |               if (!found_match) {
 3851|       |                  if constexpr (non_const_count == 1) {
 3852|       |                     // Keep the specific error from the single type we tried
 3853|       |                  }
 3854|       |                  else if (not exhausted && not variant_alternative_exhausted(ctx)) {
 3855|       |                     // Over-nested input is not a failure of the alternative set; keep saying so.
 3856|       |                     ctx.error = error_code::no_matching_variant_type;
 3857|       |                  }
 3858|       |               }
 3859|       |            }
 3860|       |            else {
 3861|       |               ctx.error = error_code::no_matching_variant_type;
 3862|       |            }
 3863|       |         }
 3864|  2.23k|      }
_ZZN3glz16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT3_OT4_OT5_DpOT2_ENKUlTnmvE_clILm8EEEDav:
  484|    333|            visit<N>([&]<size_t I>() { decode_index<Opts, T, I>(value, ctx, it, end, selected_index...); }, index);
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm8ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|    333|   {
  312|    333|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|    333|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|    333|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|    333|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 323, False: 10]
  |  Branch (316:36): [True: 146, False: 177]
  ------------------
  317|    146|         it += Length;
  318|    146|         if constexpr (not Opts.null_terminated) {
  319|    146|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 146]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|    146|         }
  324|       |
  325|    146|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 12, False: 134]
  ------------------
  326|     12|            return;
  327|     12|         }
  328|    134|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 11, False: 123]
  ------------------
  329|     11|            return;
  330|     11|         }
  331|    123|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 15, False: 108]
  ------------------
  332|     15|            return;
  333|     15|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|    108|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|    108|      }
  338|    187|      else [[unlikely]] {
  339|    187|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|    187|      }
  341|    333|   }
_ZN3glz18decode_field_valueITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnDaXtlS1_Lj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEEN9repe_fuzz8fuzz_apiELm8ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT1_E11reflectableISA_EEEvOT3_OT5_OT6_OT7_DpOT4_:
  245|    108|   {
  246|       |      // Check for null value skipping on read
  247|       |      if constexpr (check_skip_null_members_on_read(Opts)) {
  248|       |         if (*it == 'n') {
  249|       |            ++it;
  250|       |            if constexpr (not Opts.null_terminated) {
  251|       |               if (it == end) [[unlikely]] {
  252|       |                  ctx.error = error_code::unexpected_end;
  253|       |                  return;
  254|       |               }
  255|       |            }
  256|       |            match<"ull", Opts>(ctx, it, end);
  257|       |            if (bool(ctx.error)) [[unlikely]]
  258|       |               return;
  259|       |            // Successfully matched "null", skip it
  260|       |            if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  261|       |               ((selected_index = I), ...); // Mark as handled even if skipped
  262|       |            }
  263|       |            return;
  264|       |         }
  265|       |      }
  266|       |
  267|       |      if constexpr (skipped_by_meta<T, I, operation::parse>) {
  268|       |         skip_value<JSON>::op<Opts>(ctx, it, end);
  269|       |         if (bool(ctx.error)) [[unlikely]]
  270|       |            return; // Propagate error from skip_value
  271|       |      }
  272|    108|      else {
  273|    108|         using V = refl_t<T, I>;
  274|       |
  275|       |         if constexpr (const_value_v<V>) {
  276|       |            if constexpr (check_error_on_const_read(Opts)) {
  277|       |               ctx.error = error_code::attempt_const_read;
  278|       |            }
  279|       |            else {
  280|       |               // do not read anything into the const value
  281|       |               skip_value<JSON>::op<Opts>(ctx, it, end);
  282|       |            }
  283|       |         }
  284|       |         else if constexpr (is_function_ptr_or_ref<V>) {
  285|       |            // Function pointers cannot be deserialized from JSON.
  286|       |            // When write_function_pointers is enabled the writer emits a type-name string,
  287|       |            // but there is nothing meaningful to reconstruct on read — just skip the value.
  288|       |            // When write_function_pointers is off the key is never written, so this branch
  289|       |            // is unreachable in that case.
  290|       |            skip_value<JSON>::op<Opts>(ctx, it, end);
  291|       |         }
  292|       |         else if constexpr (glaze_object_t<T>) {
  293|       |            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(reflect<T>::values)),
  294|       |                                                                       ctx, it, end);
  295|       |         }
  296|    108|         else {
  297|    108|            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(to_tie(value))), ctx,
  298|    108|                                                                       it, end);
  299|    108|         }
  300|    108|      }
  301|       |
  302|       |      // The key was present and handled, even when the value itself was skipped
  303|       |      if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  304|       |         ((selected_index = I), ...);
  305|       |      }
  306|    108|   }
_ZN3glz4fromILj10ENSt3__18functionIFiiEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEES4_TkNS_10is_contextERNS_7contextERPKcSB_EEvRT0_OT1_OT2_T3_:
 2179|    108|      {
 2180|       |         if constexpr (!check_ws_handled(Opts)) {
 2181|       |            if (skip_ws<Opts>(ctx, it, end)) {
 2182|       |               return;
 2183|       |            }
 2184|       |         }
 2185|    108|         if (match_invalid_end<'"', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2185:14): [True: 6, False: 102]
  ------------------
 2186|      6|            return;
 2187|      6|         }
 2188|    102|         skip_string_view(ctx, it, end);
 2189|    102|         if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (2189:14): [True: 17, False: 85]
  ------------------
 2190|     17|            return;
 2191|     85|         if (match<'"'>(ctx, it)) {
  ------------------
  |  Branch (2191:14): [True: 0, False: 85]
  ------------------
 2192|      0|            return;
 2193|      0|         }
 2194|     85|         if constexpr (not Opts.null_terminated) {
 2195|     85|            if (it == end) {
  ------------------
  |  Branch (2195:17): [True: 9, False: 76]
  ------------------
 2196|      9|               ctx.error = error_code::end_reached;
 2197|      9|               return;
 2198|      9|            }
 2199|     85|         }
 2200|     85|      }
_ZZN3glz16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT3_OT4_OT5_DpOT2_ENKUlTnmvE_clILm9EEEDav:
  484|    210|            visit<N>([&]<size_t I>() { decode_index<Opts, T, I>(value, ctx, it, end, selected_index...); }, index);
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm9ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|    210|   {
  312|    210|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|    210|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|    210|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|    210|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 202, False: 8]
  |  Branch (316:36): [True: 191, False: 11]
  ------------------
  317|    191|         it += Length;
  318|    191|         if constexpr (not Opts.null_terminated) {
  319|    191|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 191]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|    191|         }
  324|       |
  325|    191|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 14, False: 177]
  ------------------
  326|     14|            return;
  327|     14|         }
  328|    177|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 18, False: 159]
  ------------------
  329|     18|            return;
  330|     18|         }
  331|    159|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 14, False: 145]
  ------------------
  332|     14|            return;
  333|     14|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|    145|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|    145|      }
  338|     19|      else [[unlikely]] {
  339|     19|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|     19|      }
  341|    210|   }
_ZN3glz18decode_field_valueITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnDaXtlS1_Lj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEEN9repe_fuzz8fuzz_apiELm9ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT1_E11reflectableISA_EEEvOT3_OT5_OT6_OT7_DpOT4_:
  245|    145|   {
  246|       |      // Check for null value skipping on read
  247|       |      if constexpr (check_skip_null_members_on_read(Opts)) {
  248|       |         if (*it == 'n') {
  249|       |            ++it;
  250|       |            if constexpr (not Opts.null_terminated) {
  251|       |               if (it == end) [[unlikely]] {
  252|       |                  ctx.error = error_code::unexpected_end;
  253|       |                  return;
  254|       |               }
  255|       |            }
  256|       |            match<"ull", Opts>(ctx, it, end);
  257|       |            if (bool(ctx.error)) [[unlikely]]
  258|       |               return;
  259|       |            // Successfully matched "null", skip it
  260|       |            if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  261|       |               ((selected_index = I), ...); // Mark as handled even if skipped
  262|       |            }
  263|       |            return;
  264|       |         }
  265|       |      }
  266|       |
  267|       |      if constexpr (skipped_by_meta<T, I, operation::parse>) {
  268|       |         skip_value<JSON>::op<Opts>(ctx, it, end);
  269|       |         if (bool(ctx.error)) [[unlikely]]
  270|       |            return; // Propagate error from skip_value
  271|       |      }
  272|    145|      else {
  273|    145|         using V = refl_t<T, I>;
  274|       |
  275|       |         if constexpr (const_value_v<V>) {
  276|       |            if constexpr (check_error_on_const_read(Opts)) {
  277|       |               ctx.error = error_code::attempt_const_read;
  278|       |            }
  279|       |            else {
  280|       |               // do not read anything into the const value
  281|       |               skip_value<JSON>::op<Opts>(ctx, it, end);
  282|       |            }
  283|       |         }
  284|       |         else if constexpr (is_function_ptr_or_ref<V>) {
  285|       |            // Function pointers cannot be deserialized from JSON.
  286|       |            // When write_function_pointers is enabled the writer emits a type-name string,
  287|       |            // but there is nothing meaningful to reconstruct on read — just skip the value.
  288|       |            // When write_function_pointers is off the key is never written, so this branch
  289|       |            // is unreachable in that case.
  290|       |            skip_value<JSON>::op<Opts>(ctx, it, end);
  291|       |         }
  292|       |         else if constexpr (glaze_object_t<T>) {
  293|       |            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(reflect<T>::values)),
  294|       |                                                                       ctx, it, end);
  295|       |         }
  296|    145|         else {
  297|    145|            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(to_tie(value))), ctx,
  298|    145|                                                                       it, end);
  299|    145|         }
  300|    145|      }
  301|       |
  302|       |      // The key was present and handled, even when the value itself was skipped
  303|       |      if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  304|       |         ((selected_index = I), ...);
  305|       |      }
  306|    145|   }
_ZN3glz4fromILj10ENSt3__18functionIFNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERKS8_EEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEESC_TkNS_10is_contextERNS_7contextERPKcSJ_EEvRT0_OT1_OT2_T3_:
 2179|    145|      {
 2180|       |         if constexpr (!check_ws_handled(Opts)) {
 2181|       |            if (skip_ws<Opts>(ctx, it, end)) {
 2182|       |               return;
 2183|       |            }
 2184|       |         }
 2185|    145|         if (match_invalid_end<'"', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2185:14): [True: 6, False: 139]
  ------------------
 2186|      6|            return;
 2187|      6|         }
 2188|    139|         skip_string_view(ctx, it, end);
 2189|    139|         if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (2189:14): [True: 20, False: 119]
  ------------------
 2190|     20|            return;
 2191|    119|         if (match<'"'>(ctx, it)) {
  ------------------
  |  Branch (2191:14): [True: 0, False: 119]
  ------------------
 2192|      0|            return;
 2193|      0|         }
 2194|    119|         if constexpr (not Opts.null_terminated) {
 2195|    119|            if (it == end) {
  ------------------
  |  Branch (2195:17): [True: 11, False: 108]
  ------------------
 2196|     11|               ctx.error = error_code::end_reached;
 2197|     11|               return;
 2198|     11|            }
 2199|    119|         }
 2200|    119|      }
_ZZN3glz16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT3_OT4_OT5_DpOT2_ENKUlTnmvE_clILm10EEEDav:
  484|    400|            visit<N>([&]<size_t I>() { decode_index<Opts, T, I>(value, ctx, it, end, selected_index...); }, index);
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm10ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|    400|   {
  312|    400|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|    400|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|    400|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|    400|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 385, False: 15]
  |  Branch (316:36): [True: 346, False: 39]
  ------------------
  317|    346|         it += Length;
  318|    346|         if constexpr (not Opts.null_terminated) {
  319|    346|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 346]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|    346|         }
  324|       |
  325|    346|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 14, False: 332]
  ------------------
  326|     14|            return;
  327|     14|         }
  328|    332|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 28, False: 304]
  ------------------
  329|     28|            return;
  330|     28|         }
  331|    304|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 14, False: 290]
  ------------------
  332|     14|            return;
  333|     14|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|    290|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|    290|      }
  338|     54|      else [[unlikely]] {
  339|     54|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|     54|      }
  341|    400|   }
_ZN3glz18decode_field_valueITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnDaXtlS1_Lj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEEN9repe_fuzz8fuzz_apiELm10ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT1_E11reflectableISA_EEEvOT3_OT5_OT6_OT7_DpOT4_:
  245|    290|   {
  246|       |      // Check for null value skipping on read
  247|       |      if constexpr (check_skip_null_members_on_read(Opts)) {
  248|       |         if (*it == 'n') {
  249|       |            ++it;
  250|       |            if constexpr (not Opts.null_terminated) {
  251|       |               if (it == end) [[unlikely]] {
  252|       |                  ctx.error = error_code::unexpected_end;
  253|       |                  return;
  254|       |               }
  255|       |            }
  256|       |            match<"ull", Opts>(ctx, it, end);
  257|       |            if (bool(ctx.error)) [[unlikely]]
  258|       |               return;
  259|       |            // Successfully matched "null", skip it
  260|       |            if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  261|       |               ((selected_index = I), ...); // Mark as handled even if skipped
  262|       |            }
  263|       |            return;
  264|       |         }
  265|       |      }
  266|       |
  267|       |      if constexpr (skipped_by_meta<T, I, operation::parse>) {
  268|       |         skip_value<JSON>::op<Opts>(ctx, it, end);
  269|       |         if (bool(ctx.error)) [[unlikely]]
  270|       |            return; // Propagate error from skip_value
  271|       |      }
  272|    290|      else {
  273|    290|         using V = refl_t<T, I>;
  274|       |
  275|       |         if constexpr (const_value_v<V>) {
  276|       |            if constexpr (check_error_on_const_read(Opts)) {
  277|       |               ctx.error = error_code::attempt_const_read;
  278|       |            }
  279|       |            else {
  280|       |               // do not read anything into the const value
  281|       |               skip_value<JSON>::op<Opts>(ctx, it, end);
  282|       |            }
  283|       |         }
  284|       |         else if constexpr (is_function_ptr_or_ref<V>) {
  285|       |            // Function pointers cannot be deserialized from JSON.
  286|       |            // When write_function_pointers is enabled the writer emits a type-name string,
  287|       |            // but there is nothing meaningful to reconstruct on read — just skip the value.
  288|       |            // When write_function_pointers is off the key is never written, so this branch
  289|       |            // is unreachable in that case.
  290|       |            skip_value<JSON>::op<Opts>(ctx, it, end);
  291|       |         }
  292|       |         else if constexpr (glaze_object_t<T>) {
  293|       |            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(reflect<T>::values)),
  294|       |                                                                       ctx, it, end);
  295|       |         }
  296|    290|         else {
  297|    290|            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(to_tie(value))), ctx,
  298|    290|                                                                       it, end);
  299|    290|         }
  300|    290|      }
  301|       |
  302|       |      // The key was present and handled, even when the value itself was skipped
  303|       |      if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  304|       |         ((selected_index = I), ...);
  305|       |      }
  306|    290|   }
_ZN3glz4fromILj10ENSt3__18functionIFN9repe_fuzz5pointERKS4_EEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEES8_TkNS_10is_contextERNS_7contextERPKcSF_EEvRT0_OT1_OT2_T3_:
 2179|    290|      {
 2180|       |         if constexpr (!check_ws_handled(Opts)) {
 2181|       |            if (skip_ws<Opts>(ctx, it, end)) {
 2182|       |               return;
 2183|       |            }
 2184|       |         }
 2185|    290|         if (match_invalid_end<'"', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2185:14): [True: 6, False: 284]
  ------------------
 2186|      6|            return;
 2187|      6|         }
 2188|    284|         skip_string_view(ctx, it, end);
 2189|    284|         if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (2189:14): [True: 19, False: 265]
  ------------------
 2190|     19|            return;
 2191|    265|         if (match<'"'>(ctx, it)) {
  ------------------
  |  Branch (2191:14): [True: 0, False: 265]
  ------------------
 2192|      0|            return;
 2193|      0|         }
 2194|    265|         if constexpr (not Opts.null_terminated) {
 2195|    265|            if (it == end) {
  ------------------
  |  Branch (2195:17): [True: 9, False: 256]
  ------------------
 2196|      9|               ctx.error = error_code::end_reached;
 2197|      9|               return;
 2198|      9|            }
 2199|    265|         }
 2200|    265|      }
_ZZN3glz16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT3_OT4_OT5_DpOT2_ENKUlTnmvE_clILm11EEEDav:
  484|    107|            visit<N>([&]<size_t I>() { decode_index<Opts, T, I>(value, ctx, it, end, selected_index...); }, index);
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm11ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|    107|   {
  312|    107|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|    107|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|    107|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|    107|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 102, False: 5]
  |  Branch (316:36): [True: 97, False: 5]
  ------------------
  317|     97|         it += Length;
  318|     97|         if constexpr (not Opts.null_terminated) {
  319|     97|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 97]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|     97|         }
  324|       |
  325|     97|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 14, False: 83]
  ------------------
  326|     14|            return;
  327|     14|         }
  328|     83|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 17, False: 66]
  ------------------
  329|     17|            return;
  330|     17|         }
  331|     66|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 14, False: 52]
  ------------------
  332|     14|            return;
  333|     14|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|     52|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|     52|      }
  338|     10|      else [[unlikely]] {
  339|     10|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|     10|      }
  341|    107|   }
_ZN3glz18decode_field_valueITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnDaXtlS1_Lj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEEN9repe_fuzz8fuzz_apiELm11ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT1_E11reflectableISA_EEEvOT3_OT5_OT6_OT7_DpOT4_:
  245|     52|   {
  246|       |      // Check for null value skipping on read
  247|       |      if constexpr (check_skip_null_members_on_read(Opts)) {
  248|       |         if (*it == 'n') {
  249|       |            ++it;
  250|       |            if constexpr (not Opts.null_terminated) {
  251|       |               if (it == end) [[unlikely]] {
  252|       |                  ctx.error = error_code::unexpected_end;
  253|       |                  return;
  254|       |               }
  255|       |            }
  256|       |            match<"ull", Opts>(ctx, it, end);
  257|       |            if (bool(ctx.error)) [[unlikely]]
  258|       |               return;
  259|       |            // Successfully matched "null", skip it
  260|       |            if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  261|       |               ((selected_index = I), ...); // Mark as handled even if skipped
  262|       |            }
  263|       |            return;
  264|       |         }
  265|       |      }
  266|       |
  267|       |      if constexpr (skipped_by_meta<T, I, operation::parse>) {
  268|       |         skip_value<JSON>::op<Opts>(ctx, it, end);
  269|       |         if (bool(ctx.error)) [[unlikely]]
  270|       |            return; // Propagate error from skip_value
  271|       |      }
  272|     52|      else {
  273|     52|         using V = refl_t<T, I>;
  274|       |
  275|       |         if constexpr (const_value_v<V>) {
  276|       |            if constexpr (check_error_on_const_read(Opts)) {
  277|       |               ctx.error = error_code::attempt_const_read;
  278|       |            }
  279|       |            else {
  280|       |               // do not read anything into the const value
  281|       |               skip_value<JSON>::op<Opts>(ctx, it, end);
  282|       |            }
  283|       |         }
  284|       |         else if constexpr (is_function_ptr_or_ref<V>) {
  285|       |            // Function pointers cannot be deserialized from JSON.
  286|       |            // When write_function_pointers is enabled the writer emits a type-name string,
  287|       |            // but there is nothing meaningful to reconstruct on read — just skip the value.
  288|       |            // When write_function_pointers is off the key is never written, so this branch
  289|       |            // is unreachable in that case.
  290|       |            skip_value<JSON>::op<Opts>(ctx, it, end);
  291|       |         }
  292|       |         else if constexpr (glaze_object_t<T>) {
  293|       |            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(reflect<T>::values)),
  294|       |                                                                       ctx, it, end);
  295|       |         }
  296|     52|         else {
  297|     52|            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(to_tie(value))), ctx,
  298|     52|                                                                       it, end);
  299|     52|         }
  300|     52|      }
  301|       |
  302|       |      // The key was present and handled, even when the value itself was skipped
  303|       |      if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  304|       |         ((selected_index = I), ...);
  305|       |      }
  306|     52|   }
_ZN3glz4fromILj10ENSt3__18functionIFdRNS1_6vectorIdNS1_9allocatorIdEEEEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEES9_TkNS_10is_contextERNS_7contextERPKcSG_EEvRT0_OT1_OT2_T3_:
 2179|     52|      {
 2180|       |         if constexpr (!check_ws_handled(Opts)) {
 2181|       |            if (skip_ws<Opts>(ctx, it, end)) {
 2182|       |               return;
 2183|       |            }
 2184|       |         }
 2185|     52|         if (match_invalid_end<'"', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2185:14): [True: 6, False: 46]
  ------------------
 2186|      6|            return;
 2187|      6|         }
 2188|     46|         skip_string_view(ctx, it, end);
 2189|     46|         if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (2189:14): [True: 19, False: 27]
  ------------------
 2190|     19|            return;
 2191|     27|         if (match<'"'>(ctx, it)) {
  ------------------
  |  Branch (2191:14): [True: 0, False: 27]
  ------------------
 2192|      0|            return;
 2193|      0|         }
 2194|     27|         if constexpr (not Opts.null_terminated) {
 2195|     27|            if (it == end) {
  ------------------
  |  Branch (2195:17): [True: 5, False: 22]
  ------------------
 2196|      5|               ctx.error = error_code::end_reached;
 2197|      5|               return;
 2198|      5|            }
 2199|     27|         }
 2200|     27|      }
_ZZN3glz16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT1_OT3_OT4_OT5_DpOT2_ENKUlTnmvE_clILm12EEEDav:
  484|    117|            visit<N>([&]<size_t I>() { decode_index<Opts, T, I>(value, ctx, it, end, selected_index...); }, index);
_ZN3glz12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm12ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT0_E11reflectableISA_EEEvOT2_OT4_OT5_OT6_DpOT3_:
  311|    117|   {
  312|    117|      static constexpr auto Key = get<I>(reflect<T>::keys);
  313|    117|      static constexpr auto KeyWithEndQuote = join_v<Key, chars<"\"">>;
  314|    117|      static constexpr auto Length = KeyWithEndQuote.size();
  315|       |
  316|    117|      if (((it + Length) < end) && comparitor<KeyWithEndQuote>(it)) [[likely]] {
  ------------------
  |  Branch (316:11): [True: 108, False: 9]
  |  Branch (316:36): [True: 98, False: 10]
  ------------------
  317|     98|         it += Length;
  318|     98|         if constexpr (not Opts.null_terminated) {
  319|     98|            if (it == end) [[unlikely]] {
  ------------------
  |  Branch (319:17): [True: 0, False: 98]
  ------------------
  320|      0|               ctx.error = error_code::unexpected_end;
  321|      0|               return;
  322|      0|            }
  323|     98|         }
  324|       |
  325|     98|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (325:14): [True: 14, False: 84]
  ------------------
  326|     14|            return;
  327|     14|         }
  328|     84|         if (match_invalid_end<':', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (328:14): [True: 8, False: 76]
  ------------------
  329|      8|            return;
  330|      8|         }
  331|     76|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (331:14): [True: 14, False: 62]
  ------------------
  332|     14|            return;
  333|     14|         }
  334|       |
  335|       |         // The hash path has already consumed the whitespace before the value
  336|     62|         decode_field_value<Opts, ws_handled<Opts>(), T, I>(value, ctx, it, end, selected_index...);
  337|     62|      }
  338|     19|      else [[unlikely]] {
  339|     19|         decode_index_unknown_key<Opts, T>(value, ctx, it, end);
  340|     19|      }
  341|    117|   }
_ZN3glz18decode_field_valueITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnDaXtlS1_Lj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEEN9repe_fuzz8fuzz_apiELm12ERS3_JETkNS_10is_contextERNS_7contextERPKcS9_Qoo14glaze_object_tIT1_E11reflectableISA_EEEvOT3_OT5_OT6_OT7_DpOT4_:
  245|     62|   {
  246|       |      // Check for null value skipping on read
  247|       |      if constexpr (check_skip_null_members_on_read(Opts)) {
  248|       |         if (*it == 'n') {
  249|       |            ++it;
  250|       |            if constexpr (not Opts.null_terminated) {
  251|       |               if (it == end) [[unlikely]] {
  252|       |                  ctx.error = error_code::unexpected_end;
  253|       |                  return;
  254|       |               }
  255|       |            }
  256|       |            match<"ull", Opts>(ctx, it, end);
  257|       |            if (bool(ctx.error)) [[unlikely]]
  258|       |               return;
  259|       |            // Successfully matched "null", skip it
  260|       |            if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  261|       |               ((selected_index = I), ...); // Mark as handled even if skipped
  262|       |            }
  263|       |            return;
  264|       |         }
  265|       |      }
  266|       |
  267|       |      if constexpr (skipped_by_meta<T, I, operation::parse>) {
  268|       |         skip_value<JSON>::op<Opts>(ctx, it, end);
  269|       |         if (bool(ctx.error)) [[unlikely]]
  270|       |            return; // Propagate error from skip_value
  271|       |      }
  272|     62|      else {
  273|     62|         using V = refl_t<T, I>;
  274|       |
  275|       |         if constexpr (const_value_v<V>) {
  276|       |            if constexpr (check_error_on_const_read(Opts)) {
  277|       |               ctx.error = error_code::attempt_const_read;
  278|       |            }
  279|       |            else {
  280|       |               // do not read anything into the const value
  281|       |               skip_value<JSON>::op<Opts>(ctx, it, end);
  282|       |            }
  283|       |         }
  284|       |         else if constexpr (is_function_ptr_or_ref<V>) {
  285|       |            // Function pointers cannot be deserialized from JSON.
  286|       |            // When write_function_pointers is enabled the writer emits a type-name string,
  287|       |            // but there is nothing meaningful to reconstruct on read — just skip the value.
  288|       |            // When write_function_pointers is off the key is never written, so this branch
  289|       |            // is unreachable in that case.
  290|       |            skip_value<JSON>::op<Opts>(ctx, it, end);
  291|       |         }
  292|       |         else if constexpr (glaze_object_t<T>) {
  293|       |            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(reflect<T>::values)),
  294|       |                                                                       ctx, it, end);
  295|       |         }
  296|     62|         else {
  297|     62|            from<JSON, std::remove_cvref_t<V>>::template op<FieldOpts>(get_member(value, get<I>(to_tie(value))), ctx,
  298|     62|                                                                       it, end);
  299|     62|         }
  300|     62|      }
  301|       |
  302|       |      // The key was present and handled, even when the value itself was skipped
  303|       |      if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
  304|       |         ((selected_index = I), ...);
  305|       |      }
  306|     62|   }
_ZN3glz4fromILj10ENSt3__18functionIFvvEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEES4_TkNS_10is_contextERNS_7contextERPKcSB_EEvRT0_OT1_OT2_T3_:
 2179|     62|      {
 2180|       |         if constexpr (!check_ws_handled(Opts)) {
 2181|       |            if (skip_ws<Opts>(ctx, it, end)) {
 2182|       |               return;
 2183|       |            }
 2184|       |         }
 2185|     62|         if (match_invalid_end<'"', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2185:14): [True: 20, False: 42]
  ------------------
 2186|     20|            return;
 2187|     20|         }
 2188|     42|         skip_string_view(ctx, it, end);
 2189|     42|         if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (2189:14): [True: 20, False: 22]
  ------------------
 2190|     20|            return;
 2191|     22|         if (match<'"'>(ctx, it)) {
  ------------------
  |  Branch (2191:14): [True: 0, False: 22]
  ------------------
 2192|      0|            return;
 2193|      0|         }
 2194|     22|         if constexpr (not Opts.null_terminated) {
 2195|     22|            if (it == end) {
  ------------------
  |  Branch (2195:17): [True: 13, False: 9]
  ------------------
 2196|     13|               ctx.error = error_code::end_reached;
 2197|     13|               return;
 2198|     13|            }
 2199|     22|         }
 2200|     22|      }
_ZN3glz5parseILj10EE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__16vectorIiNS4_9allocatorIiEEEETkNS_10is_contextERNS_7contextERPKcSD_EEvOT0_OT1_OT2_T3_:
   49|  13.8k|      {
   50|       |         if constexpr (const_value_v<T>) {
   51|       |            if constexpr (check_error_on_const_read(Opts)) {
   52|       |               ctx.error = error_code::attempt_const_read;
   53|       |            }
   54|       |            else {
   55|       |               // do not read anything into the const value
   56|       |               skip_value<JSON>::op<Opts>(std::forward<Ctx>(ctx), std::forward<It0>(it), end);
   57|       |            }
   58|       |         }
   59|  13.8k|         else {
   60|  13.8k|            using V = std::remove_cvref_t<T>;
   61|  13.8k|            from<JSON, V>::template op<Opts>(std::forward<T>(value), std::forward<Ctx>(ctx), std::forward<It0>(it),
   62|  13.8k|                                             end);
   63|  13.8k|         }
   64|  13.8k|      }
_ZN3glz4fromILj10ENSt3__16vectorIiNS1_9allocatorIiEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS5_TkNS_10is_contextERNS_7contextERPKcSD_EEvOT0_OT1_OT2_T3_:
 2308|  13.8k|      {
 2309|  13.8k|         constexpr auto Opts = ws_handled_off<Options>();
 2310|  13.8k|         if constexpr (!check_ws_handled(Options)) {
 2311|  13.8k|            if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2311:17): [True: 42, False: 13.7k]
  ------------------
 2312|     42|               return;
 2313|     42|            }
 2314|  13.8k|         }
 2315|       |
 2316|  13.8k|         if (match_invalid_end<'[', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2316:14): [True: 11.8k, False: 2.01k]
  ------------------
 2317|  11.8k|            return;
 2318|  11.8k|         }
 2319|       |         // one nesting level (see enter_depth): counted in both modes so the limit binds,
 2320|       |         // released at each syntactic close below
 2321|  2.01k|         if (enter_depth(ctx)) [[unlikely]] {
  ------------------
  |  Branch (2321:14): [True: 0, False: 2.01k]
  ------------------
 2322|      0|            return;
 2323|      0|         }
 2324|       |
 2325|  2.01k|         const auto ws_start = it;
 2326|  2.01k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2326:14): [True: 15, False: 2.00k]
  ------------------
 2327|     15|            return;
 2328|     15|         }
 2329|       |
 2330|  2.00k|         if (*it == ']') {
  ------------------
  |  Branch (2330:14): [True: 7, False: 1.99k]
  ------------------
 2331|      7|            --ctx.depth;
 2332|      7|            ++it;
 2333|      7|            if constexpr ((resizable<T> || is_inplace_vector<T>) && not check_append_arrays(Opts)) {
 2334|      7|               value.clear();
 2335|       |
 2336|       |               if constexpr (check_shrink_to_fit(Opts) && has_shrink_to_fit<T>) {
 2337|       |                  value.shrink_to_fit();
 2338|       |               }
 2339|      7|            }
 2340|      7|            return;
 2341|      7|         }
 2342|       |
 2343|  1.99k|         const size_t ws_size = size_t(it - ws_start);
 2344|       |
 2345|  1.99k|         static constexpr bool should_append = (resizable<T> || is_inplace_vector<T>) && check_append_arrays(Opts);
  ------------------
  |  Branch (2345:49): [True: 1.99k, Folded]
  |  Branch (2345:65): [Folded, False: 0]
  |  Branch (2345:90): [Folded, False: 0]
  ------------------
 2346|  1.99k|         if constexpr (not should_append) {
 2347|  1.99k|            const auto n = value.size();
 2348|       |
 2349|  1.99k|            auto value_it = value.begin();
 2350|       |
 2351|  1.99k|            for (size_t i = 0; i < n; ++i) {
  ------------------
  |  Branch (2351:32): [True: 0, False: 1.99k]
  ------------------
 2352|      0|               parse<JSON>::op<ws_handled<Opts>()>(*value_it++, ctx, it, end);
 2353|      0|               if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (2353:20): [True: 0, False: 0]
  ------------------
 2354|      0|                  return;
 2355|      0|               if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2355:20): [True: 0, False: 0]
  ------------------
 2356|      0|                  return;
 2357|      0|               }
 2358|      0|               if (*it == ',') {
  ------------------
  |  Branch (2358:20): [True: 0, False: 0]
  ------------------
 2359|      0|                  ++it;
 2360|       |
 2361|      0|                  if constexpr (!Opts.minified && !Opts.comments) {
 2362|      0|                     if (ws_size && ws_size < size_t(end - it)) {
  ------------------
  |  Branch (2362:26): [True: 0, False: 0]
  |  Branch (2362:37): [True: 0, False: 0]
  ------------------
 2363|      0|                        skip_matching_ws(ws_start, it, ws_size);
 2364|      0|                     }
 2365|      0|                  }
 2366|       |
 2367|      0|                  if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2367:23): [True: 0, False: 0]
  ------------------
 2368|      0|                     return;
 2369|      0|                  }
 2370|      0|               }
 2371|      0|               else if (*it == ']') {
  ------------------
  |  Branch (2371:25): [True: 0, False: 0]
  ------------------
 2372|      0|                  --ctx.depth;
 2373|      0|                  ++it;
 2374|      0|                  if constexpr (erasable<T>) {
 2375|      0|                     value.erase(value_it,
 2376|      0|                                 value.end()); // use erase rather than resize for non-default constructible elements
 2377|       |
 2378|       |                     if constexpr (check_shrink_to_fit(Opts) && has_shrink_to_fit<T>) {
 2379|       |                        value.shrink_to_fit();
 2380|       |                     }
 2381|      0|                  }
 2382|      0|                  return;
 2383|      0|               }
 2384|      0|               else [[unlikely]] {
 2385|      0|                  ctx.error = error_code::expected_bracket;
 2386|      0|                  return;
 2387|      0|               }
 2388|      0|            }
 2389|  1.99k|         }
 2390|       |
 2391|       |         if constexpr (Opts.partial_read) {
 2392|       |            // partial_read stops early on a success path, so give the level back like the
 2393|       |            // syntactic-close paths do; otherwise it accumulates across reads sharing a context.
 2394|       |            --ctx.depth;
 2395|       |            return;
 2396|       |         }
 2397|  1.99k|         else {
 2398|       |            // growing
 2399|  1.99k|            if constexpr (emplace_backable<T> || has_try_emplace_back<T>) {
 2400|   208k|               while (it < end) {
  ------------------
  |  Branch (2400:23): [True: 208k, False: 42]
  ------------------
 2401|       |                  // Streaming refill point: at start of each iteration, ensure buffer has data
 2402|       |                  if constexpr (has_streaming_state<decltype(ctx)>) {
 2403|       |                     if (ctx.stream.enabled()) {
 2404|       |                        const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 2405|       |                        const size_t remaining = ctx.stream.size() - consumed;
 2406|       |                        // Refill when less than half of buffer remains to ensure space for next element
 2407|       |                        if (remaining <= ctx.stream.size() / 2 || it >= end) {
 2408|       |                           const char* new_it;
 2409|       |                           const char* new_end;
 2410|       |                           ctx.stream.consume_and_refill(consumed, new_it, new_end);
 2411|       |                           it = new_it;
 2412|       |                           end = new_end;
 2413|       |                           if (it >= end && ctx.stream.at_eof()) {
 2414|       |                              break; // No more data, exit loop normally
 2415|       |                           }
 2416|       |                        }
 2417|       |                     }
 2418|       |                  }
 2419|       |
 2420|       |                  if constexpr (has_try_emplace_back<T>) {
 2421|       |                     if (value.try_emplace_back())
 2422|       |                        parse<JSON>::op<ws_handled<Opts>()>(value.back(), ctx, it, end);
 2423|       |                     else
 2424|       |                        ctx.error = error_code::exceeded_static_array_size;
 2425|       |                  }
 2426|   208k|                  else {
 2427|   208k|                     parse<JSON>::op<ws_handled<Opts>()>(value.emplace_back(), ctx, it, end);
 2428|   208k|                  }
 2429|       |
 2430|   208k|                  if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (2430:23): [True: 1.62k, False: 206k]
  ------------------
 2431|  1.62k|                     return;
 2432|       |
 2433|       |                  // Streaming refill point: after parsing each element, refill if buffer is low
 2434|       |                  if constexpr (has_streaming_state<decltype(ctx)>) {
 2435|       |                     if (ctx.stream.enabled()) {
 2436|       |                        const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 2437|       |                        // Refill when less than 25% of buffer remains to ensure enough space for next element
 2438|       |                        if (ctx.stream.size() - consumed <= ctx.stream.size() / 4 || it >= end) {
 2439|       |                           const char* new_it;
 2440|       |                           const char* new_end;
 2441|       |                           ctx.stream.consume_and_refill(consumed, new_it, new_end);
 2442|       |                           it = new_it;
 2443|       |                           end = new_end;
 2444|       |                           if (it >= end && ctx.stream.at_eof()) {
 2445|       |                              ctx.error = error_code::unexpected_end;
 2446|       |                              return;
 2447|       |                           }
 2448|       |                        }
 2449|       |                     }
 2450|       |                  }
 2451|       |
 2452|   206k|                  if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2452:23): [True: 12, False: 206k]
  ------------------
 2453|     12|                     return;
 2454|     12|                  }
 2455|   206k|                  if (*it == ',') [[likely]] {
  ------------------
  |  Branch (2455:23): [True: 206k, False: 254]
  ------------------
 2456|   206k|                     ++it;
 2457|       |
 2458|   206k|                     if constexpr (!Opts.minified && !Opts.comments) {
 2459|   206k|                        if (ws_size && ws_size < size_t(end - it)) {
  ------------------
  |  Branch (2459:29): [True: 170k, False: 36.3k]
  |  Branch (2459:40): [True: 169k, False: 267]
  ------------------
 2460|   169k|                           skip_matching_ws(ws_start, it, ws_size);
 2461|   169k|                        }
 2462|   206k|                     }
 2463|       |
 2464|   206k|                     if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2464:26): [True: 66, False: 206k]
  ------------------
 2465|     66|                        return;
 2466|     66|                     }
 2467|   206k|                  }
 2468|    254|                  else if (*it == ']') {
  ------------------
  |  Branch (2468:28): [True: 73, False: 181]
  ------------------
 2469|     73|                     --ctx.depth;
 2470|     73|                     ++it;
 2471|       |                     if constexpr (check_shrink_to_fit(Opts) && has_shrink_to_fit<T>) {
 2472|       |                        value.shrink_to_fit();
 2473|       |                     }
 2474|     73|                     return;
 2475|     73|                  }
 2476|    181|                  else [[unlikely]] {
 2477|    181|                     ctx.error = error_code::expected_bracket;
 2478|    181|                     return;
 2479|    181|                  }
 2480|   206k|               }
 2481|       |
 2482|       |               // A valid array always returns from inside the loop upon reaching ']'.
 2483|       |               // For a null-terminated buffer the loop can only exit here by falling
 2484|       |               // through when `it` reaches the terminator without a closing bracket,
 2485|       |               // which means the input was truncated (e.g. "[", "[1," or "[1,2,").
 2486|       |               // Non-null-terminated buffers surface this through skip_ws/depth
 2487|       |               // tracking (or the streaming refill break), so this guard is limited
 2488|       |               // to the null-terminated case.
 2489|       |               if constexpr (Opts.null_terminated) {
 2490|       |                  ctx.error = error_code::unexpected_end;
 2491|       |               }
 2492|       |            }
 2493|       |            else {
 2494|       |               ctx.error = error_code::exceeded_static_array_size;
 2495|       |            }
 2496|  1.99k|         }
 2497|  1.99k|      }
_ZN3glz5parseILj10EE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__13mapINS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEiNS4_4lessISB_EENS9_INS4_4pairIKSB_iEEEEEETkNS_10is_contextERNS_7contextERPKcSN_EEvOT0_OT1_OT2_T3_:
   49|  14.0k|      {
   50|       |         if constexpr (const_value_v<T>) {
   51|       |            if constexpr (check_error_on_const_read(Opts)) {
   52|       |               ctx.error = error_code::attempt_const_read;
   53|       |            }
   54|       |            else {
   55|       |               // do not read anything into the const value
   56|       |               skip_value<JSON>::op<Opts>(std::forward<Ctx>(ctx), std::forward<It0>(it), end);
   57|       |            }
   58|       |         }
   59|  14.0k|         else {
   60|  14.0k|            using V = std::remove_cvref_t<T>;
   61|  14.0k|            from<JSON, V>::template op<Opts>(std::forward<T>(value), std::forward<Ctx>(ctx), std::forward<It0>(it),
   62|  14.0k|                                             end);
   63|  14.0k|         }
   64|  14.0k|      }
_ZN3glz4fromILj10ENSt3__13mapINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEiNS1_4lessIS8_EENS6_INS1_4pairIKS8_iEEEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnNS_14string_literalEXtlNSJ_ILm1EEEEERSF_TkNS_10is_contextERNS_7contextERPKcSP_EEvOT1_OT2_OT3_T4_:
 3044|  14.0k|      {
 3045|  14.0k|         static constexpr auto num_members = reflect<T>::size;
 3046|       |
 3047|  14.0k|         static constexpr auto Opts = opening_handled_off<ws_handled_off<Options>()>();
 3048|  14.0k|         if constexpr (!check_opening_handled(Options)) {
 3049|  14.0k|            if constexpr (!check_ws_handled(Options)) {
 3050|  14.0k|               if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3050:20): [True: 43, False: 14.0k]
  ------------------
 3051|     43|                  return;
 3052|     43|               }
 3053|  14.0k|            }
 3054|  14.0k|            if (match_invalid_end<'{', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3054:17): [True: 5.40k, False: 8.68k]
  ------------------
 3055|  5.40k|               return;
 3056|  5.40k|            }
 3057|  8.68k|            if constexpr (not Opts.null_terminated) {
 3058|  8.68k|               if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3058:20): [True: 0, False: 8.68k]
  ------------------
 3059|      0|                  ctx.error = error_code::unexpected_end;
 3060|      0|                  return;
 3061|      0|               }
 3062|  8.68k|            }
 3063|       |            // one nesting level (see enter_depth): counted in both modes so the limit binds,
 3064|       |            // released at each syntactic close below
 3065|  8.68k|            if (enter_depth(ctx)) [[unlikely]] {
  ------------------
  |  Branch (3065:17): [True: 0, False: 8.68k]
  ------------------
 3066|      0|               return;
 3067|      0|            }
 3068|  8.68k|         }
 3069|  8.68k|         const auto ws_start = it;
 3070|  14.0k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3070:14): [True: 33, False: 14.0k]
  ------------------
 3071|     33|            return;
 3072|     33|         }
 3073|  14.0k|         const size_t ws_size = size_t(it - ws_start);
 3074|       |
 3075|       |         if constexpr ((glaze_object_t<T> || reflectable<T>) && num_members == 0 && Opts.error_on_unknown_keys) {
 3076|       |            if constexpr (not tag.sv().empty()) {
 3077|       |               if (*it == '"') {
 3078|       |                  ++it;
 3079|       |                  if constexpr (not Opts.null_terminated) {
 3080|       |                     if (it == end) [[unlikely]] {
 3081|       |                        ctx.error = error_code::unexpected_end;
 3082|       |                        return;
 3083|       |                     }
 3084|       |                  }
 3085|       |
 3086|       |                  const auto start = it;
 3087|       |                  skip_string_view(ctx, it, end);
 3088|       |                  if (bool(ctx.error)) [[unlikely]]
 3089|       |                     return;
 3090|       |                  if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3091|       |                     return;
 3092|       |                  const sv key{start, size_t(it - start)};
 3093|       |                  ++it;
 3094|       |                  if constexpr (not Opts.null_terminated) {
 3095|       |                     if (it == end) [[unlikely]] {
 3096|       |                        ctx.error = error_code::unexpected_end;
 3097|       |                        return;
 3098|       |                     }
 3099|       |                  }
 3100|       |
 3101|       |                  if (key == tag.sv()) {
 3102|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3103|       |                        return;
 3104|       |                     }
 3105|       |
 3106|       |                     parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3107|       |                     if (bool(ctx.error)) [[unlikely]]
 3108|       |                        return;
 3109|       |
 3110|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 3111|       |                        return;
 3112|       |                     }
 3113|       |                  }
 3114|       |                  else {
 3115|       |                     ctx.error = error_code::unknown_key;
 3116|       |                     return;
 3117|       |                  }
 3118|       |               }
 3119|       |            }
 3120|       |
 3121|       |            if (*it == '}') [[likely]] {
 3122|       |               --ctx.depth;
 3123|       |               if constexpr (glaze_object_t<T> || reflectable<T>) {
 3124|       |                  if constexpr (has_self_constraint_v<T> && !check_skip_self_constraint(Opts)) {
 3125|       |                     auto wrapper = self_constraint_v<T>(value);
 3126|       |                     from<JSON, decltype(wrapper)>::template op<ws_handled<Opts>()>(wrapper, ctx, it, end);
 3127|       |                     if (bool(ctx.error)) {
 3128|       |                        return;
 3129|       |                     }
 3130|       |                  }
 3131|       |               }
 3132|       |               ++it;
 3133|       |               if constexpr (not Opts.null_terminated) {
 3134|       |                  if (it == end) {
 3135|       |                     ctx.error = error_code::end_reached;
 3136|       |                     return;
 3137|       |                  }
 3138|       |               }
 3139|       |               if constexpr (Opts.partial_read) {
 3140|       |                  ctx.error = error_code::partial_read_complete;
 3141|       |               }
 3142|       |               return;
 3143|       |            }
 3144|       |            ctx.error = error_code::unknown_key;
 3145|       |            return;
 3146|       |         }
 3147|  14.0k|         else {
 3148|  14.0k|            decltype(auto) fields = [&]() -> decltype(auto) {
 3149|  14.0k|               if constexpr ((glaze_object_t<T> || reflectable<T>) &&
 3150|  14.0k|                             (Opts.error_on_missing_keys || Opts.partial_read)) {
 3151|  14.0k|                  return bit_array<num_members>{};
 3152|  14.0k|               }
 3153|  14.0k|               else {
 3154|  14.0k|                  return nullptr;
 3155|  14.0k|               }
 3156|  14.0k|            }();
 3157|       |
 3158|  14.0k|            size_t read_count{}; // for partial_read
 3159|       |
 3160|  14.0k|            bool first = true;
 3161|  58.9k|            while (true) {
  ------------------
  |  Branch (3161:20): [True: 45.4k, Folded]
  ------------------
 3162|       |               if constexpr ((glaze_object_t<T> || reflectable<T>) && Opts.partial_read) {
 3163|       |                  static constexpr bit_array<num_members> all_fields = [] {
 3164|       |                     bit_array<num_members> arr{};
 3165|       |                     for (size_t i = 0; i < num_members; ++i) {
 3166|       |                        arr[i] = true;
 3167|       |                     }
 3168|       |                     return arr;
 3169|       |                  }();
 3170|       |
 3171|       |                  if ((all_fields & fields) == all_fields) {
 3172|       |                     ctx.error = error_code::partial_read_complete;
 3173|       |                     --ctx.depth; // as above: an early success still closes this level
 3174|       |                     return;
 3175|       |                  }
 3176|       |               }
 3177|       |
 3178|       |               // Streaming refill point: at start of each iteration, ensure buffer has data
 3179|       |               if constexpr (has_streaming_state<decltype(ctx)>) {
 3180|       |                  if (ctx.stream.enabled()) {
 3181|       |                     const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 3182|       |                     const size_t remaining = ctx.stream.size() - consumed;
 3183|       |                     // Refill when less than half of buffer remains to ensure space for next key-value pair
 3184|       |                     if (remaining <= ctx.stream.size() / 2 || it >= end) {
 3185|       |                        const char* new_it;
 3186|       |                        const char* new_end;
 3187|       |                        ctx.stream.consume_and_refill(consumed, new_it, new_end);
 3188|       |                        it = new_it;
 3189|       |                        end = new_end;
 3190|       |                        if (it >= end && ctx.stream.at_eof()) {
 3191|       |                           ctx.error = error_code::unexpected_end;
 3192|       |                           return;
 3193|       |                        }
 3194|       |                     }
 3195|       |                  }
 3196|       |               }
 3197|       |
 3198|  45.4k|               if (*it == '}') {
  ------------------
  |  Branch (3198:20): [True: 52, False: 45.3k]
  ------------------
 3199|     52|                  --ctx.depth;
 3200|       |                  if constexpr ((glaze_object_t<T> || reflectable<T>) && Opts.error_on_missing_keys) {
 3201|       |                     constexpr auto req_fields = required_fields<T, Opts>();
 3202|       |                     if ((req_fields & fields) != req_fields) {
 3203|       |                        for (size_t i = 0; i < num_members; ++i) {
 3204|       |                           if (not fields[i] && req_fields[i]) {
 3205|       |                              ctx.custom_error_message = reflect<T>::keys[i];
 3206|       |                              // We just return the first missing key in order to avoid heap allocations
 3207|       |                              break;
 3208|       |                           }
 3209|       |                        }
 3210|       |
 3211|       |                        ctx.error = error_code::missing_key;
 3212|       |                        return;
 3213|       |                     }
 3214|       |                  }
 3215|       |                  if constexpr (glaze_object_t<T> || reflectable<T>) {
 3216|       |                     if constexpr (has_self_constraint_v<T> && !check_skip_self_constraint(Opts)) {
 3217|       |                        auto wrapper = self_constraint_v<T>(value);
 3218|       |                        from<JSON, decltype(wrapper)>::template op<ws_handled<Opts>()>(wrapper, ctx, it, end);
 3219|       |                        if (bool(ctx.error)) {
 3220|       |                           return;
 3221|       |                        }
 3222|       |                     }
 3223|       |                  }
 3224|     52|                  ++it; // Increment after checking for missing keys so errors are within buffer bounds
 3225|     52|                  if constexpr (not Opts.null_terminated) {
 3226|     52|                     if (it == end) {
  ------------------
  |  Branch (3226:26): [True: 24, False: 28]
  ------------------
 3227|     24|                        ctx.error = error_code::end_reached;
 3228|     24|                        return;
 3229|     24|                     }
 3230|     52|                  }
 3231|     28|                  return;
 3232|     52|               }
 3233|  45.3k|               else if (first) {
  ------------------
  |  Branch (3233:25): [True: 8.57k, False: 36.7k]
  ------------------
 3234|  8.57k|                  first = false;
 3235|  8.57k|               }
 3236|  36.7k|               else {
 3237|  36.7k|                  if (match_invalid_end<',', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3237:23): [True: 368, False: 36.4k]
  ------------------
 3238|    368|                     return;
 3239|    368|                  }
 3240|  36.4k|                  if constexpr (not Opts.null_terminated) {
 3241|  36.4k|                     if (it == end) [[unlikely]] {
  ------------------
  |  Branch (3241:26): [True: 0, False: 36.4k]
  ------------------
 3242|      0|                        ctx.error = error_code::unexpected_end;
 3243|      0|                        return;
 3244|      0|                     }
 3245|  36.4k|                  }
 3246|       |
 3247|       |                  if constexpr ((not Opts.minified) && (num_members > 1 || not Opts.error_on_unknown_keys) &&
 3248|       |                                (!Opts.comments)) {
 3249|       |                     if (ws_size && ws_size < size_t(end - it)) {
 3250|       |                        skip_matching_ws(ws_start, it, ws_size);
 3251|       |                     }
 3252|       |                  }
 3253|       |
 3254|  36.4k|                  if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3254:23): [True: 63, False: 36.3k]
  ------------------
 3255|     63|                     return;
 3256|     63|                  }
 3257|  36.4k|               }
 3258|       |
 3259|  44.9k|               constexpr auto reflection_type = glaze_object_t<T> || reflectable<T>;
  ------------------
  |  Branch (3259:49): [Folded, False: 0]
  |  Branch (3259:70): [Folded, False: 0]
  ------------------
 3260|       |
 3261|       |               if constexpr (reflection_type && (num_members == 0)) {
 3262|       |                  if constexpr (Opts.error_on_unknown_keys) {
 3263|       |                     static_assert(false_v<T>, "This should be unreachable");
 3264|       |                  }
 3265|       |                  else {
 3266|       |                     if (match_invalid_end<'"', Opts>(ctx, it, end)) {
 3267|       |                        return;
 3268|       |                     }
 3269|       |
 3270|       |                     // parsing to an empty object, but at this point the JSON presents keys
 3271|       |
 3272|       |                     // Unknown key handler does not unescape keys. Unknown escaped keys are
 3273|       |                     // handled by the user.
 3274|       |
 3275|       |                     const auto start = it;
 3276|       |                     skip_string_view(ctx, it, end);
 3277|       |                     if (bool(ctx.error)) [[unlikely]]
 3278|       |                        return;
 3279|       |                     if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3280|       |                        return;
 3281|       |                     const sv key{start, size_t(it - start)};
 3282|       |                     ++it;
 3283|       |                     if constexpr (not Opts.null_terminated) {
 3284|       |                        if (it == end) [[unlikely]] {
 3285|       |                           ctx.error = error_code::unexpected_end;
 3286|       |                           return;
 3287|       |                        }
 3288|       |                     }
 3289|       |
 3290|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3291|       |                        return;
 3292|       |                     }
 3293|       |
 3294|       |                     // Check if this key is the variant tag that should be skipped
 3295|       |                     if constexpr (not tag.sv().empty()) {
 3296|       |                        if (key == tag.sv()) {
 3297|       |                           // Skip the tag value
 3298|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3299|       |                           if (bool(ctx.error)) [[unlikely]]
 3300|       |                              return;
 3301|       |                           resync_window_end(ctx, end); // a streaming skip refills
 3302|       |                           if (skip_ws<Opts>(ctx, it, end)) {
 3303|       |                              return;
 3304|       |                           }
 3305|       |                           continue;
 3306|       |                        }
 3307|       |                     }
 3308|       |
 3309|       |                     parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3310|       |                     if (bool(ctx.error)) [[unlikely]]
 3311|       |                        return;
 3312|       |                     if constexpr (not Opts.null_terminated) {
 3313|       |                        if (it == end) [[unlikely]] {
 3314|       |                           ctx.error = error_code::unexpected_end;
 3315|       |                           return;
 3316|       |                        }
 3317|       |                     }
 3318|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 3319|       |                        return;
 3320|       |                     }
 3321|       |                  }
 3322|       |               }
 3323|       |               else if constexpr (reflection_type) {
 3324|       |                  static_assert(bool(hash_info<T>.type));
 3325|       |
 3326|       |                  if (*it != '"') [[unlikely]] {
 3327|       |                     ctx.error = error_code::expected_quote;
 3328|       |                     return;
 3329|       |                  }
 3330|       |                  ++it;
 3331|       |                  if constexpr (not Opts.null_terminated) {
 3332|       |                     if (it == end) [[unlikely]] {
 3333|       |                        ctx.error = error_code::unexpected_end;
 3334|       |                        return;
 3335|       |                     }
 3336|       |                  }
 3337|       |
 3338|       |                  if constexpr (not tag.sv().empty() && not contains_tag<T, tag>()) {
 3339|       |                     // For tagged variants we first check to see if the key matches the tag
 3340|       |                     // We only need to do this if the tag is not part of the keys
 3341|       |
 3342|       |                     const auto start = it;
 3343|       |                     skip_string_view(ctx, it, end);
 3344|       |                     if (bool(ctx.error)) [[unlikely]]
 3345|       |                        return;
 3346|       |                     if (validate_utf8_span<Opts>(ctx, start, it)) [[unlikely]]
 3347|       |                        return;
 3348|       |                     const sv key{start, size_t(it - start)};
 3349|       |                     ++it;
 3350|       |                     if constexpr (not Opts.null_terminated) {
 3351|       |                        if (it == end) [[unlikely]] {
 3352|       |                           ctx.error = error_code::unexpected_end;
 3353|       |                           return;
 3354|       |                        }
 3355|       |                     }
 3356|       |
 3357|       |                     if (key == tag.sv()) {
 3358|       |                        if (parse_ws_colon<Opts>(ctx, it, end)) {
 3359|       |                           return;
 3360|       |                        }
 3361|       |
 3362|       |                        parse<JSON>::handle_unknown<Opts>(key, value, ctx, it, end);
 3363|       |                        if (bool(ctx.error)) [[unlikely]]
 3364|       |                           return;
 3365|       |
 3366|       |                        if (skip_ws<Opts>(ctx, it, end)) {
 3367|       |                           return;
 3368|       |                        }
 3369|       |                        continue;
 3370|       |                     }
 3371|       |                     else {
 3372|       |                        it = start; // reset the iterator
 3373|       |                     }
 3374|       |                  }
 3375|       |
 3376|       |                  if constexpr (Opts.error_on_missing_keys || Opts.partial_read) {
 3377|       |                     size_t index = num_members;
 3378|       |                     parse_and_invoke<Opts, T>(value, ctx, it, end, index);
 3379|       |                     if (bool(ctx.error)) [[unlikely]]
 3380|       |                        return;
 3381|       |                     if (index < num_members) {
 3382|       |                        fields[index] = true;
 3383|       |                     }
 3384|       |                  }
 3385|       |                  else {
 3386|       |                     parse_and_invoke<Opts, T>(value, ctx, it, end);
 3387|       |                     if (bool(ctx.error)) [[unlikely]]
 3388|       |                        return;
 3389|       |                  }
 3390|       |               }
 3391|  44.9k|               else {
 3392|       |                  // For types like std::map, std::unordered_map
 3393|       |
 3394|  44.9k|                  auto reading = [&](auto&& key) {
 3395|  44.9k|                     if constexpr (Opts.partial_read) {
 3396|  44.9k|                        if (auto element = value.find(key); element != value.end()) {
 3397|  44.9k|                           ++read_count;
 3398|  44.9k|                           parse<JSON>::op<ws_handled<Opts>()>(element->second, ctx, it, end);
 3399|  44.9k|                        }
 3400|  44.9k|                        else {
 3401|  44.9k|                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3402|  44.9k|                        }
 3403|  44.9k|                     }
 3404|  44.9k|                     else {
 3405|  44.9k|                        parse<JSON>::op<ws_handled<Opts>()>(value[key], ctx, it, end);
 3406|  44.9k|                     }
 3407|  44.9k|                  };
 3408|       |
 3409|       |                  // using Key = std::conditional_t<heterogeneous_map<T>, sv, typename T::key_type>;
 3410|  44.9k|                  using Key = typename T::key_type;
 3411|  44.9k|                  if constexpr (std::is_same_v<Key, std::string>) {
 3412|  44.9k|                     ctx.scratch.clear();
 3413|  44.9k|                     parse<JSON>::op<Opts>(ctx.scratch, ctx, it, end);
 3414|  44.9k|                     if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (3414:26): [True: 1.17k, False: 43.7k]
  ------------------
 3415|  1.17k|                        return;
 3416|       |
 3417|  43.7k|                     if (parse_ws_colon<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3417:26): [True: 613, False: 43.1k]
  ------------------
 3418|    613|                        return;
 3419|    613|                     }
 3420|       |
 3421|  43.1k|                     reading(ctx.scratch);
 3422|       |                     if constexpr (Opts.partial_read) {
 3423|       |                        if (read_count == value.size()) {
 3424|       |                           return;
 3425|       |                        }
 3426|       |                     }
 3427|  43.1k|                     if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (3427:26): [True: 6.29k, False: 36.8k]
  ------------------
 3428|  6.29k|                        return;
 3429|       |                  }
 3430|       |                  else if constexpr (str_t<Key>) {
 3431|       |                     Key key;
 3432|       |                     parse<JSON>::op<Opts>(key, ctx, it, end);
 3433|       |                     if (bool(ctx.error)) [[unlikely]]
 3434|       |                        return;
 3435|       |
 3436|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3437|       |                        return;
 3438|       |                     }
 3439|       |
 3440|       |                     reading(key);
 3441|       |                     if constexpr (Opts.partial_read) {
 3442|       |                        if (read_count == value.size()) {
 3443|       |                           return;
 3444|       |                        }
 3445|       |                     }
 3446|       |                     if (bool(ctx.error)) [[unlikely]]
 3447|       |                        return;
 3448|       |                  }
 3449|       |                  else {
 3450|       |                     Key key_value{};
 3451|       |                     if constexpr (is_named_enum<Key> || mimics_str_t<Key>) {
 3452|       |                        parse<JSON>::op<Opts>(key_value, ctx, it, end);
 3453|       |                     }
 3454|       |                     else if constexpr (std::is_arithmetic_v<Key>) {
 3455|       |                        // prefer over quoted_t below to avoid double parsing of quoted_t
 3456|       |                        parse<JSON>::op<opt_true<Opts, quoted_num_opt_tag{}>>(key_value, ctx, it, end);
 3457|       |                     }
 3458|       |                     else {
 3459|       |                        parse<JSON>::op<opt_false<Opts, raw_string_opt_tag{}>>(quoted_t<Key>{key_value}, ctx, it, end);
 3460|       |                     }
 3461|       |                     if (bool(ctx.error)) [[unlikely]]
 3462|       |                        return;
 3463|       |
 3464|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 3465|       |                        return;
 3466|       |                     }
 3467|       |
 3468|       |                     reading(key_value);
 3469|       |                     if constexpr (Opts.partial_read) {
 3470|       |                        if (read_count == value.size()) {
 3471|       |                           return;
 3472|       |                        }
 3473|       |                     }
 3474|       |                     if (bool(ctx.error)) [[unlikely]]
 3475|       |                        return;
 3476|       |                  }
 3477|  44.9k|               }
 3478|       |
 3479|       |               // Streaming refill point: after parsing each key-value pair, refill if buffer is low
 3480|       |               if constexpr (has_streaming_state<decltype(ctx)>) {
 3481|       |                  if (ctx.stream.enabled()) {
 3482|       |                     const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 3483|       |                     // Refill when less than 25% of buffer remains to ensure enough space for next element
 3484|       |                     if (ctx.stream.size() - consumed <= ctx.stream.size() / 4 || it >= end) {
 3485|       |                        const char* new_it;
 3486|       |                        const char* new_end;
 3487|       |                        ctx.stream.consume_and_refill(consumed, new_it, new_end);
 3488|       |                        it = new_it;
 3489|       |                        end = new_end;
 3490|       |                        if (it >= end && ctx.stream.at_eof()) {
 3491|       |                           ctx.error = error_code::unexpected_end;
 3492|       |                           return;
 3493|       |                        }
 3494|       |                     }
 3495|       |                  }
 3496|       |               }
 3497|       |
 3498|  44.9k|               if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (3498:20): [True: 45, False: 44.8k]
  ------------------
 3499|     45|                  return;
 3500|     45|               }
 3501|  44.9k|            }
 3502|  14.0k|         }
 3503|  14.0k|      }
_ZZN3glz4fromILj10ENSt3__13mapINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEiNS1_4lessIS8_EENS6_INS1_4pairIKS8_iEEEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnNS_14string_literalEXtlNSJ_ILm1EEEEERSF_TkNS_10is_contextERNS_7contextERPKcSP_EEvOT1_OT2_OT3_T4_ENKUlvE_clEv:
 3148|  8.61k|            decltype(auto) fields = [&]() -> decltype(auto) {
 3149|       |               if constexpr ((glaze_object_t<T> || reflectable<T>) &&
 3150|       |                             (Opts.error_on_missing_keys || Opts.partial_read)) {
 3151|       |                  return bit_array<num_members>{};
 3152|       |               }
 3153|  8.61k|               else {
 3154|  8.61k|                  return nullptr;
 3155|  8.61k|               }
 3156|  8.61k|            }();
_ZZN3glz4fromILj10ENSt3__13mapINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEiNS1_4lessIS8_EENS6_INS1_4pairIKS8_iEEEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETnNS_14string_literalEXtlNSJ_ILm1EEEEERSF_TkNS_10is_contextERNS_7contextERPKcSP_EEvOT1_OT2_OT3_T4_ENKUlOT_E_clIRS8_EEDaSZ_:
 3394|  43.1k|                  auto reading = [&](auto&& key) {
 3395|       |                     if constexpr (Opts.partial_read) {
 3396|       |                        if (auto element = value.find(key); element != value.end()) {
 3397|       |                           ++read_count;
 3398|       |                           parse<JSON>::op<ws_handled<Opts>()>(element->second, ctx, it, end);
 3399|       |                        }
 3400|       |                        else {
 3401|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 3402|       |                        }
 3403|       |                     }
 3404|  43.1k|                     else {
 3405|  43.1k|                        parse<JSON>::op<ws_handled<Opts>()>(value[key], ctx, it, end);
 3406|  43.1k|                     }
 3407|  43.1k|                  };
_ZN3glz5parseILj10EE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__18optionalIdEETkNS_10is_contextERNS_7contextERPKcSB_EEvOT0_OT1_OT2_T3_:
   49|  13.7k|      {
   50|       |         if constexpr (const_value_v<T>) {
   51|       |            if constexpr (check_error_on_const_read(Opts)) {
   52|       |               ctx.error = error_code::attempt_const_read;
   53|       |            }
   54|       |            else {
   55|       |               // do not read anything into the const value
   56|       |               skip_value<JSON>::op<Opts>(std::forward<Ctx>(ctx), std::forward<It0>(it), end);
   57|       |            }
   58|       |         }
   59|  13.7k|         else {
   60|  13.7k|            using V = std::remove_cvref_t<T>;
   61|  13.7k|            from<JSON, V>::template op<Opts>(std::forward<T>(value), std::forward<Ctx>(ctx), std::forward<It0>(it),
   62|  13.7k|                                             end);
   63|  13.7k|         }
   64|  13.7k|      }
_ZN3glz4fromILj10ENSt3__18optionalIdEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS3_TkNS_10is_contextERNS_7contextERPKcSB_EEvOT0_OT1_OT2_T3_:
 5088|  13.7k|      {
 5089|  13.7k|         constexpr auto Opts = ws_handled_off<Options>();
 5090|  13.7k|         if constexpr (!check_ws_handled(Options)) {
 5091|  13.7k|            if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (5091:17): [True: 40, False: 13.7k]
  ------------------
 5092|     40|               return;
 5093|     40|            }
 5094|  13.7k|         }
 5095|       |
 5096|  13.7k|         if (*it == 'n') {
  ------------------
  |  Branch (5096:14): [True: 35, False: 13.7k]
  ------------------
 5097|     35|            ++it;
 5098|     35|            if constexpr (not Opts.null_terminated) {
 5099|     35|               if (it == end) [[unlikely]] {
  ------------------
  |  Branch (5099:20): [True: 3, False: 32]
  ------------------
 5100|      3|                  ctx.error = error_code::unexpected_end;
 5101|      3|                  return;
 5102|      3|               }
 5103|     35|            }
 5104|     32|            match<"ull", Opts>(ctx, it, end);
 5105|     35|            if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (5105:17): [True: 29, False: 6]
  ------------------
 5106|     29|               return;
 5107|      6|            if constexpr (requires { value.reset(); }) {
 5108|      6|               value.reset();
 5109|      6|            }
 5110|      6|         }
 5111|  13.7k|         else {
 5112|  13.7k|            if constexpr (nullable_value_t<T>) {
 5113|  13.7k|               if (not value.has_value()) {
  ------------------
  |  Branch (5113:20): [True: 13.7k, False: 40]
  ------------------
 5114|       |                  if constexpr (constructible<T>) {
 5115|       |                     value = meta_construct_v<T>();
 5116|       |                  }
 5117|  13.7k|                  else if constexpr (requires { value.emplace(); }) {
 5118|  13.7k|                     value.emplace();
 5119|       |                  }
 5120|       |                  else {
 5121|       |                     static_assert(false_v<T>,
 5122|       |                                   "Your nullable type must have `emplace()` or be glz::meta constructible, or "
 5123|       |                                   "create a custom glz::from specialization");
 5124|       |                  }
 5125|  13.7k|               }
 5126|  13.7k|               parse<JSON>::op<Opts>(value.value(), ctx, it, end);
 5127|       |            }
 5128|       |            else {
 5129|       |               if (!value) {
 5130|       |                  if (!nullable_emplace<Opts>(value, ctx)) {
 5131|       |                     return;
 5132|       |                  }
 5133|       |               }
 5134|       |               parse<JSON>::op<Opts>(*value, ctx, it, end);
 5135|       |            }
 5136|  13.7k|         }
 5137|  13.7k|      }
_ZN3glz5parseILj10EE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__17variantIJNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN9repe_fuzz6amountEEEETkNS_10is_contextERNS_7contextERPKcSJ_EEvOT0_OT1_OT2_T3_:
   49|  13.8k|      {
   50|       |         if constexpr (const_value_v<T>) {
   51|       |            if constexpr (check_error_on_const_read(Opts)) {
   52|       |               ctx.error = error_code::attempt_const_read;
   53|       |            }
   54|       |            else {
   55|       |               // do not read anything into the const value
   56|       |               skip_value<JSON>::op<Opts>(std::forward<Ctx>(ctx), std::forward<It0>(it), end);
   57|       |            }
   58|       |         }
   59|  13.8k|         else {
   60|  13.8k|            using V = std::remove_cvref_t<T>;
   61|  13.8k|            from<JSON, V>::template op<Opts>(std::forward<T>(value), std::forward<Ctx>(ctx), std::forward<It0>(it),
   62|  13.8k|                                             end);
   63|  13.8k|         }
   64|  13.8k|      }
_ZN3glz4fromILj10ENSt3__17variantIJNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEN9repe_fuzz6amountEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERSB_TkNS_10is_contextERNS_7contextERPKcSJ_EEvOT0_OT1_OT2_T3_:
 4065|  13.8k|      {
 4066|       |         if constexpr (tagging == variant_tagging_kind::adjacent) {
 4067|       |            read_adjacent<Options>(value, ctx, it, end);
 4068|       |         }
 4069|  13.8k|         else {
 4070|  13.8k|            read_deduced<Options>(value, ctx, it, end);
 4071|  13.8k|         }
 4072|  13.8k|      }
_ZN3glz4fromILj10ENSt3__17variantIJNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEN9repe_fuzz6amountEEEEE12read_deducedITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERSB_TkNS_10is_contextERNS_7contextERPKcSJ_EEvOT0_OT1_OT2_T3_:
 4076|  13.8k|      {
 4077|  13.8k|         constexpr auto Opts = ws_handled_off<Options>();
 4078|  13.8k|         if constexpr (variant_is_auto_deducible<T>()) {
 4079|  13.8k|            if constexpr (not check_ws_handled(Options)) {
 4080|  13.8k|               if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (4080:20): [True: 40, False: 13.7k]
  ------------------
 4081|     40|                  return;
 4082|     40|               }
 4083|  13.8k|            }
 4084|       |
 4085|  13.7k|            switch (*it) {
 4086|    223|            case '\0':
  ------------------
  |  Branch (4086:13): [True: 223, False: 13.5k]
  ------------------
 4087|    223|               ctx.error = error_code::unexpected_end;
 4088|    223|               return;
 4089|  8.35k|            case '{': {
  ------------------
  |  Branch (4089:13): [True: 8.35k, False: 5.44k]
  ------------------
 4090|       |               // This branch consumes the brace itself and hands the object to a reader with
 4091|       |               // `opening_handled`, which therefore does not count the level -- but does release it at
 4092|       |               // the closing brace. So the level is taken here, in both buffer modes, and paid back by
 4093|       |               // the reader below.
 4094|  8.35k|               if (enter_depth(ctx)) [[unlikely]] {
  ------------------
  |  Branch (4094:20): [True: 0, False: 8.35k]
  ------------------
 4095|      0|                  return;
 4096|      0|               }
 4097|       |
 4098|  8.35k|               ++it;
 4099|  8.35k|               if constexpr (not Opts.null_terminated) {
 4100|  8.35k|                  if (it == end) [[unlikely]] {
  ------------------
  |  Branch (4100:23): [True: 9, False: 8.35k]
  ------------------
 4101|      9|                     ctx.error = error_code::unexpected_end;
 4102|      9|                     return;
 4103|      9|                  }
 4104|  8.35k|               }
 4105|  8.35k|               using type_counts = variant_type_count<T>;
 4106|  8.35k|               constexpr auto n_object_candidates = variant_object_candidate_count_v<Opts, T>;
 4107|       |               if constexpr (n_object_candidates < 1) {
 4108|       |                  ctx.error = error_code::no_matching_variant_type;
 4109|       |                  return;
 4110|       |               }
 4111|  8.35k|               else if constexpr (n_object_candidates == 1 && tag_v<T>.empty()) {
 4112|  8.35k|                  constexpr auto first_idx = variant_first_object_candidate_v<Opts, T>;
 4113|  8.35k|                  using V = std::variant_alternative_t<first_idx, T>;
 4114|  8.35k|                  if (!std::holds_alternative<V>(value)) value = V{};
  ------------------
  |  Branch (4114:23): [True: 8.35k, False: 9]
  ------------------
 4115|  8.35k|                  parse<JSON>::op<opening_handled<Opts>()>(std::get<V>(value), ctx, it, end);
 4116|  8.35k|                  return;
 4117|       |               }
 4118|       |               else {
 4119|       |                  auto possible_types = bit_array<std::variant_size_v<T>>{}.flip();
 4120|       |                  static constexpr auto& deduction_bits = variant_deduction_bits<T>;
 4121|       |                  static constexpr size_t deduction_key_count = variant_deduction_key_count<T>;
 4122|       |                  static constexpr auto tag_literal = string_literal_from_view<tag_v<T>.size()>(tag_v<T>);
 4123|       |
 4124|       |                  // Track if we've encountered a tag and what value it had
 4125|       |                  std::optional<size_t> tag_specified_index{};
 4126|       |
 4127|       |                  if (skip_ws<Opts>(ctx, it, end)) {
 4128|       |                     return;
 4129|       |                  }
 4130|       |                  // Once the reader knows which alternative this object holds it may have to read
 4131|       |                  // it again from here. Anchor the position rather than keep the pointer: the scan
 4132|       |                  // below skips values, and a streaming skip refills, which moves the window out
 4133|       |                  // from under a raw pointer (see rewind_anchor).
 4134|       |                  auto start = make_rewind_anchor(ctx, it);
 4135|       |                  bool first_key = true;
 4136|       |                  // Parse bifurcation for tagged variants:
 4137|       |                  //
 4138|       |                  // Without this optimization, tagged variant parsing always uses two passes:
 4139|       |                  //   1. Scan all keys to find the tag (e.g. "type"), skipping values
 4140|       |                  //   2. Reset `it = start` and re-parse the entire object into the resolved type
 4141|       |                  //
 4142|       |                  // When the tag is the first key, the second pass redundantly re-reads every
 4143|       |                  // field that follows it. This lambda avoids that: if the tag was the first key,
 4144|       |                  // it advances past the trailing comma so the object parser picks up at the
 4145|       |                  // second field. If the tag was found later, it falls back to the full re-parse.
 4146|       |                  //
 4147|       |                  // One exception: if the tag name is also a field on the resolved struct
 4148|       |                  // (contains_tag), we must re-parse regardless so the value is stored in
 4149|       |                  // the struct field. This override is applied inside each std::visit lambda.
 4150|       |                  //
 4151|       |                  // Either way the rewind can fail under a streaming read: the window only holds so
 4152|       |                  // much, and an object wider than it has no start left to return to.
 4153|       |                  auto position_after_tag = [&] {
 4154|       |                     if (first_key) {
 4155|       |                        if (*it == ',') ++it; // skip comma; handles tag-only objects where *it == '}'
 4156|       |                        return true;
 4157|       |                     }
 4158|       |                     return start.rewind(ctx, it, end); // tag came later, re-parse from the beginning
 4159|       |                  };
 4160|       |                  // `first_key` also answers "were we reset to the object start", which is what
 4161|       |                  // position_after_tag does for every key but the first.
 4162|       |                  for (; *it != '}'; first_key = false) {
 4163|       |                     if (!first_key) {
 4164|       |                        if (match_invalid_end<',', Opts>(ctx, it, end)) {
 4165|       |                           return;
 4166|       |                        }
 4167|       |                     }
 4168|       |
 4169|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 4170|       |                        return;
 4171|       |                     }
 4172|       |                     if (match_invalid_end<'"', Opts>(ctx, it, end)) {
 4173|       |                        return;
 4174|       |                     }
 4175|       |
 4176|       |                     auto* key_start = it;
 4177|       |                     skip_string_view(ctx, it, end);
 4178|       |                     if (bool(ctx.error)) [[unlikely]]
 4179|       |                        return;
 4180|       |                     if (validate_utf8_span<Opts>(ctx, key_start, it)) [[unlikely]]
 4181|       |                        return;
 4182|       |                     const sv key = {key_start, size_t(it - key_start)};
 4183|       |
 4184|       |                     if (match_invalid_end<'"', Opts>(ctx, it, end)) {
 4185|       |                        return;
 4186|       |                     }
 4187|       |
 4188|       |                     if constexpr (deduction_key_count > 0) {
 4189|       |                        // We first check if a tag is defined and see if the key matches the tag
 4190|       |                        if constexpr (not tag_v<T>.empty()) {
 4191|       |                           if (key == tag_v<T>) {
 4192|       |                              if (parse_ws_colon<Opts>(ctx, it, end)) {
 4193|       |                                 return;
 4194|       |                              }
 4195|       |
 4196|       |                              using id_type = std::decay_t<decltype(ids_v<T>[0])>;
 4197|       |
 4198|       |                              std::conditional_t<std::integral<id_type>, id_type, sv> type_id{};
 4199|       |                              if constexpr (std::integral<id_type>) {
 4200|       |                                 from<JSON, id_type>::template op<ws_handled<Opts>()>(type_id, ctx, it, end);
 4201|       |                              }
 4202|       |                              else {
 4203|       |                                 // The id is turned into an index below and never leaves this
 4204|       |                                 // reader, so the view of the window it borrows cannot outlive it.
 4205|       |                                 parse_transient_string_view<ws_handled<Opts>()>(type_id, ctx, it, end);
 4206|       |                              }
 4207|       |                              if (bool(ctx.error)) [[unlikely]]
 4208|       |                                 return;
 4209|       |                              if (skip_ws<Opts>(ctx, it, end)) {
 4210|       |                                 return;
 4211|       |                              }
 4212|       |                              if (!(*it == ',' || *it == '}')) [[unlikely]] {
 4213|       |                                 ctx.error = error_code::syntax_error;
 4214|       |                                 return;
 4215|       |                              }
 4216|       |
 4217|       |                              size_t type_index;
 4218|       |                              if constexpr (std::integral<id_type>) {
 4219|       |                                 type_index = variant_id_to_index<T>::op(type_id);
 4220|       |                              }
 4221|       |                              else {
 4222|       |                                 type_index = variant_id_to_index<T>::op(
 4223|       |                                    type_id.data(), type_id.data() + type_id.size(), type_id.size());
 4224|       |                              }
 4225|       |                              if (type_index < ids_v<T>.size()) [[likely]] {
 4226|       |                                 // Check if the deduced types include the tag-specified type
 4227|       |                                 // If not, the tag doesn't match the fields
 4228|       |                                 // We're already inside if constexpr (deduction_registry.size()), so we know deduction
 4229|       |                                 // is happening. At this point, possible_types has been narrowed by field deduction.
 4230|       |                                 // Check if the tag-specified type is still possible
 4231|       |                                 const bool type_is_possible = possible_types[type_index];
 4232|       |                                 if (!type_is_possible) {
 4233|       |                                    // Tag specifies a type that doesn't match the fields seen so far
 4234|       |                                    ctx.error = error_code::no_matching_variant_type;
 4235|       |                                    return;
 4236|       |                                 }
 4237|       |
 4238|       |                                 if (!position_after_tag()) return;
 4239|       |                                 tag_specified_index = type_index; // Store the tag-specified type
 4240|       |                                 if (value.index() != type_index) emplace_runtime_variant(value, type_index);
 4241|       |                                 std::visit(
 4242|       |                                    [&](auto&& v) {
 4243|       |                                       using V = std::decay_t<decltype(v)>;
 4244|       |                                       constexpr bool is_object =
 4245|       |                                          (glaze_object_t<V> || reflectable<V>) && not custom_read<V>;
 4246|       |                                       if constexpr (variant_unit_alternative<V>) {
 4247|       |                                          // A unit alternative carries no data; its object holds only the
 4248|       |                                          // discriminator. Consume that body through an empty reflected object so
 4249|       |                                          // unknown-key policy and terminator handling match every other alternative.
 4250|       |                                          detail::variant_unit_body unit_body{};
 4251|       |                                          from<JSON, detail::variant_unit_body>::template op<opening_handled<Opts>(),
 4252|       |                                                                                             tag_literal>(unit_body,
 4253|       |                                                                                                          ctx, it, end);
 4254|       |                                       }
 4255|       |                                       else if constexpr (is_object) {
 4256|       |                                          if constexpr (contains_tag<V, tag_literal>()) {
 4257|       |                                             // tag is a struct field, must re-parse
 4258|       |                                             if (!start.rewind(ctx, it, end)) return;
 4259|       |                                          }
 4260|       |                                          from<JSON, V>::template op<opening_handled<Opts>(), tag_literal>(v, ctx, it,
 4261|       |                                                                                                           end);
 4262|       |                                       }
 4263|       |                                       else if constexpr (is_memory_object<V>) {
 4264|       |                                          if (!v) {
 4265|       |                                             if constexpr (is_specialization_v<V, std::optional>) {
 4266|       |                                                if constexpr (requires { v.emplace(); }) {
 4267|       |                                                   v.emplace();
 4268|       |                                                }
 4269|       |                                                else {
 4270|       |                                                   v = typename V::value_type{};
 4271|       |                                                }
 4272|       |                                             }
 4273|       |                                             else if constexpr (is_specialization_v<V, std::unique_ptr>)
 4274|       |                                                v = std::make_unique<typename V::element_type>();
 4275|       |                                             else if constexpr (is_specialization_v<V, std::shared_ptr>)
 4276|       |                                                v = std::make_shared<typename V::element_type>();
 4277|       |                                             else if constexpr (constructible<V>) {
 4278|       |                                                v = meta_construct_v<V>();
 4279|       |                                             }
 4280|       |                                             else if constexpr (std::is_pointer_v<V> &&
 4281|       |                                                                can_allocate_raw_pointer<Opts,
 4282|       |                                                                                         std::decay_t<decltype(ctx)>>) {
 4283|       |                                                if (!try_allocate_raw_pointer<Opts>(v, ctx)) {
 4284|       |                                                   return;
 4285|       |                                                }
 4286|       |                                             }
 4287|       |                                             else {
 4288|       |                                                ctx.error = error_code::invalid_nullable_read;
 4289|       |                                                return;
 4290|       |                                                // Cannot read into unset nullable that is not std::optional,
 4291|       |                                                // std::unique_ptr, or std::shared_ptr
 4292|       |                                             }
 4293|       |                                          }
 4294|       |                                          if constexpr (contains_tag<memory_type<V>, tag_literal>()) {
 4295|       |                                             // tag is a struct field, must re-parse
 4296|       |                                             if (!start.rewind(ctx, it, end)) return;
 4297|       |                                          }
 4298|       |                                          from<JSON, memory_type<V>>::template op<opening_handled<Opts>(), tag_literal>(
 4299|       |                                             *v, ctx, it, end);
 4300|       |                                       }
 4301|       |                                       else if constexpr (custom_read<V>) {
 4302|       |                                          // Custom handlers parse the remaining body themselves and do not
 4303|       |                                          // accept the tag template parameter; the tag was already consumed.
 4304|       |                                          // This only works when the tag was the first key. If it came later,
 4305|       |                                          // we were reset to the object start and the custom handler would
 4306|       |                                          // absorb the tag, so error rather than corrupt the value.
 4307|       |                                          if (!first_key) {
 4308|       |                                             ctx.error = error_code::feature_not_supported;
 4309|       |                                             ctx.custom_error_message =
 4310|       |                                                "the tag must be the first key for a custom variant alternative";
 4311|       |                                             return;
 4312|       |                                          }
 4313|       |                                          from<JSON, V>::template op<opening_handled<Opts>()>(v, ctx, it, end);
 4314|       |                                       }
 4315|       |                                    },
 4316|       |                                    value);
 4317|       |
 4318|       |                                 return; // we've decoded our target type
 4319|       |                              }
 4320|       |                              else [[unlikely]] {
 4321|       |                                 // Check if we have a default type (ids array shorter than variant)
 4322|       |                                 constexpr auto ids_size = ids_v<T>.size();
 4323|       |                                 constexpr auto variant_size = std::variant_size_v<T>;
 4324|       |                                 if constexpr (ids_size < variant_size) {
 4325|       |                                    // Use the first unlabeled type as the default
 4326|       |                                    const auto default_type_index = ids_size;
 4327|       |
 4328|       |                                    if (!position_after_tag()) return;
 4329|       |                                    tag_specified_index = default_type_index; // Store the default type index
 4330|       |                                    if (value.index() != default_type_index)
 4331|       |                                       emplace_runtime_variant(value, default_type_index);
 4332|       |                                    std::visit(
 4333|       |                                       [&](auto&& v) {
 4334|       |                                          using V = std::decay_t<decltype(v)>;
 4335|       |                                          constexpr bool is_object =
 4336|       |                                             (glaze_object_t<V> || reflectable<V>) && not custom_read<V>;
 4337|       |                                          if constexpr (variant_unit_alternative<V>) {
 4338|       |                                             // A unit alternative carries no data; its object holds only the
 4339|       |                                             // discriminator. Consume that body through an empty reflected object so
 4340|       |                                             // unknown-key policy and terminator handling match every other
 4341|       |                                             // alternative.
 4342|       |                                             detail::variant_unit_body unit_body{};
 4343|       |                                             from<JSON, detail::variant_unit_body>::template op<opening_handled<Opts>(),
 4344|       |                                                                                                tag_literal>(
 4345|       |                                                unit_body, ctx, it, end);
 4346|       |                                          }
 4347|       |                                          else if constexpr (is_object) {
 4348|       |                                             if constexpr (contains_tag<V, tag_literal>()) {
 4349|       |                                                // tag is a struct field, must re-parse
 4350|       |                                                if (!start.rewind(ctx, it, end)) return;
 4351|       |                                             }
 4352|       |                                             from<JSON, V>::template op<opening_handled<Opts>()>(v, ctx, it, end);
 4353|       |                                          }
 4354|       |                                          else if constexpr (is_memory_object<V>) {
 4355|       |                                             if (!v) {
 4356|       |                                                if constexpr (is_specialization_v<V, std::optional>) {
 4357|       |                                                   if constexpr (requires { v.emplace(); }) {
 4358|       |                                                      v.emplace();
 4359|       |                                                   }
 4360|       |                                                   else {
 4361|       |                                                      v = typename V::value_type{};
 4362|       |                                                   }
 4363|       |                                                }
 4364|       |                                                else if constexpr (is_specialization_v<V, std::unique_ptr>)
 4365|       |                                                   v = std::make_unique<typename V::element_type>();
 4366|       |                                                else if constexpr (is_specialization_v<V, std::shared_ptr>)
 4367|       |                                                   v = std::make_shared<typename V::element_type>();
 4368|       |                                                else if constexpr (constructible<V>) {
 4369|       |                                                   v = meta_construct_v<V>();
 4370|       |                                                }
 4371|       |                                                else if constexpr (std::is_pointer_v<V> &&
 4372|       |                                                                   can_allocate_raw_pointer<
 4373|       |                                                                      Opts, std::decay_t<decltype(ctx)>>) {
 4374|       |                                                   if (!try_allocate_raw_pointer<Opts>(v, ctx)) {
 4375|       |                                                      return;
 4376|       |                                                   }
 4377|       |                                                }
 4378|       |                                                else {
 4379|       |                                                   ctx.error = error_code::invalid_nullable_read;
 4380|       |                                                   return;
 4381|       |                                                }
 4382|       |                                             }
 4383|       |                                             if constexpr (contains_tag<memory_type<V>, tag_literal>()) {
 4384|       |                                                // tag is a struct field, must re-parse
 4385|       |                                                if (!start.rewind(ctx, it, end)) return;
 4386|       |                                             }
 4387|       |                                             from<JSON, memory_type<V>>::template op<opening_handled<Opts>()>(*v, ctx,
 4388|       |                                                                                                              it, end);
 4389|       |                                          }
 4390|       |                                          else if constexpr (custom_read<V>) {
 4391|       |                                             // Custom handlers parse the remaining body themselves; this only
 4392|       |                                             // works when the tag was the first key (see above). If it came
 4393|       |                                             // later we were reset to the object start, so error rather than
 4394|       |                                             // let the custom handler absorb the tag.
 4395|       |                                             if (!first_key) {
 4396|       |                                                ctx.error = error_code::feature_not_supported;
 4397|       |                                                ctx.custom_error_message =
 4398|       |                                                   "the tag must be the first key for a custom variant alternative";
 4399|       |                                                return;
 4400|       |                                             }
 4401|       |                                             from<JSON, V>::template op<opening_handled<Opts>()>(v, ctx, it, end);
 4402|       |                                          }
 4403|       |                                       },
 4404|       |                                       value);
 4405|       |
 4406|       |                                    return;
 4407|       |                                 }
 4408|       |                                 else {
 4409|       |                                    ctx.error = error_code::no_matching_variant_type;
 4410|       |                                    ctx.custom_error_message = variant_ids_string_v<T>;
 4411|       |                                    return;
 4412|       |                                 }
 4413|       |                              }
 4414|       |                           }
 4415|       |                        }
 4416|       |
 4417|       |                        // Inline decode_hash lookup for variant deduction
 4418|       |                        using deduction_keys_t = keys_wrapper<variant_deduction_keys<T>>;
 4419|       |                        constexpr auto& DeductionHashInfo = hash_info<deduction_keys_t>;
 4420|       |                        const auto deduction_index =
 4421|       |                           decode_hash_with_size<JSON, deduction_keys_t, DeductionHashInfo, DeductionHashInfo.type>::op(
 4422|       |                              key.data(), key.data() + key.size(), key.size());
 4423|       |                        if (deduction_index < deduction_key_count && variant_deduction_keys<T>[deduction_index] == key)
 4424|       |                           [[likely]] {
 4425|       |                           possible_types &= deduction_bits[deduction_index];
 4426|       |                        }
 4427|       |                        else if constexpr (Opts.error_on_unknown_keys) {
 4428|       |                           ctx.error = error_code::unknown_key;
 4429|       |                           return;
 4430|       |                        }
 4431|       |                     }
 4432|       |                     else if constexpr (not tag_v<T>.empty()) {
 4433|       |                        // empty object case for variant, if there are no normal elements
 4434|       |                        if (key == tag_v<T>) {
 4435|       |                           if (parse_ws_colon<Opts>(ctx, it, end)) {
 4436|       |                              return;
 4437|       |                           }
 4438|       |
 4439|       |                           // The id is turned into an index below and never leaves this reader,
 4440|       |                           // so the view of the window it borrows cannot outlive that window.
 4441|       |                           std::string_view type_id{};
 4442|       |                           parse_transient_string_view<ws_handled<Opts>()>(type_id, ctx, it, end);
 4443|       |                           if (bool(ctx.error)) [[unlikely]]
 4444|       |                              return;
 4445|       |                           if (skip_ws<Opts>(ctx, it, end)) {
 4446|       |                              return;
 4447|       |                           }
 4448|       |
 4449|       |                           const auto type_index = variant_id_to_index<T>::op(
 4450|       |                              type_id.data(), type_id.data() + type_id.size(), type_id.size());
 4451|       |                           if (type_index < ids_v<T>.size()) [[likely]] {
 4452|       |                              if (!position_after_tag()) return;
 4453|       |                              tag_specified_index = type_index; // Store the tag-specified type
 4454|       |                              if (value.index() != type_index) emplace_runtime_variant(value, type_index);
 4455|       |                           }
 4456|       |                           else {
 4457|       |                              // Check if we have a default type (ids array shorter than variant)
 4458|       |                              constexpr auto ids_size = ids_v<T>.size();
 4459|       |                              constexpr auto variant_size = std::variant_size_v<T>;
 4460|       |                              if constexpr (ids_size < variant_size) {
 4461|       |                                 // Use the first unlabeled type as the default
 4462|       |                                 if (!position_after_tag()) return;
 4463|       |                                 const auto default_index = ids_size;
 4464|       |                                 tag_specified_index = default_index; // Store the default type index
 4465|       |                                 if (value.index() != default_index) emplace_runtime_variant(value, default_index);
 4466|       |                              }
 4467|       |                              else {
 4468|       |                                 ctx.error = error_code::no_matching_variant_type;
 4469|       |                                 ctx.custom_error_message = variant_ids_string_v<T>;
 4470|       |                                 return;
 4471|       |                              }
 4472|       |                           }
 4473|       |                           // Parse the type (handles tag skipping and unknown keys)
 4474|       |                           std::visit(
 4475|       |                              [&](auto&& v) {
 4476|       |                                 using V = std::decay_t<decltype(v)>;
 4477|       |                                 if constexpr (custom_read<V>) {
 4478|       |                                    // Custom handlers parse the remaining object body themselves and do not
 4479|       |                                    // accept the tag template parameter that reflected objects use to skip an
 4480|       |                                    // interior tag key. That only works when the tag is the first key (it was
 4481|       |                                    // just consumed). If the tag came after other keys, position_after_tag()
 4482|       |                                    // reset us to the object start and the custom handler would absorb the tag
 4483|       |                                    // into its value, so error here rather than corrupt the result.
 4484|       |                                    if (!first_key) {
 4485|       |                                       ctx.error = error_code::feature_not_supported;
 4486|       |                                       ctx.custom_error_message =
 4487|       |                                          "the tag must be the first key for a custom variant alternative";
 4488|       |                                       return;
 4489|       |                                    }
 4490|       |                                    from<JSON, V>::template op<opening_handled<Opts>()>(v, ctx, it, end);
 4491|       |                                 }
 4492|       |                                 else {
 4493|       |                                    if constexpr (contains_tag<V, tag_literal>()) {
 4494|       |                                       // tag is a struct field, must re-parse
 4495|       |                                       if (!start.rewind(ctx, it, end)) return;
 4496|       |                                    }
 4497|       |                                    from<JSON, V>::template op<opening_handled<Opts>(), tag_literal>(v, ctx, it, end);
 4498|       |                                 }
 4499|       |                              },
 4500|       |                              value);
 4501|       |                           return;
 4502|       |                        }
 4503|       |                        else if constexpr (Opts.error_on_unknown_keys) {
 4504|       |                           ctx.error = error_code::unknown_key;
 4505|       |                           return;
 4506|       |                        }
 4507|       |                        else {
 4508|       |                           // Skip unknown key's value (non-tag key in empty variant)
 4509|       |                           if (parse_ws_colon<Opts>(ctx, it, end)) {
 4510|       |                              return;
 4511|       |                           }
 4512|       |                           skip_value<JSON>::op<Opts>(ctx, it, end);
 4513|       |                           if (bool(ctx.error)) [[unlikely]]
 4514|       |                              return;
 4515|       |                           resync_window_end(ctx, end); // a streaming skip refills
 4516|       |                           if (skip_ws<Opts>(ctx, it, end)) {
 4517|       |                              return;
 4518|       |                           }
 4519|       |                           continue; // Continue loop to find the tag
 4520|       |                        }
 4521|       |                     }
 4522|       |                     else if constexpr (Opts.error_on_unknown_keys) {
 4523|       |                        ctx.error = error_code::unknown_key;
 4524|       |                        return;
 4525|       |                     }
 4526|       |
 4527|       |                     auto matching_types = possible_types.popcount();
 4528|       |                     if (matching_types == 0) {
 4529|       |                        ctx.error = error_code::no_matching_variant_type;
 4530|       |                        return;
 4531|       |                     }
 4532|       |                     // Only short-circuit for variants without tags
 4533|       |                     else if constexpr (tag_v<T>.empty()) {
 4534|       |                        if (matching_types == 1) {
 4535|       |                           if (!start.rewind(ctx, it, end)) return;
 4536|       |                           const auto type_index = possible_types.countr_zero();
 4537|       |
 4538|       |                           if (value.index() != static_cast<size_t>(type_index))
 4539|       |                              emplace_runtime_variant(value, type_index);
 4540|       |                           std::visit(
 4541|       |                              [&](auto&& v) {
 4542|       |                                 using V = std::decay_t<decltype(v)>;
 4543|       |                                 constexpr bool is_object = (glaze_object_t<V> || reflectable<V>) && not custom_read<V>;
 4544|       |                                 if constexpr (variant_unit_alternative<V>) {
 4545|       |                                    // A unit alternative carries no data; its object holds only the discriminator.
 4546|       |                                    // Consume that body through an empty reflected object so unknown-key policy and
 4547|       |                                    // terminator handling match every other alternative.
 4548|       |                                    detail::variant_unit_body unit_body{};
 4549|       |                                    from<JSON, detail::variant_unit_body>::template op<opening_handled<Opts>(),
 4550|       |                                                                                       tag_literal>(unit_body, ctx, it,
 4551|       |                                                                                                    end);
 4552|       |                                 }
 4553|       |                                 else if constexpr (is_object) {
 4554|       |                                    from<JSON, V>::template op<opening_handled<Opts>(), tag_literal>(v, ctx, it, end);
 4555|       |                                 }
 4556|       |                                 else if constexpr (is_memory_object<V>) {
 4557|       |                                    if (!v) {
 4558|       |                                       if constexpr (is_specialization_v<V, std::optional>) {
 4559|       |                                          if constexpr (requires { v.emplace(); }) {
 4560|       |                                             v.emplace();
 4561|       |                                          }
 4562|       |                                          else {
 4563|       |                                             v = typename V::value_type{};
 4564|       |                                          }
 4565|       |                                       }
 4566|       |                                       else if constexpr (is_specialization_v<V, std::unique_ptr>)
 4567|       |                                          v = std::make_unique<typename V::element_type>();
 4568|       |                                       else if constexpr (is_specialization_v<V, std::shared_ptr>)
 4569|       |                                          v = std::make_shared<typename V::element_type>();
 4570|       |                                       else if constexpr (constructible<V>) {
 4571|       |                                          v = meta_construct_v<V>();
 4572|       |                                       }
 4573|       |                                       else if constexpr (std::is_pointer_v<V> &&
 4574|       |                                                          can_allocate_raw_pointer<Opts, std::decay_t<decltype(ctx)>>) {
 4575|       |                                          if (!try_allocate_raw_pointer<Opts>(v, ctx)) {
 4576|       |                                             return;
 4577|       |                                          }
 4578|       |                                       }
 4579|       |                                       else {
 4580|       |                                          ctx.error = error_code::invalid_nullable_read;
 4581|       |                                          return;
 4582|       |                                          // Cannot read into unset nullable that is not std::optional,
 4583|       |                                          // std::unique_ptr, or std::shared_ptr
 4584|       |                                       }
 4585|       |                                    }
 4586|       |                                    from<JSON, memory_type<V>>::template op<opening_handled<Opts>(), tag_literal>(
 4587|       |                                       *v, ctx, it, end);
 4588|       |                                 }
 4589|       |                                 else if constexpr (custom_read<V>) {
 4590|       |                                    // Custom handlers parse the remaining body themselves.
 4591|       |                                    from<JSON, V>::template op<opening_handled<Opts>()>(v, ctx, it, end);
 4592|       |                                 }
 4593|       |                              },
 4594|       |                              value);
 4595|       |
 4596|       |                           return; // we've decoded our target type
 4597|       |                        }
 4598|       |                     }
 4599|       |                     // For tagged variants, continue processing to validate tags
 4600|       |                     if (parse_ws_colon<Opts>(ctx, it, end)) {
 4601|       |                        return;
 4602|       |                     }
 4603|       |
 4604|       |                     skip_value<JSON>::op<Opts>(ctx, it, end);
 4605|       |                     if (bool(ctx.error)) [[unlikely]]
 4606|       |                        return;
 4607|       |                     resync_window_end(ctx, end); // a streaming skip refills
 4608|       |                     if (skip_ws<Opts>(ctx, it, end)) {
 4609|       |                        return;
 4610|       |                     }
 4611|       |                  }
 4612|       |                  // Only apply ambiguous variant resolution if we have multiple object types
 4613|       |                  if constexpr ((type_counts::n_object + type_counts::n_nullable_object) > 1) {
 4614|       |                     // After parsing all keys, check if we have multiple matching types
 4615|       |                     // If so, choose the one with the fewest fields
 4616|       |                     auto final_matching = possible_types.popcount();
 4617|       |                     if (final_matching == 0) {
 4618|       |                        ctx.error = error_code::no_matching_variant_type;
 4619|       |                     }
 4620|       |                     else if (final_matching == 1) {
 4621|       |                        // Single type remains after field deduction
 4622|       |                        const auto type_index = possible_types.countr_zero();
 4623|       |
 4624|       |                        // Validate against tag if one was specified
 4625|       |                        if (tag_specified_index.has_value() &&
 4626|       |                            tag_specified_index.value() != static_cast<size_t>(type_index)) {
 4627|       |                           ctx.error = error_code::no_matching_variant_type;
 4628|       |                           return;
 4629|       |                        }
 4630|       |
 4631|       |                        if (!start.rewind(ctx, it, end)) return;
 4632|       |                        if (value.index() != static_cast<size_t>(type_index))
 4633|       |                           emplace_runtime_variant(value, type_index);
 4634|       |                        std::visit(
 4635|       |                           [&](auto&& v) {
 4636|       |                              using V = std::decay_t<decltype(v)>;
 4637|       |                              constexpr bool is_object = (glaze_object_t<V> || reflectable<V>) && not custom_read<V>;
 4638|       |                              if constexpr (variant_unit_alternative<V>) {
 4639|       |                                 // A unit alternative carries no data; its object holds only the discriminator.
 4640|       |                                 // Consume that body through an empty reflected object so unknown-key policy and
 4641|       |                                 // terminator handling match every other alternative.
 4642|       |                                 detail::variant_unit_body unit_body{};
 4643|       |                                 from<JSON, detail::variant_unit_body>::template op<opening_handled<Opts>(),
 4644|       |                                                                                    tag_literal>(unit_body, ctx, it,
 4645|       |                                                                                                 end);
 4646|       |                              }
 4647|       |                              else if constexpr (is_object) {
 4648|       |                                 from<JSON, V>::template op<opening_handled<Opts>(), tag_literal>(v, ctx, it, end);
 4649|       |                              }
 4650|       |                              else if constexpr (is_memory_object<V>) {
 4651|       |                                 if (!v) {
 4652|       |                                    if constexpr (is_specialization_v<V, std::optional>) {
 4653|       |                                       if constexpr (requires { v.emplace(); }) {
 4654|       |                                          v.emplace();
 4655|       |                                       }
 4656|       |                                       else {
 4657|       |                                          v = typename V::value_type{};
 4658|       |                                       }
 4659|       |                                    }
 4660|       |                                    else if constexpr (is_specialization_v<V, std::unique_ptr>)
 4661|       |                                       v = std::make_unique<typename V::element_type>();
 4662|       |                                    else if constexpr (is_specialization_v<V, std::shared_ptr>)
 4663|       |                                       v = std::make_shared<typename V::element_type>();
 4664|       |                                    else if constexpr (constructible<V>) {
 4665|       |                                       v = meta_construct_v<V>();
 4666|       |                                    }
 4667|       |                                    else if constexpr (std::is_pointer_v<V> &&
 4668|       |                                                       can_allocate_raw_pointer<Opts, std::decay_t<decltype(ctx)>>) {
 4669|       |                                       if (!try_allocate_raw_pointer<Opts>(v, ctx)) {
 4670|       |                                          return;
 4671|       |                                       }
 4672|       |                                    }
 4673|       |                                    else {
 4674|       |                                       ctx.error = error_code::invalid_nullable_read;
 4675|       |                                       return;
 4676|       |                                    }
 4677|       |                                 }
 4678|       |                                 from<JSON, memory_type<V>>::template op<opening_handled<Opts>(), tag_literal>(*v, ctx,
 4679|       |                                                                                                               it, end);
 4680|       |                              }
 4681|       |                              else if constexpr (custom_read<V>) {
 4682|       |                                 // Custom handlers parse the remaining body themselves.
 4683|       |                                 from<JSON, V>::template op<opening_handled<Opts>()>(v, ctx, it, end);
 4684|       |                              }
 4685|       |                           },
 4686|       |                           value);
 4687|       |                     }
 4688|       |                     else if (final_matching > 1) {
 4689|       |                        constexpr auto N = std::variant_size_v<T>;
 4690|       |
 4691|       |                        // Compile-time array of field counts for each variant type
 4692|       |                        constexpr auto field_counts = []<size_t... I>(std::index_sequence<I...>) {
 4693|       |                           return std::array<size_t, N> {
 4694|       |                              ([]<size_t J = I>() -> size_t {
 4695|       |                                 using V = std::decay_t<std::variant_alternative_t<J, T>>;
 4696|       |                                 if constexpr (glaze_object_t<V> || reflectable<V>) {
 4697|       |                                    return reflect<V>::size;
 4698|       |                                 }
 4699|       |                                 else if constexpr (is_memory_object<V>) {
 4700|       |                                    using X = memory_type<V>;
 4701|       |                                    if constexpr (glaze_object_t<X> || reflectable<X>) {
 4702|       |                                       return reflect<X>::size;
 4703|       |                                    }
 4704|       |                                    else {
 4705|       |                                       return (std::numeric_limits<size_t>::max)();
 4706|       |                                    }
 4707|       |                                 }
 4708|       |                                 else {
 4709|       |                                    return (std::numeric_limits<size_t>::max)();
 4710|       |                                 }
 4711|       |                              }.template operator()<I>())...
 4712|       |                           };
 4713|       |                        }(std::make_index_sequence<N>{});
 4714|       |
 4715|       |                        // Find the type with minimum field count among the possible types
 4716|       |                        size_t min_fields = (std::numeric_limits<size_t>::max)();
 4717|       |                        size_t chosen_index = N; // Invalid index initially
 4718|       |
 4719|       |                        for (size_t i = 0; i < N; ++i) {
 4720|       |                           if (possible_types[i] && field_counts[i] < min_fields) {
 4721|       |                              min_fields = field_counts[i];
 4722|       |                              chosen_index = i;
 4723|       |                           }
 4724|       |                        }
 4725|       |
 4726|       |                        if (chosen_index < N) {
 4727|       |                           // Validate against tag if one was specified
 4728|       |                           if (tag_specified_index.has_value() && tag_specified_index.value() != chosen_index) {
 4729|       |                              ctx.error = error_code::no_matching_variant_type;
 4730|       |                              return;
 4731|       |                           }
 4732|       |
 4733|       |                           if (!start.rewind(ctx, it, end)) return;
 4734|       |                           if (value.index() != chosen_index) emplace_runtime_variant(value, chosen_index);
 4735|       |                           std::visit(
 4736|       |                              [&](auto&& v) {
 4737|       |                                 using V = std::decay_t<decltype(v)>;
 4738|       |                                 constexpr bool is_object = (glaze_object_t<V> || reflectable<V>) && not custom_read<V>;
 4739|       |                                 if constexpr (variant_unit_alternative<V>) {
 4740|       |                                    // A unit alternative carries no data; its object holds only the discriminator.
 4741|       |                                    // Consume that body through an empty reflected object so unknown-key policy and
 4742|       |                                    // terminator handling match every other alternative.
 4743|       |                                    detail::variant_unit_body unit_body{};
 4744|       |                                    from<JSON, detail::variant_unit_body>::template op<opening_handled<Opts>(),
 4745|       |                                                                                       tag_literal>(unit_body, ctx, it,
 4746|       |                                                                                                    end);
 4747|       |                                 }
 4748|       |                                 else if constexpr (is_object) {
 4749|       |                                    from<JSON, V>::template op<opening_handled<Opts>(), tag_literal>(v, ctx, it, end);
 4750|       |                                 }
 4751|       |                                 else if constexpr (is_memory_object<V>) {
 4752|       |                                    if (!v) {
 4753|       |                                       if constexpr (is_specialization_v<V, std::optional>) {
 4754|       |                                          if constexpr (requires { v.emplace(); }) {
 4755|       |                                             v.emplace();
 4756|       |                                          }
 4757|       |                                          else {
 4758|       |                                             v = typename V::value_type{};
 4759|       |                                          }
 4760|       |                                       }
 4761|       |                                       else if constexpr (is_specialization_v<V, std::unique_ptr>)
 4762|       |                                          v = std::make_unique<typename V::element_type>();
 4763|       |                                       else if constexpr (is_specialization_v<V, std::shared_ptr>)
 4764|       |                                          v = std::make_shared<typename V::element_type>();
 4765|       |                                       else if constexpr (constructible<V>) {
 4766|       |                                          v = meta_construct_v<V>();
 4767|       |                                       }
 4768|       |                                       else if constexpr (std::is_pointer_v<V> &&
 4769|       |                                                          can_allocate_raw_pointer<Opts, std::decay_t<decltype(ctx)>>) {
 4770|       |                                          if (!try_allocate_raw_pointer<Opts>(v, ctx)) {
 4771|       |                                             return;
 4772|       |                                          }
 4773|       |                                       }
 4774|       |                                       else {
 4775|       |                                          ctx.error = error_code::invalid_nullable_read;
 4776|       |                                          return;
 4777|       |                                       }
 4778|       |                                    }
 4779|       |                                    from<JSON, memory_type<V>>::template op<opening_handled<Opts>(), tag_literal>(
 4780|       |                                       *v, ctx, it, end);
 4781|       |                                 }
 4782|       |                                 else if constexpr (custom_read<V>) {
 4783|       |                                    // Custom handlers parse the remaining body themselves.
 4784|       |                                    from<JSON, V>::template op<opening_handled<Opts>()>(v, ctx, it, end);
 4785|       |                                 }
 4786|       |                              },
 4787|       |                              value);
 4788|       |                        }
 4789|       |                        else {
 4790|       |                           ctx.error = error_code::no_matching_variant_type;
 4791|       |                        }
 4792|       |                     }
 4793|       |                  }
 4794|       |                  else {
 4795|       |                     // For variants with 0 or 1 object types, use the original error handling
 4796|       |                     ctx.error = error_code::no_matching_variant_type;
 4797|       |                  }
 4798|       |               }
 4799|      0|               break;
 4800|  8.35k|            }
 4801|  1.94k|            case '[':
  ------------------
  |  Branch (4801:13): [True: 1.94k, False: 11.8k]
  ------------------
 4802|       |               // As with '{' above: the array reader each alternative goes through counts the level.
 4803|  1.94k|               process_variant_alternatives<T, is_variant_array>::template op<Opts>(value, ctx, it, end);
 4804|  1.94k|               break;
 4805|    971|            case '"': {
  ------------------
  |  Branch (4805:13): [True: 971, False: 12.8k]
  ------------------
 4806|    971|               process_variant_alternatives<T, is_variant_str>::template op<Opts>(value, ctx, it, end);
 4807|    971|               break;
 4808|  8.35k|            }
 4809|      4|            case 't':
  ------------------
  |  Branch (4809:13): [True: 4, False: 13.8k]
  ------------------
 4810|      7|            case 'f': {
  ------------------
  |  Branch (4810:13): [True: 3, False: 13.8k]
  ------------------
 4811|      7|               process_variant_alternatives<T, is_variant_bool>::template op<Opts>(value, ctx, it, end);
 4812|      7|               break;
 4813|      4|            }
 4814|     32|            case 'n':
  ------------------
  |  Branch (4814:13): [True: 32, False: 13.7k]
  ------------------
 4815|     32|               if constexpr (variant_count_v<T, is_variant_null> == 0) {
 4816|     32|                  ctx.error = error_code::no_matching_variant_type;
 4817|       |               }
 4818|       |               else {
 4819|       |                  constexpr auto first_idx = variant_first_index_v<T, is_variant_null>;
 4820|       |                  using V = std::variant_alternative_t<first_idx, T>;
 4821|       |                  if (!std::holds_alternative<V>(value)) value = V{};
 4822|       |                  match<"null", Opts>(ctx, it, end);
 4823|       |               }
 4824|     32|               break;
 4825|  2.22k|            default: {
  ------------------
  |  Branch (4825:13): [True: 2.22k, False: 11.5k]
  ------------------
 4826|       |               // Not bool, string, object, or array so must be number or null
 4827|  2.22k|               process_variant_alternatives<T, is_variant_num>::template op<Opts>(value, ctx, it, end);
 4828|  2.22k|            }
 4829|  13.8k|            }
 4830|       |         }
 4831|       |         else {
 4832|       |            // For non-auto-deducible variants, try each type until one succeeds
 4833|       |            constexpr auto N = std::variant_size_v<T>;
 4834|       |            bool parsed = false;
 4835|       |            bool exhausted = false; // speculation budget spent; see charge_speculation
 4836|       |
 4837|       |            for_each<N>([&]<size_t I>() {
 4838|       |               if (parsed || exhausted || variant_alternative_exhausted(ctx)) return;
 4839|       |
 4840|       |               auto copy_it = it;
 4841|       |               // A rejected alternative may have bailed out inside a container, which leaves its
 4842|       |               // nesting level counted (see enter_depth), so the depth rewinds with the iterator.
 4843|       |               const auto copy_depth = ctx.depth;
 4844|       |
 4845|       |               // Try parsing as this type
 4846|       |               if (value.index() != I) {
 4847|       |                  emplace_runtime_variant(value, I);
 4848|       |               }
 4849|       |
 4850|       |               std::visit([&](auto&& v) { parse<JSON>::op<Options>(v, ctx, it, end); }, value);
 4851|       |               if (bool(ctx.error) && !charge_speculation(ctx, size_t(it - copy_it))) {
 4852|       |                  exhausted = true; // only rejected attempts are charged; see charge_speculation
 4853|       |               }
 4854|       |
 4855|       |               if (!bool(ctx.error)) {
 4856|       |                  parsed = true;
 4857|       |               }
 4858|       |               else if constexpr (not Options.null_terminated) {
 4859|       |                  // In non-null-terminated mode, if we hit end_reached after advancing the iterator,
 4860|       |                  // it means we successfully parsed the value but couldn't skip trailing whitespace
 4861|       |                  if (ctx.error == error_code::end_reached && it > copy_it && not speculation_exhausted(ctx)) {
 4862|       |                     // We advanced the iterator, so we did parse something -- unless what advanced it
 4863|       |                     // was an abandoned attempt, which is what a spent speculation budget means.
 4864|       |                     parsed = true;
 4865|       |                     ctx.error = error_code::none;
 4866|       |                  }
 4867|       |                  else {
 4868|       |                     // Reset for next attempt (unless this is the last type)
 4869|       |                     it = copy_it;
 4870|       |                     rewind_depth<Options>(ctx, copy_depth);
 4871|       |                     if constexpr (I + 1 < N) {
 4872|       |                        if (not exhausted && not variant_alternative_exhausted(ctx)) {
 4873|       |                           ctx.error = error_code::none; // Clear error for next attempt
 4874|       |                        }
 4875|       |                     }
 4876|       |                  }
 4877|       |               }
 4878|       |               else {
 4879|       |                  // Reset for next attempt (unless this is the last type)
 4880|       |                  it = copy_it;
 4881|       |                  rewind_depth<Options>(ctx, copy_depth);
 4882|       |                  if constexpr (I + 1 < N) {
 4883|       |                     if (not exhausted && not variant_alternative_exhausted(ctx)) {
 4884|       |                        ctx.error = error_code::none; // Clear error for next attempt
 4885|       |                     }
 4886|       |                  }
 4887|       |               }
 4888|       |            });
 4889|       |         }
 4890|  13.8k|      }
_ZN3glz5parseILj10EE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__16vectorIdNS4_9allocatorIdEEEETkNS_10is_contextERNS_7contextERPKcSD_EEvOT0_OT1_OT2_T3_:
   49|  13.8k|      {
   50|       |         if constexpr (const_value_v<T>) {
   51|       |            if constexpr (check_error_on_const_read(Opts)) {
   52|       |               ctx.error = error_code::attempt_const_read;
   53|       |            }
   54|       |            else {
   55|       |               // do not read anything into the const value
   56|       |               skip_value<JSON>::op<Opts>(std::forward<Ctx>(ctx), std::forward<It0>(it), end);
   57|       |            }
   58|       |         }
   59|  13.8k|         else {
   60|  13.8k|            using V = std::remove_cvref_t<T>;
   61|  13.8k|            from<JSON, V>::template op<Opts>(std::forward<T>(value), std::forward<Ctx>(ctx), std::forward<It0>(it),
   62|  13.8k|                                             end);
   63|  13.8k|         }
   64|  13.8k|      }
_ZN3glz4fromILj10ENSt3__16vectorIdNS1_9allocatorIdEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS5_TkNS_10is_contextERNS_7contextERPKcSD_EEvOT0_OT1_OT2_T3_:
 2308|  13.8k|      {
 2309|  13.8k|         constexpr auto Opts = ws_handled_off<Options>();
 2310|  13.8k|         if constexpr (!check_ws_handled(Options)) {
 2311|  13.8k|            if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2311:17): [True: 40, False: 13.7k]
  ------------------
 2312|     40|               return;
 2313|     40|            }
 2314|  13.8k|         }
 2315|       |
 2316|  13.8k|         if (match_invalid_end<'[', Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2316:14): [True: 11.8k, False: 1.99k]
  ------------------
 2317|  11.8k|            return;
 2318|  11.8k|         }
 2319|       |         // one nesting level (see enter_depth): counted in both modes so the limit binds,
 2320|       |         // released at each syntactic close below
 2321|  1.99k|         if (enter_depth(ctx)) [[unlikely]] {
  ------------------
  |  Branch (2321:14): [True: 0, False: 1.99k]
  ------------------
 2322|      0|            return;
 2323|      0|         }
 2324|       |
 2325|  1.99k|         const auto ws_start = it;
 2326|  1.99k|         if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2326:14): [True: 16, False: 1.97k]
  ------------------
 2327|     16|            return;
 2328|     16|         }
 2329|       |
 2330|  1.97k|         if (*it == ']') {
  ------------------
  |  Branch (2330:14): [True: 8, False: 1.97k]
  ------------------
 2331|      8|            --ctx.depth;
 2332|      8|            ++it;
 2333|      8|            if constexpr ((resizable<T> || is_inplace_vector<T>) && not check_append_arrays(Opts)) {
 2334|      8|               value.clear();
 2335|       |
 2336|       |               if constexpr (check_shrink_to_fit(Opts) && has_shrink_to_fit<T>) {
 2337|       |                  value.shrink_to_fit();
 2338|       |               }
 2339|      8|            }
 2340|      8|            return;
 2341|      8|         }
 2342|       |
 2343|  1.97k|         const size_t ws_size = size_t(it - ws_start);
 2344|       |
 2345|  1.97k|         static constexpr bool should_append = (resizable<T> || is_inplace_vector<T>) && check_append_arrays(Opts);
  ------------------
  |  Branch (2345:49): [True: 1.97k, Folded]
  |  Branch (2345:65): [Folded, False: 0]
  |  Branch (2345:90): [Folded, False: 0]
  ------------------
 2346|  1.97k|         if constexpr (not should_append) {
 2347|  1.97k|            const auto n = value.size();
 2348|       |
 2349|  1.97k|            auto value_it = value.begin();
 2350|       |
 2351|  1.97k|            for (size_t i = 0; i < n; ++i) {
  ------------------
  |  Branch (2351:32): [True: 0, False: 1.97k]
  ------------------
 2352|      0|               parse<JSON>::op<ws_handled<Opts>()>(*value_it++, ctx, it, end);
 2353|      0|               if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (2353:20): [True: 0, False: 0]
  ------------------
 2354|      0|                  return;
 2355|      0|               if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2355:20): [True: 0, False: 0]
  ------------------
 2356|      0|                  return;
 2357|      0|               }
 2358|      0|               if (*it == ',') {
  ------------------
  |  Branch (2358:20): [True: 0, False: 0]
  ------------------
 2359|      0|                  ++it;
 2360|       |
 2361|      0|                  if constexpr (!Opts.minified && !Opts.comments) {
 2362|      0|                     if (ws_size && ws_size < size_t(end - it)) {
  ------------------
  |  Branch (2362:26): [True: 0, False: 0]
  |  Branch (2362:37): [True: 0, False: 0]
  ------------------
 2363|      0|                        skip_matching_ws(ws_start, it, ws_size);
 2364|      0|                     }
 2365|      0|                  }
 2366|       |
 2367|      0|                  if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2367:23): [True: 0, False: 0]
  ------------------
 2368|      0|                     return;
 2369|      0|                  }
 2370|      0|               }
 2371|      0|               else if (*it == ']') {
  ------------------
  |  Branch (2371:25): [True: 0, False: 0]
  ------------------
 2372|      0|                  --ctx.depth;
 2373|      0|                  ++it;
 2374|      0|                  if constexpr (erasable<T>) {
 2375|      0|                     value.erase(value_it,
 2376|      0|                                 value.end()); // use erase rather than resize for non-default constructible elements
 2377|       |
 2378|       |                     if constexpr (check_shrink_to_fit(Opts) && has_shrink_to_fit<T>) {
 2379|       |                        value.shrink_to_fit();
 2380|       |                     }
 2381|      0|                  }
 2382|      0|                  return;
 2383|      0|               }
 2384|      0|               else [[unlikely]] {
 2385|      0|                  ctx.error = error_code::expected_bracket;
 2386|      0|                  return;
 2387|      0|               }
 2388|      0|            }
 2389|  1.97k|         }
 2390|       |
 2391|       |         if constexpr (Opts.partial_read) {
 2392|       |            // partial_read stops early on a success path, so give the level back like the
 2393|       |            // syntactic-close paths do; otherwise it accumulates across reads sharing a context.
 2394|       |            --ctx.depth;
 2395|       |            return;
 2396|       |         }
 2397|  1.97k|         else {
 2398|       |            // growing
 2399|  1.97k|            if constexpr (emplace_backable<T> || has_try_emplace_back<T>) {
 2400|   217k|               while (it < end) {
  ------------------
  |  Branch (2400:23): [True: 217k, False: 40]
  ------------------
 2401|       |                  // Streaming refill point: at start of each iteration, ensure buffer has data
 2402|       |                  if constexpr (has_streaming_state<decltype(ctx)>) {
 2403|       |                     if (ctx.stream.enabled()) {
 2404|       |                        const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 2405|       |                        const size_t remaining = ctx.stream.size() - consumed;
 2406|       |                        // Refill when less than half of buffer remains to ensure space for next element
 2407|       |                        if (remaining <= ctx.stream.size() / 2 || it >= end) {
 2408|       |                           const char* new_it;
 2409|       |                           const char* new_end;
 2410|       |                           ctx.stream.consume_and_refill(consumed, new_it, new_end);
 2411|       |                           it = new_it;
 2412|       |                           end = new_end;
 2413|       |                           if (it >= end && ctx.stream.at_eof()) {
 2414|       |                              break; // No more data, exit loop normally
 2415|       |                           }
 2416|       |                        }
 2417|       |                     }
 2418|       |                  }
 2419|       |
 2420|       |                  if constexpr (has_try_emplace_back<T>) {
 2421|       |                     if (value.try_emplace_back())
 2422|       |                        parse<JSON>::op<ws_handled<Opts>()>(value.back(), ctx, it, end);
 2423|       |                     else
 2424|       |                        ctx.error = error_code::exceeded_static_array_size;
 2425|       |                  }
 2426|   217k|                  else {
 2427|   217k|                     parse<JSON>::op<ws_handled<Opts>()>(value.emplace_back(), ctx, it, end);
 2428|   217k|                  }
 2429|       |
 2430|   217k|                  if (bool(ctx.error)) [[unlikely]]
  ------------------
  |  Branch (2430:23): [True: 966, False: 216k]
  ------------------
 2431|    966|                     return;
 2432|       |
 2433|       |                  // Streaming refill point: after parsing each element, refill if buffer is low
 2434|       |                  if constexpr (has_streaming_state<decltype(ctx)>) {
 2435|       |                     if (ctx.stream.enabled()) {
 2436|       |                        const size_t consumed = static_cast<size_t>(it - ctx.stream.data());
 2437|       |                        // Refill when less than 25% of buffer remains to ensure enough space for next element
 2438|       |                        if (ctx.stream.size() - consumed <= ctx.stream.size() / 4 || it >= end) {
 2439|       |                           const char* new_it;
 2440|       |                           const char* new_end;
 2441|       |                           ctx.stream.consume_and_refill(consumed, new_it, new_end);
 2442|       |                           it = new_it;
 2443|       |                           end = new_end;
 2444|       |                           if (it >= end && ctx.stream.at_eof()) {
 2445|       |                              ctx.error = error_code::unexpected_end;
 2446|       |                              return;
 2447|       |                           }
 2448|       |                        }
 2449|       |                     }
 2450|       |                  }
 2451|       |
 2452|   216k|                  if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2452:23): [True: 27, False: 216k]
  ------------------
 2453|     27|                     return;
 2454|     27|                  }
 2455|   216k|                  if (*it == ',') [[likely]] {
  ------------------
  |  Branch (2455:23): [True: 215k, False: 862]
  ------------------
 2456|   215k|                     ++it;
 2457|       |
 2458|   215k|                     if constexpr (!Opts.minified && !Opts.comments) {
 2459|   215k|                        if (ws_size && ws_size < size_t(end - it)) {
  ------------------
  |  Branch (2459:29): [True: 173k, False: 42.5k]
  |  Branch (2459:40): [True: 173k, False: 274]
  ------------------
 2460|   173k|                           skip_matching_ws(ws_start, it, ws_size);
 2461|   173k|                        }
 2462|   215k|                     }
 2463|       |
 2464|   215k|                     if (skip_ws<Opts>(ctx, it, end)) {
  ------------------
  |  Branch (2464:26): [True: 75, False: 215k]
  ------------------
 2465|     75|                        return;
 2466|     75|                     }
 2467|   215k|                  }
 2468|    862|                  else if (*it == ']') {
  ------------------
  |  Branch (2468:28): [True: 477, False: 385]
  ------------------
 2469|    477|                     --ctx.depth;
 2470|    477|                     ++it;
 2471|       |                     if constexpr (check_shrink_to_fit(Opts) && has_shrink_to_fit<T>) {
 2472|       |                        value.shrink_to_fit();
 2473|       |                     }
 2474|    477|                     return;
 2475|    477|                  }
 2476|    385|                  else [[unlikely]] {
 2477|    385|                     ctx.error = error_code::expected_bracket;
 2478|    385|                     return;
 2479|    385|                  }
 2480|   216k|               }
 2481|       |
 2482|       |               // A valid array always returns from inside the loop upon reaching ']'.
 2483|       |               // For a null-terminated buffer the loop can only exit here by falling
 2484|       |               // through when `it` reaches the terminator without a closing bracket,
 2485|       |               // which means the input was truncated (e.g. "[", "[1," or "[1,2,").
 2486|       |               // Non-null-terminated buffers surface this through skip_ws/depth
 2487|       |               // tracking (or the streaming refill break), so this guard is limited
 2488|       |               // to the null-terminated case.
 2489|       |               if constexpr (Opts.null_terminated) {
 2490|       |                  ctx.error = error_code::unexpected_end;
 2491|       |               }
 2492|       |            }
 2493|       |            else {
 2494|       |               ctx.error = error_code::exceeded_static_array_size;
 2495|       |            }
 2496|  1.97k|         }
 2497|  1.97k|      }
_ZN3glz5parseILj10EE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEERdTkNS_10is_contextERNS_7contextERPKcS8_EEvOT0_OT1_OT2_T3_:
   49|   217k|      {
   50|       |         if constexpr (const_value_v<T>) {
   51|       |            if constexpr (check_error_on_const_read(Opts)) {
   52|       |               ctx.error = error_code::attempt_const_read;
   53|       |            }
   54|       |            else {
   55|       |               // do not read anything into the const value
   56|       |               skip_value<JSON>::op<Opts>(std::forward<Ctx>(ctx), std::forward<It0>(it), end);
   57|       |            }
   58|       |         }
   59|   217k|         else {
   60|   217k|            using V = std::remove_cvref_t<T>;
   61|   217k|            from<JSON, V>::template op<Opts>(std::forward<T>(value), std::forward<Ctx>(ctx), std::forward<It0>(it),
   62|   217k|                                             end);
   63|   217k|         }
   64|   217k|      }

_ZN3glz2toILj10EiE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj128EEERNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERiTkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_:
  814|    182|      {
  815|       |         if constexpr (not check_write_unchecked(Opts)) {
  816|       |            static_assert(required_padding<T>());
  817|       |            if (!ensure_space(ctx, b, ix + required_padding<T>())) [[unlikely]] {
  818|       |               return;
  819|       |            }
  820|       |         }
  821|       |
  822|    182|         static constexpr auto O = write_unchecked_on<Opts>();
  823|       |
  824|       |         if constexpr (check_quoted_num(Opts)) {
  825|       |            std::memcpy(&b[ix], "\"", 1);
  826|       |            ++ix;
  827|       |            write_chars::op<O>(value, ctx, b, ix);
  828|       |            std::memcpy(&b[ix], "\"", 1);
  829|       |            ++ix;
  830|       |         }
  831|    182|         else {
  832|    182|            write_chars::op<O>(value, ctx, b, ix);
  833|    182|         }
  834|    182|      }
_ZN3glz2toILj10EDnE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEDnTkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_:
 1841|  20.5k|      {
 1842|  20.5k|         if constexpr (not check_write_unchecked(Opts)) {
 1843|  20.5k|            if (!ensure_space(ctx, b, ix + 4)) [[unlikely]] {
  ------------------
  |  Branch (1843:17): [True: 0, False: 20.5k]
  ------------------
 1844|      0|               return;
 1845|      0|            }
 1846|  20.5k|         }
 1847|       |         if constexpr (std::endian::native == std::endian::big) {
 1848|       |            static constexpr char null_v[] = "null";
 1849|       |            std::memcpy(&b[ix], null_v, 4);
 1850|       |         }
 1851|  20.5k|         else {
 1852|  20.5k|            static constexpr uint32_t null_v = 1819047278;
 1853|  20.5k|            std::memcpy(&b[ix], &null_v, 4);
 1854|  20.5k|         }
 1855|  20.5k|         ix += 4;
 1856|  20.5k|      }
_ZN3glz2toILj10EiE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERiTkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_:
  814|    436|      {
  815|    436|         if constexpr (not check_write_unchecked(Opts)) {
  816|    436|            static_assert(required_padding<T>());
  817|    436|            if (!ensure_space(ctx, b, ix + required_padding<T>())) [[unlikely]] {
  ------------------
  |  Branch (817:17): [True: 0, False: 436]
  ------------------
  818|      0|               return;
  819|      0|            }
  820|    436|         }
  821|       |
  822|    436|         static constexpr auto O = write_unchecked_on<Opts>();
  823|       |
  824|       |         if constexpr (check_quoted_num(Opts)) {
  825|       |            std::memcpy(&b[ix], "\"", 1);
  826|       |            ++ix;
  827|       |            write_chars::op<O>(value, ctx, b, ix);
  828|       |            std::memcpy(&b[ix], "\"", 1);
  829|       |            ++ix;
  830|       |         }
  831|    436|         else {
  832|    436|            write_chars::op<O>(value, ctx, b, ix);
  833|    436|         }
  834|    436|      }
_ZN3glz16required_paddingIiEEmv:
  538|    811|   {
  539|    811|      constexpr auto value = []() -> size_t {
  540|    811|         if constexpr (boolean_like<T>) {
  541|    811|            return 8;
  542|    811|         }
  543|    811|         else if constexpr (num_t<T>) {
  544|    811|            if constexpr (std::floating_point<T>) {
  545|    811|               if constexpr (sizeof(T) > 8) {
  546|    811|                  return 64;
  547|    811|               }
  548|    811|               else if constexpr (sizeof(T) > 4) {
  549|       |                  // zmij scratch + 4 for optional quotes and trailing comma.
  550|    811|                  return zmij::double_buffer_size + 4;
  551|    811|               }
  552|    811|               else {
  553|    811|                  return zmij::float_buffer_size + 4;
  554|    811|               }
  555|    811|            }
  556|    811|            else if constexpr (sizeof(T) > 4) {
  557|    811|               return 24;
  558|    811|            }
  559|    811|            else if constexpr (sizeof(T) > 2) {
  560|    811|               return 16;
  561|    811|            }
  562|    811|            else {
  563|    811|               return 8;
  564|    811|            }
  565|    811|         }
  566|    811|         else if constexpr (nullable_like<T>) {
  567|    811|            if constexpr (has_value_type<T>) {
  568|    811|               return required_padding<typename T::value_type>();
  569|    811|            }
  570|    811|            else if constexpr (has_element_type<T>) {
  571|    811|               return required_padding<typename T::element_type>();
  572|    811|            }
  573|    811|            else {
  574|    811|               return 0;
  575|    811|            }
  576|    811|         }
  577|    811|         else if constexpr (always_null_t<T>) {
  578|    811|            return 8;
  579|    811|         }
  580|    811|         else {
  581|    811|            return 0;
  582|    811|         }
  583|    811|      }();
  584|       |
  585|       |      if constexpr (value >= (write_padding_bytes - 16)) {
  586|       |         // we always require 16 bytes available from write_padding_bytes
  587|       |         // for opening and closing characters
  588|       |         return 0;
  589|       |      }
  590|    811|      return value;
  591|    811|   }
_ZN3glz2toILj10EiE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEiTkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_:
  814|    375|      {
  815|    375|         if constexpr (not check_write_unchecked(Opts)) {
  816|    375|            static_assert(required_padding<T>());
  817|    375|            if (!ensure_space(ctx, b, ix + required_padding<T>())) [[unlikely]] {
  ------------------
  |  Branch (817:17): [True: 0, False: 375]
  ------------------
  818|      0|               return;
  819|      0|            }
  820|    375|         }
  821|       |
  822|    375|         static constexpr auto O = write_unchecked_on<Opts>();
  823|       |
  824|       |         if constexpr (check_quoted_num(Opts)) {
  825|       |            std::memcpy(&b[ix], "\"", 1);
  826|       |            ++ix;
  827|       |            write_chars::op<O>(value, ctx, b, ix);
  828|       |            std::memcpy(&b[ix], "\"", 1);
  829|       |            ++ix;
  830|       |         }
  831|    375|         else {
  832|    375|            write_chars::op<O>(value, ctx, b, ix);
  833|    375|         }
  834|    375|      }
_ZN3glz2toILj10EN9repe_fuzz5pointEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEES2_RNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_:
 2465|    120|      {
 2466|    120|         using ValueType = std::decay_t<V>;
 2467|       |         if constexpr (has_unknown_writer<ValueType> && not check_disable_write_unknown(Options)) {
 2468|       |            constexpr auto& writer = meta_unknown_write_v<ValueType>;
 2469|       |
 2470|       |            using WriterType = meta_unknown_write_t<ValueType>;
 2471|       |            if constexpr (std::is_member_object_pointer_v<WriterType>) {
 2472|       |               decltype(auto) unknown_writer = value.*writer;
 2473|       |               if (unknown_writer.size() > 0) {
 2474|       |                  // TODO: This intermediate is added to get GCC 14 to build
 2475|       |                  decltype(auto) merged = glz::merge{value, unknown_writer};
 2476|       |                  serialize<JSON>::op<disable_write_unknown_on<Options>()>(std::move(merged), ctx, b, ix);
 2477|       |               }
 2478|       |               else {
 2479|       |                  serialize<JSON>::op<disable_write_unknown_on<Options>()>(value, ctx, b, ix);
 2480|       |               }
 2481|       |            }
 2482|       |            else if constexpr (std::is_member_function_pointer_v<WriterType>) {
 2483|       |               decltype(auto) unknown_writer = (value.*writer)();
 2484|       |               if (unknown_writer.size() > 0) {
 2485|       |                  // TODO: This intermediate is added to get GCC 14 to build
 2486|       |                  decltype(auto) merged = glz::merge{value, unknown_writer};
 2487|       |                  serialize<JSON>::op<disable_write_unknown_on<Options>()>(std::move(merged), ctx, b, ix);
 2488|       |               }
 2489|       |               else {
 2490|       |                  serialize<JSON>::op<disable_write_unknown_on<Options>()>(value, ctx, b, ix);
 2491|       |               }
 2492|       |            }
 2493|       |            else {
 2494|       |               static_assert(false_v<T>, "unknown_write type not handled");
 2495|       |            }
 2496|       |         }
 2497|    120|         else {
 2498|       |            // handles glaze_object_t without extra unknown fields
 2499|    120|            static constexpr auto Opts =
 2500|    120|               disable_write_unknown_off<opening_and_closing_handled_off<ws_handled_off<Options>()>()>();
 2501|       |
 2502|    120|            if constexpr (not check_opening_handled(Options)) {
 2503|       |               if constexpr (Options.prettify) {
 2504|       |                  ctx.depth += check_indentation_width(Options);
 2505|       |                  if constexpr (not check_write_unchecked(Options)) {
 2506|       |                     if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 2507|       |                        return;
 2508|       |                     }
 2509|       |                  }
 2510|       |                  std::memcpy(&b[ix], "{\n", 2);
 2511|       |                  ix += 2;
 2512|       |                  std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2513|       |                  ix += ctx.depth;
 2514|       |               }
 2515|    120|               else {
 2516|    120|                  if constexpr (not check_write_unchecked(Options)) {
 2517|    120|                     if (!ensure_space(ctx, b, ix + 1)) [[unlikely]] {
  ------------------
  |  Branch (2517:26): [True: 0, False: 120]
  ------------------
 2518|      0|                        return;
 2519|      0|                     }
 2520|    120|                  }
 2521|    120|                  dump<not check_write_unchecked(Options)>('{', b, ix);
 2522|    120|               }
 2523|    120|            }
 2524|       |
 2525|      0|            static constexpr auto N = reflect<T>::size;
 2526|       |
 2527|    120|            decltype(auto) t = [&]() -> decltype(auto) {
 2528|    120|               if constexpr (reflectable<T>) {
 2529|    120|                  return to_tie(value);
 2530|    120|               }
 2531|    120|               else {
 2532|    120|                  return nullptr;
 2533|    120|               }
 2534|    120|            }();
 2535|       |
 2536|    120|            static constexpr auto padding = round_up_to_nearest_16(maximum_key_size<T> + write_padding_bytes);
 2537|       |            if constexpr (maybe_skipped<Opts, T>) {
 2538|       |               bool first = true;
 2539|       |               for_each<N>([&]<size_t I>() {
 2540|       |                  using val_t = field_t<T, I>;
 2541|       |
 2542|       |                  // `meta<T>::skip` joins the other compile-time exclusions here rather than returning
 2543|       |                  // early, so that a skipped field's writer is never instantiated -- see
 2544|       |                  // `skipped_by_meta`.
 2545|       |                  constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 2546|       |                  if constexpr (skipped_by_meta<T, I, operation::serialize> || always_skipped<val_t> ||
 2547|       |                                (!write_function_pointers && is_any_function_ptr<val_t>)) {
 2548|       |                     return;
 2549|       |                  }
 2550|       |                  else {
 2551|       |                     if constexpr (meta_has_skip_if<T>) {
 2552|       |                        static constexpr auto skip_if_key = glz::get<I>(reflect<T>::keys);
 2553|       |                        static constexpr meta_context mctx{.op = operation::serialize};
 2554|       |                        decltype(auto) field_value = [&]() -> decltype(auto) {
 2555|       |                           if constexpr (reflectable<T>) {
 2556|       |                              return get<I>(t);
 2557|       |                           }
 2558|       |                           else {
 2559|       |                              return get_member(value, glz::get<I>(reflect<T>::values));
 2560|       |                           }
 2561|       |                        }();
 2562|       |                        if (meta<T>::skip_if(field_value, skip_if_key, mctx)) return;
 2563|       |                     }
 2564|       |
 2565|       |                     if constexpr (null_t<val_t> && Opts.skip_null_members) {
 2566|       |                        if constexpr (always_null_t<val_t>)
 2567|       |                           return;
 2568|       |                        else {
 2569|       |                           const auto is_null = [&]() {
 2570|       |                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|       |                                 if constexpr (reflectable<T>) {
 2572|       |                                    return get<I>(t);
 2573|       |                                 }
 2574|       |                                 else {
 2575|       |                                    return get<I>(reflect<T>::values);
 2576|       |                                 }
 2577|       |                              };
 2578|       |
 2579|       |                              if constexpr (nullable_wrapper<val_t>) {
 2580|       |                                 return !bool(element()(value).val);
 2581|       |                              }
 2582|       |                              else if constexpr (nullable_value_t<val_t>) {
 2583|       |                                 return !get_member(value, element()).has_value();
 2584|       |                              }
 2585|       |                              else {
 2586|       |                                 return !bool(get_member(value, element()));
 2587|       |                              }
 2588|       |                           }();
 2589|       |                           if (is_null) return;
 2590|       |                        }
 2591|       |                     }
 2592|       |                     else if constexpr (is_specialization_v<val_t, custom_t> && Opts.skip_null_members &&
 2593|       |                                        custom_getter_returns_nullable<val_t>()) {
 2594|       |                        if (is_custom_field_null<T, I>(value, t, ctx)) return;
 2595|       |                     }
 2596|       |                     else if constexpr (Opts.skip_null_members && glaze_value_is_nullable<val_t>()) {
 2597|       |                        if (is_glaze_value_field_null<T, I>(value, t)) return;
 2598|       |                     }
 2599|       |
 2600|       |                     if constexpr (check_skip_default_members(Opts) && has_skippable_default<val_t>) {
 2601|       |                        decltype(auto) member = [&]() -> decltype(auto) {
 2602|       |                           if constexpr (reflectable<T>) {
 2603|       |                              return get_member(value, get<I>(t));
 2604|       |                           }
 2605|       |                           else {
 2606|       |                              return get_member(value, get<I>(reflect<T>::values));
 2607|       |                           }
 2608|       |                        }();
 2609|       |                        if (is_default_value(member)) return;
 2610|       |                     }
 2611|       |
 2612|       |                     if constexpr (Opts.prettify) {
 2613|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2614|       |                           return;
 2615|       |                        }
 2616|       |                     }
 2617|       |                     else {
 2618|       |                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
 2619|       |                           return;
 2620|       |                        }
 2621|       |                     }
 2622|       |
 2623|       |                     if (first) {
 2624|       |                        first = false;
 2625|       |                     }
 2626|       |                     else {
 2627|       |                        // Null members may be skipped so we can't just write it out for all but the last member
 2628|       |                        if constexpr (Opts.prettify) {
 2629|       |                           std::memcpy(&b[ix], ",\n", 2);
 2630|       |                           ix += 2;
 2631|       |                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2632|       |                           ix += ctx.depth;
 2633|       |                        }
 2634|       |                        else {
 2635|       |                           std::memcpy(&b[ix], ",", 1);
 2636|       |                           ++ix;
 2637|       |                        }
 2638|       |                        if constexpr (is_output_streaming<B>) {
 2639|       |                           flush_buffer(b, ix);
 2640|       |                        }
 2641|       |                     }
 2642|       |
 2643|       |                     // MSVC requires get<I> rather than keys[I]
 2644|       |                     static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2645|       |                     static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2646|       |                     static constexpr auto n = quoted_key.size();
 2647|       |                     std::memcpy(&b[ix], quoted_key.data(), n);
 2648|       |                     ix += n;
 2649|       |
 2650|       |                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
 2651|       |                     if constexpr (reflectable<T>) {
 2652|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2653|       |                     }
 2654|       |                     else {
 2655|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2656|       |                                                                 ix);
 2657|       |                     }
 2658|       |                  }
 2659|       |               });
 2660|       |            }
 2661|    120|            else {
 2662|    120|               static constexpr size_t fixed_max_size = Opts.prettify ? 0 : fixed_padding<T>;
  ------------------
  |  Branch (2662:57): [Folded, False: 120]
  ------------------
 2663|    120|               if constexpr (fixed_max_size && not check_write_unchecked(Options)) {
 2664|    120|                  if (!ensure_space(ctx, b, ix + fixed_max_size)) [[unlikely]] {
  ------------------
  |  Branch (2664:23): [True: 0, False: 120]
  ------------------
 2665|      0|                     return;
 2666|      0|                  }
 2667|    120|               }
 2668|       |
 2669|    120|               for_each<N>([&]<size_t I>() {
 2670|    120|                  if constexpr (write_can_error<T>()) {
 2671|    120|                     if (bool(ctx.error)) [[unlikely]] {
 2672|    120|                        return;
 2673|    120|                     }
 2674|    120|                  }
 2675|    120|                  if constexpr (not fixed_max_size) {
 2676|    120|                     if constexpr (Opts.prettify) {
 2677|    120|                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2678|    120|                           return;
 2679|    120|                        }
 2680|    120|                     }
 2681|    120|                     else {
 2682|    120|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
 2683|    120|                           return;
 2684|    120|                        }
 2685|    120|                     }
 2686|    120|                  }
 2687|       |
 2688|    120|                  if constexpr (I != 0 && Opts.prettify) {
 2689|    120|                     std::memcpy(&b[ix], ",\n", 2);
 2690|    120|                     ix += 2;
 2691|    120|                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2692|    120|                     ix += ctx.depth;
 2693|    120|                  }
 2694|       |
 2695|    120|                  using val_t = field_t<T, I>;
 2696|       |
 2697|       |                  // MSVC requires get<I> rather than keys[I]
 2698|    120|                  static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2699|    120|                  if constexpr (always_null_t<val_t>) {
 2700|    120|                     if constexpr (I == 0 || Opts.prettify) {
 2701|    120|                        static constexpr auto quoted_key = join_v<quoted_key_v<key, Opts.prettify>, chars<"null">>;
 2702|    120|                        static constexpr auto n = quoted_key.size();
 2703|    120|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2704|    120|                        ix += n;
 2705|    120|                     }
 2706|    120|                     else {
 2707|    120|                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>, chars<"null">>;
 2708|    120|                        static constexpr auto n = quoted_key.size();
 2709|    120|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2710|    120|                        ix += n;
 2711|    120|                     }
 2712|    120|                  }
 2713|    120|                  else {
 2714|    120|                     if constexpr (I == 0 || Opts.prettify) {
 2715|    120|                        static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2716|    120|                        static constexpr auto n = quoted_key.size();
 2717|    120|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2718|    120|                        ix += n;
 2719|    120|                     }
 2720|    120|                     else {
 2721|    120|                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>>;
 2722|    120|                        static constexpr auto n = quoted_key.size();
 2723|    120|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2724|    120|                        ix += n;
 2725|    120|                     }
 2726|       |
 2727|    120|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
 2728|    120|                     if constexpr (reflectable<T>) {
 2729|    120|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2730|    120|                     }
 2731|    120|                     else {
 2732|    120|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2733|    120|                                                                 ix);
 2734|    120|                     }
 2735|    120|                  }
 2736|    120|               });
 2737|    120|            }
 2738|       |
 2739|       |            // Options is required here, because it must be the top level
 2740|    120|            if constexpr (not check_closing_handled(Options)) {
 2741|       |               if constexpr (Options.prettify) {
 2742|       |                  ctx.depth -= check_indentation_width(Options);
 2743|       |                  if constexpr (not check_write_unchecked(Options)) {
 2744|       |                     if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 2745|       |                        return;
 2746|       |                     }
 2747|       |                  }
 2748|       |                  std::memcpy(&b[ix], "\n", 1);
 2749|       |                  ++ix;
 2750|       |                  std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2751|       |                  ix += ctx.depth;
 2752|       |                  std::memcpy(&b[ix], "}", 1);
 2753|       |                  ++ix;
 2754|       |               }
 2755|    120|               else {
 2756|    120|                  dump<not(fixed_padding<T> || check_write_unchecked(Options))>('}', b, ix);
 2757|    120|               }
 2758|    120|            }
 2759|    120|         }
 2760|    120|      }
_ZZN3glz2toILj10EN9repe_fuzz5pointEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEES2_RNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlvE_clEv:
 2527|    120|            decltype(auto) t = [&]() -> decltype(auto) {
 2528|    120|               if constexpr (reflectable<T>) {
 2529|    120|                  return to_tie(value);
 2530|       |               }
 2531|       |               else {
 2532|       |                  return nullptr;
 2533|       |               }
 2534|    120|            }();
_ZZN3glz2toILj10EN9repe_fuzz5pointEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEES2_RNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm0EEEDav:
 2669|    120|               for_each<N>([&]<size_t I>() {
 2670|       |                  if constexpr (write_can_error<T>()) {
 2671|       |                     if (bool(ctx.error)) [[unlikely]] {
 2672|       |                        return;
 2673|       |                     }
 2674|       |                  }
 2675|       |                  if constexpr (not fixed_max_size) {
 2676|       |                     if constexpr (Opts.prettify) {
 2677|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2678|       |                           return;
 2679|       |                        }
 2680|       |                     }
 2681|       |                     else {
 2682|       |                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
 2683|       |                           return;
 2684|       |                        }
 2685|       |                     }
 2686|       |                  }
 2687|       |
 2688|       |                  if constexpr (I != 0 && Opts.prettify) {
 2689|       |                     std::memcpy(&b[ix], ",\n", 2);
 2690|       |                     ix += 2;
 2691|       |                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2692|       |                     ix += ctx.depth;
 2693|       |                  }
 2694|       |
 2695|    120|                  using val_t = field_t<T, I>;
 2696|       |
 2697|       |                  // MSVC requires get<I> rather than keys[I]
 2698|    120|                  static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2699|       |                  if constexpr (always_null_t<val_t>) {
 2700|       |                     if constexpr (I == 0 || Opts.prettify) {
 2701|       |                        static constexpr auto quoted_key = join_v<quoted_key_v<key, Opts.prettify>, chars<"null">>;
 2702|       |                        static constexpr auto n = quoted_key.size();
 2703|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2704|       |                        ix += n;
 2705|       |                     }
 2706|       |                     else {
 2707|       |                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>, chars<"null">>;
 2708|       |                        static constexpr auto n = quoted_key.size();
 2709|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2710|       |                        ix += n;
 2711|       |                     }
 2712|       |                  }
 2713|    120|                  else {
 2714|    120|                     if constexpr (I == 0 || Opts.prettify) {
 2715|    120|                        static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2716|    120|                        static constexpr auto n = quoted_key.size();
 2717|    120|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2718|    120|                        ix += n;
 2719|       |                     }
 2720|       |                     else {
 2721|       |                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>>;
 2722|       |                        static constexpr auto n = quoted_key.size();
 2723|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2724|       |                        ix += n;
 2725|       |                     }
 2726|       |
 2727|    120|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2727:57): [True: 0, Folded]
  ------------------
 2728|    120|                     if constexpr (reflectable<T>) {
 2729|    120|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2730|       |                     }
 2731|       |                     else {
 2732|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2733|       |                                                                 ix);
 2734|       |                     }
 2735|    120|                  }
 2736|    120|               });
_ZN3glz2toILj10EdE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj128EEERNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERdTkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_:
  814|    602|      {
  815|       |         if constexpr (not check_write_unchecked(Opts)) {
  816|       |            static_assert(required_padding<T>());
  817|       |            if (!ensure_space(ctx, b, ix + required_padding<T>())) [[unlikely]] {
  818|       |               return;
  819|       |            }
  820|       |         }
  821|       |
  822|    602|         static constexpr auto O = write_unchecked_on<Opts>();
  823|       |
  824|       |         if constexpr (check_quoted_num(Opts)) {
  825|       |            std::memcpy(&b[ix], "\"", 1);
  826|       |            ++ix;
  827|       |            write_chars::op<O>(value, ctx, b, ix);
  828|       |            std::memcpy(&b[ix], "\"", 1);
  829|       |            ++ix;
  830|       |         }
  831|    602|         else {
  832|    602|            write_chars::op<O>(value, ctx, b, ix);
  833|    602|         }
  834|    602|      }
_ZZN3glz2toILj10EN9repe_fuzz5pointEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEES2_RNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm1EEEDav:
 2669|    120|               for_each<N>([&]<size_t I>() {
 2670|       |                  if constexpr (write_can_error<T>()) {
 2671|       |                     if (bool(ctx.error)) [[unlikely]] {
 2672|       |                        return;
 2673|       |                     }
 2674|       |                  }
 2675|       |                  if constexpr (not fixed_max_size) {
 2676|       |                     if constexpr (Opts.prettify) {
 2677|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2678|       |                           return;
 2679|       |                        }
 2680|       |                     }
 2681|       |                     else {
 2682|       |                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
 2683|       |                           return;
 2684|       |                        }
 2685|       |                     }
 2686|       |                  }
 2687|       |
 2688|       |                  if constexpr (I != 0 && Opts.prettify) {
 2689|       |                     std::memcpy(&b[ix], ",\n", 2);
 2690|       |                     ix += 2;
 2691|       |                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2692|       |                     ix += ctx.depth;
 2693|       |                  }
 2694|       |
 2695|    120|                  using val_t = field_t<T, I>;
 2696|       |
 2697|       |                  // MSVC requires get<I> rather than keys[I]
 2698|    120|                  static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2699|       |                  if constexpr (always_null_t<val_t>) {
 2700|       |                     if constexpr (I == 0 || Opts.prettify) {
 2701|       |                        static constexpr auto quoted_key = join_v<quoted_key_v<key, Opts.prettify>, chars<"null">>;
 2702|       |                        static constexpr auto n = quoted_key.size();
 2703|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2704|       |                        ix += n;
 2705|       |                     }
 2706|       |                     else {
 2707|       |                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>, chars<"null">>;
 2708|       |                        static constexpr auto n = quoted_key.size();
 2709|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2710|       |                        ix += n;
 2711|       |                     }
 2712|       |                  }
 2713|    120|                  else {
 2714|       |                     if constexpr (I == 0 || Opts.prettify) {
 2715|       |                        static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2716|       |                        static constexpr auto n = quoted_key.size();
 2717|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2718|       |                        ix += n;
 2719|       |                     }
 2720|    120|                     else {
 2721|    120|                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>>;
 2722|    120|                        static constexpr auto n = quoted_key.size();
 2723|    120|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2724|    120|                        ix += n;
 2725|    120|                     }
 2726|       |
 2727|    120|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2727:57): [True: 0, Folded]
  ------------------
 2728|    120|                     if constexpr (reflectable<T>) {
 2729|    120|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2730|       |                     }
 2731|       |                     else {
 2732|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2733|       |                                                                 ix);
 2734|       |                     }
 2735|    120|                  }
 2736|    120|               });
_ZN3glz2toILj10ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS7_S7_TkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_:
  845|    269|      {
  846|       |         if constexpr (check_string_as_number(Opts)) {
  847|       |            const sv str = [&]() -> const sv {
  848|       |               if constexpr (array_char_t<T>) {
  849|       |                  const auto* start = value.data();
  850|       |                  const auto* end = static_cast<const char*>(std::memchr(start, '\0', value.size()));
  851|       |                  return sv{start, end ? size_t(end - start) : value.size()};
  852|       |               }
  853|       |               else if constexpr (u8str_t<T>) {
  854|       |                  return sv{reinterpret_cast<const char*>(value.data()), value.size()};
  855|       |               }
  856|       |               else {
  857|       |                  return str_view<T>(value);
  858|       |               }
  859|       |            }();
  860|       |            if (!ensure_space(ctx, b, ix + str.size() + write_padding_bytes)) [[unlikely]] {
  861|       |               return;
  862|       |            }
  863|       |            dump_maybe_empty<false>(str, b, ix);
  864|       |         }
  865|       |         else if constexpr (char_t<T>) {
  866|       |            if constexpr (check_unquoted(Opts)) {
  867|       |               dump(value, b, ix);
  868|       |            }
  869|       |            else {
  870|       |               // 8 bytes is enough for quotes and escaped character (worst case: \uXXXX = 6 + 2 quotes)
  871|       |               if (!ensure_space(ctx, b, ix + 8)) [[unlikely]] {
  872|       |                  return;
  873|       |               }
  874|       |
  875|       |               std::memcpy(&b[ix], "\"", 1);
  876|       |               ++ix;
  877|       |               if (const auto escaped = char_escape_table[uint8_t(value)]; escaped) {
  878|       |                  std::memcpy(&b[ix], &escaped, 2);
  879|       |                  ix += 2;
  880|       |               }
  881|       |               else if (value == '\0') {
  882|       |                  // null character treated as empty string
  883|       |               }
  884|       |               else if constexpr (check_escape_control_characters(Opts)) {
  885|       |                  if (uint8_t(value) < 0x20) {
  886|       |                     // Write as \uXXXX format
  887|       |                     char unicode_escape[6] = {'\\', 'u', '0', '0', '0', '0'};
  888|       |                     constexpr char hex_digits[] = "0123456789ABCDEF";
  889|       |                     unicode_escape[4] = hex_digits[(value >> 4) & 0xF];
  890|       |                     unicode_escape[5] = hex_digits[value & 0xF];
  891|       |                     std::memcpy(&b[ix], unicode_escape, 6);
  892|       |                     ix += 6;
  893|       |                  }
  894|       |                  else {
  895|       |                     std::memcpy(&b[ix], &value, 1);
  896|       |                     ++ix;
  897|       |                  }
  898|       |               }
  899|       |               else {
  900|       |                  if constexpr (check_reject_control_characters(Opts)) {
  901|       |                     if (uint8_t(value) < 0x20) [[unlikely]] {
  902|       |                        ctx.error = error_code::invalid_control_character;
  903|       |                     }
  904|       |                  }
  905|       |                  std::memcpy(&b[ix], &value, 1);
  906|       |                  ++ix;
  907|       |               }
  908|       |               std::memcpy(&b[ix], "\"", 1);
  909|       |               ++ix;
  910|       |            }
  911|       |         }
  912|    269|         else {
  913|       |            if constexpr (check_raw_string(Opts)) {
  914|       |               const sv str = [&]() -> const sv {
  915|       |                  if constexpr (u8str_t<T>) {
  916|       |                     return sv{reinterpret_cast<const char*>(value.data()), value.size()};
  917|       |                  }
  918|       |                  else {
  919|       |                     return str_view<T>(value);
  920|       |                  }
  921|       |               }();
  922|       |
  923|       |               // We need space for quotes and the string length: 2 + n.
  924|       |               // Use +8 for extra buffer
  925|       |               if (!ensure_space(ctx, b, ix + 8 + str.size())) [[unlikely]] {
  926|       |                  return;
  927|       |               }
  928|       |               // now we don't have to check writing
  929|       |
  930|       |               if constexpr (not check_unquoted(Opts)) {
  931|       |                  std::memcpy(&b[ix], "\"", 1);
  932|       |                  ++ix;
  933|       |               }
  934|       |               if (str.size()) [[likely]] {
  935|       |                  const auto n = str.size();
  936|       |                  std::memcpy(&b[ix], str.data(), n);
  937|       |                  ix += n;
  938|       |               }
  939|       |               if constexpr (not check_unquoted(Opts)) {
  940|       |                  std::memcpy(&b[ix], "\"", 1);
  941|       |                  ++ix;
  942|       |               }
  943|       |            }
  944|    269|            else {
  945|    269|               const sv str = [&]() -> const sv {
  946|    269|                  if constexpr (array_char_t<T>) {
  947|    269|                     return sv{value.data(), value.size()};
  948|    269|                  }
  949|    269|                  else if constexpr (u8str_t<T>) {
  950|    269|                     return sv{reinterpret_cast<const char*>(value.data()), value.size()};
  951|    269|                  }
  952|    269|                  else {
  953|    269|                     return str_view<T>(value);
  954|    269|                  }
  955|    269|               }();
  956|    269|               const auto n = str.size();
  957|       |
  958|       |               // In the case n == 0 we need two characters for quotes.
  959|       |               // For each individual character we need room for two characters to handle escapes.
  960|       |               // When using Unicode escapes, we might need up to 6 characters (\uXXXX) per character
  961|       |               if constexpr (check_escape_control_characters(Opts)) {
  962|       |                  if constexpr (has_bounded_capacity<B>) {
  963|       |                     // 6 bytes per character is a ceiling only a string of nothing but control
  964|       |                     // characters reaches. A resizable buffer merely over-allocates against it,
  965|       |                     // but a fixed buffer has nowhere to grow, so the ceiling would reject output
  966|       |                     // that fits. Measuring the string answers exactly, at the cost of a pass over
  967|       |                     // it, so bracket the measurement between two O(1) bounds and only pay it when
  968|       |                     // the answer is still in doubt: the ceiling fitting means yes, and the floor
  969|       |                     // of one byte per character not fitting means no.
  970|       |                     const size_t capacity = buffer_traits<std::remove_cvref_t<B>>::capacity(b);
  971|       |                     size_t required = ix + 10 + 6 * n;
  972|       |                     if (required > capacity) [[unlikely]] {
  973|       |                        required = ix + 10 + n;
  974|       |                        if (required <= capacity) {
  975|       |                           required = ix + 10 + detail::escaped_string_size(str);
  976|       |                        }
  977|       |                     }
  978|       |                     if (!ensure_space(ctx, b, required)) [[unlikely]] {
  979|       |                        return;
  980|       |                     }
  981|       |                  }
  982|       |                  // We need 2 + 6 * n characters in the worst case (all control chars)
  983|       |                  else if (!ensure_space(ctx, b, ix + 10 + 6 * n)) [[unlikely]] {
  984|       |                     return;
  985|       |                  }
  986|       |               }
  987|    269|               else {
  988|       |                  // Using the original sizing
  989|    269|                  if (!ensure_space(ctx, b, ix + 10 + 2 * n)) [[unlikely]] {
  ------------------
  |  Branch (989:23): [True: 0, False: 269]
  ------------------
  990|      0|                     return;
  991|      0|                  }
  992|    269|               }
  993|       |               // now we don't have to check writing
  994|       |
  995|       |               if constexpr (check_unquoted(Opts)) {
  996|       |                  if (n) {
  997|       |                     std::memcpy(&b[ix], str.data(), n);
  998|       |                     ix += n;
  999|       |                  }
 1000|       |               }
 1001|    269|               else {
 1002|    269|                  std::memcpy(&b[ix], "\"", 1);
 1003|    269|                  ++ix;
 1004|       |
 1005|    269|                  const auto* c = str.data();
 1006|    269|                  const auto* const e = c + n;
 1007|    269|                  const auto start = &b[ix];
 1008|    269|                  auto data = start;
 1009|       |
 1010|       |                  // By default we don't escape control characters for performance. Invalid JSON characters
 1011|       |                  // result in null characters in the output, making the JSON invalid — these would then be
 1012|       |                  // detected upon reading. Enable the `escape_control_characters` option to properly escape
 1013|       |                  // control characters (0x00–0x1F) as \uXXXX sequences.
 1014|       |
 1015|       |                  // Escape handler: writes the escaped form of *c into data, advances both pointers
 1016|    269|                  auto write_escape = [&]() {
 1017|    269|                     if constexpr (check_escape_control_characters(Opts)) {
 1018|    269|                        if (const auto escaped = char_escape_table[uint8_t(*c)]; escaped) {
 1019|    269|                           std::memcpy(data, &escaped, 2);
 1020|    269|                           data += 2;
 1021|    269|                        }
 1022|    269|                        else {
 1023|    269|                           char unicode_escape[6] = {'\\', 'u', '0', '0', '0', '0'};
 1024|    269|                           constexpr char hex_digits[] = "0123456789ABCDEF";
 1025|    269|                           unicode_escape[4] = hex_digits[(uint8_t(*c) >> 4) & 0xF];
 1026|    269|                           unicode_escape[5] = hex_digits[uint8_t(*c) & 0xF];
 1027|    269|                           std::memcpy(data, unicode_escape, 6);
 1028|    269|                           data += 6;
 1029|    269|                        }
 1030|    269|                     }
 1031|    269|                     else {
 1032|    269|                        if constexpr (check_reject_control_characters(Opts)) {
 1033|       |                           // A control character with no two-character escape cannot be written
 1034|       |                           // without \uXXXX. The table entry is zero, so the memcpy below would
 1035|       |                           // put two NULs where one byte was. Flag it and let the loop finish:
 1036|       |                           // returning early here would leave c un-advanced and the SIMD scan
 1037|       |                           // would find the same byte forever. The output is abandoned anyway.
 1038|    269|                           if (char_escape_table[uint8_t(*c)] == 0) [[unlikely]] {
 1039|    269|                              ctx.error = error_code::invalid_control_character;
 1040|    269|                           }
 1041|    269|                        }
 1042|    269|                        std::memcpy(data, &char_escape_table[uint8_t(*c)], 2);
 1043|    269|                        data += 2;
 1044|    269|                     }
 1045|    269|                     ++c;
 1046|    269|                  };
 1047|       |
 1048|       |                  // Adding a helper here means adding a branch to string_escape_simd() in
 1049|       |                  // simd/backends.hpp, which names the widest one this cascade invokes, and a row
 1050|       |                  // to known_builds in tests/json_test/utf8_validation_test.cpp, which checks it.
 1051|       |#if defined(GLZ_USE_AVX2)
 1052|       |                  detail::avx2_string_escape(c, e, data, n, write_escape);
 1053|       |#endif
 1054|    269|#if defined(GLZ_USE_SSE2)
 1055|    269|                  detail::sse2_string_escape(c, e, data, n, write_escape);
 1056|       |#elif defined(GLZ_USE_NEON)
 1057|       |                  detail::neon_string_escape(c, e, data, n, write_escape);
 1058|       |#endif
 1059|       |
 1060|       |                  // SWAR: 8 bytes at a time
 1061|    269|                  if (n > 7) {
  ------------------
  |  Branch (1061:23): [True: 163, False: 106]
  ------------------
 1062|    385|                     for (const auto end_m7 = e - 7; c < end_m7;) {
  ------------------
  |  Branch (1062:54): [True: 222, False: 163]
  ------------------
 1063|    222|                        std::memcpy(data, c, 8);
 1064|    222|                        uint64_t swar;
 1065|    222|                        std::memcpy(&swar, c, 8);
 1066|       |                        if constexpr (std::endian::native == std::endian::big) {
 1067|       |                           swar = std::byteswap(swar);
 1068|       |                        }
 1069|       |
 1070|    222|                        constexpr uint64_t lo7_mask = repeat_byte8(0b01111111);
 1071|    222|                        const uint64_t lo7 = swar & lo7_mask;
 1072|    222|                        const uint64_t quote = (lo7 ^ repeat_byte8('"')) + lo7_mask;
 1073|    222|                        const uint64_t backslash = (lo7 ^ repeat_byte8('\\')) + lo7_mask;
 1074|    222|                        const uint64_t less_32 = (swar & repeat_byte8(0b01100000)) + lo7_mask;
 1075|    222|                        uint64_t next = ~((quote & backslash & less_32) | swar);
 1076|       |
 1077|    222|                        next &= repeat_byte8(0b10000000);
 1078|    222|                        if (next == 0) {
  ------------------
  |  Branch (1078:29): [True: 64, False: 158]
  ------------------
 1079|     64|                           data += 8;
 1080|     64|                           c += 8;
 1081|     64|                           continue;
 1082|     64|                        }
 1083|       |
 1084|    158|                        const auto length = (countr_zero(next) >> 3);
 1085|    158|                        c += length;
 1086|    158|                        data += length;
 1087|    158|                        write_escape();
 1088|    158|                     }
 1089|    163|                  }
 1090|       |
 1091|       |                  // Scalar tail
 1092|    914|                  for (; c < e; ++c) {
  ------------------
  |  Branch (1092:26): [True: 645, False: 269]
  ------------------
 1093|    645|                     if (const auto escaped = char_escape_table[uint8_t(*c)]; escaped) {
  ------------------
  |  Branch (1093:79): [True: 172, False: 473]
  ------------------
 1094|    172|                        std::memcpy(data, &escaped, 2);
 1095|    172|                        data += 2;
 1096|    172|                     }
 1097|       |                     else if constexpr (check_escape_control_characters(Opts)) {
 1098|       |                        if (uint8_t(*c) < 0x20) {
 1099|       |                           char unicode_escape[6] = {'\\', 'u', '0', '0', '0', '0'};
 1100|       |                           constexpr char hex_digits[] = "0123456789ABCDEF";
 1101|       |                           unicode_escape[4] = hex_digits[(uint8_t(*c) >> 4) & 0xF];
 1102|       |                           unicode_escape[5] = hex_digits[uint8_t(*c) & 0xF];
 1103|       |                           std::memcpy(data, unicode_escape, 6);
 1104|       |                           data += 6;
 1105|       |                        }
 1106|       |                        else {
 1107|       |                           std::memcpy(data, c, 1);
 1108|       |                           ++data;
 1109|       |                        }
 1110|       |                     }
 1111|    473|                     else {
 1112|       |                        if constexpr (check_reject_control_characters(Opts)) {
 1113|       |                           if (uint8_t(*c) < 0x20) [[unlikely]] {
 1114|       |                              ctx.error = error_code::invalid_control_character;
 1115|       |                           }
 1116|       |                        }
 1117|    473|                        std::memcpy(data, c, 1);
 1118|    473|                        ++data;
 1119|    473|                     }
 1120|    645|                  }
 1121|       |
 1122|    269|                  ix += size_t(data - start);
 1123|       |
 1124|    269|                  std::memcpy(&b[ix], "\"", 1);
 1125|    269|                  ++ix;
 1126|    269|               }
 1127|    269|            }
 1128|    269|         }
 1129|    269|      }
_ZZN3glz2toILj10ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS7_S7_TkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_ENKUlvE_clEv:
  945|    269|               const sv str = [&]() -> const sv {
  946|       |                  if constexpr (array_char_t<T>) {
  947|       |                     return sv{value.data(), value.size()};
  948|       |                  }
  949|       |                  else if constexpr (u8str_t<T>) {
  950|       |                     return sv{reinterpret_cast<const char*>(value.data()), value.size()};
  951|       |                  }
  952|    269|                  else {
  953|    269|                     return str_view<T>(value);
  954|    269|                  }
  955|    269|               }();
_ZZN3glz2toILj10ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS7_S7_TkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_ENKUlvE0_clEv:
 1016|  25.8k|                  auto write_escape = [&]() {
 1017|       |                     if constexpr (check_escape_control_characters(Opts)) {
 1018|       |                        if (const auto escaped = char_escape_table[uint8_t(*c)]; escaped) {
 1019|       |                           std::memcpy(data, &escaped, 2);
 1020|       |                           data += 2;
 1021|       |                        }
 1022|       |                        else {
 1023|       |                           char unicode_escape[6] = {'\\', 'u', '0', '0', '0', '0'};
 1024|       |                           constexpr char hex_digits[] = "0123456789ABCDEF";
 1025|       |                           unicode_escape[4] = hex_digits[(uint8_t(*c) >> 4) & 0xF];
 1026|       |                           unicode_escape[5] = hex_digits[uint8_t(*c) & 0xF];
 1027|       |                           std::memcpy(data, unicode_escape, 6);
 1028|       |                           data += 6;
 1029|       |                        }
 1030|       |                     }
 1031|  25.8k|                     else {
 1032|       |                        if constexpr (check_reject_control_characters(Opts)) {
 1033|       |                           // A control character with no two-character escape cannot be written
 1034|       |                           // without \uXXXX. The table entry is zero, so the memcpy below would
 1035|       |                           // put two NULs where one byte was. Flag it and let the loop finish:
 1036|       |                           // returning early here would leave c un-advanced and the SIMD scan
 1037|       |                           // would find the same byte forever. The output is abandoned anyway.
 1038|       |                           if (char_escape_table[uint8_t(*c)] == 0) [[unlikely]] {
 1039|       |                              ctx.error = error_code::invalid_control_character;
 1040|       |                           }
 1041|       |                        }
 1042|  25.8k|                        std::memcpy(data, &char_escape_table[uint8_t(*c)], 2);
 1043|  25.8k|                        data += 2;
 1044|  25.8k|                     }
 1045|  25.8k|                     ++c;
 1046|  25.8k|                  };
_ZN3glz2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_:
 2465|     62|      {
 2466|     62|         using ValueType = std::decay_t<V>;
 2467|       |         if constexpr (has_unknown_writer<ValueType> && not check_disable_write_unknown(Options)) {
 2468|       |            constexpr auto& writer = meta_unknown_write_v<ValueType>;
 2469|       |
 2470|       |            using WriterType = meta_unknown_write_t<ValueType>;
 2471|       |            if constexpr (std::is_member_object_pointer_v<WriterType>) {
 2472|       |               decltype(auto) unknown_writer = value.*writer;
 2473|       |               if (unknown_writer.size() > 0) {
 2474|       |                  // TODO: This intermediate is added to get GCC 14 to build
 2475|       |                  decltype(auto) merged = glz::merge{value, unknown_writer};
 2476|       |                  serialize<JSON>::op<disable_write_unknown_on<Options>()>(std::move(merged), ctx, b, ix);
 2477|       |               }
 2478|       |               else {
 2479|       |                  serialize<JSON>::op<disable_write_unknown_on<Options>()>(value, ctx, b, ix);
 2480|       |               }
 2481|       |            }
 2482|       |            else if constexpr (std::is_member_function_pointer_v<WriterType>) {
 2483|       |               decltype(auto) unknown_writer = (value.*writer)();
 2484|       |               if (unknown_writer.size() > 0) {
 2485|       |                  // TODO: This intermediate is added to get GCC 14 to build
 2486|       |                  decltype(auto) merged = glz::merge{value, unknown_writer};
 2487|       |                  serialize<JSON>::op<disable_write_unknown_on<Options>()>(std::move(merged), ctx, b, ix);
 2488|       |               }
 2489|       |               else {
 2490|       |                  serialize<JSON>::op<disable_write_unknown_on<Options>()>(value, ctx, b, ix);
 2491|       |               }
 2492|       |            }
 2493|       |            else {
 2494|       |               static_assert(false_v<T>, "unknown_write type not handled");
 2495|       |            }
 2496|       |         }
 2497|     62|         else {
 2498|       |            // handles glaze_object_t without extra unknown fields
 2499|     62|            static constexpr auto Opts =
 2500|     62|               disable_write_unknown_off<opening_and_closing_handled_off<ws_handled_off<Options>()>()>();
 2501|       |
 2502|     62|            if constexpr (not check_opening_handled(Options)) {
 2503|       |               if constexpr (Options.prettify) {
 2504|       |                  ctx.depth += check_indentation_width(Options);
 2505|       |                  if constexpr (not check_write_unchecked(Options)) {
 2506|       |                     if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 2507|       |                        return;
 2508|       |                     }
 2509|       |                  }
 2510|       |                  std::memcpy(&b[ix], "{\n", 2);
 2511|       |                  ix += 2;
 2512|       |                  std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2513|       |                  ix += ctx.depth;
 2514|       |               }
 2515|     62|               else {
 2516|     62|                  if constexpr (not check_write_unchecked(Options)) {
 2517|     62|                     if (!ensure_space(ctx, b, ix + 1)) [[unlikely]] {
  ------------------
  |  Branch (2517:26): [True: 0, False: 62]
  ------------------
 2518|      0|                        return;
 2519|      0|                     }
 2520|     62|                  }
 2521|     62|                  dump<not check_write_unchecked(Options)>('{', b, ix);
 2522|     62|               }
 2523|     62|            }
 2524|       |
 2525|      0|            static constexpr auto N = reflect<T>::size;
 2526|       |
 2527|     62|            decltype(auto) t = [&]() -> decltype(auto) {
 2528|     62|               if constexpr (reflectable<T>) {
 2529|     62|                  return to_tie(value);
 2530|     62|               }
 2531|     62|               else {
 2532|     62|                  return nullptr;
 2533|     62|               }
 2534|     62|            }();
 2535|       |
 2536|     62|            static constexpr auto padding = round_up_to_nearest_16(maximum_key_size<T> + write_padding_bytes);
 2537|     62|            if constexpr (maybe_skipped<Opts, T>) {
 2538|     62|               bool first = true;
 2539|     62|               for_each<N>([&]<size_t I>() {
 2540|     62|                  using val_t = field_t<T, I>;
 2541|       |
 2542|       |                  // `meta<T>::skip` joins the other compile-time exclusions here rather than returning
 2543|       |                  // early, so that a skipped field's writer is never instantiated -- see
 2544|       |                  // `skipped_by_meta`.
 2545|     62|                  constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 2546|     62|                  if constexpr (skipped_by_meta<T, I, operation::serialize> || always_skipped<val_t> ||
 2547|     62|                                (!write_function_pointers && is_any_function_ptr<val_t>)) {
 2548|     62|                     return;
 2549|     62|                  }
 2550|     62|                  else {
 2551|     62|                     if constexpr (meta_has_skip_if<T>) {
 2552|     62|                        static constexpr auto skip_if_key = glz::get<I>(reflect<T>::keys);
 2553|     62|                        static constexpr meta_context mctx{.op = operation::serialize};
 2554|     62|                        decltype(auto) field_value = [&]() -> decltype(auto) {
 2555|     62|                           if constexpr (reflectable<T>) {
 2556|     62|                              return get<I>(t);
 2557|     62|                           }
 2558|     62|                           else {
 2559|     62|                              return get_member(value, glz::get<I>(reflect<T>::values));
 2560|     62|                           }
 2561|     62|                        }();
 2562|     62|                        if (meta<T>::skip_if(field_value, skip_if_key, mctx)) return;
 2563|     62|                     }
 2564|       |
 2565|     62|                     if constexpr (null_t<val_t> && Opts.skip_null_members) {
 2566|     62|                        if constexpr (always_null_t<val_t>)
 2567|     62|                           return;
 2568|     62|                        else {
 2569|     62|                           const auto is_null = [&]() {
 2570|     62|                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|     62|                                 if constexpr (reflectable<T>) {
 2572|     62|                                    return get<I>(t);
 2573|     62|                                 }
 2574|     62|                                 else {
 2575|     62|                                    return get<I>(reflect<T>::values);
 2576|     62|                                 }
 2577|     62|                              };
 2578|       |
 2579|     62|                              if constexpr (nullable_wrapper<val_t>) {
 2580|     62|                                 return !bool(element()(value).val);
 2581|     62|                              }
 2582|     62|                              else if constexpr (nullable_value_t<val_t>) {
 2583|     62|                                 return !get_member(value, element()).has_value();
 2584|     62|                              }
 2585|     62|                              else {
 2586|     62|                                 return !bool(get_member(value, element()));
 2587|     62|                              }
 2588|     62|                           }();
 2589|     62|                           if (is_null) return;
 2590|     62|                        }
 2591|     62|                     }
 2592|     62|                     else if constexpr (is_specialization_v<val_t, custom_t> && Opts.skip_null_members &&
 2593|     62|                                        custom_getter_returns_nullable<val_t>()) {
 2594|     62|                        if (is_custom_field_null<T, I>(value, t, ctx)) return;
 2595|     62|                     }
 2596|     62|                     else if constexpr (Opts.skip_null_members && glaze_value_is_nullable<val_t>()) {
 2597|     62|                        if (is_glaze_value_field_null<T, I>(value, t)) return;
 2598|     62|                     }
 2599|       |
 2600|     62|                     if constexpr (check_skip_default_members(Opts) && has_skippable_default<val_t>) {
 2601|     62|                        decltype(auto) member = [&]() -> decltype(auto) {
 2602|     62|                           if constexpr (reflectable<T>) {
 2603|     62|                              return get_member(value, get<I>(t));
 2604|     62|                           }
 2605|     62|                           else {
 2606|     62|                              return get_member(value, get<I>(reflect<T>::values));
 2607|     62|                           }
 2608|     62|                        }();
 2609|     62|                        if (is_default_value(member)) return;
 2610|     62|                     }
 2611|       |
 2612|     62|                     if constexpr (Opts.prettify) {
 2613|     62|                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2614|     62|                           return;
 2615|     62|                        }
 2616|     62|                     }
 2617|     62|                     else {
 2618|     62|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
 2619|     62|                           return;
 2620|     62|                        }
 2621|     62|                     }
 2622|       |
 2623|     62|                     if (first) {
 2624|     62|                        first = false;
 2625|     62|                     }
 2626|     62|                     else {
 2627|       |                        // Null members may be skipped so we can't just write it out for all but the last member
 2628|     62|                        if constexpr (Opts.prettify) {
 2629|     62|                           std::memcpy(&b[ix], ",\n", 2);
 2630|     62|                           ix += 2;
 2631|     62|                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2632|     62|                           ix += ctx.depth;
 2633|     62|                        }
 2634|     62|                        else {
 2635|     62|                           std::memcpy(&b[ix], ",", 1);
 2636|     62|                           ++ix;
 2637|     62|                        }
 2638|     62|                        if constexpr (is_output_streaming<B>) {
 2639|     62|                           flush_buffer(b, ix);
 2640|     62|                        }
 2641|     62|                     }
 2642|       |
 2643|       |                     // MSVC requires get<I> rather than keys[I]
 2644|     62|                     static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2645|     62|                     static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2646|     62|                     static constexpr auto n = quoted_key.size();
 2647|     62|                     std::memcpy(&b[ix], quoted_key.data(), n);
 2648|     62|                     ix += n;
 2649|       |
 2650|     62|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
 2651|     62|                     if constexpr (reflectable<T>) {
 2652|     62|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2653|     62|                     }
 2654|     62|                     else {
 2655|     62|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2656|     62|                                                                 ix);
 2657|     62|                     }
 2658|     62|                  }
 2659|     62|               });
 2660|       |            }
 2661|       |            else {
 2662|       |               static constexpr size_t fixed_max_size = Opts.prettify ? 0 : fixed_padding<T>;
 2663|       |               if constexpr (fixed_max_size && not check_write_unchecked(Options)) {
 2664|       |                  if (!ensure_space(ctx, b, ix + fixed_max_size)) [[unlikely]] {
 2665|       |                     return;
 2666|       |                  }
 2667|       |               }
 2668|       |
 2669|       |               for_each<N>([&]<size_t I>() {
 2670|       |                  if constexpr (write_can_error<T>()) {
 2671|       |                     if (bool(ctx.error)) [[unlikely]] {
 2672|       |                        return;
 2673|       |                     }
 2674|       |                  }
 2675|       |                  if constexpr (not fixed_max_size) {
 2676|       |                     if constexpr (Opts.prettify) {
 2677|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2678|       |                           return;
 2679|       |                        }
 2680|       |                     }
 2681|       |                     else {
 2682|       |                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
 2683|       |                           return;
 2684|       |                        }
 2685|       |                     }
 2686|       |                  }
 2687|       |
 2688|       |                  if constexpr (I != 0 && Opts.prettify) {
 2689|       |                     std::memcpy(&b[ix], ",\n", 2);
 2690|       |                     ix += 2;
 2691|       |                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2692|       |                     ix += ctx.depth;
 2693|       |                  }
 2694|       |
 2695|       |                  using val_t = field_t<T, I>;
 2696|       |
 2697|       |                  // MSVC requires get<I> rather than keys[I]
 2698|       |                  static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2699|       |                  if constexpr (always_null_t<val_t>) {
 2700|       |                     if constexpr (I == 0 || Opts.prettify) {
 2701|       |                        static constexpr auto quoted_key = join_v<quoted_key_v<key, Opts.prettify>, chars<"null">>;
 2702|       |                        static constexpr auto n = quoted_key.size();
 2703|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2704|       |                        ix += n;
 2705|       |                     }
 2706|       |                     else {
 2707|       |                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>, chars<"null">>;
 2708|       |                        static constexpr auto n = quoted_key.size();
 2709|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2710|       |                        ix += n;
 2711|       |                     }
 2712|       |                  }
 2713|       |                  else {
 2714|       |                     if constexpr (I == 0 || Opts.prettify) {
 2715|       |                        static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2716|       |                        static constexpr auto n = quoted_key.size();
 2717|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2718|       |                        ix += n;
 2719|       |                     }
 2720|       |                     else {
 2721|       |                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>>;
 2722|       |                        static constexpr auto n = quoted_key.size();
 2723|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2724|       |                        ix += n;
 2725|       |                     }
 2726|       |
 2727|       |                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
 2728|       |                     if constexpr (reflectable<T>) {
 2729|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2730|       |                     }
 2731|       |                     else {
 2732|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2733|       |                                                                 ix);
 2734|       |                     }
 2735|       |                  }
 2736|       |               });
 2737|       |            }
 2738|       |
 2739|       |            // Options is required here, because it must be the top level
 2740|     62|            if constexpr (not check_closing_handled(Options)) {
 2741|       |               if constexpr (Options.prettify) {
 2742|       |                  ctx.depth -= check_indentation_width(Options);
 2743|       |                  if constexpr (not check_write_unchecked(Options)) {
 2744|       |                     if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 2745|       |                        return;
 2746|       |                     }
 2747|       |                  }
 2748|       |                  std::memcpy(&b[ix], "\n", 1);
 2749|       |                  ++ix;
 2750|       |                  std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2751|       |                  ix += ctx.depth;
 2752|       |                  std::memcpy(&b[ix], "}", 1);
 2753|       |                  ++ix;
 2754|       |               }
 2755|     62|               else {
 2756|     62|                  dump<not(fixed_padding<T> || check_write_unchecked(Options))>('}', b, ix);
 2757|     62|               }
 2758|     62|            }
 2759|     62|         }
 2760|     62|      }
_ZZN3glz2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlvE_clEv:
 2527|     62|            decltype(auto) t = [&]() -> decltype(auto) {
 2528|     62|               if constexpr (reflectable<T>) {
 2529|     62|                  return to_tie(value);
 2530|       |               }
 2531|       |               else {
 2532|       |                  return nullptr;
 2533|       |               }
 2534|     62|            }();
_ZZN3glz2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm0EEEDav:
 2539|     62|               for_each<N>([&]<size_t I>() {
 2540|     62|                  using val_t = field_t<T, I>;
 2541|       |
 2542|       |                  // `meta<T>::skip` joins the other compile-time exclusions here rather than returning
 2543|       |                  // early, so that a skipped field's writer is never instantiated -- see
 2544|       |                  // `skipped_by_meta`.
 2545|     62|                  constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 2546|       |                  if constexpr (skipped_by_meta<T, I, operation::serialize> || always_skipped<val_t> ||
 2547|       |                                (!write_function_pointers && is_any_function_ptr<val_t>)) {
 2548|       |                     return;
 2549|       |                  }
 2550|     62|                  else {
 2551|       |                     if constexpr (meta_has_skip_if<T>) {
 2552|       |                        static constexpr auto skip_if_key = glz::get<I>(reflect<T>::keys);
 2553|       |                        static constexpr meta_context mctx{.op = operation::serialize};
 2554|       |                        decltype(auto) field_value = [&]() -> decltype(auto) {
 2555|       |                           if constexpr (reflectable<T>) {
 2556|       |                              return get<I>(t);
 2557|       |                           }
 2558|       |                           else {
 2559|       |                              return get_member(value, glz::get<I>(reflect<T>::values));
 2560|       |                           }
 2561|       |                        }();
 2562|       |                        if (meta<T>::skip_if(field_value, skip_if_key, mctx)) return;
 2563|       |                     }
 2564|       |
 2565|       |                     if constexpr (null_t<val_t> && Opts.skip_null_members) {
 2566|       |                        if constexpr (always_null_t<val_t>)
 2567|       |                           return;
 2568|       |                        else {
 2569|       |                           const auto is_null = [&]() {
 2570|       |                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|       |                                 if constexpr (reflectable<T>) {
 2572|       |                                    return get<I>(t);
 2573|       |                                 }
 2574|       |                                 else {
 2575|       |                                    return get<I>(reflect<T>::values);
 2576|       |                                 }
 2577|       |                              };
 2578|       |
 2579|       |                              if constexpr (nullable_wrapper<val_t>) {
 2580|       |                                 return !bool(element()(value).val);
 2581|       |                              }
 2582|       |                              else if constexpr (nullable_value_t<val_t>) {
 2583|       |                                 return !get_member(value, element()).has_value();
 2584|       |                              }
 2585|       |                              else {
 2586|       |                                 return !bool(get_member(value, element()));
 2587|       |                              }
 2588|       |                           }();
 2589|       |                           if (is_null) return;
 2590|       |                        }
 2591|       |                     }
 2592|       |                     else if constexpr (is_specialization_v<val_t, custom_t> && Opts.skip_null_members &&
 2593|       |                                        custom_getter_returns_nullable<val_t>()) {
 2594|       |                        if (is_custom_field_null<T, I>(value, t, ctx)) return;
 2595|       |                     }
 2596|     62|                     else if constexpr (Opts.skip_null_members && glaze_value_is_nullable<val_t>()) {
 2597|     62|                        if (is_glaze_value_field_null<T, I>(value, t)) return;
 2598|     62|                     }
 2599|       |
 2600|       |                     if constexpr (check_skip_default_members(Opts) && has_skippable_default<val_t>) {
 2601|       |                        decltype(auto) member = [&]() -> decltype(auto) {
 2602|       |                           if constexpr (reflectable<T>) {
 2603|       |                              return get_member(value, get<I>(t));
 2604|       |                           }
 2605|       |                           else {
 2606|       |                              return get_member(value, get<I>(reflect<T>::values));
 2607|       |                           }
 2608|       |                        }();
 2609|       |                        if (is_default_value(member)) return;
 2610|       |                     }
 2611|       |
 2612|       |                     if constexpr (Opts.prettify) {
 2613|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2614|       |                           return;
 2615|       |                        }
 2616|       |                     }
 2617|     62|                     else {
 2618|     62|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
  ------------------
  |  Branch (2618:29): [True: 0, False: 62]
  ------------------
 2619|      0|                           return;
 2620|      0|                        }
 2621|     62|                     }
 2622|       |
 2623|     62|                     if (first) {
  ------------------
  |  Branch (2623:26): [True: 62, False: 0]
  ------------------
 2624|     62|                        first = false;
 2625|     62|                     }
 2626|      0|                     else {
 2627|       |                        // Null members may be skipped so we can't just write it out for all but the last member
 2628|       |                        if constexpr (Opts.prettify) {
 2629|       |                           std::memcpy(&b[ix], ",\n", 2);
 2630|       |                           ix += 2;
 2631|       |                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2632|       |                           ix += ctx.depth;
 2633|       |                        }
 2634|      0|                        else {
 2635|      0|                           std::memcpy(&b[ix], ",", 1);
 2636|      0|                           ++ix;
 2637|      0|                        }
 2638|       |                        if constexpr (is_output_streaming<B>) {
 2639|       |                           flush_buffer(b, ix);
 2640|       |                        }
 2641|      0|                     }
 2642|       |
 2643|       |                     // MSVC requires get<I> rather than keys[I]
 2644|     62|                     static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2645|     62|                     static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2646|     62|                     static constexpr auto n = quoted_key.size();
 2647|     62|                     std::memcpy(&b[ix], quoted_key.data(), n);
 2648|     62|                     ix += n;
 2649|       |
 2650|     62|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2650:57): [True: 0, Folded]
  ------------------
 2651|     62|                     if constexpr (reflectable<T>) {
 2652|     62|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2653|       |                     }
 2654|       |                     else {
 2655|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2656|       |                                                                 ix);
 2657|       |                     }
 2658|     62|                  }
 2659|     62|               });
_ZZN3glz2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm1EEEDav:
 2539|     62|               for_each<N>([&]<size_t I>() {
 2540|     62|                  using val_t = field_t<T, I>;
 2541|       |
 2542|       |                  // `meta<T>::skip` joins the other compile-time exclusions here rather than returning
 2543|       |                  // early, so that a skipped field's writer is never instantiated -- see
 2544|       |                  // `skipped_by_meta`.
 2545|     62|                  constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 2546|       |                  if constexpr (skipped_by_meta<T, I, operation::serialize> || always_skipped<val_t> ||
 2547|       |                                (!write_function_pointers && is_any_function_ptr<val_t>)) {
 2548|       |                     return;
 2549|       |                  }
 2550|     62|                  else {
 2551|       |                     if constexpr (meta_has_skip_if<T>) {
 2552|       |                        static constexpr auto skip_if_key = glz::get<I>(reflect<T>::keys);
 2553|       |                        static constexpr meta_context mctx{.op = operation::serialize};
 2554|       |                        decltype(auto) field_value = [&]() -> decltype(auto) {
 2555|       |                           if constexpr (reflectable<T>) {
 2556|       |                              return get<I>(t);
 2557|       |                           }
 2558|       |                           else {
 2559|       |                              return get_member(value, glz::get<I>(reflect<T>::values));
 2560|       |                           }
 2561|       |                        }();
 2562|       |                        if (meta<T>::skip_if(field_value, skip_if_key, mctx)) return;
 2563|       |                     }
 2564|       |
 2565|       |                     if constexpr (null_t<val_t> && Opts.skip_null_members) {
 2566|       |                        if constexpr (always_null_t<val_t>)
 2567|       |                           return;
 2568|       |                        else {
 2569|       |                           const auto is_null = [&]() {
 2570|       |                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|       |                                 if constexpr (reflectable<T>) {
 2572|       |                                    return get<I>(t);
 2573|       |                                 }
 2574|       |                                 else {
 2575|       |                                    return get<I>(reflect<T>::values);
 2576|       |                                 }
 2577|       |                              };
 2578|       |
 2579|       |                              if constexpr (nullable_wrapper<val_t>) {
 2580|       |                                 return !bool(element()(value).val);
 2581|       |                              }
 2582|       |                              else if constexpr (nullable_value_t<val_t>) {
 2583|       |                                 return !get_member(value, element()).has_value();
 2584|       |                              }
 2585|       |                              else {
 2586|       |                                 return !bool(get_member(value, element()));
 2587|       |                              }
 2588|       |                           }();
 2589|       |                           if (is_null) return;
 2590|       |                        }
 2591|       |                     }
 2592|       |                     else if constexpr (is_specialization_v<val_t, custom_t> && Opts.skip_null_members &&
 2593|       |                                        custom_getter_returns_nullable<val_t>()) {
 2594|       |                        if (is_custom_field_null<T, I>(value, t, ctx)) return;
 2595|       |                     }
 2596|     62|                     else if constexpr (Opts.skip_null_members && glaze_value_is_nullable<val_t>()) {
 2597|     62|                        if (is_glaze_value_field_null<T, I>(value, t)) return;
 2598|     62|                     }
 2599|       |
 2600|       |                     if constexpr (check_skip_default_members(Opts) && has_skippable_default<val_t>) {
 2601|       |                        decltype(auto) member = [&]() -> decltype(auto) {
 2602|       |                           if constexpr (reflectable<T>) {
 2603|       |                              return get_member(value, get<I>(t));
 2604|       |                           }
 2605|       |                           else {
 2606|       |                              return get_member(value, get<I>(reflect<T>::values));
 2607|       |                           }
 2608|       |                        }();
 2609|       |                        if (is_default_value(member)) return;
 2610|       |                     }
 2611|       |
 2612|       |                     if constexpr (Opts.prettify) {
 2613|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2614|       |                           return;
 2615|       |                        }
 2616|       |                     }
 2617|     62|                     else {
 2618|     62|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
  ------------------
  |  Branch (2618:29): [True: 0, False: 62]
  ------------------
 2619|      0|                           return;
 2620|      0|                        }
 2621|     62|                     }
 2622|       |
 2623|     62|                     if (first) {
  ------------------
  |  Branch (2623:26): [True: 0, False: 62]
  ------------------
 2624|      0|                        first = false;
 2625|      0|                     }
 2626|     62|                     else {
 2627|       |                        // Null members may be skipped so we can't just write it out for all but the last member
 2628|       |                        if constexpr (Opts.prettify) {
 2629|       |                           std::memcpy(&b[ix], ",\n", 2);
 2630|       |                           ix += 2;
 2631|       |                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2632|       |                           ix += ctx.depth;
 2633|       |                        }
 2634|     62|                        else {
 2635|     62|                           std::memcpy(&b[ix], ",", 1);
 2636|     62|                           ++ix;
 2637|     62|                        }
 2638|       |                        if constexpr (is_output_streaming<B>) {
 2639|       |                           flush_buffer(b, ix);
 2640|       |                        }
 2641|     62|                     }
 2642|       |
 2643|       |                     // MSVC requires get<I> rather than keys[I]
 2644|     62|                     static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2645|     62|                     static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2646|     62|                     static constexpr auto n = quoted_key.size();
 2647|     62|                     std::memcpy(&b[ix], quoted_key.data(), n);
 2648|     62|                     ix += n;
 2649|       |
 2650|     62|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2650:57): [Folded, False: 62]
  ------------------
 2651|     62|                     if constexpr (reflectable<T>) {
 2652|     62|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2653|       |                     }
 2654|       |                     else {
 2655|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2656|       |                                                                 ix);
 2657|       |                     }
 2658|     62|                  }
 2659|     62|               });
_ZN3glz2toILj10ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS7_SB_TkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_:
  845|    697|      {
  846|       |         if constexpr (check_string_as_number(Opts)) {
  847|       |            const sv str = [&]() -> const sv {
  848|       |               if constexpr (array_char_t<T>) {
  849|       |                  const auto* start = value.data();
  850|       |                  const auto* end = static_cast<const char*>(std::memchr(start, '\0', value.size()));
  851|       |                  return sv{start, end ? size_t(end - start) : value.size()};
  852|       |               }
  853|       |               else if constexpr (u8str_t<T>) {
  854|       |                  return sv{reinterpret_cast<const char*>(value.data()), value.size()};
  855|       |               }
  856|       |               else {
  857|       |                  return str_view<T>(value);
  858|       |               }
  859|       |            }();
  860|       |            if (!ensure_space(ctx, b, ix + str.size() + write_padding_bytes)) [[unlikely]] {
  861|       |               return;
  862|       |            }
  863|       |            dump_maybe_empty<false>(str, b, ix);
  864|       |         }
  865|       |         else if constexpr (char_t<T>) {
  866|       |            if constexpr (check_unquoted(Opts)) {
  867|       |               dump(value, b, ix);
  868|       |            }
  869|       |            else {
  870|       |               // 8 bytes is enough for quotes and escaped character (worst case: \uXXXX = 6 + 2 quotes)
  871|       |               if (!ensure_space(ctx, b, ix + 8)) [[unlikely]] {
  872|       |                  return;
  873|       |               }
  874|       |
  875|       |               std::memcpy(&b[ix], "\"", 1);
  876|       |               ++ix;
  877|       |               if (const auto escaped = char_escape_table[uint8_t(value)]; escaped) {
  878|       |                  std::memcpy(&b[ix], &escaped, 2);
  879|       |                  ix += 2;
  880|       |               }
  881|       |               else if (value == '\0') {
  882|       |                  // null character treated as empty string
  883|       |               }
  884|       |               else if constexpr (check_escape_control_characters(Opts)) {
  885|       |                  if (uint8_t(value) < 0x20) {
  886|       |                     // Write as \uXXXX format
  887|       |                     char unicode_escape[6] = {'\\', 'u', '0', '0', '0', '0'};
  888|       |                     constexpr char hex_digits[] = "0123456789ABCDEF";
  889|       |                     unicode_escape[4] = hex_digits[(value >> 4) & 0xF];
  890|       |                     unicode_escape[5] = hex_digits[value & 0xF];
  891|       |                     std::memcpy(&b[ix], unicode_escape, 6);
  892|       |                     ix += 6;
  893|       |                  }
  894|       |                  else {
  895|       |                     std::memcpy(&b[ix], &value, 1);
  896|       |                     ++ix;
  897|       |                  }
  898|       |               }
  899|       |               else {
  900|       |                  if constexpr (check_reject_control_characters(Opts)) {
  901|       |                     if (uint8_t(value) < 0x20) [[unlikely]] {
  902|       |                        ctx.error = error_code::invalid_control_character;
  903|       |                     }
  904|       |                  }
  905|       |                  std::memcpy(&b[ix], &value, 1);
  906|       |                  ++ix;
  907|       |               }
  908|       |               std::memcpy(&b[ix], "\"", 1);
  909|       |               ++ix;
  910|       |            }
  911|       |         }
  912|    697|         else {
  913|       |            if constexpr (check_raw_string(Opts)) {
  914|       |               const sv str = [&]() -> const sv {
  915|       |                  if constexpr (u8str_t<T>) {
  916|       |                     return sv{reinterpret_cast<const char*>(value.data()), value.size()};
  917|       |                  }
  918|       |                  else {
  919|       |                     return str_view<T>(value);
  920|       |                  }
  921|       |               }();
  922|       |
  923|       |               // We need space for quotes and the string length: 2 + n.
  924|       |               // Use +8 for extra buffer
  925|       |               if (!ensure_space(ctx, b, ix + 8 + str.size())) [[unlikely]] {
  926|       |                  return;
  927|       |               }
  928|       |               // now we don't have to check writing
  929|       |
  930|       |               if constexpr (not check_unquoted(Opts)) {
  931|       |                  std::memcpy(&b[ix], "\"", 1);
  932|       |                  ++ix;
  933|       |               }
  934|       |               if (str.size()) [[likely]] {
  935|       |                  const auto n = str.size();
  936|       |                  std::memcpy(&b[ix], str.data(), n);
  937|       |                  ix += n;
  938|       |               }
  939|       |               if constexpr (not check_unquoted(Opts)) {
  940|       |                  std::memcpy(&b[ix], "\"", 1);
  941|       |                  ++ix;
  942|       |               }
  943|       |            }
  944|    697|            else {
  945|    697|               const sv str = [&]() -> const sv {
  946|    697|                  if constexpr (array_char_t<T>) {
  947|    697|                     return sv{value.data(), value.size()};
  948|    697|                  }
  949|    697|                  else if constexpr (u8str_t<T>) {
  950|    697|                     return sv{reinterpret_cast<const char*>(value.data()), value.size()};
  951|    697|                  }
  952|    697|                  else {
  953|    697|                     return str_view<T>(value);
  954|    697|                  }
  955|    697|               }();
  956|    697|               const auto n = str.size();
  957|       |
  958|       |               // In the case n == 0 we need two characters for quotes.
  959|       |               // For each individual character we need room for two characters to handle escapes.
  960|       |               // When using Unicode escapes, we might need up to 6 characters (\uXXXX) per character
  961|       |               if constexpr (check_escape_control_characters(Opts)) {
  962|       |                  if constexpr (has_bounded_capacity<B>) {
  963|       |                     // 6 bytes per character is a ceiling only a string of nothing but control
  964|       |                     // characters reaches. A resizable buffer merely over-allocates against it,
  965|       |                     // but a fixed buffer has nowhere to grow, so the ceiling would reject output
  966|       |                     // that fits. Measuring the string answers exactly, at the cost of a pass over
  967|       |                     // it, so bracket the measurement between two O(1) bounds and only pay it when
  968|       |                     // the answer is still in doubt: the ceiling fitting means yes, and the floor
  969|       |                     // of one byte per character not fitting means no.
  970|       |                     const size_t capacity = buffer_traits<std::remove_cvref_t<B>>::capacity(b);
  971|       |                     size_t required = ix + 10 + 6 * n;
  972|       |                     if (required > capacity) [[unlikely]] {
  973|       |                        required = ix + 10 + n;
  974|       |                        if (required <= capacity) {
  975|       |                           required = ix + 10 + detail::escaped_string_size(str);
  976|       |                        }
  977|       |                     }
  978|       |                     if (!ensure_space(ctx, b, required)) [[unlikely]] {
  979|       |                        return;
  980|       |                     }
  981|       |                  }
  982|       |                  // We need 2 + 6 * n characters in the worst case (all control chars)
  983|       |                  else if (!ensure_space(ctx, b, ix + 10 + 6 * n)) [[unlikely]] {
  984|       |                     return;
  985|       |                  }
  986|       |               }
  987|    697|               else {
  988|       |                  // Using the original sizing
  989|    697|                  if (!ensure_space(ctx, b, ix + 10 + 2 * n)) [[unlikely]] {
  ------------------
  |  Branch (989:23): [True: 0, False: 697]
  ------------------
  990|      0|                     return;
  991|      0|                  }
  992|    697|               }
  993|       |               // now we don't have to check writing
  994|       |
  995|       |               if constexpr (check_unquoted(Opts)) {
  996|       |                  if (n) {
  997|       |                     std::memcpy(&b[ix], str.data(), n);
  998|       |                     ix += n;
  999|       |                  }
 1000|       |               }
 1001|    697|               else {
 1002|    697|                  std::memcpy(&b[ix], "\"", 1);
 1003|    697|                  ++ix;
 1004|       |
 1005|    697|                  const auto* c = str.data();
 1006|    697|                  const auto* const e = c + n;
 1007|    697|                  const auto start = &b[ix];
 1008|    697|                  auto data = start;
 1009|       |
 1010|       |                  // By default we don't escape control characters for performance. Invalid JSON characters
 1011|       |                  // result in null characters in the output, making the JSON invalid — these would then be
 1012|       |                  // detected upon reading. Enable the `escape_control_characters` option to properly escape
 1013|       |                  // control characters (0x00–0x1F) as \uXXXX sequences.
 1014|       |
 1015|       |                  // Escape handler: writes the escaped form of *c into data, advances both pointers
 1016|    697|                  auto write_escape = [&]() {
 1017|    697|                     if constexpr (check_escape_control_characters(Opts)) {
 1018|    697|                        if (const auto escaped = char_escape_table[uint8_t(*c)]; escaped) {
 1019|    697|                           std::memcpy(data, &escaped, 2);
 1020|    697|                           data += 2;
 1021|    697|                        }
 1022|    697|                        else {
 1023|    697|                           char unicode_escape[6] = {'\\', 'u', '0', '0', '0', '0'};
 1024|    697|                           constexpr char hex_digits[] = "0123456789ABCDEF";
 1025|    697|                           unicode_escape[4] = hex_digits[(uint8_t(*c) >> 4) & 0xF];
 1026|    697|                           unicode_escape[5] = hex_digits[uint8_t(*c) & 0xF];
 1027|    697|                           std::memcpy(data, unicode_escape, 6);
 1028|    697|                           data += 6;
 1029|    697|                        }
 1030|    697|                     }
 1031|    697|                     else {
 1032|    697|                        if constexpr (check_reject_control_characters(Opts)) {
 1033|       |                           // A control character with no two-character escape cannot be written
 1034|       |                           // without \uXXXX. The table entry is zero, so the memcpy below would
 1035|       |                           // put two NULs where one byte was. Flag it and let the loop finish:
 1036|       |                           // returning early here would leave c un-advanced and the SIMD scan
 1037|       |                           // would find the same byte forever. The output is abandoned anyway.
 1038|    697|                           if (char_escape_table[uint8_t(*c)] == 0) [[unlikely]] {
 1039|    697|                              ctx.error = error_code::invalid_control_character;
 1040|    697|                           }
 1041|    697|                        }
 1042|    697|                        std::memcpy(data, &char_escape_table[uint8_t(*c)], 2);
 1043|    697|                        data += 2;
 1044|    697|                     }
 1045|    697|                     ++c;
 1046|    697|                  };
 1047|       |
 1048|       |                  // Adding a helper here means adding a branch to string_escape_simd() in
 1049|       |                  // simd/backends.hpp, which names the widest one this cascade invokes, and a row
 1050|       |                  // to known_builds in tests/json_test/utf8_validation_test.cpp, which checks it.
 1051|       |#if defined(GLZ_USE_AVX2)
 1052|       |                  detail::avx2_string_escape(c, e, data, n, write_escape);
 1053|       |#endif
 1054|    697|#if defined(GLZ_USE_SSE2)
 1055|    697|                  detail::sse2_string_escape(c, e, data, n, write_escape);
 1056|       |#elif defined(GLZ_USE_NEON)
 1057|       |                  detail::neon_string_escape(c, e, data, n, write_escape);
 1058|       |#endif
 1059|       |
 1060|       |                  // SWAR: 8 bytes at a time
 1061|    697|                  if (n > 7) {
  ------------------
  |  Branch (1061:23): [True: 188, False: 509]
  ------------------
 1062|    396|                     for (const auto end_m7 = e - 7; c < end_m7;) {
  ------------------
  |  Branch (1062:54): [True: 208, False: 188]
  ------------------
 1063|    208|                        std::memcpy(data, c, 8);
 1064|    208|                        uint64_t swar;
 1065|    208|                        std::memcpy(&swar, c, 8);
 1066|       |                        if constexpr (std::endian::native == std::endian::big) {
 1067|       |                           swar = std::byteswap(swar);
 1068|       |                        }
 1069|       |
 1070|    208|                        constexpr uint64_t lo7_mask = repeat_byte8(0b01111111);
 1071|    208|                        const uint64_t lo7 = swar & lo7_mask;
 1072|    208|                        const uint64_t quote = (lo7 ^ repeat_byte8('"')) + lo7_mask;
 1073|    208|                        const uint64_t backslash = (lo7 ^ repeat_byte8('\\')) + lo7_mask;
 1074|    208|                        const uint64_t less_32 = (swar & repeat_byte8(0b01100000)) + lo7_mask;
 1075|    208|                        uint64_t next = ~((quote & backslash & less_32) | swar);
 1076|       |
 1077|    208|                        next &= repeat_byte8(0b10000000);
 1078|    208|                        if (next == 0) {
  ------------------
  |  Branch (1078:29): [True: 85, False: 123]
  ------------------
 1079|     85|                           data += 8;
 1080|     85|                           c += 8;
 1081|     85|                           continue;
 1082|     85|                        }
 1083|       |
 1084|    123|                        const auto length = (countr_zero(next) >> 3);
 1085|    123|                        c += length;
 1086|    123|                        data += length;
 1087|    123|                        write_escape();
 1088|    123|                     }
 1089|    188|                  }
 1090|       |
 1091|       |                  // Scalar tail
 1092|  1.79k|                  for (; c < e; ++c) {
  ------------------
  |  Branch (1092:26): [True: 1.09k, False: 697]
  ------------------
 1093|  1.09k|                     if (const auto escaped = char_escape_table[uint8_t(*c)]; escaped) {
  ------------------
  |  Branch (1093:79): [True: 146, False: 949]
  ------------------
 1094|    146|                        std::memcpy(data, &escaped, 2);
 1095|    146|                        data += 2;
 1096|    146|                     }
 1097|       |                     else if constexpr (check_escape_control_characters(Opts)) {
 1098|       |                        if (uint8_t(*c) < 0x20) {
 1099|       |                           char unicode_escape[6] = {'\\', 'u', '0', '0', '0', '0'};
 1100|       |                           constexpr char hex_digits[] = "0123456789ABCDEF";
 1101|       |                           unicode_escape[4] = hex_digits[(uint8_t(*c) >> 4) & 0xF];
 1102|       |                           unicode_escape[5] = hex_digits[uint8_t(*c) & 0xF];
 1103|       |                           std::memcpy(data, unicode_escape, 6);
 1104|       |                           data += 6;
 1105|       |                        }
 1106|       |                        else {
 1107|       |                           std::memcpy(data, c, 1);
 1108|       |                           ++data;
 1109|       |                        }
 1110|       |                     }
 1111|    949|                     else {
 1112|       |                        if constexpr (check_reject_control_characters(Opts)) {
 1113|       |                           if (uint8_t(*c) < 0x20) [[unlikely]] {
 1114|       |                              ctx.error = error_code::invalid_control_character;
 1115|       |                           }
 1116|       |                        }
 1117|    949|                        std::memcpy(data, c, 1);
 1118|    949|                        ++data;
 1119|    949|                     }
 1120|  1.09k|                  }
 1121|       |
 1122|    697|                  ix += size_t(data - start);
 1123|       |
 1124|    697|                  std::memcpy(&b[ix], "\"", 1);
 1125|    697|                  ++ix;
 1126|    697|               }
 1127|    697|            }
 1128|    697|         }
 1129|    697|      }
_ZZN3glz2toILj10ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS7_SB_TkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_ENKUlvE_clEv:
  945|    697|               const sv str = [&]() -> const sv {
  946|       |                  if constexpr (array_char_t<T>) {
  947|       |                     return sv{value.data(), value.size()};
  948|       |                  }
  949|       |                  else if constexpr (u8str_t<T>) {
  950|       |                     return sv{reinterpret_cast<const char*>(value.data()), value.size()};
  951|       |                  }
  952|    697|                  else {
  953|    697|                     return str_view<T>(value);
  954|    697|                  }
  955|    697|               }();
_ZZN3glz2toILj10ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS7_SB_TkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_ENKUlvE0_clEv:
 1016|  8.99k|                  auto write_escape = [&]() {
 1017|       |                     if constexpr (check_escape_control_characters(Opts)) {
 1018|       |                        if (const auto escaped = char_escape_table[uint8_t(*c)]; escaped) {
 1019|       |                           std::memcpy(data, &escaped, 2);
 1020|       |                           data += 2;
 1021|       |                        }
 1022|       |                        else {
 1023|       |                           char unicode_escape[6] = {'\\', 'u', '0', '0', '0', '0'};
 1024|       |                           constexpr char hex_digits[] = "0123456789ABCDEF";
 1025|       |                           unicode_escape[4] = hex_digits[(uint8_t(*c) >> 4) & 0xF];
 1026|       |                           unicode_escape[5] = hex_digits[uint8_t(*c) & 0xF];
 1027|       |                           std::memcpy(data, unicode_escape, 6);
 1028|       |                           data += 6;
 1029|       |                        }
 1030|       |                     }
 1031|  8.99k|                     else {
 1032|       |                        if constexpr (check_reject_control_characters(Opts)) {
 1033|       |                           // A control character with no two-character escape cannot be written
 1034|       |                           // without \uXXXX. The table entry is zero, so the memcpy below would
 1035|       |                           // put two NULs where one byte was. Flag it and let the loop finish:
 1036|       |                           // returning early here would leave c un-advanced and the SIMD scan
 1037|       |                           // would find the same byte forever. The output is abandoned anyway.
 1038|       |                           if (char_escape_table[uint8_t(*c)] == 0) [[unlikely]] {
 1039|       |                              ctx.error = error_code::invalid_control_character;
 1040|       |                           }
 1041|       |                        }
 1042|  8.99k|                        std::memcpy(data, &char_escape_table[uint8_t(*c)], 2);
 1043|  8.99k|                        data += 2;
 1044|  8.99k|                     }
 1045|  8.99k|                     ++c;
 1046|  8.99k|                  };
_ZZN3glz2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm2EEEDav:
 2539|     62|               for_each<N>([&]<size_t I>() {
 2540|     62|                  using val_t = field_t<T, I>;
 2541|       |
 2542|       |                  // `meta<T>::skip` joins the other compile-time exclusions here rather than returning
 2543|       |                  // early, so that a skipped field's writer is never instantiated -- see
 2544|       |                  // `skipped_by_meta`.
 2545|     62|                  constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 2546|       |                  if constexpr (skipped_by_meta<T, I, operation::serialize> || always_skipped<val_t> ||
 2547|       |                                (!write_function_pointers && is_any_function_ptr<val_t>)) {
 2548|       |                     return;
 2549|       |                  }
 2550|     62|                  else {
 2551|       |                     if constexpr (meta_has_skip_if<T>) {
 2552|       |                        static constexpr auto skip_if_key = glz::get<I>(reflect<T>::keys);
 2553|       |                        static constexpr meta_context mctx{.op = operation::serialize};
 2554|       |                        decltype(auto) field_value = [&]() -> decltype(auto) {
 2555|       |                           if constexpr (reflectable<T>) {
 2556|       |                              return get<I>(t);
 2557|       |                           }
 2558|       |                           else {
 2559|       |                              return get_member(value, glz::get<I>(reflect<T>::values));
 2560|       |                           }
 2561|       |                        }();
 2562|       |                        if (meta<T>::skip_if(field_value, skip_if_key, mctx)) return;
 2563|       |                     }
 2564|       |
 2565|       |                     if constexpr (null_t<val_t> && Opts.skip_null_members) {
 2566|       |                        if constexpr (always_null_t<val_t>)
 2567|       |                           return;
 2568|       |                        else {
 2569|       |                           const auto is_null = [&]() {
 2570|       |                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|       |                                 if constexpr (reflectable<T>) {
 2572|       |                                    return get<I>(t);
 2573|       |                                 }
 2574|       |                                 else {
 2575|       |                                    return get<I>(reflect<T>::values);
 2576|       |                                 }
 2577|       |                              };
 2578|       |
 2579|       |                              if constexpr (nullable_wrapper<val_t>) {
 2580|       |                                 return !bool(element()(value).val);
 2581|       |                              }
 2582|       |                              else if constexpr (nullable_value_t<val_t>) {
 2583|       |                                 return !get_member(value, element()).has_value();
 2584|       |                              }
 2585|       |                              else {
 2586|       |                                 return !bool(get_member(value, element()));
 2587|       |                              }
 2588|       |                           }();
 2589|       |                           if (is_null) return;
 2590|       |                        }
 2591|       |                     }
 2592|       |                     else if constexpr (is_specialization_v<val_t, custom_t> && Opts.skip_null_members &&
 2593|       |                                        custom_getter_returns_nullable<val_t>()) {
 2594|       |                        if (is_custom_field_null<T, I>(value, t, ctx)) return;
 2595|       |                     }
 2596|     62|                     else if constexpr (Opts.skip_null_members && glaze_value_is_nullable<val_t>()) {
 2597|     62|                        if (is_glaze_value_field_null<T, I>(value, t)) return;
 2598|     62|                     }
 2599|       |
 2600|       |                     if constexpr (check_skip_default_members(Opts) && has_skippable_default<val_t>) {
 2601|       |                        decltype(auto) member = [&]() -> decltype(auto) {
 2602|       |                           if constexpr (reflectable<T>) {
 2603|       |                              return get_member(value, get<I>(t));
 2604|       |                           }
 2605|       |                           else {
 2606|       |                              return get_member(value, get<I>(reflect<T>::values));
 2607|       |                           }
 2608|       |                        }();
 2609|       |                        if (is_default_value(member)) return;
 2610|       |                     }
 2611|       |
 2612|       |                     if constexpr (Opts.prettify) {
 2613|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2614|       |                           return;
 2615|       |                        }
 2616|       |                     }
 2617|     62|                     else {
 2618|     62|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
  ------------------
  |  Branch (2618:29): [True: 0, False: 62]
  ------------------
 2619|      0|                           return;
 2620|      0|                        }
 2621|     62|                     }
 2622|       |
 2623|     62|                     if (first) {
  ------------------
  |  Branch (2623:26): [True: 0, False: 62]
  ------------------
 2624|      0|                        first = false;
 2625|      0|                     }
 2626|     62|                     else {
 2627|       |                        // Null members may be skipped so we can't just write it out for all but the last member
 2628|       |                        if constexpr (Opts.prettify) {
 2629|       |                           std::memcpy(&b[ix], ",\n", 2);
 2630|       |                           ix += 2;
 2631|       |                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2632|       |                           ix += ctx.depth;
 2633|       |                        }
 2634|     62|                        else {
 2635|     62|                           std::memcpy(&b[ix], ",", 1);
 2636|     62|                           ++ix;
 2637|     62|                        }
 2638|       |                        if constexpr (is_output_streaming<B>) {
 2639|       |                           flush_buffer(b, ix);
 2640|       |                        }
 2641|     62|                     }
 2642|       |
 2643|       |                     // MSVC requires get<I> rather than keys[I]
 2644|     62|                     static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2645|     62|                     static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2646|     62|                     static constexpr auto n = quoted_key.size();
 2647|     62|                     std::memcpy(&b[ix], quoted_key.data(), n);
 2648|     62|                     ix += n;
 2649|       |
 2650|     62|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2650:57): [Folded, False: 62]
  ------------------
 2651|     62|                     if constexpr (reflectable<T>) {
 2652|     62|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2653|       |                     }
 2654|       |                     else {
 2655|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2656|       |                                                                 ix);
 2657|       |                     }
 2658|     62|                  }
 2659|     62|               });
_ZN3glz2toILj10EN9repe_fuzz5pointEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_:
 2465|    181|      {
 2466|    181|         using ValueType = std::decay_t<V>;
 2467|       |         if constexpr (has_unknown_writer<ValueType> && not check_disable_write_unknown(Options)) {
 2468|       |            constexpr auto& writer = meta_unknown_write_v<ValueType>;
 2469|       |
 2470|       |            using WriterType = meta_unknown_write_t<ValueType>;
 2471|       |            if constexpr (std::is_member_object_pointer_v<WriterType>) {
 2472|       |               decltype(auto) unknown_writer = value.*writer;
 2473|       |               if (unknown_writer.size() > 0) {
 2474|       |                  // TODO: This intermediate is added to get GCC 14 to build
 2475|       |                  decltype(auto) merged = glz::merge{value, unknown_writer};
 2476|       |                  serialize<JSON>::op<disable_write_unknown_on<Options>()>(std::move(merged), ctx, b, ix);
 2477|       |               }
 2478|       |               else {
 2479|       |                  serialize<JSON>::op<disable_write_unknown_on<Options>()>(value, ctx, b, ix);
 2480|       |               }
 2481|       |            }
 2482|       |            else if constexpr (std::is_member_function_pointer_v<WriterType>) {
 2483|       |               decltype(auto) unknown_writer = (value.*writer)();
 2484|       |               if (unknown_writer.size() > 0) {
 2485|       |                  // TODO: This intermediate is added to get GCC 14 to build
 2486|       |                  decltype(auto) merged = glz::merge{value, unknown_writer};
 2487|       |                  serialize<JSON>::op<disable_write_unknown_on<Options>()>(std::move(merged), ctx, b, ix);
 2488|       |               }
 2489|       |               else {
 2490|       |                  serialize<JSON>::op<disable_write_unknown_on<Options>()>(value, ctx, b, ix);
 2491|       |               }
 2492|       |            }
 2493|       |            else {
 2494|       |               static_assert(false_v<T>, "unknown_write type not handled");
 2495|       |            }
 2496|       |         }
 2497|    181|         else {
 2498|       |            // handles glaze_object_t without extra unknown fields
 2499|    181|            static constexpr auto Opts =
 2500|    181|               disable_write_unknown_off<opening_and_closing_handled_off<ws_handled_off<Options>()>()>();
 2501|       |
 2502|    181|            if constexpr (not check_opening_handled(Options)) {
 2503|       |               if constexpr (Options.prettify) {
 2504|       |                  ctx.depth += check_indentation_width(Options);
 2505|       |                  if constexpr (not check_write_unchecked(Options)) {
 2506|       |                     if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 2507|       |                        return;
 2508|       |                     }
 2509|       |                  }
 2510|       |                  std::memcpy(&b[ix], "{\n", 2);
 2511|       |                  ix += 2;
 2512|       |                  std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2513|       |                  ix += ctx.depth;
 2514|       |               }
 2515|    181|               else {
 2516|    181|                  if constexpr (not check_write_unchecked(Options)) {
 2517|    181|                     if (!ensure_space(ctx, b, ix + 1)) [[unlikely]] {
  ------------------
  |  Branch (2517:26): [True: 0, False: 181]
  ------------------
 2518|      0|                        return;
 2519|      0|                     }
 2520|    181|                  }
 2521|    181|                  dump<not check_write_unchecked(Options)>('{', b, ix);
 2522|    181|               }
 2523|    181|            }
 2524|       |
 2525|      0|            static constexpr auto N = reflect<T>::size;
 2526|       |
 2527|    181|            decltype(auto) t = [&]() -> decltype(auto) {
 2528|    181|               if constexpr (reflectable<T>) {
 2529|    181|                  return to_tie(value);
 2530|    181|               }
 2531|    181|               else {
 2532|    181|                  return nullptr;
 2533|    181|               }
 2534|    181|            }();
 2535|       |
 2536|    181|            static constexpr auto padding = round_up_to_nearest_16(maximum_key_size<T> + write_padding_bytes);
 2537|       |            if constexpr (maybe_skipped<Opts, T>) {
 2538|       |               bool first = true;
 2539|       |               for_each<N>([&]<size_t I>() {
 2540|       |                  using val_t = field_t<T, I>;
 2541|       |
 2542|       |                  // `meta<T>::skip` joins the other compile-time exclusions here rather than returning
 2543|       |                  // early, so that a skipped field's writer is never instantiated -- see
 2544|       |                  // `skipped_by_meta`.
 2545|       |                  constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 2546|       |                  if constexpr (skipped_by_meta<T, I, operation::serialize> || always_skipped<val_t> ||
 2547|       |                                (!write_function_pointers && is_any_function_ptr<val_t>)) {
 2548|       |                     return;
 2549|       |                  }
 2550|       |                  else {
 2551|       |                     if constexpr (meta_has_skip_if<T>) {
 2552|       |                        static constexpr auto skip_if_key = glz::get<I>(reflect<T>::keys);
 2553|       |                        static constexpr meta_context mctx{.op = operation::serialize};
 2554|       |                        decltype(auto) field_value = [&]() -> decltype(auto) {
 2555|       |                           if constexpr (reflectable<T>) {
 2556|       |                              return get<I>(t);
 2557|       |                           }
 2558|       |                           else {
 2559|       |                              return get_member(value, glz::get<I>(reflect<T>::values));
 2560|       |                           }
 2561|       |                        }();
 2562|       |                        if (meta<T>::skip_if(field_value, skip_if_key, mctx)) return;
 2563|       |                     }
 2564|       |
 2565|       |                     if constexpr (null_t<val_t> && Opts.skip_null_members) {
 2566|       |                        if constexpr (always_null_t<val_t>)
 2567|       |                           return;
 2568|       |                        else {
 2569|       |                           const auto is_null = [&]() {
 2570|       |                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|       |                                 if constexpr (reflectable<T>) {
 2572|       |                                    return get<I>(t);
 2573|       |                                 }
 2574|       |                                 else {
 2575|       |                                    return get<I>(reflect<T>::values);
 2576|       |                                 }
 2577|       |                              };
 2578|       |
 2579|       |                              if constexpr (nullable_wrapper<val_t>) {
 2580|       |                                 return !bool(element()(value).val);
 2581|       |                              }
 2582|       |                              else if constexpr (nullable_value_t<val_t>) {
 2583|       |                                 return !get_member(value, element()).has_value();
 2584|       |                              }
 2585|       |                              else {
 2586|       |                                 return !bool(get_member(value, element()));
 2587|       |                              }
 2588|       |                           }();
 2589|       |                           if (is_null) return;
 2590|       |                        }
 2591|       |                     }
 2592|       |                     else if constexpr (is_specialization_v<val_t, custom_t> && Opts.skip_null_members &&
 2593|       |                                        custom_getter_returns_nullable<val_t>()) {
 2594|       |                        if (is_custom_field_null<T, I>(value, t, ctx)) return;
 2595|       |                     }
 2596|       |                     else if constexpr (Opts.skip_null_members && glaze_value_is_nullable<val_t>()) {
 2597|       |                        if (is_glaze_value_field_null<T, I>(value, t)) return;
 2598|       |                     }
 2599|       |
 2600|       |                     if constexpr (check_skip_default_members(Opts) && has_skippable_default<val_t>) {
 2601|       |                        decltype(auto) member = [&]() -> decltype(auto) {
 2602|       |                           if constexpr (reflectable<T>) {
 2603|       |                              return get_member(value, get<I>(t));
 2604|       |                           }
 2605|       |                           else {
 2606|       |                              return get_member(value, get<I>(reflect<T>::values));
 2607|       |                           }
 2608|       |                        }();
 2609|       |                        if (is_default_value(member)) return;
 2610|       |                     }
 2611|       |
 2612|       |                     if constexpr (Opts.prettify) {
 2613|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2614|       |                           return;
 2615|       |                        }
 2616|       |                     }
 2617|       |                     else {
 2618|       |                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
 2619|       |                           return;
 2620|       |                        }
 2621|       |                     }
 2622|       |
 2623|       |                     if (first) {
 2624|       |                        first = false;
 2625|       |                     }
 2626|       |                     else {
 2627|       |                        // Null members may be skipped so we can't just write it out for all but the last member
 2628|       |                        if constexpr (Opts.prettify) {
 2629|       |                           std::memcpy(&b[ix], ",\n", 2);
 2630|       |                           ix += 2;
 2631|       |                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2632|       |                           ix += ctx.depth;
 2633|       |                        }
 2634|       |                        else {
 2635|       |                           std::memcpy(&b[ix], ",", 1);
 2636|       |                           ++ix;
 2637|       |                        }
 2638|       |                        if constexpr (is_output_streaming<B>) {
 2639|       |                           flush_buffer(b, ix);
 2640|       |                        }
 2641|       |                     }
 2642|       |
 2643|       |                     // MSVC requires get<I> rather than keys[I]
 2644|       |                     static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2645|       |                     static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2646|       |                     static constexpr auto n = quoted_key.size();
 2647|       |                     std::memcpy(&b[ix], quoted_key.data(), n);
 2648|       |                     ix += n;
 2649|       |
 2650|       |                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
 2651|       |                     if constexpr (reflectable<T>) {
 2652|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2653|       |                     }
 2654|       |                     else {
 2655|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2656|       |                                                                 ix);
 2657|       |                     }
 2658|       |                  }
 2659|       |               });
 2660|       |            }
 2661|    181|            else {
 2662|    181|               static constexpr size_t fixed_max_size = Opts.prettify ? 0 : fixed_padding<T>;
  ------------------
  |  Branch (2662:57): [Folded, False: 181]
  ------------------
 2663|    181|               if constexpr (fixed_max_size && not check_write_unchecked(Options)) {
 2664|    181|                  if (!ensure_space(ctx, b, ix + fixed_max_size)) [[unlikely]] {
  ------------------
  |  Branch (2664:23): [True: 0, False: 181]
  ------------------
 2665|      0|                     return;
 2666|      0|                  }
 2667|    181|               }
 2668|       |
 2669|    181|               for_each<N>([&]<size_t I>() {
 2670|    181|                  if constexpr (write_can_error<T>()) {
 2671|    181|                     if (bool(ctx.error)) [[unlikely]] {
 2672|    181|                        return;
 2673|    181|                     }
 2674|    181|                  }
 2675|    181|                  if constexpr (not fixed_max_size) {
 2676|    181|                     if constexpr (Opts.prettify) {
 2677|    181|                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2678|    181|                           return;
 2679|    181|                        }
 2680|    181|                     }
 2681|    181|                     else {
 2682|    181|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
 2683|    181|                           return;
 2684|    181|                        }
 2685|    181|                     }
 2686|    181|                  }
 2687|       |
 2688|    181|                  if constexpr (I != 0 && Opts.prettify) {
 2689|    181|                     std::memcpy(&b[ix], ",\n", 2);
 2690|    181|                     ix += 2;
 2691|    181|                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2692|    181|                     ix += ctx.depth;
 2693|    181|                  }
 2694|       |
 2695|    181|                  using val_t = field_t<T, I>;
 2696|       |
 2697|       |                  // MSVC requires get<I> rather than keys[I]
 2698|    181|                  static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2699|    181|                  if constexpr (always_null_t<val_t>) {
 2700|    181|                     if constexpr (I == 0 || Opts.prettify) {
 2701|    181|                        static constexpr auto quoted_key = join_v<quoted_key_v<key, Opts.prettify>, chars<"null">>;
 2702|    181|                        static constexpr auto n = quoted_key.size();
 2703|    181|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2704|    181|                        ix += n;
 2705|    181|                     }
 2706|    181|                     else {
 2707|    181|                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>, chars<"null">>;
 2708|    181|                        static constexpr auto n = quoted_key.size();
 2709|    181|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2710|    181|                        ix += n;
 2711|    181|                     }
 2712|    181|                  }
 2713|    181|                  else {
 2714|    181|                     if constexpr (I == 0 || Opts.prettify) {
 2715|    181|                        static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2716|    181|                        static constexpr auto n = quoted_key.size();
 2717|    181|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2718|    181|                        ix += n;
 2719|    181|                     }
 2720|    181|                     else {
 2721|    181|                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>>;
 2722|    181|                        static constexpr auto n = quoted_key.size();
 2723|    181|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2724|    181|                        ix += n;
 2725|    181|                     }
 2726|       |
 2727|    181|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
 2728|    181|                     if constexpr (reflectable<T>) {
 2729|    181|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2730|    181|                     }
 2731|    181|                     else {
 2732|    181|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2733|    181|                                                                 ix);
 2734|    181|                     }
 2735|    181|                  }
 2736|    181|               });
 2737|    181|            }
 2738|       |
 2739|       |            // Options is required here, because it must be the top level
 2740|    181|            if constexpr (not check_closing_handled(Options)) {
 2741|       |               if constexpr (Options.prettify) {
 2742|       |                  ctx.depth -= check_indentation_width(Options);
 2743|       |                  if constexpr (not check_write_unchecked(Options)) {
 2744|       |                     if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 2745|       |                        return;
 2746|       |                     }
 2747|       |                  }
 2748|       |                  std::memcpy(&b[ix], "\n", 1);
 2749|       |                  ++ix;
 2750|       |                  std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2751|       |                  ix += ctx.depth;
 2752|       |                  std::memcpy(&b[ix], "}", 1);
 2753|       |                  ++ix;
 2754|       |               }
 2755|    181|               else {
 2756|    181|                  dump<not(fixed_padding<T> || check_write_unchecked(Options))>('}', b, ix);
 2757|    181|               }
 2758|    181|            }
 2759|    181|         }
 2760|    181|      }
_ZZN3glz2toILj10EN9repe_fuzz5pointEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlvE_clEv:
 2527|    181|            decltype(auto) t = [&]() -> decltype(auto) {
 2528|    181|               if constexpr (reflectable<T>) {
 2529|    181|                  return to_tie(value);
 2530|       |               }
 2531|       |               else {
 2532|       |                  return nullptr;
 2533|       |               }
 2534|    181|            }();
_ZZN3glz2toILj10EN9repe_fuzz5pointEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm0EEEDav:
 2669|    181|               for_each<N>([&]<size_t I>() {
 2670|       |                  if constexpr (write_can_error<T>()) {
 2671|       |                     if (bool(ctx.error)) [[unlikely]] {
 2672|       |                        return;
 2673|       |                     }
 2674|       |                  }
 2675|       |                  if constexpr (not fixed_max_size) {
 2676|       |                     if constexpr (Opts.prettify) {
 2677|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2678|       |                           return;
 2679|       |                        }
 2680|       |                     }
 2681|       |                     else {
 2682|       |                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
 2683|       |                           return;
 2684|       |                        }
 2685|       |                     }
 2686|       |                  }
 2687|       |
 2688|       |                  if constexpr (I != 0 && Opts.prettify) {
 2689|       |                     std::memcpy(&b[ix], ",\n", 2);
 2690|       |                     ix += 2;
 2691|       |                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2692|       |                     ix += ctx.depth;
 2693|       |                  }
 2694|       |
 2695|    181|                  using val_t = field_t<T, I>;
 2696|       |
 2697|       |                  // MSVC requires get<I> rather than keys[I]
 2698|    181|                  static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2699|       |                  if constexpr (always_null_t<val_t>) {
 2700|       |                     if constexpr (I == 0 || Opts.prettify) {
 2701|       |                        static constexpr auto quoted_key = join_v<quoted_key_v<key, Opts.prettify>, chars<"null">>;
 2702|       |                        static constexpr auto n = quoted_key.size();
 2703|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2704|       |                        ix += n;
 2705|       |                     }
 2706|       |                     else {
 2707|       |                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>, chars<"null">>;
 2708|       |                        static constexpr auto n = quoted_key.size();
 2709|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2710|       |                        ix += n;
 2711|       |                     }
 2712|       |                  }
 2713|    181|                  else {
 2714|    181|                     if constexpr (I == 0 || Opts.prettify) {
 2715|    181|                        static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2716|    181|                        static constexpr auto n = quoted_key.size();
 2717|    181|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2718|    181|                        ix += n;
 2719|       |                     }
 2720|       |                     else {
 2721|       |                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>>;
 2722|       |                        static constexpr auto n = quoted_key.size();
 2723|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2724|       |                        ix += n;
 2725|       |                     }
 2726|       |
 2727|    181|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2727:57): [True: 0, Folded]
  ------------------
 2728|    181|                     if constexpr (reflectable<T>) {
 2729|    181|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2730|       |                     }
 2731|       |                     else {
 2732|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2733|       |                                                                 ix);
 2734|       |                     }
 2735|    181|                  }
 2736|    181|               });
_ZZN3glz2toILj10EN9repe_fuzz5pointEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm1EEEDav:
 2669|    181|               for_each<N>([&]<size_t I>() {
 2670|       |                  if constexpr (write_can_error<T>()) {
 2671|       |                     if (bool(ctx.error)) [[unlikely]] {
 2672|       |                        return;
 2673|       |                     }
 2674|       |                  }
 2675|       |                  if constexpr (not fixed_max_size) {
 2676|       |                     if constexpr (Opts.prettify) {
 2677|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2678|       |                           return;
 2679|       |                        }
 2680|       |                     }
 2681|       |                     else {
 2682|       |                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
 2683|       |                           return;
 2684|       |                        }
 2685|       |                     }
 2686|       |                  }
 2687|       |
 2688|       |                  if constexpr (I != 0 && Opts.prettify) {
 2689|       |                     std::memcpy(&b[ix], ",\n", 2);
 2690|       |                     ix += 2;
 2691|       |                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2692|       |                     ix += ctx.depth;
 2693|       |                  }
 2694|       |
 2695|    181|                  using val_t = field_t<T, I>;
 2696|       |
 2697|       |                  // MSVC requires get<I> rather than keys[I]
 2698|    181|                  static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2699|       |                  if constexpr (always_null_t<val_t>) {
 2700|       |                     if constexpr (I == 0 || Opts.prettify) {
 2701|       |                        static constexpr auto quoted_key = join_v<quoted_key_v<key, Opts.prettify>, chars<"null">>;
 2702|       |                        static constexpr auto n = quoted_key.size();
 2703|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2704|       |                        ix += n;
 2705|       |                     }
 2706|       |                     else {
 2707|       |                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>, chars<"null">>;
 2708|       |                        static constexpr auto n = quoted_key.size();
 2709|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2710|       |                        ix += n;
 2711|       |                     }
 2712|       |                  }
 2713|    181|                  else {
 2714|       |                     if constexpr (I == 0 || Opts.prettify) {
 2715|       |                        static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2716|       |                        static constexpr auto n = quoted_key.size();
 2717|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2718|       |                        ix += n;
 2719|       |                     }
 2720|    181|                     else {
 2721|    181|                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>>;
 2722|    181|                        static constexpr auto n = quoted_key.size();
 2723|    181|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2724|    181|                        ix += n;
 2725|    181|                     }
 2726|       |
 2727|    181|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2727:57): [True: 0, Folded]
  ------------------
 2728|    181|                     if constexpr (reflectable<T>) {
 2729|    181|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2730|       |                     }
 2731|       |                     else {
 2732|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2733|       |                                                                 ix);
 2734|       |                     }
 2735|    181|                  }
 2736|    181|               });
_ZZN3glz2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm3EEEDav:
 2539|     62|               for_each<N>([&]<size_t I>() {
 2540|     62|                  using val_t = field_t<T, I>;
 2541|       |
 2542|       |                  // `meta<T>::skip` joins the other compile-time exclusions here rather than returning
 2543|       |                  // early, so that a skipped field's writer is never instantiated -- see
 2544|       |                  // `skipped_by_meta`.
 2545|     62|                  constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 2546|       |                  if constexpr (skipped_by_meta<T, I, operation::serialize> || always_skipped<val_t> ||
 2547|       |                                (!write_function_pointers && is_any_function_ptr<val_t>)) {
 2548|       |                     return;
 2549|       |                  }
 2550|     62|                  else {
 2551|       |                     if constexpr (meta_has_skip_if<T>) {
 2552|       |                        static constexpr auto skip_if_key = glz::get<I>(reflect<T>::keys);
 2553|       |                        static constexpr meta_context mctx{.op = operation::serialize};
 2554|       |                        decltype(auto) field_value = [&]() -> decltype(auto) {
 2555|       |                           if constexpr (reflectable<T>) {
 2556|       |                              return get<I>(t);
 2557|       |                           }
 2558|       |                           else {
 2559|       |                              return get_member(value, glz::get<I>(reflect<T>::values));
 2560|       |                           }
 2561|       |                        }();
 2562|       |                        if (meta<T>::skip_if(field_value, skip_if_key, mctx)) return;
 2563|       |                     }
 2564|       |
 2565|       |                     if constexpr (null_t<val_t> && Opts.skip_null_members) {
 2566|       |                        if constexpr (always_null_t<val_t>)
 2567|       |                           return;
 2568|       |                        else {
 2569|       |                           const auto is_null = [&]() {
 2570|       |                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|       |                                 if constexpr (reflectable<T>) {
 2572|       |                                    return get<I>(t);
 2573|       |                                 }
 2574|       |                                 else {
 2575|       |                                    return get<I>(reflect<T>::values);
 2576|       |                                 }
 2577|       |                              };
 2578|       |
 2579|       |                              if constexpr (nullable_wrapper<val_t>) {
 2580|       |                                 return !bool(element()(value).val);
 2581|       |                              }
 2582|       |                              else if constexpr (nullable_value_t<val_t>) {
 2583|       |                                 return !get_member(value, element()).has_value();
 2584|       |                              }
 2585|       |                              else {
 2586|       |                                 return !bool(get_member(value, element()));
 2587|       |                              }
 2588|       |                           }();
 2589|       |                           if (is_null) return;
 2590|       |                        }
 2591|       |                     }
 2592|       |                     else if constexpr (is_specialization_v<val_t, custom_t> && Opts.skip_null_members &&
 2593|       |                                        custom_getter_returns_nullable<val_t>()) {
 2594|       |                        if (is_custom_field_null<T, I>(value, t, ctx)) return;
 2595|       |                     }
 2596|     62|                     else if constexpr (Opts.skip_null_members && glaze_value_is_nullable<val_t>()) {
 2597|     62|                        if (is_glaze_value_field_null<T, I>(value, t)) return;
 2598|     62|                     }
 2599|       |
 2600|       |                     if constexpr (check_skip_default_members(Opts) && has_skippable_default<val_t>) {
 2601|       |                        decltype(auto) member = [&]() -> decltype(auto) {
 2602|       |                           if constexpr (reflectable<T>) {
 2603|       |                              return get_member(value, get<I>(t));
 2604|       |                           }
 2605|       |                           else {
 2606|       |                              return get_member(value, get<I>(reflect<T>::values));
 2607|       |                           }
 2608|       |                        }();
 2609|       |                        if (is_default_value(member)) return;
 2610|       |                     }
 2611|       |
 2612|       |                     if constexpr (Opts.prettify) {
 2613|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2614|       |                           return;
 2615|       |                        }
 2616|       |                     }
 2617|     62|                     else {
 2618|     62|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
  ------------------
  |  Branch (2618:29): [True: 0, False: 62]
  ------------------
 2619|      0|                           return;
 2620|      0|                        }
 2621|     62|                     }
 2622|       |
 2623|     62|                     if (first) {
  ------------------
  |  Branch (2623:26): [True: 0, False: 62]
  ------------------
 2624|      0|                        first = false;
 2625|      0|                     }
 2626|     62|                     else {
 2627|       |                        // Null members may be skipped so we can't just write it out for all but the last member
 2628|       |                        if constexpr (Opts.prettify) {
 2629|       |                           std::memcpy(&b[ix], ",\n", 2);
 2630|       |                           ix += 2;
 2631|       |                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2632|       |                           ix += ctx.depth;
 2633|       |                        }
 2634|     62|                        else {
 2635|     62|                           std::memcpy(&b[ix], ",", 1);
 2636|     62|                           ++ix;
 2637|     62|                        }
 2638|       |                        if constexpr (is_output_streaming<B>) {
 2639|       |                           flush_buffer(b, ix);
 2640|       |                        }
 2641|     62|                     }
 2642|       |
 2643|       |                     // MSVC requires get<I> rather than keys[I]
 2644|     62|                     static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2645|     62|                     static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2646|     62|                     static constexpr auto n = quoted_key.size();
 2647|     62|                     std::memcpy(&b[ix], quoted_key.data(), n);
 2648|     62|                     ix += n;
 2649|       |
 2650|     62|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2650:57): [Folded, False: 62]
  ------------------
 2651|     62|                     if constexpr (reflectable<T>) {
 2652|     62|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2653|       |                     }
 2654|       |                     else {
 2655|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2656|       |                                                                 ix);
 2657|       |                     }
 2658|     62|                  }
 2659|     62|               });
_ZN3glz2toILj10EN9repe_fuzz6nestedEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_:
 2465|    120|      {
 2466|    120|         using ValueType = std::decay_t<V>;
 2467|       |         if constexpr (has_unknown_writer<ValueType> && not check_disable_write_unknown(Options)) {
 2468|       |            constexpr auto& writer = meta_unknown_write_v<ValueType>;
 2469|       |
 2470|       |            using WriterType = meta_unknown_write_t<ValueType>;
 2471|       |            if constexpr (std::is_member_object_pointer_v<WriterType>) {
 2472|       |               decltype(auto) unknown_writer = value.*writer;
 2473|       |               if (unknown_writer.size() > 0) {
 2474|       |                  // TODO: This intermediate is added to get GCC 14 to build
 2475|       |                  decltype(auto) merged = glz::merge{value, unknown_writer};
 2476|       |                  serialize<JSON>::op<disable_write_unknown_on<Options>()>(std::move(merged), ctx, b, ix);
 2477|       |               }
 2478|       |               else {
 2479|       |                  serialize<JSON>::op<disable_write_unknown_on<Options>()>(value, ctx, b, ix);
 2480|       |               }
 2481|       |            }
 2482|       |            else if constexpr (std::is_member_function_pointer_v<WriterType>) {
 2483|       |               decltype(auto) unknown_writer = (value.*writer)();
 2484|       |               if (unknown_writer.size() > 0) {
 2485|       |                  // TODO: This intermediate is added to get GCC 14 to build
 2486|       |                  decltype(auto) merged = glz::merge{value, unknown_writer};
 2487|       |                  serialize<JSON>::op<disable_write_unknown_on<Options>()>(std::move(merged), ctx, b, ix);
 2488|       |               }
 2489|       |               else {
 2490|       |                  serialize<JSON>::op<disable_write_unknown_on<Options>()>(value, ctx, b, ix);
 2491|       |               }
 2492|       |            }
 2493|       |            else {
 2494|       |               static_assert(false_v<T>, "unknown_write type not handled");
 2495|       |            }
 2496|       |         }
 2497|    120|         else {
 2498|       |            // handles glaze_object_t without extra unknown fields
 2499|    120|            static constexpr auto Opts =
 2500|    120|               disable_write_unknown_off<opening_and_closing_handled_off<ws_handled_off<Options>()>()>();
 2501|       |
 2502|    120|            if constexpr (not check_opening_handled(Options)) {
 2503|       |               if constexpr (Options.prettify) {
 2504|       |                  ctx.depth += check_indentation_width(Options);
 2505|       |                  if constexpr (not check_write_unchecked(Options)) {
 2506|       |                     if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 2507|       |                        return;
 2508|       |                     }
 2509|       |                  }
 2510|       |                  std::memcpy(&b[ix], "{\n", 2);
 2511|       |                  ix += 2;
 2512|       |                  std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2513|       |                  ix += ctx.depth;
 2514|       |               }
 2515|    120|               else {
 2516|    120|                  if constexpr (not check_write_unchecked(Options)) {
 2517|    120|                     if (!ensure_space(ctx, b, ix + 1)) [[unlikely]] {
  ------------------
  |  Branch (2517:26): [True: 0, False: 120]
  ------------------
 2518|      0|                        return;
 2519|      0|                     }
 2520|    120|                  }
 2521|    120|                  dump<not check_write_unchecked(Options)>('{', b, ix);
 2522|    120|               }
 2523|    120|            }
 2524|       |
 2525|      0|            static constexpr auto N = reflect<T>::size;
 2526|       |
 2527|    120|            decltype(auto) t = [&]() -> decltype(auto) {
 2528|    120|               if constexpr (reflectable<T>) {
 2529|    120|                  return to_tie(value);
 2530|    120|               }
 2531|    120|               else {
 2532|    120|                  return nullptr;
 2533|    120|               }
 2534|    120|            }();
 2535|       |
 2536|    120|            static constexpr auto padding = round_up_to_nearest_16(maximum_key_size<T> + write_padding_bytes);
 2537|       |            if constexpr (maybe_skipped<Opts, T>) {
 2538|       |               bool first = true;
 2539|       |               for_each<N>([&]<size_t I>() {
 2540|       |                  using val_t = field_t<T, I>;
 2541|       |
 2542|       |                  // `meta<T>::skip` joins the other compile-time exclusions here rather than returning
 2543|       |                  // early, so that a skipped field's writer is never instantiated -- see
 2544|       |                  // `skipped_by_meta`.
 2545|       |                  constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 2546|       |                  if constexpr (skipped_by_meta<T, I, operation::serialize> || always_skipped<val_t> ||
 2547|       |                                (!write_function_pointers && is_any_function_ptr<val_t>)) {
 2548|       |                     return;
 2549|       |                  }
 2550|       |                  else {
 2551|       |                     if constexpr (meta_has_skip_if<T>) {
 2552|       |                        static constexpr auto skip_if_key = glz::get<I>(reflect<T>::keys);
 2553|       |                        static constexpr meta_context mctx{.op = operation::serialize};
 2554|       |                        decltype(auto) field_value = [&]() -> decltype(auto) {
 2555|       |                           if constexpr (reflectable<T>) {
 2556|       |                              return get<I>(t);
 2557|       |                           }
 2558|       |                           else {
 2559|       |                              return get_member(value, glz::get<I>(reflect<T>::values));
 2560|       |                           }
 2561|       |                        }();
 2562|       |                        if (meta<T>::skip_if(field_value, skip_if_key, mctx)) return;
 2563|       |                     }
 2564|       |
 2565|       |                     if constexpr (null_t<val_t> && Opts.skip_null_members) {
 2566|       |                        if constexpr (always_null_t<val_t>)
 2567|       |                           return;
 2568|       |                        else {
 2569|       |                           const auto is_null = [&]() {
 2570|       |                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|       |                                 if constexpr (reflectable<T>) {
 2572|       |                                    return get<I>(t);
 2573|       |                                 }
 2574|       |                                 else {
 2575|       |                                    return get<I>(reflect<T>::values);
 2576|       |                                 }
 2577|       |                              };
 2578|       |
 2579|       |                              if constexpr (nullable_wrapper<val_t>) {
 2580|       |                                 return !bool(element()(value).val);
 2581|       |                              }
 2582|       |                              else if constexpr (nullable_value_t<val_t>) {
 2583|       |                                 return !get_member(value, element()).has_value();
 2584|       |                              }
 2585|       |                              else {
 2586|       |                                 return !bool(get_member(value, element()));
 2587|       |                              }
 2588|       |                           }();
 2589|       |                           if (is_null) return;
 2590|       |                        }
 2591|       |                     }
 2592|       |                     else if constexpr (is_specialization_v<val_t, custom_t> && Opts.skip_null_members &&
 2593|       |                                        custom_getter_returns_nullable<val_t>()) {
 2594|       |                        if (is_custom_field_null<T, I>(value, t, ctx)) return;
 2595|       |                     }
 2596|       |                     else if constexpr (Opts.skip_null_members && glaze_value_is_nullable<val_t>()) {
 2597|       |                        if (is_glaze_value_field_null<T, I>(value, t)) return;
 2598|       |                     }
 2599|       |
 2600|       |                     if constexpr (check_skip_default_members(Opts) && has_skippable_default<val_t>) {
 2601|       |                        decltype(auto) member = [&]() -> decltype(auto) {
 2602|       |                           if constexpr (reflectable<T>) {
 2603|       |                              return get_member(value, get<I>(t));
 2604|       |                           }
 2605|       |                           else {
 2606|       |                              return get_member(value, get<I>(reflect<T>::values));
 2607|       |                           }
 2608|       |                        }();
 2609|       |                        if (is_default_value(member)) return;
 2610|       |                     }
 2611|       |
 2612|       |                     if constexpr (Opts.prettify) {
 2613|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2614|       |                           return;
 2615|       |                        }
 2616|       |                     }
 2617|       |                     else {
 2618|       |                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
 2619|       |                           return;
 2620|       |                        }
 2621|       |                     }
 2622|       |
 2623|       |                     if (first) {
 2624|       |                        first = false;
 2625|       |                     }
 2626|       |                     else {
 2627|       |                        // Null members may be skipped so we can't just write it out for all but the last member
 2628|       |                        if constexpr (Opts.prettify) {
 2629|       |                           std::memcpy(&b[ix], ",\n", 2);
 2630|       |                           ix += 2;
 2631|       |                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2632|       |                           ix += ctx.depth;
 2633|       |                        }
 2634|       |                        else {
 2635|       |                           std::memcpy(&b[ix], ",", 1);
 2636|       |                           ++ix;
 2637|       |                        }
 2638|       |                        if constexpr (is_output_streaming<B>) {
 2639|       |                           flush_buffer(b, ix);
 2640|       |                        }
 2641|       |                     }
 2642|       |
 2643|       |                     // MSVC requires get<I> rather than keys[I]
 2644|       |                     static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2645|       |                     static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2646|       |                     static constexpr auto n = quoted_key.size();
 2647|       |                     std::memcpy(&b[ix], quoted_key.data(), n);
 2648|       |                     ix += n;
 2649|       |
 2650|       |                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
 2651|       |                     if constexpr (reflectable<T>) {
 2652|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2653|       |                     }
 2654|       |                     else {
 2655|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2656|       |                                                                 ix);
 2657|       |                     }
 2658|       |                  }
 2659|       |               });
 2660|       |            }
 2661|    120|            else {
 2662|    120|               static constexpr size_t fixed_max_size = Opts.prettify ? 0 : fixed_padding<T>;
  ------------------
  |  Branch (2662:57): [Folded, False: 120]
  ------------------
 2663|       |               if constexpr (fixed_max_size && not check_write_unchecked(Options)) {
 2664|       |                  if (!ensure_space(ctx, b, ix + fixed_max_size)) [[unlikely]] {
 2665|       |                     return;
 2666|       |                  }
 2667|       |               }
 2668|       |
 2669|    120|               for_each<N>([&]<size_t I>() {
 2670|    120|                  if constexpr (write_can_error<T>()) {
 2671|    120|                     if (bool(ctx.error)) [[unlikely]] {
 2672|    120|                        return;
 2673|    120|                     }
 2674|    120|                  }
 2675|    120|                  if constexpr (not fixed_max_size) {
 2676|    120|                     if constexpr (Opts.prettify) {
 2677|    120|                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2678|    120|                           return;
 2679|    120|                        }
 2680|    120|                     }
 2681|    120|                     else {
 2682|    120|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
 2683|    120|                           return;
 2684|    120|                        }
 2685|    120|                     }
 2686|    120|                  }
 2687|       |
 2688|    120|                  if constexpr (I != 0 && Opts.prettify) {
 2689|    120|                     std::memcpy(&b[ix], ",\n", 2);
 2690|    120|                     ix += 2;
 2691|    120|                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2692|    120|                     ix += ctx.depth;
 2693|    120|                  }
 2694|       |
 2695|    120|                  using val_t = field_t<T, I>;
 2696|       |
 2697|       |                  // MSVC requires get<I> rather than keys[I]
 2698|    120|                  static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2699|    120|                  if constexpr (always_null_t<val_t>) {
 2700|    120|                     if constexpr (I == 0 || Opts.prettify) {
 2701|    120|                        static constexpr auto quoted_key = join_v<quoted_key_v<key, Opts.prettify>, chars<"null">>;
 2702|    120|                        static constexpr auto n = quoted_key.size();
 2703|    120|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2704|    120|                        ix += n;
 2705|    120|                     }
 2706|    120|                     else {
 2707|    120|                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>, chars<"null">>;
 2708|    120|                        static constexpr auto n = quoted_key.size();
 2709|    120|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2710|    120|                        ix += n;
 2711|    120|                     }
 2712|    120|                  }
 2713|    120|                  else {
 2714|    120|                     if constexpr (I == 0 || Opts.prettify) {
 2715|    120|                        static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2716|    120|                        static constexpr auto n = quoted_key.size();
 2717|    120|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2718|    120|                        ix += n;
 2719|    120|                     }
 2720|    120|                     else {
 2721|    120|                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>>;
 2722|    120|                        static constexpr auto n = quoted_key.size();
 2723|    120|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2724|    120|                        ix += n;
 2725|    120|                     }
 2726|       |
 2727|    120|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
 2728|    120|                     if constexpr (reflectable<T>) {
 2729|    120|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2730|    120|                     }
 2731|    120|                     else {
 2732|    120|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2733|    120|                                                                 ix);
 2734|    120|                     }
 2735|    120|                  }
 2736|    120|               });
 2737|    120|            }
 2738|       |
 2739|       |            // Options is required here, because it must be the top level
 2740|    120|            if constexpr (not check_closing_handled(Options)) {
 2741|       |               if constexpr (Options.prettify) {
 2742|       |                  ctx.depth -= check_indentation_width(Options);
 2743|       |                  if constexpr (not check_write_unchecked(Options)) {
 2744|       |                     if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 2745|       |                        return;
 2746|       |                     }
 2747|       |                  }
 2748|       |                  std::memcpy(&b[ix], "\n", 1);
 2749|       |                  ++ix;
 2750|       |                  std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2751|       |                  ix += ctx.depth;
 2752|       |                  std::memcpy(&b[ix], "}", 1);
 2753|       |                  ++ix;
 2754|       |               }
 2755|    120|               else {
 2756|    120|                  dump<not(fixed_padding<T> || check_write_unchecked(Options))>('}', b, ix);
 2757|    120|               }
 2758|    120|            }
 2759|    120|         }
 2760|    120|      }
_ZZN3glz2toILj10EN9repe_fuzz6nestedEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlvE_clEv:
 2527|    120|            decltype(auto) t = [&]() -> decltype(auto) {
 2528|    120|               if constexpr (reflectable<T>) {
 2529|    120|                  return to_tie(value);
 2530|       |               }
 2531|       |               else {
 2532|       |                  return nullptr;
 2533|       |               }
 2534|    120|            }();
_ZZN3glz2toILj10EN9repe_fuzz6nestedEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm0EEEDav:
 2669|    120|               for_each<N>([&]<size_t I>() {
 2670|       |                  if constexpr (write_can_error<T>()) {
 2671|       |                     if (bool(ctx.error)) [[unlikely]] {
 2672|       |                        return;
 2673|       |                     }
 2674|       |                  }
 2675|    120|                  if constexpr (not fixed_max_size) {
 2676|       |                     if constexpr (Opts.prettify) {
 2677|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2678|       |                           return;
 2679|       |                        }
 2680|       |                     }
 2681|    120|                     else {
 2682|    120|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
  ------------------
  |  Branch (2682:29): [True: 0, False: 120]
  ------------------
 2683|      0|                           return;
 2684|      0|                        }
 2685|    120|                     }
 2686|    120|                  }
 2687|       |
 2688|       |                  if constexpr (I != 0 && Opts.prettify) {
 2689|       |                     std::memcpy(&b[ix], ",\n", 2);
 2690|       |                     ix += 2;
 2691|       |                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2692|       |                     ix += ctx.depth;
 2693|       |                  }
 2694|       |
 2695|    120|                  using val_t = field_t<T, I>;
 2696|       |
 2697|       |                  // MSVC requires get<I> rather than keys[I]
 2698|    120|                  static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2699|       |                  if constexpr (always_null_t<val_t>) {
 2700|       |                     if constexpr (I == 0 || Opts.prettify) {
 2701|       |                        static constexpr auto quoted_key = join_v<quoted_key_v<key, Opts.prettify>, chars<"null">>;
 2702|       |                        static constexpr auto n = quoted_key.size();
 2703|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2704|       |                        ix += n;
 2705|       |                     }
 2706|       |                     else {
 2707|       |                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>, chars<"null">>;
 2708|       |                        static constexpr auto n = quoted_key.size();
 2709|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2710|       |                        ix += n;
 2711|       |                     }
 2712|       |                  }
 2713|    120|                  else {
 2714|    120|                     if constexpr (I == 0 || Opts.prettify) {
 2715|    120|                        static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2716|    120|                        static constexpr auto n = quoted_key.size();
 2717|    120|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2718|    120|                        ix += n;
 2719|       |                     }
 2720|       |                     else {
 2721|       |                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>>;
 2722|       |                        static constexpr auto n = quoted_key.size();
 2723|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2724|       |                        ix += n;
 2725|       |                     }
 2726|       |
 2727|    120|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2727:57): [True: 0, Folded]
  ------------------
 2728|    120|                     if constexpr (reflectable<T>) {
 2729|    120|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2730|       |                     }
 2731|       |                     else {
 2732|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2733|       |                                                                 ix);
 2734|       |                     }
 2735|    120|                  }
 2736|    120|               });
_ZZN3glz2toILj10EN9repe_fuzz6nestedEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm1EEEDav:
 2669|    120|               for_each<N>([&]<size_t I>() {
 2670|       |                  if constexpr (write_can_error<T>()) {
 2671|       |                     if (bool(ctx.error)) [[unlikely]] {
 2672|       |                        return;
 2673|       |                     }
 2674|       |                  }
 2675|    120|                  if constexpr (not fixed_max_size) {
 2676|       |                     if constexpr (Opts.prettify) {
 2677|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2678|       |                           return;
 2679|       |                        }
 2680|       |                     }
 2681|    120|                     else {
 2682|    120|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
  ------------------
  |  Branch (2682:29): [True: 0, False: 120]
  ------------------
 2683|      0|                           return;
 2684|      0|                        }
 2685|    120|                     }
 2686|    120|                  }
 2687|       |
 2688|       |                  if constexpr (I != 0 && Opts.prettify) {
 2689|       |                     std::memcpy(&b[ix], ",\n", 2);
 2690|       |                     ix += 2;
 2691|       |                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2692|       |                     ix += ctx.depth;
 2693|       |                  }
 2694|       |
 2695|    120|                  using val_t = field_t<T, I>;
 2696|       |
 2697|       |                  // MSVC requires get<I> rather than keys[I]
 2698|    120|                  static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2699|       |                  if constexpr (always_null_t<val_t>) {
 2700|       |                     if constexpr (I == 0 || Opts.prettify) {
 2701|       |                        static constexpr auto quoted_key = join_v<quoted_key_v<key, Opts.prettify>, chars<"null">>;
 2702|       |                        static constexpr auto n = quoted_key.size();
 2703|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2704|       |                        ix += n;
 2705|       |                     }
 2706|       |                     else {
 2707|       |                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>, chars<"null">>;
 2708|       |                        static constexpr auto n = quoted_key.size();
 2709|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2710|       |                        ix += n;
 2711|       |                     }
 2712|       |                  }
 2713|    120|                  else {
 2714|       |                     if constexpr (I == 0 || Opts.prettify) {
 2715|       |                        static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2716|       |                        static constexpr auto n = quoted_key.size();
 2717|       |                        std::memcpy(&b[ix], quoted_key.data(), n);
 2718|       |                        ix += n;
 2719|       |                     }
 2720|    120|                     else {
 2721|    120|                        static constexpr auto quoted_key = join_v<chars<",">, quoted_key_v<key>>;
 2722|    120|                        static constexpr auto n = quoted_key.size();
 2723|    120|                        std::memcpy(&b[ix], quoted_key.data(), n);
 2724|    120|                        ix += n;
 2725|    120|                     }
 2726|       |
 2727|    120|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2727:57): [Folded, False: 120]
  ------------------
 2728|    120|                     if constexpr (reflectable<T>) {
 2729|    120|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2730|       |                     }
 2731|       |                     else {
 2732|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2733|       |                                                                 ix);
 2734|       |                     }
 2735|    120|                  }
 2736|    120|               });
_ZZN3glz2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm4EEEDav:
 2539|     62|               for_each<N>([&]<size_t I>() {
 2540|     62|                  using val_t = field_t<T, I>;
 2541|       |
 2542|       |                  // `meta<T>::skip` joins the other compile-time exclusions here rather than returning
 2543|       |                  // early, so that a skipped field's writer is never instantiated -- see
 2544|       |                  // `skipped_by_meta`.
 2545|     62|                  constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 2546|       |                  if constexpr (skipped_by_meta<T, I, operation::serialize> || always_skipped<val_t> ||
 2547|       |                                (!write_function_pointers && is_any_function_ptr<val_t>)) {
 2548|       |                     return;
 2549|       |                  }
 2550|     62|                  else {
 2551|       |                     if constexpr (meta_has_skip_if<T>) {
 2552|       |                        static constexpr auto skip_if_key = glz::get<I>(reflect<T>::keys);
 2553|       |                        static constexpr meta_context mctx{.op = operation::serialize};
 2554|       |                        decltype(auto) field_value = [&]() -> decltype(auto) {
 2555|       |                           if constexpr (reflectable<T>) {
 2556|       |                              return get<I>(t);
 2557|       |                           }
 2558|       |                           else {
 2559|       |                              return get_member(value, glz::get<I>(reflect<T>::values));
 2560|       |                           }
 2561|       |                        }();
 2562|       |                        if (meta<T>::skip_if(field_value, skip_if_key, mctx)) return;
 2563|       |                     }
 2564|       |
 2565|       |                     if constexpr (null_t<val_t> && Opts.skip_null_members) {
 2566|       |                        if constexpr (always_null_t<val_t>)
 2567|       |                           return;
 2568|       |                        else {
 2569|       |                           const auto is_null = [&]() {
 2570|       |                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|       |                                 if constexpr (reflectable<T>) {
 2572|       |                                    return get<I>(t);
 2573|       |                                 }
 2574|       |                                 else {
 2575|       |                                    return get<I>(reflect<T>::values);
 2576|       |                                 }
 2577|       |                              };
 2578|       |
 2579|       |                              if constexpr (nullable_wrapper<val_t>) {
 2580|       |                                 return !bool(element()(value).val);
 2581|       |                              }
 2582|       |                              else if constexpr (nullable_value_t<val_t>) {
 2583|       |                                 return !get_member(value, element()).has_value();
 2584|       |                              }
 2585|       |                              else {
 2586|       |                                 return !bool(get_member(value, element()));
 2587|       |                              }
 2588|       |                           }();
 2589|       |                           if (is_null) return;
 2590|       |                        }
 2591|       |                     }
 2592|       |                     else if constexpr (is_specialization_v<val_t, custom_t> && Opts.skip_null_members &&
 2593|       |                                        custom_getter_returns_nullable<val_t>()) {
 2594|       |                        if (is_custom_field_null<T, I>(value, t, ctx)) return;
 2595|       |                     }
 2596|     62|                     else if constexpr (Opts.skip_null_members && glaze_value_is_nullable<val_t>()) {
 2597|     62|                        if (is_glaze_value_field_null<T, I>(value, t)) return;
 2598|     62|                     }
 2599|       |
 2600|       |                     if constexpr (check_skip_default_members(Opts) && has_skippable_default<val_t>) {
 2601|       |                        decltype(auto) member = [&]() -> decltype(auto) {
 2602|       |                           if constexpr (reflectable<T>) {
 2603|       |                              return get_member(value, get<I>(t));
 2604|       |                           }
 2605|       |                           else {
 2606|       |                              return get_member(value, get<I>(reflect<T>::values));
 2607|       |                           }
 2608|       |                        }();
 2609|       |                        if (is_default_value(member)) return;
 2610|       |                     }
 2611|       |
 2612|       |                     if constexpr (Opts.prettify) {
 2613|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2614|       |                           return;
 2615|       |                        }
 2616|       |                     }
 2617|     62|                     else {
 2618|     62|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
  ------------------
  |  Branch (2618:29): [True: 0, False: 62]
  ------------------
 2619|      0|                           return;
 2620|      0|                        }
 2621|     62|                     }
 2622|       |
 2623|     62|                     if (first) {
  ------------------
  |  Branch (2623:26): [True: 0, False: 62]
  ------------------
 2624|      0|                        first = false;
 2625|      0|                     }
 2626|     62|                     else {
 2627|       |                        // Null members may be skipped so we can't just write it out for all but the last member
 2628|       |                        if constexpr (Opts.prettify) {
 2629|       |                           std::memcpy(&b[ix], ",\n", 2);
 2630|       |                           ix += 2;
 2631|       |                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2632|       |                           ix += ctx.depth;
 2633|       |                        }
 2634|     62|                        else {
 2635|     62|                           std::memcpy(&b[ix], ",", 1);
 2636|     62|                           ++ix;
 2637|     62|                        }
 2638|       |                        if constexpr (is_output_streaming<B>) {
 2639|       |                           flush_buffer(b, ix);
 2640|       |                        }
 2641|     62|                     }
 2642|       |
 2643|       |                     // MSVC requires get<I> rather than keys[I]
 2644|     62|                     static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2645|     62|                     static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2646|     62|                     static constexpr auto n = quoted_key.size();
 2647|     62|                     std::memcpy(&b[ix], quoted_key.data(), n);
 2648|     62|                     ix += n;
 2649|       |
 2650|     62|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2650:57): [Folded, False: 62]
  ------------------
 2651|     62|                     if constexpr (reflectable<T>) {
 2652|     62|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2653|       |                     }
 2654|       |                     else {
 2655|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2656|       |                                                                 ix);
 2657|       |                     }
 2658|     62|                  }
 2659|     62|               });
_ZN3glz2toILj10ENSt3__16vectorIiNS1_9allocatorIiEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNS1_12basic_stringIcNS1_11char_traitsIcEENS3_IcEEEERS5_TkNS_10is_contextERNS_7contextEmQaa16writable_array_tIT_EquL_ZNS0_ILj10ESI_E14map_like_arrayEEeqcl17check_concatenateTL0__ELb0ELb1EEEvOT1_OT2_OT0_RT3_:
 1426|    120|      {
 1427|    120|         if (empty_range(value)) {
  ------------------
  |  Branch (1427:14): [True: 120, False: 0]
  ------------------
 1428|    120|            dump("[]", b, ix);
 1429|    120|         }
 1430|      0|         else {
 1431|       |            // For bounded buffers, skip pre-allocation path since value_padding is for SIMD, not actual size
 1432|      0|            if constexpr (has_size<T> && array_padding_known<T> && !has_bounded_capacity<B>) {
 1433|      0|               const auto n = value.size();
 1434|       |
 1435|      0|               static constexpr auto value_padding = []() -> size_t {
 1436|      0|                  if constexpr (required_padding<typename T::value_type>() > 0)
 1437|      0|                     return required_padding<typename T::value_type>();
 1438|      0|                  else
 1439|      0|                     return fixed_padding<typename T::value_type>;
 1440|      0|               }();
 1441|       |
 1442|       |               if constexpr (Opts.prettify) {
 1443|       |                  if constexpr (check_new_lines_in_arrays(Opts)) {
 1444|       |                     ctx.depth += check_indentation_width(Opts);
 1445|       |                  }
 1446|       |
 1447|       |                  // add space for '\n' and ',' characters for each element, hence `+ 2`
 1448|       |                  // use n + 1 because we put the end array character after the last element with whitespace
 1449|       |                  if (!ensure_space(ctx, b, ix + (n + 1) * (value_padding + ctx.depth + 2) + write_padding_bytes))
 1450|       |                     [[unlikely]] {
 1451|       |                     return;
 1452|       |                  }
 1453|       |
 1454|       |                  if constexpr (check_new_lines_in_arrays(Opts)) {
 1455|       |                     std::memcpy(&b[ix], "[\n", 2);
 1456|       |                     ix += 2;
 1457|       |                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 1458|       |                     ix += ctx.depth;
 1459|       |                  }
 1460|       |                  else {
 1461|       |                     std::memcpy(&b[ix], "[", 1);
 1462|       |                     ++ix;
 1463|       |                  }
 1464|       |               }
 1465|      0|               else {
 1466|      0|                  static constexpr auto comma_padding = 1;
 1467|      0|                  if (!ensure_space(ctx, b, ix + n * (value_padding + comma_padding) + write_padding_bytes))
  ------------------
  |  Branch (1467:23): [True: 0, False: 0]
  ------------------
 1468|      0|                     [[unlikely]] {
 1469|      0|                     return;
 1470|      0|                  }
 1471|      0|                  std::memcpy(&b[ix], "[", 1);
 1472|      0|                  ++ix;
 1473|      0|               }
 1474|       |
 1475|      0|               auto it = std::begin(value);
 1476|      0|               using val_t = std::remove_cvref_t<decltype(*it)>;
 1477|      0|               to<JSON, val_t>::template op<write_unchecked_on<Opts>()>(*it, ctx, b, ix);
 1478|       |
 1479|      0|               ++it;
 1480|      0|               for (const auto fin = std::end(value); it != fin; ++it) {
  ------------------
  |  Branch (1480:55): [True: 0, False: 0]
  ------------------
 1481|       |                  if constexpr (Opts.prettify) {
 1482|       |                     if constexpr (check_new_lines_in_arrays(Opts)) {
 1483|       |                        std::memcpy(&b[ix], ",\n", 2);
 1484|       |                        ix += 2;
 1485|       |                        std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 1486|       |                        ix += ctx.depth;
 1487|       |                     }
 1488|       |                     else {
 1489|       |                        std::memcpy(&b[ix], ", ", 2);
 1490|       |                        ix += 2;
 1491|       |                     }
 1492|       |                  }
 1493|      0|                  else {
 1494|      0|                     std::memcpy(&b[ix], ",", 1);
 1495|      0|                     ++ix;
 1496|      0|                  }
 1497|       |                  if constexpr (is_output_streaming<B>) {
 1498|       |                     flush_buffer(b, ix);
 1499|       |                  }
 1500|       |
 1501|      0|                  to<JSON, val_t>::template op<write_unchecked_on<Opts>()>(*it, ctx, b, ix);
 1502|      0|               }
 1503|       |               if constexpr (Opts.prettify && check_new_lines_in_arrays(Opts)) {
 1504|       |                  ctx.depth -= check_indentation_width(Opts);
 1505|       |                  std::memcpy(&b[ix], "\n", 1);
 1506|       |                  ++ix;
 1507|       |                  std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 1508|       |                  ix += ctx.depth;
 1509|       |               }
 1510|       |
 1511|      0|               std::memcpy(&b[ix], "]", 1);
 1512|      0|               ++ix;
 1513|       |            }
 1514|       |            else {
 1515|       |               // we either can't get the size (std::forward_list) or we cannot compute the allocation size
 1516|       |
 1517|       |               if constexpr (Opts.prettify) {
 1518|       |                  if constexpr (check_new_lines_in_arrays(Opts)) {
 1519|       |                     ctx.depth += check_indentation_width(Opts);
 1520|       |                  }
 1521|       |
 1522|       |                  if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 1523|       |                     return;
 1524|       |                  }
 1525|       |
 1526|       |                  if constexpr (check_new_lines_in_arrays(Opts)) {
 1527|       |                     std::memcpy(&b[ix], "[\n", 2);
 1528|       |                     ix += 2;
 1529|       |                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 1530|       |                     ix += ctx.depth;
 1531|       |                  }
 1532|       |                  else {
 1533|       |                     std::memcpy(&b[ix], "[", 1);
 1534|       |                     ++ix;
 1535|       |                  }
 1536|       |               }
 1537|       |               else {
 1538|       |                  if (!ensure_space(ctx, b, ix + write_padding_bytes)) [[unlikely]] {
 1539|       |                     return;
 1540|       |                  }
 1541|       |                  std::memcpy(&b[ix], "[", 1);
 1542|       |                  ++ix;
 1543|       |               }
 1544|       |
 1545|       |               auto it = std::begin(value);
 1546|       |               using val_t = std::remove_cvref_t<decltype(*it)>;
 1547|       |               if constexpr (required_padding<val_t>()) {
 1548|       |                  to<JSON, val_t>::template op<write_unchecked_on<Opts>()>(*it, ctx, b, ix);
 1549|       |               }
 1550|       |               else {
 1551|       |                  to<JSON, val_t>::template op<Opts>(*it, ctx, b, ix);
 1552|       |                  if (bool(ctx.error)) [[unlikely]] {
 1553|       |                     return;
 1554|       |                  }
 1555|       |               }
 1556|       |
 1557|       |               ++it;
 1558|       |               for (const auto fin = std::end(value); it != fin; ++it) {
 1559|       |                  if constexpr (required_padding<val_t>()) {
 1560|       |                     if constexpr (Opts.prettify) {
 1561|       |                        if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 1562|       |                           return;
 1563|       |                        }
 1564|       |                     }
 1565|       |                     else {
 1566|       |                        if (!ensure_space(ctx, b, ix + write_padding_bytes)) [[unlikely]] {
 1567|       |                           return;
 1568|       |                        }
 1569|       |                     }
 1570|       |
 1571|       |                     if constexpr (Opts.prettify) {
 1572|       |                        if constexpr (check_new_lines_in_arrays(Opts)) {
 1573|       |                           std::memcpy(&b[ix], ",\n", 2);
 1574|       |                           ix += 2;
 1575|       |                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 1576|       |                           ix += ctx.depth;
 1577|       |                        }
 1578|       |                        else {
 1579|       |                           std::memcpy(&b[ix], ", ", 2);
 1580|       |                           ix += 2;
 1581|       |                        }
 1582|       |                     }
 1583|       |                     else {
 1584|       |                        std::memcpy(&b[ix], ",", 1);
 1585|       |                        ++ix;
 1586|       |                     }
 1587|       |                     if constexpr (is_output_streaming<B>) {
 1588|       |                        flush_buffer(b, ix);
 1589|       |                     }
 1590|       |
 1591|       |                     to<JSON, val_t>::template op<write_unchecked_on<Opts>()>(*it, ctx, b, ix);
 1592|       |                  }
 1593|       |                  else {
 1594|       |                     write_array_entry_separator<Opts>(ctx, b, ix);
 1595|       |                     to<JSON, val_t>::template op<Opts>(*it, ctx, b, ix);
 1596|       |                     if (bool(ctx.error)) [[unlikely]] {
 1597|       |                        return;
 1598|       |                     }
 1599|       |                  }
 1600|       |               }
 1601|       |               if constexpr (Opts.prettify && check_new_lines_in_arrays(Opts)) {
 1602|       |                  ctx.depth -= check_indentation_width(Opts);
 1603|       |                  dump_newline_indent(check_indentation_char(Opts), ctx.depth, b, ix);
 1604|       |               }
 1605|       |
 1606|       |               dump(']', b, ix);
 1607|       |            }
 1608|      0|         }
 1609|    120|      }
_ZZN3glz2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm5EEEDav:
 2539|     62|               for_each<N>([&]<size_t I>() {
 2540|     62|                  using val_t = field_t<T, I>;
 2541|       |
 2542|       |                  // `meta<T>::skip` joins the other compile-time exclusions here rather than returning
 2543|       |                  // early, so that a skipped field's writer is never instantiated -- see
 2544|       |                  // `skipped_by_meta`.
 2545|     62|                  constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 2546|       |                  if constexpr (skipped_by_meta<T, I, operation::serialize> || always_skipped<val_t> ||
 2547|       |                                (!write_function_pointers && is_any_function_ptr<val_t>)) {
 2548|       |                     return;
 2549|       |                  }
 2550|     62|                  else {
 2551|       |                     if constexpr (meta_has_skip_if<T>) {
 2552|       |                        static constexpr auto skip_if_key = glz::get<I>(reflect<T>::keys);
 2553|       |                        static constexpr meta_context mctx{.op = operation::serialize};
 2554|       |                        decltype(auto) field_value = [&]() -> decltype(auto) {
 2555|       |                           if constexpr (reflectable<T>) {
 2556|       |                              return get<I>(t);
 2557|       |                           }
 2558|       |                           else {
 2559|       |                              return get_member(value, glz::get<I>(reflect<T>::values));
 2560|       |                           }
 2561|       |                        }();
 2562|       |                        if (meta<T>::skip_if(field_value, skip_if_key, mctx)) return;
 2563|       |                     }
 2564|       |
 2565|       |                     if constexpr (null_t<val_t> && Opts.skip_null_members) {
 2566|       |                        if constexpr (always_null_t<val_t>)
 2567|       |                           return;
 2568|       |                        else {
 2569|       |                           const auto is_null = [&]() {
 2570|       |                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|       |                                 if constexpr (reflectable<T>) {
 2572|       |                                    return get<I>(t);
 2573|       |                                 }
 2574|       |                                 else {
 2575|       |                                    return get<I>(reflect<T>::values);
 2576|       |                                 }
 2577|       |                              };
 2578|       |
 2579|       |                              if constexpr (nullable_wrapper<val_t>) {
 2580|       |                                 return !bool(element()(value).val);
 2581|       |                              }
 2582|       |                              else if constexpr (nullable_value_t<val_t>) {
 2583|       |                                 return !get_member(value, element()).has_value();
 2584|       |                              }
 2585|       |                              else {
 2586|       |                                 return !bool(get_member(value, element()));
 2587|       |                              }
 2588|       |                           }();
 2589|       |                           if (is_null) return;
 2590|       |                        }
 2591|       |                     }
 2592|       |                     else if constexpr (is_specialization_v<val_t, custom_t> && Opts.skip_null_members &&
 2593|       |                                        custom_getter_returns_nullable<val_t>()) {
 2594|       |                        if (is_custom_field_null<T, I>(value, t, ctx)) return;
 2595|       |                     }
 2596|     62|                     else if constexpr (Opts.skip_null_members && glaze_value_is_nullable<val_t>()) {
 2597|     62|                        if (is_glaze_value_field_null<T, I>(value, t)) return;
 2598|     62|                     }
 2599|       |
 2600|       |                     if constexpr (check_skip_default_members(Opts) && has_skippable_default<val_t>) {
 2601|       |                        decltype(auto) member = [&]() -> decltype(auto) {
 2602|       |                           if constexpr (reflectable<T>) {
 2603|       |                              return get_member(value, get<I>(t));
 2604|       |                           }
 2605|       |                           else {
 2606|       |                              return get_member(value, get<I>(reflect<T>::values));
 2607|       |                           }
 2608|       |                        }();
 2609|       |                        if (is_default_value(member)) return;
 2610|       |                     }
 2611|       |
 2612|       |                     if constexpr (Opts.prettify) {
 2613|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2614|       |                           return;
 2615|       |                        }
 2616|       |                     }
 2617|     62|                     else {
 2618|     62|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
  ------------------
  |  Branch (2618:29): [True: 0, False: 62]
  ------------------
 2619|      0|                           return;
 2620|      0|                        }
 2621|     62|                     }
 2622|       |
 2623|     62|                     if (first) {
  ------------------
  |  Branch (2623:26): [True: 0, False: 62]
  ------------------
 2624|      0|                        first = false;
 2625|      0|                     }
 2626|     62|                     else {
 2627|       |                        // Null members may be skipped so we can't just write it out for all but the last member
 2628|       |                        if constexpr (Opts.prettify) {
 2629|       |                           std::memcpy(&b[ix], ",\n", 2);
 2630|       |                           ix += 2;
 2631|       |                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2632|       |                           ix += ctx.depth;
 2633|       |                        }
 2634|     62|                        else {
 2635|     62|                           std::memcpy(&b[ix], ",", 1);
 2636|     62|                           ++ix;
 2637|     62|                        }
 2638|       |                        if constexpr (is_output_streaming<B>) {
 2639|       |                           flush_buffer(b, ix);
 2640|       |                        }
 2641|     62|                     }
 2642|       |
 2643|       |                     // MSVC requires get<I> rather than keys[I]
 2644|     62|                     static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2645|     62|                     static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2646|     62|                     static constexpr auto n = quoted_key.size();
 2647|     62|                     std::memcpy(&b[ix], quoted_key.data(), n);
 2648|     62|                     ix += n;
 2649|       |
 2650|     62|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2650:57): [Folded, False: 62]
  ------------------
 2651|     62|                     if constexpr (reflectable<T>) {
 2652|     62|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2653|       |                     }
 2654|       |                     else {
 2655|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2656|       |                                                                 ix);
 2657|       |                     }
 2658|     62|                  }
 2659|     62|               });
_ZN3glz2toILj10ENSt3__13mapINS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEiNS1_4lessIS8_EENS6_INS1_4pairIKS8_iEEEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS8_RSF_TkNS_10is_contextERNS_7contextEmQoo14writable_map_tIT_EaaL_ZNS0_ILj10ESN_E14map_like_arrayEEeqcl17check_concatenateTL0__ELb1EEEvOT1_OT2_OT0_RT3_:
 1614|    120|      {
 1615|    120|         if constexpr (not check_opening_handled(Opts)) {
 1616|    120|            dump('{', b, ix);
 1617|    120|         }
 1618|       |
 1619|    120|         if (!empty_range(value)) {
  ------------------
  |  Branch (1619:14): [True: 0, False: 120]
  ------------------
 1620|      0|            if constexpr (!check_opening_handled(Opts)) {
 1621|       |               if constexpr (Opts.prettify) {
 1622|       |                  ctx.depth += check_indentation_width(Opts);
 1623|       |                  if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 1624|       |                     return;
 1625|       |                  }
 1626|       |                  std::memcpy(&b[ix], "\n", 1);
 1627|       |                  ++ix;
 1628|       |                  std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 1629|       |                  ix += ctx.depth;
 1630|       |               }
 1631|      0|            }
 1632|       |
 1633|      0|            using val_t = detail::iterator_second_type<T>; // the type of value in each [key, value] pair
 1634|      0|            constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 1635|      0|            if constexpr (!always_skipped<val_t> && (write_function_pointers || !is_any_function_ptr<val_t>)) {
 1636|       |               if constexpr (null_t<val_t> && Opts.skip_null_members) {
 1637|       |                  auto write_first_entry = [&](auto&& it) {
 1638|       |                     auto&& [key, entry_val] = *it;
 1639|       |                     if (skip_member<Opts>(entry_val)) {
 1640|       |                        return true;
 1641|       |                     }
 1642|       |                     write_pair_content<Opts>(key, entry_val, ctx, b, ix);
 1643|       |                     return bool(ctx.error);
 1644|       |                  };
 1645|       |
 1646|       |                  auto it = std::begin(value);
 1647|       |                  bool first = write_first_entry(it);
 1648|       |                  if (bool(ctx.error)) [[unlikely]] {
 1649|       |                     return;
 1650|       |                  }
 1651|       |                  ++it;
 1652|       |                  for (const auto end = std::end(value); it != end; ++it) {
 1653|       |                     auto&& [key, entry_val] = *it;
 1654|       |                     if (skip_member<Opts>(entry_val)) {
 1655|       |                        continue;
 1656|       |                     }
 1657|       |
 1658|       |                     // When Opts.skip_null_members, *any* entry may be skipped, meaning separator dumping must be
 1659|       |                     // conditional for every entry.
 1660|       |                     // Alternatively, write separator after each entry except last but then branch is permanent
 1661|       |                     if (not first) {
 1662|       |                        write_object_entry_separator<Opts>(ctx, b, ix);
 1663|       |                     }
 1664|       |
 1665|       |                     write_pair_content<Opts>(key, entry_val, ctx, b, ix);
 1666|       |                     if (bool(ctx.error)) [[unlikely]] {
 1667|       |                        return;
 1668|       |                     }
 1669|       |
 1670|       |                     first = false;
 1671|       |                  }
 1672|       |               }
 1673|      0|               else {
 1674|      0|                  auto write_first_entry = [&](auto&& it) {
 1675|      0|                     auto&& [key, entry_val] = *it;
 1676|      0|                     write_pair_content<Opts>(key, entry_val, ctx, b, ix);
 1677|      0|                  };
 1678|       |
 1679|      0|                  auto it = std::begin(value);
 1680|      0|                  write_first_entry(it);
 1681|      0|                  if (bool(ctx.error)) [[unlikely]] {
  ------------------
  |  Branch (1681:23): [True: 0, False: 0]
  ------------------
 1682|      0|                     return;
 1683|      0|                  }
 1684|      0|                  ++it;
 1685|      0|                  for (const auto end = std::end(value); it != end; ++it) {
  ------------------
  |  Branch (1685:58): [True: 0, False: 0]
  ------------------
 1686|      0|                     auto&& [key, entry_val] = *it;
 1687|      0|                     write_object_entry_separator<Opts>(ctx, b, ix);
 1688|      0|                     write_pair_content<Opts>(key, entry_val, ctx, b, ix);
 1689|      0|                     if (bool(ctx.error)) [[unlikely]] {
  ------------------
  |  Branch (1689:26): [True: 0, False: 0]
  ------------------
 1690|      0|                        return;
 1691|      0|                     }
 1692|      0|                  }
 1693|      0|               }
 1694|      0|            }
 1695|       |
 1696|      0|            if constexpr (!check_closing_handled(Opts)) {
 1697|       |               if constexpr (Opts.prettify) {
 1698|       |                  ctx.depth -= check_indentation_width(Opts);
 1699|       |                  if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 1700|       |                     return;
 1701|       |                  }
 1702|       |                  std::memcpy(&b[ix], "\n", 1);
 1703|       |                  ++ix;
 1704|       |                  std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 1705|       |                  ix += ctx.depth;
 1706|       |               }
 1707|      0|            }
 1708|      0|         }
 1709|       |
 1710|    120|         if constexpr (!check_closing_handled(Opts)) {
 1711|    120|            dump('}', b, ix);
 1712|    120|         }
 1713|    120|      }
_ZZN3glz2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm6EEEDav:
 2539|     62|               for_each<N>([&]<size_t I>() {
 2540|     62|                  using val_t = field_t<T, I>;
 2541|       |
 2542|       |                  // `meta<T>::skip` joins the other compile-time exclusions here rather than returning
 2543|       |                  // early, so that a skipped field's writer is never instantiated -- see
 2544|       |                  // `skipped_by_meta`.
 2545|     62|                  constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 2546|       |                  if constexpr (skipped_by_meta<T, I, operation::serialize> || always_skipped<val_t> ||
 2547|       |                                (!write_function_pointers && is_any_function_ptr<val_t>)) {
 2548|       |                     return;
 2549|       |                  }
 2550|     62|                  else {
 2551|       |                     if constexpr (meta_has_skip_if<T>) {
 2552|       |                        static constexpr auto skip_if_key = glz::get<I>(reflect<T>::keys);
 2553|       |                        static constexpr meta_context mctx{.op = operation::serialize};
 2554|       |                        decltype(auto) field_value = [&]() -> decltype(auto) {
 2555|       |                           if constexpr (reflectable<T>) {
 2556|       |                              return get<I>(t);
 2557|       |                           }
 2558|       |                           else {
 2559|       |                              return get_member(value, glz::get<I>(reflect<T>::values));
 2560|       |                           }
 2561|       |                        }();
 2562|       |                        if (meta<T>::skip_if(field_value, skip_if_key, mctx)) return;
 2563|       |                     }
 2564|       |
 2565|     62|                     if constexpr (null_t<val_t> && Opts.skip_null_members) {
 2566|       |                        if constexpr (always_null_t<val_t>)
 2567|       |                           return;
 2568|     62|                        else {
 2569|     62|                           const auto is_null = [&]() {
 2570|     62|                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|     62|                                 if constexpr (reflectable<T>) {
 2572|     62|                                    return get<I>(t);
 2573|     62|                                 }
 2574|     62|                                 else {
 2575|     62|                                    return get<I>(reflect<T>::values);
 2576|     62|                                 }
 2577|     62|                              };
 2578|       |
 2579|     62|                              if constexpr (nullable_wrapper<val_t>) {
 2580|     62|                                 return !bool(element()(value).val);
 2581|     62|                              }
 2582|     62|                              else if constexpr (nullable_value_t<val_t>) {
 2583|     62|                                 return !get_member(value, element()).has_value();
 2584|     62|                              }
 2585|     62|                              else {
 2586|     62|                                 return !bool(get_member(value, element()));
 2587|     62|                              }
 2588|     62|                           }();
 2589|     62|                           if (is_null) return;
  ------------------
  |  Branch (2589:32): [True: 62, False: 0]
  ------------------
 2590|     62|                        }
 2591|       |                     }
 2592|       |                     else if constexpr (is_specialization_v<val_t, custom_t> && Opts.skip_null_members &&
 2593|       |                                        custom_getter_returns_nullable<val_t>()) {
 2594|       |                        if (is_custom_field_null<T, I>(value, t, ctx)) return;
 2595|       |                     }
 2596|       |                     else if constexpr (Opts.skip_null_members && glaze_value_is_nullable<val_t>()) {
 2597|       |                        if (is_glaze_value_field_null<T, I>(value, t)) return;
 2598|       |                     }
 2599|       |
 2600|       |                     if constexpr (check_skip_default_members(Opts) && has_skippable_default<val_t>) {
 2601|       |                        decltype(auto) member = [&]() -> decltype(auto) {
 2602|       |                           if constexpr (reflectable<T>) {
 2603|       |                              return get_member(value, get<I>(t));
 2604|       |                           }
 2605|       |                           else {
 2606|       |                              return get_member(value, get<I>(reflect<T>::values));
 2607|       |                           }
 2608|       |                        }();
 2609|       |                        if (is_default_value(member)) return;
 2610|       |                     }
 2611|       |
 2612|       |                     if constexpr (Opts.prettify) {
 2613|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2614|       |                           return;
 2615|       |                        }
 2616|       |                     }
 2617|     62|                     else {
 2618|     62|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
  ------------------
  |  Branch (2618:29): [True: 0, False: 62]
  ------------------
 2619|      0|                           return;
 2620|      0|                        }
 2621|     62|                     }
 2622|       |
 2623|     62|                     if (first) {
  ------------------
  |  Branch (2623:26): [True: 0, False: 62]
  ------------------
 2624|      0|                        first = false;
 2625|      0|                     }
 2626|     62|                     else {
 2627|       |                        // Null members may be skipped so we can't just write it out for all but the last member
 2628|       |                        if constexpr (Opts.prettify) {
 2629|       |                           std::memcpy(&b[ix], ",\n", 2);
 2630|       |                           ix += 2;
 2631|       |                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2632|       |                           ix += ctx.depth;
 2633|       |                        }
 2634|     62|                        else {
 2635|     62|                           std::memcpy(&b[ix], ",", 1);
 2636|     62|                           ++ix;
 2637|     62|                        }
 2638|       |                        if constexpr (is_output_streaming<B>) {
 2639|       |                           flush_buffer(b, ix);
 2640|       |                        }
 2641|     62|                     }
 2642|       |
 2643|       |                     // MSVC requires get<I> rather than keys[I]
 2644|     62|                     static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2645|     62|                     static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2646|     62|                     static constexpr auto n = quoted_key.size();
 2647|     62|                     std::memcpy(&b[ix], quoted_key.data(), n);
 2648|     62|                     ix += n;
 2649|       |
 2650|     62|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2650:57): [True: 0, Folded]
  ------------------
 2651|     62|                     if constexpr (reflectable<T>) {
 2652|     62|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2653|       |                     }
 2654|       |                     else {
 2655|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2656|       |                                                                 ix);
 2657|       |                     }
 2658|     62|                  }
 2659|     62|               });
_ZZZN3glz2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm6EEEDavENKUlvE_clEv:
 2569|     62|                           const auto is_null = [&]() {
 2570|     62|                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|     62|                                 if constexpr (reflectable<T>) {
 2572|     62|                                    return get<I>(t);
 2573|     62|                                 }
 2574|     62|                                 else {
 2575|     62|                                    return get<I>(reflect<T>::values);
 2576|     62|                                 }
 2577|     62|                              };
 2578|       |
 2579|       |                              if constexpr (nullable_wrapper<val_t>) {
 2580|       |                                 return !bool(element()(value).val);
 2581|       |                              }
 2582|     62|                              else if constexpr (nullable_value_t<val_t>) {
 2583|     62|                                 return !get_member(value, element()).has_value();
 2584|       |                              }
 2585|       |                              else {
 2586|       |                                 return !bool(get_member(value, element()));
 2587|       |                              }
 2588|     62|                           }();
_ZZZZN3glz2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm6EEEDavENKUlvE_clEvENKUlvE_clEv:
 2570|     62|                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|     62|                                 if constexpr (reflectable<T>) {
 2572|     62|                                    return get<I>(t);
 2573|       |                                 }
 2574|       |                                 else {
 2575|       |                                    return get<I>(reflect<T>::values);
 2576|       |                                 }
 2577|     62|                              };
_ZZN3glz2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm7EEEDav:
 2539|     62|               for_each<N>([&]<size_t I>() {
 2540|     62|                  using val_t = field_t<T, I>;
 2541|       |
 2542|       |                  // `meta<T>::skip` joins the other compile-time exclusions here rather than returning
 2543|       |                  // early, so that a skipped field's writer is never instantiated -- see
 2544|       |                  // `skipped_by_meta`.
 2545|     62|                  constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 2546|       |                  if constexpr (skipped_by_meta<T, I, operation::serialize> || always_skipped<val_t> ||
 2547|       |                                (!write_function_pointers && is_any_function_ptr<val_t>)) {
 2548|       |                     return;
 2549|       |                  }
 2550|     62|                  else {
 2551|       |                     if constexpr (meta_has_skip_if<T>) {
 2552|       |                        static constexpr auto skip_if_key = glz::get<I>(reflect<T>::keys);
 2553|       |                        static constexpr meta_context mctx{.op = operation::serialize};
 2554|       |                        decltype(auto) field_value = [&]() -> decltype(auto) {
 2555|       |                           if constexpr (reflectable<T>) {
 2556|       |                              return get<I>(t);
 2557|       |                           }
 2558|       |                           else {
 2559|       |                              return get_member(value, glz::get<I>(reflect<T>::values));
 2560|       |                           }
 2561|       |                        }();
 2562|       |                        if (meta<T>::skip_if(field_value, skip_if_key, mctx)) return;
 2563|       |                     }
 2564|       |
 2565|       |                     if constexpr (null_t<val_t> && Opts.skip_null_members) {
 2566|       |                        if constexpr (always_null_t<val_t>)
 2567|       |                           return;
 2568|       |                        else {
 2569|       |                           const auto is_null = [&]() {
 2570|       |                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|       |                                 if constexpr (reflectable<T>) {
 2572|       |                                    return get<I>(t);
 2573|       |                                 }
 2574|       |                                 else {
 2575|       |                                    return get<I>(reflect<T>::values);
 2576|       |                                 }
 2577|       |                              };
 2578|       |
 2579|       |                              if constexpr (nullable_wrapper<val_t>) {
 2580|       |                                 return !bool(element()(value).val);
 2581|       |                              }
 2582|       |                              else if constexpr (nullable_value_t<val_t>) {
 2583|       |                                 return !get_member(value, element()).has_value();
 2584|       |                              }
 2585|       |                              else {
 2586|       |                                 return !bool(get_member(value, element()));
 2587|       |                              }
 2588|       |                           }();
 2589|       |                           if (is_null) return;
 2590|       |                        }
 2591|       |                     }
 2592|       |                     else if constexpr (is_specialization_v<val_t, custom_t> && Opts.skip_null_members &&
 2593|       |                                        custom_getter_returns_nullable<val_t>()) {
 2594|       |                        if (is_custom_field_null<T, I>(value, t, ctx)) return;
 2595|       |                     }
 2596|     62|                     else if constexpr (Opts.skip_null_members && glaze_value_is_nullable<val_t>()) {
 2597|     62|                        if (is_glaze_value_field_null<T, I>(value, t)) return;
 2598|     62|                     }
 2599|       |
 2600|       |                     if constexpr (check_skip_default_members(Opts) && has_skippable_default<val_t>) {
 2601|       |                        decltype(auto) member = [&]() -> decltype(auto) {
 2602|       |                           if constexpr (reflectable<T>) {
 2603|       |                              return get_member(value, get<I>(t));
 2604|       |                           }
 2605|       |                           else {
 2606|       |                              return get_member(value, get<I>(reflect<T>::values));
 2607|       |                           }
 2608|       |                        }();
 2609|       |                        if (is_default_value(member)) return;
 2610|       |                     }
 2611|       |
 2612|       |                     if constexpr (Opts.prettify) {
 2613|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2614|       |                           return;
 2615|       |                        }
 2616|       |                     }
 2617|     62|                     else {
 2618|     62|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
  ------------------
  |  Branch (2618:29): [True: 0, False: 62]
  ------------------
 2619|      0|                           return;
 2620|      0|                        }
 2621|     62|                     }
 2622|       |
 2623|     62|                     if (first) {
  ------------------
  |  Branch (2623:26): [True: 0, False: 62]
  ------------------
 2624|      0|                        first = false;
 2625|      0|                     }
 2626|     62|                     else {
 2627|       |                        // Null members may be skipped so we can't just write it out for all but the last member
 2628|       |                        if constexpr (Opts.prettify) {
 2629|       |                           std::memcpy(&b[ix], ",\n", 2);
 2630|       |                           ix += 2;
 2631|       |                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2632|       |                           ix += ctx.depth;
 2633|       |                        }
 2634|     62|                        else {
 2635|     62|                           std::memcpy(&b[ix], ",", 1);
 2636|     62|                           ++ix;
 2637|     62|                        }
 2638|       |                        if constexpr (is_output_streaming<B>) {
 2639|       |                           flush_buffer(b, ix);
 2640|       |                        }
 2641|     62|                     }
 2642|       |
 2643|       |                     // MSVC requires get<I> rather than keys[I]
 2644|     62|                     static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2645|     62|                     static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2646|     62|                     static constexpr auto n = quoted_key.size();
 2647|     62|                     std::memcpy(&b[ix], quoted_key.data(), n);
 2648|     62|                     ix += n;
 2649|       |
 2650|     62|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2650:57): [Folded, False: 62]
  ------------------
 2651|     62|                     if constexpr (reflectable<T>) {
 2652|     62|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2653|       |                     }
 2654|       |                     else {
 2655|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2656|       |                                                                 ix);
 2657|       |                     }
 2658|     62|                  }
 2659|     62|               });
_ZN3glz2toILj10ENSt3__17variantIJNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEN9repe_fuzz6amountEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS8_RSB_TkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_:
 1947|    120|      {
 1948|       |         // Adjacent tagging needs no per-alternative dispatch: the discriminator and the value are
 1949|       |         // written side by side whatever the alternative is. The visit below still instantiates in
 1950|       |         // that mode (`if constexpr` does not discard the statements after it), but both of its
 1951|       |         // tagged branches are compile-time dead there and the runtime `return` keeps it unreached.
 1952|       |         if constexpr (check_write_type_info(Opts) && tagging == variant_tagging_kind::adjacent) {
 1953|       |            write_adjacent<Opts>(value, ctx, b, ix);
 1954|       |            return;
 1955|       |         }
 1956|    120|         std::visit(
 1957|    120|            [&](auto&& val) {
 1958|    120|               using V = std::decay_t<decltype(val)>;
 1959|       |
 1960|    120|               if constexpr (check_write_type_info(Opts) && tagging == variant_tagging_kind::internal &&
 1961|    120|                             custom_write<V>) {
 1962|       |                  // Custom alternative: the user's serializer emits the object body, into which we
 1963|       |                  // merge the variant tag. For this to produce valid JSON the custom to<> must (1)
 1964|       |                  // write an object body and (2) honor opening_and_closing_handled (suppress its own
 1965|       |                  // braces) so the tag shares the alternative's object. A custom writer that emits a
 1966|       |                  // scalar/array, or that ignores those flags, would yield malformed output.
 1967|       |                  //
 1968|       |                  // The tag-emission below mirrors the reflected-object branch that follows; keep the
 1969|       |                  // two in sync. The body size is not known at compile time, so we always write the
 1970|       |                  // tag separator and then drop it at runtime if the body turned out empty.
 1971|    120|                  if (missing_id(value, ctx)) {
 1972|    120|                     return;
 1973|    120|                  }
 1974|    120|                  using id_type = std::decay_t<decltype(ids_v<T>[value.index()])>;
 1975|    120|                  if constexpr (Opts.prettify) {
 1976|    120|                     dump("{\n", b, ix);
 1977|    120|                     ctx.depth += check_indentation_width(Opts);
 1978|    120|                     dumpn(check_indentation_char(Opts), ctx.depth, b, ix);
 1979|    120|                     dump('"', b, ix);
 1980|    120|                     dump_maybe_empty(tag_v<T>, b, ix);
 1981|    120|                     if constexpr (std::integral<id_type>) {
 1982|    120|                        dump("\": ", b, ix);
 1983|    120|                        serialize<JSON>::op<Opts>(ids_v<T>[value.index()], ctx, b, ix);
 1984|    120|                     }
 1985|    120|                     else {
 1986|    120|                        dump("\": \"", b, ix);
 1987|    120|                        dump_maybe_empty(ids_v<T>[value.index()], b, ix);
 1988|    120|                        dump('"', b, ix);
 1989|    120|                     }
 1990|    120|                     const auto pos_after_tag = ix;
 1991|    120|                     dump(",\n", b, ix);
 1992|    120|                     dumpn(check_indentation_char(Opts), ctx.depth, b, ix);
 1993|    120|                     const auto pos_body_start = ix;
 1994|    120|                     to<JSON, V>::template op<opening_and_closing_handled<Opts>()>(val, ctx, b, ix);
 1995|    120|                     if (ix == pos_body_start) {
 1996|    120|                        ix = pos_after_tag; // custom body was empty: undo the tag separator
 1997|    120|                     }
 1998|    120|                     ctx.depth -= check_indentation_width(Opts);
 1999|    120|                     if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 2000|    120|                        return;
 2001|    120|                     }
 2002|    120|                     std::memcpy(&b[ix], "\n", 1);
 2003|    120|                     ++ix;
 2004|    120|                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2005|    120|                     ix += ctx.depth;
 2006|    120|                     std::memcpy(&b[ix], "}", 1);
 2007|    120|                     ++ix;
 2008|    120|                  }
 2009|    120|                  else {
 2010|    120|                     dump("{\"", b, ix);
 2011|    120|                     dump_maybe_empty(tag_v<T>, b, ix);
 2012|    120|                     if constexpr (std::integral<id_type>) {
 2013|    120|                        dump("\":", b, ix);
 2014|    120|                        serialize<JSON>::op<Opts>(ids_v<T>[value.index()], ctx, b, ix);
 2015|    120|                     }
 2016|    120|                     else {
 2017|    120|                        dump("\":\"", b, ix);
 2018|    120|                        dump_maybe_empty(ids_v<T>[value.index()], b, ix);
 2019|    120|                        dump('"', b, ix);
 2020|    120|                     }
 2021|    120|                     const auto pos_after_tag = ix;
 2022|    120|                     dump(',', b, ix);
 2023|    120|                     const auto pos_body_start = ix;
 2024|    120|                     to<JSON, V>::template op<opening_and_closing_handled<Opts>()>(val, ctx, b, ix);
 2025|    120|                     if (ix == pos_body_start) {
 2026|    120|                        ix = pos_after_tag; // custom body was empty: undo the tag separator
 2027|    120|                     }
 2028|    120|                     dump('}', b, ix);
 2029|    120|                  }
 2030|    120|               }
 2031|    120|               else if constexpr (check_write_type_info(Opts) && tagging == variant_tagging_kind::internal &&
 2032|    120|                                  variant_unit_alternative<V>) {
 2033|       |                  // A unit alternative carries no data, so internal tagging renders it as the
 2034|       |                  // discriminator alone -- the same object an empty struct alternative produces.
 2035|    120|                  if (missing_id(value, ctx)) {
 2036|    120|                     return;
 2037|    120|                  }
 2038|    120|                  if constexpr (Opts.prettify) {
 2039|    120|                     dump("{\n", b, ix);
 2040|    120|                     ctx.depth += check_indentation_width(Opts);
 2041|    120|                     dumpn(check_indentation_char(Opts), ctx.depth, b, ix);
 2042|    120|                     dump('"', b, ix);
 2043|    120|                     dump_maybe_empty(tag_v<T>, b, ix);
 2044|    120|                     dump("\": ", b, ix);
 2045|    120|                     write_id<Opts>(value, ctx, b, ix);
 2046|    120|                     ctx.depth -= check_indentation_width(Opts);
 2047|    120|                     if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 2048|    120|                        return;
 2049|    120|                     }
 2050|    120|                     std::memcpy(&b[ix], "\n", 1);
 2051|    120|                     ++ix;
 2052|    120|                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2053|    120|                     ix += ctx.depth;
 2054|    120|                     std::memcpy(&b[ix], "}", 1);
 2055|    120|                     ++ix;
 2056|    120|                  }
 2057|    120|                  else {
 2058|    120|                     dump("{\"", b, ix);
 2059|    120|                     dump_maybe_empty(tag_v<T>, b, ix);
 2060|    120|                     dump("\":", b, ix);
 2061|    120|                     write_id<Opts>(value, ctx, b, ix);
 2062|    120|                     dump('}', b, ix);
 2063|    120|                  }
 2064|    120|               }
 2065|    120|               else if constexpr (check_write_type_info(Opts) && tagging == variant_tagging_kind::internal &&
 2066|    120|                                  (glaze_object_t<V> || reflectable<V> || is_memory_object<V>) &&
 2067|    120|                                  (not alternative_declares_key<V>(tag_v<T>))) {
 2068|       |                  // An alternative that declares a member named like the discriminator carries the
 2069|       |                  // discriminator itself, so no tag is merged here and the bare-write branch below
 2070|       |                  // handles it. Previously only `reflectable` alternatives were excluded; a
 2071|       |                  // `glaze_object_t` one fell through to this branch and emitted the key twice.
 2072|    120|                  if (missing_id(value, ctx)) {
 2073|    120|                     return;
 2074|    120|                  }
 2075|    120|                  constexpr auto N = []() {
 2076|    120|                     if constexpr (is_memory_object<V>) {
 2077|    120|                        return reflect<memory_type<V>>::size;
 2078|    120|                     }
 2079|    120|                     else {
 2080|    120|                        return reflect<V>::size;
 2081|    120|                     }
 2082|    120|                  }();
 2083|       |
 2084|       |                  // must first write out type
 2085|    120|                  if constexpr (Opts.prettify) {
 2086|    120|                     dump("{\n", b, ix);
 2087|    120|                     ctx.depth += check_indentation_width(Opts);
 2088|    120|                     dumpn(check_indentation_char(Opts), ctx.depth, b, ix);
 2089|    120|                     dump('"', b, ix);
 2090|    120|                     dump_maybe_empty(tag_v<T>, b, ix);
 2091|       |
 2092|    120|                     using id_type = std::decay_t<decltype(ids_v<T>[value.index()])>;
 2093|       |
 2094|    120|                     if constexpr (std::integral<id_type>) {
 2095|    120|                        dump("\": ", b, ix);
 2096|    120|                        serialize<JSON>::op<Opts>(ids_v<T>[value.index()], ctx, b, ix);
 2097|    120|                        if constexpr (N > 0) {
 2098|    120|                           dump(",\n", b, ix);
 2099|    120|                           dumpn(check_indentation_char(Opts), ctx.depth, b, ix);
 2100|    120|                        }
 2101|    120|                     }
 2102|    120|                     else {
 2103|    120|                        dump("\": \"", b, ix);
 2104|    120|                        dump_maybe_empty(ids_v<T>[value.index()], b, ix);
 2105|    120|                        if constexpr (N == 0) {
 2106|    120|                           dump('"', b, ix);
 2107|    120|                        }
 2108|    120|                        else {
 2109|    120|                           dump("\",\n", b, ix);
 2110|    120|                           dumpn(check_indentation_char(Opts), ctx.depth, b, ix);
 2111|    120|                        }
 2112|    120|                     }
 2113|    120|                  }
 2114|    120|                  else {
 2115|    120|                     using id_type = std::decay_t<decltype(ids_v<T>[value.index()])>;
 2116|       |
 2117|    120|                     dump("{\"", b, ix);
 2118|    120|                     dump_maybe_empty(tag_v<T>, b, ix);
 2119|       |
 2120|    120|                     if constexpr (std::integral<id_type>) {
 2121|    120|                        dump("\":", b, ix);
 2122|    120|                        serialize<JSON>::op<Opts>(ids_v<T>[value.index()], ctx, b, ix);
 2123|    120|                        if constexpr (N > 0) {
 2124|    120|                           dump(',', b, ix);
 2125|    120|                        }
 2126|    120|                     }
 2127|    120|                     else {
 2128|    120|                        dump("\":\"", b, ix);
 2129|    120|                        dump_maybe_empty(ids_v<T>[value.index()], b, ix);
 2130|    120|                        if constexpr (N == 0) {
 2131|    120|                           dump('"', b, ix);
 2132|    120|                        }
 2133|    120|                        else {
 2134|    120|                           dump("\",", b, ix);
 2135|    120|                        }
 2136|    120|                     }
 2137|    120|                  }
 2138|    120|                  if constexpr (is_memory_object<V>) {
 2139|    120|                     if (!val) [[unlikely]] {
 2140|    120|                        ctx.error = error_code::invalid_variant_object;
 2141|    120|                        return;
 2142|    120|                     }
 2143|    120|                     to<JSON, memory_type<V>>::template op<opening_and_closing_handled<Opts>()>(*val, ctx, b, ix);
 2144|    120|                  }
 2145|    120|                  else {
 2146|    120|                     to<JSON, V>::template op<opening_and_closing_handled<Opts>()>(val, ctx, b, ix);
 2147|    120|                  }
 2148|       |                  // If we skip everything then we may have an extra comma, which we want to revert
 2149|    120|                  if constexpr (Opts.skip_null_members) {
 2150|    120|                     if (b[ix - 1] == ',') {
 2151|    120|                        --ix;
 2152|    120|                     }
 2153|    120|                  }
 2154|       |
 2155|    120|                  if constexpr (Opts.prettify) {
 2156|    120|                     ctx.depth -= check_indentation_width(Opts);
 2157|    120|                     if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 2158|    120|                        return;
 2159|    120|                     }
 2160|    120|                     std::memcpy(&b[ix], "\n", 1);
 2161|    120|                     ++ix;
 2162|    120|                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2163|    120|                     ix += ctx.depth;
 2164|    120|                     std::memcpy(&b[ix], "}", 1);
 2165|    120|                     ++ix;
 2166|    120|                  }
 2167|    120|                  else {
 2168|    120|                     dump('}', b, ix);
 2169|    120|                  }
 2170|    120|               }
 2171|    120|               else {
 2172|    120|                  to<JSON, V>::template op<Opts>(val, ctx, b, ix);
 2173|    120|               }
 2174|    120|            },
 2175|    120|            value);
 2176|    120|      }
_ZZN3glz2toILj10ENSt3__17variantIJNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEN9repe_fuzz6amountEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS8_RSB_TkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_ENKUlOT_E_clISF_EEDaSS_:
 1957|    120|            [&](auto&& val) {
 1958|    120|               using V = std::decay_t<decltype(val)>;
 1959|       |
 1960|       |               if constexpr (check_write_type_info(Opts) && tagging == variant_tagging_kind::internal &&
 1961|       |                             custom_write<V>) {
 1962|       |                  // Custom alternative: the user's serializer emits the object body, into which we
 1963|       |                  // merge the variant tag. For this to produce valid JSON the custom to<> must (1)
 1964|       |                  // write an object body and (2) honor opening_and_closing_handled (suppress its own
 1965|       |                  // braces) so the tag shares the alternative's object. A custom writer that emits a
 1966|       |                  // scalar/array, or that ignores those flags, would yield malformed output.
 1967|       |                  //
 1968|       |                  // The tag-emission below mirrors the reflected-object branch that follows; keep the
 1969|       |                  // two in sync. The body size is not known at compile time, so we always write the
 1970|       |                  // tag separator and then drop it at runtime if the body turned out empty.
 1971|       |                  if (missing_id(value, ctx)) {
 1972|       |                     return;
 1973|       |                  }
 1974|       |                  using id_type = std::decay_t<decltype(ids_v<T>[value.index()])>;
 1975|       |                  if constexpr (Opts.prettify) {
 1976|       |                     dump("{\n", b, ix);
 1977|       |                     ctx.depth += check_indentation_width(Opts);
 1978|       |                     dumpn(check_indentation_char(Opts), ctx.depth, b, ix);
 1979|       |                     dump('"', b, ix);
 1980|       |                     dump_maybe_empty(tag_v<T>, b, ix);
 1981|       |                     if constexpr (std::integral<id_type>) {
 1982|       |                        dump("\": ", b, ix);
 1983|       |                        serialize<JSON>::op<Opts>(ids_v<T>[value.index()], ctx, b, ix);
 1984|       |                     }
 1985|       |                     else {
 1986|       |                        dump("\": \"", b, ix);
 1987|       |                        dump_maybe_empty(ids_v<T>[value.index()], b, ix);
 1988|       |                        dump('"', b, ix);
 1989|       |                     }
 1990|       |                     const auto pos_after_tag = ix;
 1991|       |                     dump(",\n", b, ix);
 1992|       |                     dumpn(check_indentation_char(Opts), ctx.depth, b, ix);
 1993|       |                     const auto pos_body_start = ix;
 1994|       |                     to<JSON, V>::template op<opening_and_closing_handled<Opts>()>(val, ctx, b, ix);
 1995|       |                     if (ix == pos_body_start) {
 1996|       |                        ix = pos_after_tag; // custom body was empty: undo the tag separator
 1997|       |                     }
 1998|       |                     ctx.depth -= check_indentation_width(Opts);
 1999|       |                     if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 2000|       |                        return;
 2001|       |                     }
 2002|       |                     std::memcpy(&b[ix], "\n", 1);
 2003|       |                     ++ix;
 2004|       |                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2005|       |                     ix += ctx.depth;
 2006|       |                     std::memcpy(&b[ix], "}", 1);
 2007|       |                     ++ix;
 2008|       |                  }
 2009|       |                  else {
 2010|       |                     dump("{\"", b, ix);
 2011|       |                     dump_maybe_empty(tag_v<T>, b, ix);
 2012|       |                     if constexpr (std::integral<id_type>) {
 2013|       |                        dump("\":", b, ix);
 2014|       |                        serialize<JSON>::op<Opts>(ids_v<T>[value.index()], ctx, b, ix);
 2015|       |                     }
 2016|       |                     else {
 2017|       |                        dump("\":\"", b, ix);
 2018|       |                        dump_maybe_empty(ids_v<T>[value.index()], b, ix);
 2019|       |                        dump('"', b, ix);
 2020|       |                     }
 2021|       |                     const auto pos_after_tag = ix;
 2022|       |                     dump(',', b, ix);
 2023|       |                     const auto pos_body_start = ix;
 2024|       |                     to<JSON, V>::template op<opening_and_closing_handled<Opts>()>(val, ctx, b, ix);
 2025|       |                     if (ix == pos_body_start) {
 2026|       |                        ix = pos_after_tag; // custom body was empty: undo the tag separator
 2027|       |                     }
 2028|       |                     dump('}', b, ix);
 2029|       |                  }
 2030|       |               }
 2031|       |               else if constexpr (check_write_type_info(Opts) && tagging == variant_tagging_kind::internal &&
 2032|       |                                  variant_unit_alternative<V>) {
 2033|       |                  // A unit alternative carries no data, so internal tagging renders it as the
 2034|       |                  // discriminator alone -- the same object an empty struct alternative produces.
 2035|       |                  if (missing_id(value, ctx)) {
 2036|       |                     return;
 2037|       |                  }
 2038|       |                  if constexpr (Opts.prettify) {
 2039|       |                     dump("{\n", b, ix);
 2040|       |                     ctx.depth += check_indentation_width(Opts);
 2041|       |                     dumpn(check_indentation_char(Opts), ctx.depth, b, ix);
 2042|       |                     dump('"', b, ix);
 2043|       |                     dump_maybe_empty(tag_v<T>, b, ix);
 2044|       |                     dump("\": ", b, ix);
 2045|       |                     write_id<Opts>(value, ctx, b, ix);
 2046|       |                     ctx.depth -= check_indentation_width(Opts);
 2047|       |                     if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 2048|       |                        return;
 2049|       |                     }
 2050|       |                     std::memcpy(&b[ix], "\n", 1);
 2051|       |                     ++ix;
 2052|       |                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2053|       |                     ix += ctx.depth;
 2054|       |                     std::memcpy(&b[ix], "}", 1);
 2055|       |                     ++ix;
 2056|       |                  }
 2057|       |                  else {
 2058|       |                     dump("{\"", b, ix);
 2059|       |                     dump_maybe_empty(tag_v<T>, b, ix);
 2060|       |                     dump("\":", b, ix);
 2061|       |                     write_id<Opts>(value, ctx, b, ix);
 2062|       |                     dump('}', b, ix);
 2063|       |                  }
 2064|       |               }
 2065|       |               else if constexpr (check_write_type_info(Opts) && tagging == variant_tagging_kind::internal &&
 2066|       |                                  (glaze_object_t<V> || reflectable<V> || is_memory_object<V>) &&
 2067|       |                                  (not alternative_declares_key<V>(tag_v<T>))) {
 2068|       |                  // An alternative that declares a member named like the discriminator carries the
 2069|       |                  // discriminator itself, so no tag is merged here and the bare-write branch below
 2070|       |                  // handles it. Previously only `reflectable` alternatives were excluded; a
 2071|       |                  // `glaze_object_t` one fell through to this branch and emitted the key twice.
 2072|       |                  if (missing_id(value, ctx)) {
 2073|       |                     return;
 2074|       |                  }
 2075|       |                  constexpr auto N = []() {
 2076|       |                     if constexpr (is_memory_object<V>) {
 2077|       |                        return reflect<memory_type<V>>::size;
 2078|       |                     }
 2079|       |                     else {
 2080|       |                        return reflect<V>::size;
 2081|       |                     }
 2082|       |                  }();
 2083|       |
 2084|       |                  // must first write out type
 2085|       |                  if constexpr (Opts.prettify) {
 2086|       |                     dump("{\n", b, ix);
 2087|       |                     ctx.depth += check_indentation_width(Opts);
 2088|       |                     dumpn(check_indentation_char(Opts), ctx.depth, b, ix);
 2089|       |                     dump('"', b, ix);
 2090|       |                     dump_maybe_empty(tag_v<T>, b, ix);
 2091|       |
 2092|       |                     using id_type = std::decay_t<decltype(ids_v<T>[value.index()])>;
 2093|       |
 2094|       |                     if constexpr (std::integral<id_type>) {
 2095|       |                        dump("\": ", b, ix);
 2096|       |                        serialize<JSON>::op<Opts>(ids_v<T>[value.index()], ctx, b, ix);
 2097|       |                        if constexpr (N > 0) {
 2098|       |                           dump(",\n", b, ix);
 2099|       |                           dumpn(check_indentation_char(Opts), ctx.depth, b, ix);
 2100|       |                        }
 2101|       |                     }
 2102|       |                     else {
 2103|       |                        dump("\": \"", b, ix);
 2104|       |                        dump_maybe_empty(ids_v<T>[value.index()], b, ix);
 2105|       |                        if constexpr (N == 0) {
 2106|       |                           dump('"', b, ix);
 2107|       |                        }
 2108|       |                        else {
 2109|       |                           dump("\",\n", b, ix);
 2110|       |                           dumpn(check_indentation_char(Opts), ctx.depth, b, ix);
 2111|       |                        }
 2112|       |                     }
 2113|       |                  }
 2114|       |                  else {
 2115|       |                     using id_type = std::decay_t<decltype(ids_v<T>[value.index()])>;
 2116|       |
 2117|       |                     dump("{\"", b, ix);
 2118|       |                     dump_maybe_empty(tag_v<T>, b, ix);
 2119|       |
 2120|       |                     if constexpr (std::integral<id_type>) {
 2121|       |                        dump("\":", b, ix);
 2122|       |                        serialize<JSON>::op<Opts>(ids_v<T>[value.index()], ctx, b, ix);
 2123|       |                        if constexpr (N > 0) {
 2124|       |                           dump(',', b, ix);
 2125|       |                        }
 2126|       |                     }
 2127|       |                     else {
 2128|       |                        dump("\":\"", b, ix);
 2129|       |                        dump_maybe_empty(ids_v<T>[value.index()], b, ix);
 2130|       |                        if constexpr (N == 0) {
 2131|       |                           dump('"', b, ix);
 2132|       |                        }
 2133|       |                        else {
 2134|       |                           dump("\",", b, ix);
 2135|       |                        }
 2136|       |                     }
 2137|       |                  }
 2138|       |                  if constexpr (is_memory_object<V>) {
 2139|       |                     if (!val) [[unlikely]] {
 2140|       |                        ctx.error = error_code::invalid_variant_object;
 2141|       |                        return;
 2142|       |                     }
 2143|       |                     to<JSON, memory_type<V>>::template op<opening_and_closing_handled<Opts>()>(*val, ctx, b, ix);
 2144|       |                  }
 2145|       |                  else {
 2146|       |                     to<JSON, V>::template op<opening_and_closing_handled<Opts>()>(val, ctx, b, ix);
 2147|       |                  }
 2148|       |                  // If we skip everything then we may have an extra comma, which we want to revert
 2149|       |                  if constexpr (Opts.skip_null_members) {
 2150|       |                     if (b[ix - 1] == ',') {
 2151|       |                        --ix;
 2152|       |                     }
 2153|       |                  }
 2154|       |
 2155|       |                  if constexpr (Opts.prettify) {
 2156|       |                     ctx.depth -= check_indentation_width(Opts);
 2157|       |                     if (!ensure_space(ctx, b, ix + ctx.depth + write_padding_bytes)) [[unlikely]] {
 2158|       |                        return;
 2159|       |                     }
 2160|       |                     std::memcpy(&b[ix], "\n", 1);
 2161|       |                     ++ix;
 2162|       |                     std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2163|       |                     ix += ctx.depth;
 2164|       |                     std::memcpy(&b[ix], "}", 1);
 2165|       |                     ++ix;
 2166|       |                  }
 2167|       |                  else {
 2168|       |                     dump('}', b, ix);
 2169|       |                  }
 2170|       |               }
 2171|    120|               else {
 2172|    120|                  to<JSON, V>::template op<Opts>(val, ctx, b, ix);
 2173|    120|               }
 2174|    120|            },
_ZZN3glz2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm8EEEDav:
 2539|     62|               for_each<N>([&]<size_t I>() {
 2540|     62|                  using val_t = field_t<T, I>;
 2541|       |
 2542|       |                  // `meta<T>::skip` joins the other compile-time exclusions here rather than returning
 2543|       |                  // early, so that a skipped field's writer is never instantiated -- see
 2544|       |                  // `skipped_by_meta`.
 2545|     62|                  constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 2546|       |                  if constexpr (skipped_by_meta<T, I, operation::serialize> || always_skipped<val_t> ||
 2547|       |                                (!write_function_pointers && is_any_function_ptr<val_t>)) {
 2548|       |                     return;
 2549|       |                  }
 2550|     62|                  else {
 2551|       |                     if constexpr (meta_has_skip_if<T>) {
 2552|       |                        static constexpr auto skip_if_key = glz::get<I>(reflect<T>::keys);
 2553|       |                        static constexpr meta_context mctx{.op = operation::serialize};
 2554|       |                        decltype(auto) field_value = [&]() -> decltype(auto) {
 2555|       |                           if constexpr (reflectable<T>) {
 2556|       |                              return get<I>(t);
 2557|       |                           }
 2558|       |                           else {
 2559|       |                              return get_member(value, glz::get<I>(reflect<T>::values));
 2560|       |                           }
 2561|       |                        }();
 2562|       |                        if (meta<T>::skip_if(field_value, skip_if_key, mctx)) return;
 2563|       |                     }
 2564|       |
 2565|       |                     if constexpr (null_t<val_t> && Opts.skip_null_members) {
 2566|       |                        if constexpr (always_null_t<val_t>)
 2567|       |                           return;
 2568|       |                        else {
 2569|       |                           const auto is_null = [&]() {
 2570|       |                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|       |                                 if constexpr (reflectable<T>) {
 2572|       |                                    return get<I>(t);
 2573|       |                                 }
 2574|       |                                 else {
 2575|       |                                    return get<I>(reflect<T>::values);
 2576|       |                                 }
 2577|       |                              };
 2578|       |
 2579|       |                              if constexpr (nullable_wrapper<val_t>) {
 2580|       |                                 return !bool(element()(value).val);
 2581|       |                              }
 2582|       |                              else if constexpr (nullable_value_t<val_t>) {
 2583|       |                                 return !get_member(value, element()).has_value();
 2584|       |                              }
 2585|       |                              else {
 2586|       |                                 return !bool(get_member(value, element()));
 2587|       |                              }
 2588|       |                           }();
 2589|       |                           if (is_null) return;
 2590|       |                        }
 2591|       |                     }
 2592|       |                     else if constexpr (is_specialization_v<val_t, custom_t> && Opts.skip_null_members &&
 2593|       |                                        custom_getter_returns_nullable<val_t>()) {
 2594|       |                        if (is_custom_field_null<T, I>(value, t, ctx)) return;
 2595|       |                     }
 2596|     62|                     else if constexpr (Opts.skip_null_members && glaze_value_is_nullable<val_t>()) {
 2597|     62|                        if (is_glaze_value_field_null<T, I>(value, t)) return;
 2598|     62|                     }
 2599|       |
 2600|       |                     if constexpr (check_skip_default_members(Opts) && has_skippable_default<val_t>) {
 2601|       |                        decltype(auto) member = [&]() -> decltype(auto) {
 2602|       |                           if constexpr (reflectable<T>) {
 2603|       |                              return get_member(value, get<I>(t));
 2604|       |                           }
 2605|       |                           else {
 2606|       |                              return get_member(value, get<I>(reflect<T>::values));
 2607|       |                           }
 2608|       |                        }();
 2609|       |                        if (is_default_value(member)) return;
 2610|       |                     }
 2611|       |
 2612|       |                     if constexpr (Opts.prettify) {
 2613|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2614|       |                           return;
 2615|       |                        }
 2616|       |                     }
 2617|     62|                     else {
 2618|     62|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
  ------------------
  |  Branch (2618:29): [True: 0, False: 62]
  ------------------
 2619|      0|                           return;
 2620|      0|                        }
 2621|     62|                     }
 2622|       |
 2623|     62|                     if (first) {
  ------------------
  |  Branch (2623:26): [True: 0, False: 62]
  ------------------
 2624|      0|                        first = false;
 2625|      0|                     }
 2626|     62|                     else {
 2627|       |                        // Null members may be skipped so we can't just write it out for all but the last member
 2628|       |                        if constexpr (Opts.prettify) {
 2629|       |                           std::memcpy(&b[ix], ",\n", 2);
 2630|       |                           ix += 2;
 2631|       |                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2632|       |                           ix += ctx.depth;
 2633|       |                        }
 2634|     62|                        else {
 2635|     62|                           std::memcpy(&b[ix], ",", 1);
 2636|     62|                           ++ix;
 2637|     62|                        }
 2638|       |                        if constexpr (is_output_streaming<B>) {
 2639|       |                           flush_buffer(b, ix);
 2640|       |                        }
 2641|     62|                     }
 2642|       |
 2643|       |                     // MSVC requires get<I> rather than keys[I]
 2644|     62|                     static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2645|     62|                     static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2646|     62|                     static constexpr auto n = quoted_key.size();
 2647|     62|                     std::memcpy(&b[ix], quoted_key.data(), n);
 2648|     62|                     ix += n;
 2649|       |
 2650|     62|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2650:57): [Folded, False: 62]
  ------------------
 2651|     62|                     if constexpr (reflectable<T>) {
 2652|     62|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2653|       |                     }
 2654|       |                     else {
 2655|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2656|       |                                                                 ix);
 2657|       |                     }
 2658|     62|                  }
 2659|     62|               });
_ZN3glz2toILj10ENSt3__18functionIFiiEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERS4_TkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_:
 1279|     62|      {
 1280|     62|         static constexpr auto name = name_v<std::decay_t<decltype(value)>>;
 1281|     62|         constexpr auto n = name.size();
 1282|       |
 1283|     62|         if (!ensure_space(ctx, b, ix + 8 + n)) [[unlikely]] {
  ------------------
  |  Branch (1283:14): [True: 0, False: 62]
  ------------------
 1284|      0|            return;
 1285|      0|         }
 1286|       |
 1287|     62|         std::memcpy(&b[ix], "\"", 1);
 1288|     62|         ++ix;
 1289|     62|         if constexpr (not name.empty()) {
 1290|     62|            std::memcpy(&b[ix], name.data(), n);
 1291|     62|            ix += n;
 1292|     62|         }
 1293|     62|         std::memcpy(&b[ix], "\"", 1);
 1294|     62|         ++ix;
 1295|     62|      }
_ZZN3glz2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm9EEEDav:
 2539|     62|               for_each<N>([&]<size_t I>() {
 2540|     62|                  using val_t = field_t<T, I>;
 2541|       |
 2542|       |                  // `meta<T>::skip` joins the other compile-time exclusions here rather than returning
 2543|       |                  // early, so that a skipped field's writer is never instantiated -- see
 2544|       |                  // `skipped_by_meta`.
 2545|     62|                  constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 2546|       |                  if constexpr (skipped_by_meta<T, I, operation::serialize> || always_skipped<val_t> ||
 2547|       |                                (!write_function_pointers && is_any_function_ptr<val_t>)) {
 2548|       |                     return;
 2549|       |                  }
 2550|     62|                  else {
 2551|       |                     if constexpr (meta_has_skip_if<T>) {
 2552|       |                        static constexpr auto skip_if_key = glz::get<I>(reflect<T>::keys);
 2553|       |                        static constexpr meta_context mctx{.op = operation::serialize};
 2554|       |                        decltype(auto) field_value = [&]() -> decltype(auto) {
 2555|       |                           if constexpr (reflectable<T>) {
 2556|       |                              return get<I>(t);
 2557|       |                           }
 2558|       |                           else {
 2559|       |                              return get_member(value, glz::get<I>(reflect<T>::values));
 2560|       |                           }
 2561|       |                        }();
 2562|       |                        if (meta<T>::skip_if(field_value, skip_if_key, mctx)) return;
 2563|       |                     }
 2564|       |
 2565|       |                     if constexpr (null_t<val_t> && Opts.skip_null_members) {
 2566|       |                        if constexpr (always_null_t<val_t>)
 2567|       |                           return;
 2568|       |                        else {
 2569|       |                           const auto is_null = [&]() {
 2570|       |                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|       |                                 if constexpr (reflectable<T>) {
 2572|       |                                    return get<I>(t);
 2573|       |                                 }
 2574|       |                                 else {
 2575|       |                                    return get<I>(reflect<T>::values);
 2576|       |                                 }
 2577|       |                              };
 2578|       |
 2579|       |                              if constexpr (nullable_wrapper<val_t>) {
 2580|       |                                 return !bool(element()(value).val);
 2581|       |                              }
 2582|       |                              else if constexpr (nullable_value_t<val_t>) {
 2583|       |                                 return !get_member(value, element()).has_value();
 2584|       |                              }
 2585|       |                              else {
 2586|       |                                 return !bool(get_member(value, element()));
 2587|       |                              }
 2588|       |                           }();
 2589|       |                           if (is_null) return;
 2590|       |                        }
 2591|       |                     }
 2592|       |                     else if constexpr (is_specialization_v<val_t, custom_t> && Opts.skip_null_members &&
 2593|       |                                        custom_getter_returns_nullable<val_t>()) {
 2594|       |                        if (is_custom_field_null<T, I>(value, t, ctx)) return;
 2595|       |                     }
 2596|     62|                     else if constexpr (Opts.skip_null_members && glaze_value_is_nullable<val_t>()) {
 2597|     62|                        if (is_glaze_value_field_null<T, I>(value, t)) return;
 2598|     62|                     }
 2599|       |
 2600|       |                     if constexpr (check_skip_default_members(Opts) && has_skippable_default<val_t>) {
 2601|       |                        decltype(auto) member = [&]() -> decltype(auto) {
 2602|       |                           if constexpr (reflectable<T>) {
 2603|       |                              return get_member(value, get<I>(t));
 2604|       |                           }
 2605|       |                           else {
 2606|       |                              return get_member(value, get<I>(reflect<T>::values));
 2607|       |                           }
 2608|       |                        }();
 2609|       |                        if (is_default_value(member)) return;
 2610|       |                     }
 2611|       |
 2612|       |                     if constexpr (Opts.prettify) {
 2613|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2614|       |                           return;
 2615|       |                        }
 2616|       |                     }
 2617|     62|                     else {
 2618|     62|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
  ------------------
  |  Branch (2618:29): [True: 0, False: 62]
  ------------------
 2619|      0|                           return;
 2620|      0|                        }
 2621|     62|                     }
 2622|       |
 2623|     62|                     if (first) {
  ------------------
  |  Branch (2623:26): [True: 0, False: 62]
  ------------------
 2624|      0|                        first = false;
 2625|      0|                     }
 2626|     62|                     else {
 2627|       |                        // Null members may be skipped so we can't just write it out for all but the last member
 2628|       |                        if constexpr (Opts.prettify) {
 2629|       |                           std::memcpy(&b[ix], ",\n", 2);
 2630|       |                           ix += 2;
 2631|       |                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2632|       |                           ix += ctx.depth;
 2633|       |                        }
 2634|     62|                        else {
 2635|     62|                           std::memcpy(&b[ix], ",", 1);
 2636|     62|                           ++ix;
 2637|     62|                        }
 2638|       |                        if constexpr (is_output_streaming<B>) {
 2639|       |                           flush_buffer(b, ix);
 2640|       |                        }
 2641|     62|                     }
 2642|       |
 2643|       |                     // MSVC requires get<I> rather than keys[I]
 2644|     62|                     static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2645|     62|                     static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2646|     62|                     static constexpr auto n = quoted_key.size();
 2647|     62|                     std::memcpy(&b[ix], quoted_key.data(), n);
 2648|     62|                     ix += n;
 2649|       |
 2650|     62|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2650:57): [Folded, False: 62]
  ------------------
 2651|     62|                     if constexpr (reflectable<T>) {
 2652|     62|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2653|       |                     }
 2654|       |                     else {
 2655|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2656|       |                                                                 ix);
 2657|       |                     }
 2658|     62|                  }
 2659|     62|               });
_ZN3glz2toILj10ENSt3__18functionIFNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERKS8_EEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS8_RSC_TkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_:
 1279|     62|      {
 1280|     62|         static constexpr auto name = name_v<std::decay_t<decltype(value)>>;
 1281|     62|         constexpr auto n = name.size();
 1282|       |
 1283|     62|         if (!ensure_space(ctx, b, ix + 8 + n)) [[unlikely]] {
  ------------------
  |  Branch (1283:14): [True: 0, False: 62]
  ------------------
 1284|      0|            return;
 1285|      0|         }
 1286|       |
 1287|     62|         std::memcpy(&b[ix], "\"", 1);
 1288|     62|         ++ix;
 1289|     62|         if constexpr (not name.empty()) {
 1290|     62|            std::memcpy(&b[ix], name.data(), n);
 1291|     62|            ix += n;
 1292|     62|         }
 1293|     62|         std::memcpy(&b[ix], "\"", 1);
 1294|     62|         ++ix;
 1295|     62|      }
_ZZN3glz2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm10EEEDav:
 2539|     62|               for_each<N>([&]<size_t I>() {
 2540|     62|                  using val_t = field_t<T, I>;
 2541|       |
 2542|       |                  // `meta<T>::skip` joins the other compile-time exclusions here rather than returning
 2543|       |                  // early, so that a skipped field's writer is never instantiated -- see
 2544|       |                  // `skipped_by_meta`.
 2545|     62|                  constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 2546|       |                  if constexpr (skipped_by_meta<T, I, operation::serialize> || always_skipped<val_t> ||
 2547|       |                                (!write_function_pointers && is_any_function_ptr<val_t>)) {
 2548|       |                     return;
 2549|       |                  }
 2550|     62|                  else {
 2551|       |                     if constexpr (meta_has_skip_if<T>) {
 2552|       |                        static constexpr auto skip_if_key = glz::get<I>(reflect<T>::keys);
 2553|       |                        static constexpr meta_context mctx{.op = operation::serialize};
 2554|       |                        decltype(auto) field_value = [&]() -> decltype(auto) {
 2555|       |                           if constexpr (reflectable<T>) {
 2556|       |                              return get<I>(t);
 2557|       |                           }
 2558|       |                           else {
 2559|       |                              return get_member(value, glz::get<I>(reflect<T>::values));
 2560|       |                           }
 2561|       |                        }();
 2562|       |                        if (meta<T>::skip_if(field_value, skip_if_key, mctx)) return;
 2563|       |                     }
 2564|       |
 2565|       |                     if constexpr (null_t<val_t> && Opts.skip_null_members) {
 2566|       |                        if constexpr (always_null_t<val_t>)
 2567|       |                           return;
 2568|       |                        else {
 2569|       |                           const auto is_null = [&]() {
 2570|       |                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|       |                                 if constexpr (reflectable<T>) {
 2572|       |                                    return get<I>(t);
 2573|       |                                 }
 2574|       |                                 else {
 2575|       |                                    return get<I>(reflect<T>::values);
 2576|       |                                 }
 2577|       |                              };
 2578|       |
 2579|       |                              if constexpr (nullable_wrapper<val_t>) {
 2580|       |                                 return !bool(element()(value).val);
 2581|       |                              }
 2582|       |                              else if constexpr (nullable_value_t<val_t>) {
 2583|       |                                 return !get_member(value, element()).has_value();
 2584|       |                              }
 2585|       |                              else {
 2586|       |                                 return !bool(get_member(value, element()));
 2587|       |                              }
 2588|       |                           }();
 2589|       |                           if (is_null) return;
 2590|       |                        }
 2591|       |                     }
 2592|       |                     else if constexpr (is_specialization_v<val_t, custom_t> && Opts.skip_null_members &&
 2593|       |                                        custom_getter_returns_nullable<val_t>()) {
 2594|       |                        if (is_custom_field_null<T, I>(value, t, ctx)) return;
 2595|       |                     }
 2596|     62|                     else if constexpr (Opts.skip_null_members && glaze_value_is_nullable<val_t>()) {
 2597|     62|                        if (is_glaze_value_field_null<T, I>(value, t)) return;
 2598|     62|                     }
 2599|       |
 2600|       |                     if constexpr (check_skip_default_members(Opts) && has_skippable_default<val_t>) {
 2601|       |                        decltype(auto) member = [&]() -> decltype(auto) {
 2602|       |                           if constexpr (reflectable<T>) {
 2603|       |                              return get_member(value, get<I>(t));
 2604|       |                           }
 2605|       |                           else {
 2606|       |                              return get_member(value, get<I>(reflect<T>::values));
 2607|       |                           }
 2608|       |                        }();
 2609|       |                        if (is_default_value(member)) return;
 2610|       |                     }
 2611|       |
 2612|       |                     if constexpr (Opts.prettify) {
 2613|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2614|       |                           return;
 2615|       |                        }
 2616|       |                     }
 2617|     62|                     else {
 2618|     62|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
  ------------------
  |  Branch (2618:29): [True: 0, False: 62]
  ------------------
 2619|      0|                           return;
 2620|      0|                        }
 2621|     62|                     }
 2622|       |
 2623|     62|                     if (first) {
  ------------------
  |  Branch (2623:26): [True: 0, False: 62]
  ------------------
 2624|      0|                        first = false;
 2625|      0|                     }
 2626|     62|                     else {
 2627|       |                        // Null members may be skipped so we can't just write it out for all but the last member
 2628|       |                        if constexpr (Opts.prettify) {
 2629|       |                           std::memcpy(&b[ix], ",\n", 2);
 2630|       |                           ix += 2;
 2631|       |                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2632|       |                           ix += ctx.depth;
 2633|       |                        }
 2634|     62|                        else {
 2635|     62|                           std::memcpy(&b[ix], ",", 1);
 2636|     62|                           ++ix;
 2637|     62|                        }
 2638|       |                        if constexpr (is_output_streaming<B>) {
 2639|       |                           flush_buffer(b, ix);
 2640|       |                        }
 2641|     62|                     }
 2642|       |
 2643|       |                     // MSVC requires get<I> rather than keys[I]
 2644|     62|                     static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2645|     62|                     static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2646|     62|                     static constexpr auto n = quoted_key.size();
 2647|     62|                     std::memcpy(&b[ix], quoted_key.data(), n);
 2648|     62|                     ix += n;
 2649|       |
 2650|     62|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2650:57): [Folded, False: 62]
  ------------------
 2651|     62|                     if constexpr (reflectable<T>) {
 2652|     62|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2653|       |                     }
 2654|       |                     else {
 2655|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2656|       |                                                                 ix);
 2657|       |                     }
 2658|     62|                  }
 2659|     62|               });
_ZN3glz2toILj10ENSt3__18functionIFN9repe_fuzz5pointERKS4_EEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERS8_TkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_:
 1279|     62|      {
 1280|     62|         static constexpr auto name = name_v<std::decay_t<decltype(value)>>;
 1281|     62|         constexpr auto n = name.size();
 1282|       |
 1283|     62|         if (!ensure_space(ctx, b, ix + 8 + n)) [[unlikely]] {
  ------------------
  |  Branch (1283:14): [True: 0, False: 62]
  ------------------
 1284|      0|            return;
 1285|      0|         }
 1286|       |
 1287|     62|         std::memcpy(&b[ix], "\"", 1);
 1288|     62|         ++ix;
 1289|     62|         if constexpr (not name.empty()) {
 1290|     62|            std::memcpy(&b[ix], name.data(), n);
 1291|     62|            ix += n;
 1292|     62|         }
 1293|     62|         std::memcpy(&b[ix], "\"", 1);
 1294|     62|         ++ix;
 1295|     62|      }
_ZZN3glz2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm11EEEDav:
 2539|     62|               for_each<N>([&]<size_t I>() {
 2540|     62|                  using val_t = field_t<T, I>;
 2541|       |
 2542|       |                  // `meta<T>::skip` joins the other compile-time exclusions here rather than returning
 2543|       |                  // early, so that a skipped field's writer is never instantiated -- see
 2544|       |                  // `skipped_by_meta`.
 2545|     62|                  constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 2546|       |                  if constexpr (skipped_by_meta<T, I, operation::serialize> || always_skipped<val_t> ||
 2547|       |                                (!write_function_pointers && is_any_function_ptr<val_t>)) {
 2548|       |                     return;
 2549|       |                  }
 2550|     62|                  else {
 2551|       |                     if constexpr (meta_has_skip_if<T>) {
 2552|       |                        static constexpr auto skip_if_key = glz::get<I>(reflect<T>::keys);
 2553|       |                        static constexpr meta_context mctx{.op = operation::serialize};
 2554|       |                        decltype(auto) field_value = [&]() -> decltype(auto) {
 2555|       |                           if constexpr (reflectable<T>) {
 2556|       |                              return get<I>(t);
 2557|       |                           }
 2558|       |                           else {
 2559|       |                              return get_member(value, glz::get<I>(reflect<T>::values));
 2560|       |                           }
 2561|       |                        }();
 2562|       |                        if (meta<T>::skip_if(field_value, skip_if_key, mctx)) return;
 2563|       |                     }
 2564|       |
 2565|       |                     if constexpr (null_t<val_t> && Opts.skip_null_members) {
 2566|       |                        if constexpr (always_null_t<val_t>)
 2567|       |                           return;
 2568|       |                        else {
 2569|       |                           const auto is_null = [&]() {
 2570|       |                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|       |                                 if constexpr (reflectable<T>) {
 2572|       |                                    return get<I>(t);
 2573|       |                                 }
 2574|       |                                 else {
 2575|       |                                    return get<I>(reflect<T>::values);
 2576|       |                                 }
 2577|       |                              };
 2578|       |
 2579|       |                              if constexpr (nullable_wrapper<val_t>) {
 2580|       |                                 return !bool(element()(value).val);
 2581|       |                              }
 2582|       |                              else if constexpr (nullable_value_t<val_t>) {
 2583|       |                                 return !get_member(value, element()).has_value();
 2584|       |                              }
 2585|       |                              else {
 2586|       |                                 return !bool(get_member(value, element()));
 2587|       |                              }
 2588|       |                           }();
 2589|       |                           if (is_null) return;
 2590|       |                        }
 2591|       |                     }
 2592|       |                     else if constexpr (is_specialization_v<val_t, custom_t> && Opts.skip_null_members &&
 2593|       |                                        custom_getter_returns_nullable<val_t>()) {
 2594|       |                        if (is_custom_field_null<T, I>(value, t, ctx)) return;
 2595|       |                     }
 2596|     62|                     else if constexpr (Opts.skip_null_members && glaze_value_is_nullable<val_t>()) {
 2597|     62|                        if (is_glaze_value_field_null<T, I>(value, t)) return;
 2598|     62|                     }
 2599|       |
 2600|       |                     if constexpr (check_skip_default_members(Opts) && has_skippable_default<val_t>) {
 2601|       |                        decltype(auto) member = [&]() -> decltype(auto) {
 2602|       |                           if constexpr (reflectable<T>) {
 2603|       |                              return get_member(value, get<I>(t));
 2604|       |                           }
 2605|       |                           else {
 2606|       |                              return get_member(value, get<I>(reflect<T>::values));
 2607|       |                           }
 2608|       |                        }();
 2609|       |                        if (is_default_value(member)) return;
 2610|       |                     }
 2611|       |
 2612|       |                     if constexpr (Opts.prettify) {
 2613|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2614|       |                           return;
 2615|       |                        }
 2616|       |                     }
 2617|     62|                     else {
 2618|     62|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
  ------------------
  |  Branch (2618:29): [True: 0, False: 62]
  ------------------
 2619|      0|                           return;
 2620|      0|                        }
 2621|     62|                     }
 2622|       |
 2623|     62|                     if (first) {
  ------------------
  |  Branch (2623:26): [True: 0, False: 62]
  ------------------
 2624|      0|                        first = false;
 2625|      0|                     }
 2626|     62|                     else {
 2627|       |                        // Null members may be skipped so we can't just write it out for all but the last member
 2628|       |                        if constexpr (Opts.prettify) {
 2629|       |                           std::memcpy(&b[ix], ",\n", 2);
 2630|       |                           ix += 2;
 2631|       |                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2632|       |                           ix += ctx.depth;
 2633|       |                        }
 2634|     62|                        else {
 2635|     62|                           std::memcpy(&b[ix], ",", 1);
 2636|     62|                           ++ix;
 2637|     62|                        }
 2638|       |                        if constexpr (is_output_streaming<B>) {
 2639|       |                           flush_buffer(b, ix);
 2640|       |                        }
 2641|     62|                     }
 2642|       |
 2643|       |                     // MSVC requires get<I> rather than keys[I]
 2644|     62|                     static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2645|     62|                     static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2646|     62|                     static constexpr auto n = quoted_key.size();
 2647|     62|                     std::memcpy(&b[ix], quoted_key.data(), n);
 2648|     62|                     ix += n;
 2649|       |
 2650|     62|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2650:57): [Folded, False: 62]
  ------------------
 2651|     62|                     if constexpr (reflectable<T>) {
 2652|     62|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2653|       |                     }
 2654|       |                     else {
 2655|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2656|       |                                                                 ix);
 2657|       |                     }
 2658|     62|                  }
 2659|     62|               });
_ZN3glz2toILj10ENSt3__18functionIFdRNS1_6vectorIdNS1_9allocatorIdEEEEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNS1_12basic_stringIcNS1_11char_traitsIcEENS4_IcEEEERS9_TkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_:
 1279|     62|      {
 1280|     62|         static constexpr auto name = name_v<std::decay_t<decltype(value)>>;
 1281|     62|         constexpr auto n = name.size();
 1282|       |
 1283|     62|         if (!ensure_space(ctx, b, ix + 8 + n)) [[unlikely]] {
  ------------------
  |  Branch (1283:14): [True: 0, False: 62]
  ------------------
 1284|      0|            return;
 1285|      0|         }
 1286|       |
 1287|     62|         std::memcpy(&b[ix], "\"", 1);
 1288|     62|         ++ix;
 1289|     62|         if constexpr (not name.empty()) {
 1290|     62|            std::memcpy(&b[ix], name.data(), n);
 1291|     62|            ix += n;
 1292|     62|         }
 1293|     62|         std::memcpy(&b[ix], "\"", 1);
 1294|     62|         ++ix;
 1295|     62|      }
_ZZN3glz2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS2_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_ENKUlTnmvE_clILm12EEEDav:
 2539|     62|               for_each<N>([&]<size_t I>() {
 2540|     62|                  using val_t = field_t<T, I>;
 2541|       |
 2542|       |                  // `meta<T>::skip` joins the other compile-time exclusions here rather than returning
 2543|       |                  // early, so that a skipped field's writer is never instantiated -- see
 2544|       |                  // `skipped_by_meta`.
 2545|     62|                  constexpr bool write_function_pointers = check_write_function_pointers(Opts);
 2546|       |                  if constexpr (skipped_by_meta<T, I, operation::serialize> || always_skipped<val_t> ||
 2547|       |                                (!write_function_pointers && is_any_function_ptr<val_t>)) {
 2548|       |                     return;
 2549|       |                  }
 2550|     62|                  else {
 2551|       |                     if constexpr (meta_has_skip_if<T>) {
 2552|       |                        static constexpr auto skip_if_key = glz::get<I>(reflect<T>::keys);
 2553|       |                        static constexpr meta_context mctx{.op = operation::serialize};
 2554|       |                        decltype(auto) field_value = [&]() -> decltype(auto) {
 2555|       |                           if constexpr (reflectable<T>) {
 2556|       |                              return get<I>(t);
 2557|       |                           }
 2558|       |                           else {
 2559|       |                              return get_member(value, glz::get<I>(reflect<T>::values));
 2560|       |                           }
 2561|       |                        }();
 2562|       |                        if (meta<T>::skip_if(field_value, skip_if_key, mctx)) return;
 2563|       |                     }
 2564|       |
 2565|       |                     if constexpr (null_t<val_t> && Opts.skip_null_members) {
 2566|       |                        if constexpr (always_null_t<val_t>)
 2567|       |                           return;
 2568|       |                        else {
 2569|       |                           const auto is_null = [&]() {
 2570|       |                              decltype(auto) element = [&]() -> decltype(auto) {
 2571|       |                                 if constexpr (reflectable<T>) {
 2572|       |                                    return get<I>(t);
 2573|       |                                 }
 2574|       |                                 else {
 2575|       |                                    return get<I>(reflect<T>::values);
 2576|       |                                 }
 2577|       |                              };
 2578|       |
 2579|       |                              if constexpr (nullable_wrapper<val_t>) {
 2580|       |                                 return !bool(element()(value).val);
 2581|       |                              }
 2582|       |                              else if constexpr (nullable_value_t<val_t>) {
 2583|       |                                 return !get_member(value, element()).has_value();
 2584|       |                              }
 2585|       |                              else {
 2586|       |                                 return !bool(get_member(value, element()));
 2587|       |                              }
 2588|       |                           }();
 2589|       |                           if (is_null) return;
 2590|       |                        }
 2591|       |                     }
 2592|       |                     else if constexpr (is_specialization_v<val_t, custom_t> && Opts.skip_null_members &&
 2593|       |                                        custom_getter_returns_nullable<val_t>()) {
 2594|       |                        if (is_custom_field_null<T, I>(value, t, ctx)) return;
 2595|       |                     }
 2596|     62|                     else if constexpr (Opts.skip_null_members && glaze_value_is_nullable<val_t>()) {
 2597|     62|                        if (is_glaze_value_field_null<T, I>(value, t)) return;
 2598|     62|                     }
 2599|       |
 2600|       |                     if constexpr (check_skip_default_members(Opts) && has_skippable_default<val_t>) {
 2601|       |                        decltype(auto) member = [&]() -> decltype(auto) {
 2602|       |                           if constexpr (reflectable<T>) {
 2603|       |                              return get_member(value, get<I>(t));
 2604|       |                           }
 2605|       |                           else {
 2606|       |                              return get_member(value, get<I>(reflect<T>::values));
 2607|       |                           }
 2608|       |                        }();
 2609|       |                        if (is_default_value(member)) return;
 2610|       |                     }
 2611|       |
 2612|       |                     if constexpr (Opts.prettify) {
 2613|       |                        if (!ensure_space(ctx, b, ix + padding + ctx.depth)) [[unlikely]] {
 2614|       |                           return;
 2615|       |                        }
 2616|       |                     }
 2617|     62|                     else {
 2618|     62|                        if (!ensure_space(ctx, b, ix + padding)) [[unlikely]] {
  ------------------
  |  Branch (2618:29): [True: 0, False: 62]
  ------------------
 2619|      0|                           return;
 2620|      0|                        }
 2621|     62|                     }
 2622|       |
 2623|     62|                     if (first) {
  ------------------
  |  Branch (2623:26): [True: 0, False: 62]
  ------------------
 2624|      0|                        first = false;
 2625|      0|                     }
 2626|     62|                     else {
 2627|       |                        // Null members may be skipped so we can't just write it out for all but the last member
 2628|       |                        if constexpr (Opts.prettify) {
 2629|       |                           std::memcpy(&b[ix], ",\n", 2);
 2630|       |                           ix += 2;
 2631|       |                           std::memset(&b[ix], check_indentation_char(Opts), ctx.depth);
 2632|       |                           ix += ctx.depth;
 2633|       |                        }
 2634|     62|                        else {
 2635|     62|                           std::memcpy(&b[ix], ",", 1);
 2636|     62|                           ++ix;
 2637|     62|                        }
 2638|       |                        if constexpr (is_output_streaming<B>) {
 2639|       |                           flush_buffer(b, ix);
 2640|       |                        }
 2641|     62|                     }
 2642|       |
 2643|       |                     // MSVC requires get<I> rather than keys[I]
 2644|     62|                     static constexpr auto key = glz::get<I>(reflect<T>::keys); // GCC 14 requires auto here
 2645|     62|                     static constexpr auto quoted_key = quoted_key_v<key, Opts.prettify>;
 2646|     62|                     static constexpr auto n = quoted_key.size();
 2647|     62|                     std::memcpy(&b[ix], quoted_key.data(), n);
 2648|     62|                     ix += n;
 2649|       |
 2650|     62|                     static constexpr auto check_opts = required_padding<val_t>() ? write_unchecked_on<Opts>() : Opts;
  ------------------
  |  Branch (2650:57): [Folded, False: 62]
  ------------------
 2651|     62|                     if constexpr (reflectable<T>) {
 2652|     62|                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(t)), ctx, b, ix);
 2653|       |                     }
 2654|       |                     else {
 2655|       |                        to<JSON, val_t>::template op<check_opts>(get_member(value, get<I>(reflect<T>::values)), ctx, b,
 2656|       |                                                                 ix);
 2657|       |                     }
 2658|     62|                  }
 2659|     62|               });
_ZN3glz2toILj10ENSt3__18functionIFvvEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERS4_TkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_:
 1279|     62|      {
 1280|     62|         static constexpr auto name = name_v<std::decay_t<decltype(value)>>;
 1281|     62|         constexpr auto n = name.size();
 1282|       |
 1283|     62|         if (!ensure_space(ctx, b, ix + 8 + n)) [[unlikely]] {
  ------------------
  |  Branch (1283:14): [True: 0, False: 62]
  ------------------
 1284|      0|            return;
 1285|      0|         }
 1286|       |
 1287|     62|         std::memcpy(&b[ix], "\"", 1);
 1288|     62|         ++ix;
 1289|     62|         if constexpr (not name.empty()) {
 1290|     62|            std::memcpy(&b[ix], name.data(), n);
 1291|     62|            ix += n;
 1292|     62|         }
 1293|     62|         std::memcpy(&b[ix], "\"", 1);
 1294|     62|         ++ix;
 1295|     62|      }
_ZN3glz2toILj10EdE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERdTkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_:
  814|    535|      {
  815|    535|         if constexpr (not check_write_unchecked(Opts)) {
  816|    535|            static_assert(required_padding<T>());
  817|    535|            if (!ensure_space(ctx, b, ix + required_padding<T>())) [[unlikely]] {
  ------------------
  |  Branch (817:17): [True: 0, False: 535]
  ------------------
  818|      0|               return;
  819|      0|            }
  820|    535|         }
  821|       |
  822|    535|         static constexpr auto O = write_unchecked_on<Opts>();
  823|       |
  824|       |         if constexpr (check_quoted_num(Opts)) {
  825|       |            std::memcpy(&b[ix], "\"", 1);
  826|       |            ++ix;
  827|       |            write_chars::op<O>(value, ctx, b, ix);
  828|       |            std::memcpy(&b[ix], "\"", 1);
  829|       |            ++ix;
  830|       |         }
  831|    535|         else {
  832|    535|            write_chars::op<O>(value, ctx, b, ix);
  833|    535|         }
  834|    535|      }
_ZN3glz16required_paddingIdEEmv:
  538|    535|   {
  539|    535|      constexpr auto value = []() -> size_t {
  540|    535|         if constexpr (boolean_like<T>) {
  541|    535|            return 8;
  542|    535|         }
  543|    535|         else if constexpr (num_t<T>) {
  544|    535|            if constexpr (std::floating_point<T>) {
  545|    535|               if constexpr (sizeof(T) > 8) {
  546|    535|                  return 64;
  547|    535|               }
  548|    535|               else if constexpr (sizeof(T) > 4) {
  549|       |                  // zmij scratch + 4 for optional quotes and trailing comma.
  550|    535|                  return zmij::double_buffer_size + 4;
  551|    535|               }
  552|    535|               else {
  553|    535|                  return zmij::float_buffer_size + 4;
  554|    535|               }
  555|    535|            }
  556|    535|            else if constexpr (sizeof(T) > 4) {
  557|    535|               return 24;
  558|    535|            }
  559|    535|            else if constexpr (sizeof(T) > 2) {
  560|    535|               return 16;
  561|    535|            }
  562|    535|            else {
  563|    535|               return 8;
  564|    535|            }
  565|    535|         }
  566|    535|         else if constexpr (nullable_like<T>) {
  567|    535|            if constexpr (has_value_type<T>) {
  568|    535|               return required_padding<typename T::value_type>();
  569|    535|            }
  570|    535|            else if constexpr (has_element_type<T>) {
  571|    535|               return required_padding<typename T::element_type>();
  572|    535|            }
  573|    535|            else {
  574|    535|               return 0;
  575|    535|            }
  576|    535|         }
  577|    535|         else if constexpr (always_null_t<T>) {
  578|    535|            return 8;
  579|    535|         }
  580|    535|         else {
  581|    535|            return 0;
  582|    535|         }
  583|    535|      }();
  584|       |
  585|       |      if constexpr (value >= (write_padding_bytes - 16)) {
  586|       |         // we always require 16 bytes available from write_padding_bytes
  587|       |         // for opening and closing characters
  588|       |         return 0;
  589|       |      }
  590|    535|      return value;
  591|    535|   }
_ZN3glz2toILj10ENSt3__18optionalIdEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS3_TkNS_10is_contextERNS_7contextERNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEmEEvOT0_OT1_OT2_RT3_:
 1805|     58|      {
 1806|     58|         if (value) {
  ------------------
  |  Branch (1806:14): [True: 0, False: 58]
  ------------------
 1807|      0|            if constexpr (required_padding<T>()) {
 1808|      0|               serialize<JSON>::op<Opts>(*value, ctx, b, ix);
 1809|       |            }
 1810|       |            else {
 1811|       |               serialize<JSON>::op<write_unchecked_off<Opts>()>(*value, ctx, b, ix);
 1812|       |            }
 1813|      0|         }
 1814|     58|         else {
 1815|     58|            dump<not check_write_unchecked(Opts)>("null", b, ix);
 1816|     58|         }
 1817|     58|      }

_ZN3glz6to_tieIRN9repe_fuzz5pointELm2EQleT0_L_ZNS_6detail25max_pure_reflection_countEEEEDcOT_:
  137|   372k|   {
  138|       |      if constexpr (N == 0) {
  139|       |         return tuple{};
  140|       |      }
  141|       |      else if constexpr (N == 1) {
  142|       |         auto& [p] = t;
  143|       |         return glz::tie(p);
  144|       |      }
  145|   372k|      else if constexpr (N == 2) {
  146|   372k|         auto& [p0, p1] = t;
  147|   372k|         return glz::tie(p0, p1);
  148|       |      }
  149|       |      else if constexpr (N == 3) {
  150|       |         auto& [p0, p1, p2] = t;
  151|       |         return glz::tie(p0, p1, p2);
  152|       |      }
  153|       |      else if constexpr (N == 4) {
  154|       |         auto& [p0, p1, p2, p3] = t;
  155|       |         return glz::tie(p0, p1, p2, p3);
  156|       |      }
  157|       |      else if constexpr (N == 5) {
  158|       |         auto& [p0, p1, p2, p3, p4] = t;
  159|       |         return glz::tie(p0, p1, p2, p3, p4);
  160|       |      }
  161|       |      else if constexpr (N == 6) {
  162|       |         auto& [p0, p1, p2, p3, p4, p5] = t;
  163|       |         return glz::tie(p0, p1, p2, p3, p4, p5);
  164|       |      }
  165|       |      else if constexpr (N == 7) {
  166|       |         auto& [p0, p1, p2, p3, p4, p5, p6] = t;
  167|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6);
  168|       |      }
  169|       |      else if constexpr (N == 8) {
  170|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7] = t;
  171|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7);
  172|       |      }
  173|       |      else if constexpr (N == 9) {
  174|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8] = t;
  175|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8);
  176|       |      }
  177|       |      else if constexpr (N == 10) {
  178|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9] = t;
  179|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
  180|       |      }
  181|       |      else if constexpr (N == 11) {
  182|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10] = t;
  183|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
  184|       |      }
  185|       |      else if constexpr (N == 12) {
  186|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11] = t;
  187|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11);
  188|       |      }
  189|       |      else if constexpr (N == 13) {
  190|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12] = t;
  191|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12);
  192|       |      }
  193|       |      else if constexpr (N == 14) {
  194|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13] = t;
  195|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13);
  196|       |      }
  197|       |      else if constexpr (N == 15) {
  198|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14] = t;
  199|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14);
  200|       |      }
  201|       |      else if constexpr (N == 16) {
  202|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15] = t;
  203|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15);
  204|       |      }
  205|       |      else if constexpr (N == 17) {
  206|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16] = t;
  207|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16);
  208|       |      }
  209|       |      else if constexpr (N == 18) {
  210|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17] = t;
  211|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17);
  212|       |      }
  213|       |      else if constexpr (N == 19) {
  214|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18] = t;
  215|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18);
  216|       |      }
  217|       |      else if constexpr (N == 20) {
  218|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19] = t;
  219|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19);
  220|       |      }
  221|       |      else if constexpr (N == 21) {
  222|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20] = t;
  223|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20);
  224|       |      }
  225|       |      else if constexpr (N == 22) {
  226|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21] = t;
  227|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  228|       |                         p21);
  229|       |      }
  230|       |      else if constexpr (N == 23) {
  231|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21,
  232|       |                p22] = t;
  233|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  234|       |                         p21, p22);
  235|       |      }
  236|       |      else if constexpr (N == 24) {
  237|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  238|       |                p23] = t;
  239|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  240|       |                         p21, p22, p23);
  241|       |      }
  242|       |      else if constexpr (N == 25) {
  243|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  244|       |                p23, p24] = t;
  245|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  246|       |                         p21, p22, p23, p24);
  247|       |      }
  248|       |      else if constexpr (N == 26) {
  249|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  250|       |                p23, p24, p25] = t;
  251|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  252|       |                         p21, p22, p23, p24, p25);
  253|       |      }
  254|       |      else if constexpr (N == 27) {
  255|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  256|       |                p23, p24, p25, p26] = t;
  257|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  258|       |                         p21, p22, p23, p24, p25, p26);
  259|       |      }
  260|       |      else if constexpr (N == 28) {
  261|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  262|       |                p23, p24, p25, p26, p27] = t;
  263|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  264|       |                         p21, p22, p23, p24, p25, p26, p27);
  265|       |      }
  266|       |      else if constexpr (N == 29) {
  267|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  268|       |                p23, p24, p25, p26, p27, p28] = t;
  269|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  270|       |                         p21, p22, p23, p24, p25, p26, p27, p28);
  271|       |      }
  272|       |      else if constexpr (N == 30) {
  273|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  274|       |                p23, p24, p25, p26, p27, p28, p29] = t;
  275|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  276|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29);
  277|       |      }
  278|       |      else if constexpr (N == 31) {
  279|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  280|       |                p23, p24, p25, p26, p27, p28, p29, p30] = t;
  281|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  282|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30);
  283|       |      }
  284|       |      else if constexpr (N == 32) {
  285|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  286|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31] = t;
  287|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  288|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31);
  289|       |      }
  290|       |      else if constexpr (N == 33) {
  291|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  292|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32] = t;
  293|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  294|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32);
  295|       |      }
  296|       |      else if constexpr (N == 34) {
  297|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  298|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33] = t;
  299|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  300|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33);
  301|       |      }
  302|       |      else if constexpr (N == 35) {
  303|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  304|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34] = t;
  305|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  306|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34);
  307|       |      }
  308|       |      else if constexpr (N == 36) {
  309|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  310|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35] = t;
  311|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  312|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35);
  313|       |      }
  314|       |      else if constexpr (N == 37) {
  315|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  316|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36] = t;
  317|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  318|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36);
  319|       |      }
  320|       |      else if constexpr (N == 38) {
  321|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  322|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37] = t;
  323|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  324|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37);
  325|       |      }
  326|       |      else if constexpr (N == 39) {
  327|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  328|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38] = t;
  329|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  330|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38);
  331|       |      }
  332|       |      else if constexpr (N == 40) {
  333|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  334|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39] = t;
  335|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  336|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39);
  337|       |      }
  338|       |      else if constexpr (N == 41) {
  339|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  340|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40] = t;
  341|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  342|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  343|       |                         p40);
  344|       |      }
  345|       |      else if constexpr (N == 42) {
  346|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  347|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41] = t;
  348|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  349|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  350|       |                         p40, p41);
  351|       |      }
  352|       |      else if constexpr (N == 43) {
  353|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  354|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42] = t;
  355|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  356|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  357|       |                         p40, p41, p42);
  358|       |      }
  359|       |      else if constexpr (N == 44) {
  360|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  361|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42,
  362|       |                p43] = t;
  363|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  364|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  365|       |                         p40, p41, p42, p43);
  366|       |      }
  367|       |      else if constexpr (N == 45) {
  368|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  369|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  370|       |                p44] = t;
  371|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  372|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  373|       |                         p40, p41, p42, p43, p44);
  374|       |      }
  375|       |      else if constexpr (N == 46) {
  376|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  377|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  378|       |                p44, p45] = t;
  379|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  380|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  381|       |                         p40, p41, p42, p43, p44, p45);
  382|       |      }
  383|       |      else if constexpr (N == 47) {
  384|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  385|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  386|       |                p44, p45, p46] = t;
  387|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  388|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  389|       |                         p40, p41, p42, p43, p44, p45, p46);
  390|       |      }
  391|       |      else if constexpr (N == 48) {
  392|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  393|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  394|       |                p44, p45, p46, p47] = t;
  395|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  396|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  397|       |                         p40, p41, p42, p43, p44, p45, p46, p47);
  398|       |      }
  399|       |      else if constexpr (N == 49) {
  400|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  401|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  402|       |                p44, p45, p46, p47, p48] = t;
  403|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  404|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  405|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48);
  406|       |      }
  407|       |      else if constexpr (N == 50) {
  408|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  409|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  410|       |                p44, p45, p46, p47, p48, p49] = t;
  411|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  412|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  413|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49);
  414|       |      }
  415|       |      else if constexpr (N == 51) {
  416|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  417|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  418|       |                p44, p45, p46, p47, p48, p49, p50] = t;
  419|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  420|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  421|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50);
  422|       |      }
  423|       |      else if constexpr (N == 52) {
  424|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  425|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  426|       |                p44, p45, p46, p47, p48, p49, p50, p51] = t;
  427|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  428|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  429|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51);
  430|       |      }
  431|       |      else if constexpr (N == 53) {
  432|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  433|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  434|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52] = t;
  435|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  436|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  437|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52);
  438|       |      }
  439|       |      else if constexpr (N == 54) {
  440|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  441|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  442|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53] = t;
  443|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  444|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  445|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53);
  446|       |      }
  447|       |      else if constexpr (N == 55) {
  448|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  449|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  450|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54] = t;
  451|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  452|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  453|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54);
  454|       |      }
  455|       |      else if constexpr (N == 56) {
  456|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  457|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  458|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55] = t;
  459|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  460|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  461|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55);
  462|       |      }
  463|       |      else if constexpr (N == 57) {
  464|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  465|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  466|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56] = t;
  467|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  468|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  469|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56);
  470|       |      }
  471|       |      else if constexpr (N == 58) {
  472|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  473|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  474|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57] = t;
  475|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  476|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  477|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57);
  478|       |      }
  479|       |      else if constexpr (N == 59) {
  480|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  481|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  482|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58] = t;
  483|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  484|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  485|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58);
  486|       |      }
  487|       |      else if constexpr (N == 60) {
  488|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  489|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  490|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59] = t;
  491|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  492|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  493|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  494|       |                         p59);
  495|       |      }
  496|       |      else if constexpr (N == 61) {
  497|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  498|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  499|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60] = t;
  500|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  501|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  502|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  503|       |                         p59, p60);
  504|       |      }
  505|       |      else if constexpr (N == 62) {
  506|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  507|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  508|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61] = t;
  509|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  510|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  511|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  512|       |                         p59, p60, p61);
  513|       |      }
  514|       |      else if constexpr (N == 63) {
  515|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  516|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  517|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62] = t;
  518|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  519|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  520|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  521|       |                         p59, p60, p61, p62);
  522|       |      }
  523|       |      else if constexpr (N == 64) {
  524|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  525|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  526|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63] = t;
  527|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  528|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  529|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  530|       |                         p59, p60, p61, p62, p63);
  531|       |      }
  532|       |      else if constexpr (N == 65) {
  533|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  534|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  535|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63,
  536|       |                p64] = t;
  537|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  538|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  539|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  540|       |                         p59, p60, p61, p62, p63, p64);
  541|       |      }
  542|       |      else if constexpr (N == 66) {
  543|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  544|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  545|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  546|       |                p65] = t;
  547|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  548|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  549|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  550|       |                         p59, p60, p61, p62, p63, p64, p65);
  551|       |      }
  552|       |      else if constexpr (N == 67) {
  553|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  554|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  555|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  556|       |                p65, p66] = t;
  557|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  558|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  559|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  560|       |                         p59, p60, p61, p62, p63, p64, p65, p66);
  561|       |      }
  562|       |      else if constexpr (N == 68) {
  563|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  564|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  565|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  566|       |                p65, p66, p67] = t;
  567|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  568|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  569|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  570|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67);
  571|       |      }
  572|       |      else if constexpr (N == 69) {
  573|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  574|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  575|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  576|       |                p65, p66, p67, p68] = t;
  577|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  578|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  579|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  580|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68);
  581|       |      }
  582|       |      else if constexpr (N == 70) {
  583|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  584|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  585|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  586|       |                p65, p66, p67, p68, p69] = t;
  587|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  588|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  589|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  590|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69);
  591|       |      }
  592|       |      else if constexpr (N == 71) {
  593|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  594|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  595|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  596|       |                p65, p66, p67, p68, p69, p70] = t;
  597|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  598|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  599|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  600|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70);
  601|       |      }
  602|       |      else if constexpr (N == 72) {
  603|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  604|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  605|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  606|       |                p65, p66, p67, p68, p69, p70, p71] = t;
  607|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  608|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  609|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  610|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71);
  611|       |      }
  612|       |      else if constexpr (N == 73) {
  613|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  614|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  615|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  616|       |                p65, p66, p67, p68, p69, p70, p71, p72] = t;
  617|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  618|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  619|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  620|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72);
  621|       |      }
  622|       |      else if constexpr (N == 74) {
  623|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  624|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  625|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  626|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73] = t;
  627|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  628|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  629|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  630|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73);
  631|       |      }
  632|       |      else if constexpr (N == 75) {
  633|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  634|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  635|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  636|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74] = t;
  637|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  638|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  639|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  640|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74);
  641|       |      }
  642|       |      else if constexpr (N == 76) {
  643|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  644|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  645|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  646|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75] = t;
  647|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  648|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  649|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  650|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75);
  651|       |      }
  652|       |      else if constexpr (N == 77) {
  653|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  654|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  655|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  656|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76] = t;
  657|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  658|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  659|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  660|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76);
  661|       |      }
  662|       |      else if constexpr (N == 78) {
  663|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  664|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  665|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  666|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77] = t;
  667|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  668|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  669|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  670|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77);
  671|       |      }
  672|       |      else if constexpr (N == 79) {
  673|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  674|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  675|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  676|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78] = t;
  677|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  678|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  679|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  680|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  681|       |                         p78);
  682|       |      }
  683|       |      else if constexpr (N == 80) {
  684|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  685|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  686|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  687|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79] = t;
  688|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  689|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  690|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  691|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  692|       |                         p78, p79);
  693|       |      }
  694|       |      else if constexpr (N == 81) {
  695|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  696|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  697|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  698|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80] = t;
  699|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  700|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  701|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  702|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  703|       |                         p78, p79, p80);
  704|       |      }
  705|       |      else if constexpr (N == 82) {
  706|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  707|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  708|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  709|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81] = t;
  710|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  711|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  712|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  713|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  714|       |                         p78, p79, p80, p81);
  715|       |      }
  716|       |      else if constexpr (N == 83) {
  717|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  718|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  719|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  720|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82] = t;
  721|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  722|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  723|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  724|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  725|       |                         p78, p79, p80, p81, p82);
  726|       |      }
  727|       |      else if constexpr (N == 84) {
  728|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  729|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  730|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  731|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83] = t;
  732|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  733|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  734|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  735|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  736|       |                         p78, p79, p80, p81, p82, p83);
  737|       |      }
  738|       |      else if constexpr (N == 85) {
  739|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  740|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  741|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  742|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84] = t;
  743|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  744|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  745|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  746|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  747|       |                         p78, p79, p80, p81, p82, p83, p84);
  748|       |      }
  749|       |      else if constexpr (N == 86) {
  750|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  751|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  752|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  753|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84,
  754|       |                p85] = t;
  755|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  756|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  757|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  758|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  759|       |                         p78, p79, p80, p81, p82, p83, p84, p85);
  760|       |      }
  761|       |      else if constexpr (N == 87) {
  762|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  763|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  764|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  765|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  766|       |                p86] = t;
  767|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  768|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  769|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  770|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  771|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86);
  772|       |      }
  773|       |      else if constexpr (N == 88) {
  774|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  775|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  776|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  777|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  778|       |                p86, p87] = t;
  779|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  780|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  781|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  782|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  783|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87);
  784|       |      }
  785|       |      else if constexpr (N == 89) {
  786|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  787|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  788|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  789|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  790|       |                p86, p87, p88] = t;
  791|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  792|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  793|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  794|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  795|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88);
  796|       |      }
  797|       |      else if constexpr (N == 90) {
  798|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  799|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  800|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  801|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  802|       |                p86, p87, p88, p89] = t;
  803|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  804|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  805|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  806|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  807|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89);
  808|       |      }
  809|       |      else if constexpr (N == 91) {
  810|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  811|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  812|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  813|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  814|       |                p86, p87, p88, p89, p90] = t;
  815|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  816|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  817|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  818|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  819|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90);
  820|       |      }
  821|       |      else if constexpr (N == 92) {
  822|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  823|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  824|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  825|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  826|       |                p86, p87, p88, p89, p90, p91] = t;
  827|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  828|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  829|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  830|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  831|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91);
  832|       |      }
  833|       |      else if constexpr (N == 93) {
  834|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  835|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  836|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  837|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  838|       |                p86, p87, p88, p89, p90, p91, p92] = t;
  839|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  840|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  841|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  842|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  843|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92);
  844|       |      }
  845|       |      else if constexpr (N == 94) {
  846|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  847|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  848|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  849|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  850|       |                p86, p87, p88, p89, p90, p91, p92, p93] = t;
  851|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  852|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  853|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  854|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  855|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93);
  856|       |      }
  857|       |      else if constexpr (N == 95) {
  858|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  859|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  860|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  861|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  862|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94] = t;
  863|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  864|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  865|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  866|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  867|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94);
  868|       |      }
  869|       |      else if constexpr (N == 96) {
  870|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  871|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  872|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  873|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  874|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95] = t;
  875|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  876|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  877|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  878|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  879|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95);
  880|       |      }
  881|       |      else if constexpr (N == 97) {
  882|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  883|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  884|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  885|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  886|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96] = t;
  887|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  888|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  889|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  890|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  891|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96);
  892|       |      }
  893|       |      else if constexpr (N == 98) {
  894|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  895|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  896|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  897|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  898|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97] = t;
  899|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  900|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  901|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  902|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  903|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  904|       |                         p97);
  905|       |      }
  906|       |      else if constexpr (N == 99) {
  907|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  908|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  909|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  910|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  911|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98] = t;
  912|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  913|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  914|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  915|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  916|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  917|       |                         p97, p98);
  918|       |      }
  919|       |      else if constexpr (N == 100) {
  920|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  921|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  922|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  923|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  924|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99] = t;
  925|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  926|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  927|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  928|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  929|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  930|       |                         p97, p98, p99);
  931|       |      }
  932|       |      else if constexpr (N == 101) {
  933|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  934|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  935|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  936|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  937|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100] = t;
  938|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  939|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  940|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  941|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  942|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  943|       |                         p97, p98, p99, p100);
  944|       |      }
  945|       |      else if constexpr (N == 102) {
  946|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  947|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  948|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  949|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  950|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101] = t;
  951|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  952|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  953|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  954|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  955|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  956|       |                         p97, p98, p99, p100, p101);
  957|       |      }
  958|       |      else if constexpr (N == 103) {
  959|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  960|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  961|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  962|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  963|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102] = t;
  964|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  965|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  966|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  967|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  968|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  969|       |                         p97, p98, p99, p100, p101, p102);
  970|       |      }
  971|       |      else if constexpr (N == 104) {
  972|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  973|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  974|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  975|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  976|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103] = t;
  977|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  978|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  979|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  980|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  981|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  982|       |                         p97, p98, p99, p100, p101, p102, p103);
  983|       |      }
  984|       |      else if constexpr (N == 105) {
  985|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  986|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  987|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  988|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  989|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104] = t;
  990|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  991|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  992|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  993|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  994|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  995|       |                         p97, p98, p99, p100, p101, p102, p103, p104);
  996|       |      }
  997|       |      else if constexpr (N == 106) {
  998|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  999|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1000|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1001|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1002|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1003|       |                p105] = t;
 1004|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1005|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1006|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1007|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1008|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1009|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105);
 1010|       |      }
 1011|       |      else if constexpr (N == 107) {
 1012|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1013|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1014|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1015|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1016|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1017|       |                p105, p106] = t;
 1018|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1019|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1020|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1021|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1022|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1023|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106);
 1024|       |      }
 1025|       |      else if constexpr (N == 108) {
 1026|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1027|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1028|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1029|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1030|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1031|       |                p105, p106, p107] = t;
 1032|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1033|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1034|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1035|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1036|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1037|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107);
 1038|       |      }
 1039|       |      else if constexpr (N == 109) {
 1040|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1041|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1042|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1043|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1044|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1045|       |                p105, p106, p107, p108] = t;
 1046|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1047|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1048|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1049|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1050|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1051|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108);
 1052|       |      }
 1053|       |      else if constexpr (N == 110) {
 1054|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1055|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1056|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1057|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1058|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1059|       |                p105, p106, p107, p108, p109] = t;
 1060|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1061|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1062|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1063|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1064|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1065|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109);
 1066|       |      }
 1067|       |      else if constexpr (N == 111) {
 1068|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1069|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1070|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1071|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1072|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1073|       |                p105, p106, p107, p108, p109, p110] = t;
 1074|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1075|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1076|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1077|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1078|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1079|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110);
 1080|       |      }
 1081|       |      else if constexpr (N == 112) {
 1082|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1083|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1084|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1085|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1086|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1087|       |                p105, p106, p107, p108, p109, p110, p111] = t;
 1088|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1089|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1090|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1091|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1092|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1093|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111);
 1094|       |      }
 1095|       |      else if constexpr (N == 113) {
 1096|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1097|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1098|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1099|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1100|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1101|       |                p105, p106, p107, p108, p109, p110, p111, p112] = t;
 1102|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1103|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1104|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1105|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1106|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1107|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112);
 1108|       |      }
 1109|       |      else if constexpr (N == 114) {
 1110|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1111|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1112|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1113|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1114|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1115|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113] = t;
 1116|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1117|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1118|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1119|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1120|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1121|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1122|       |                         p113);
 1123|       |      }
 1124|       |      else if constexpr (N == 115) {
 1125|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1126|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1127|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1128|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1129|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1130|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114] = t;
 1131|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1132|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1133|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1134|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1135|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1136|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1137|       |                         p113, p114);
 1138|       |      }
 1139|       |      else if constexpr (N == 116) {
 1140|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1141|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1142|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1143|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1144|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1145|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115] = t;
 1146|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1147|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1148|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1149|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1150|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1151|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1152|       |                         p113, p114, p115);
 1153|       |      }
 1154|       |      else if constexpr (N == 117) {
 1155|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1156|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1157|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1158|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1159|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1160|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116] = t;
 1161|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1162|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1163|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1164|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1165|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1166|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1167|       |                         p113, p114, p115, p116);
 1168|       |      }
 1169|       |      else if constexpr (N == 118) {
 1170|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1171|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1172|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1173|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1174|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1175|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117] = t;
 1176|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1177|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1178|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1179|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1180|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1181|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1182|       |                         p113, p114, p115, p116, p117);
 1183|       |      }
 1184|       |      else if constexpr (N == 119) {
 1185|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1186|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1187|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1188|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1189|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1190|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118] = t;
 1191|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1192|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1193|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1194|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1195|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1196|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1197|       |                         p113, p114, p115, p116, p117, p118);
 1198|       |      }
 1199|       |      else if constexpr (N == 120) {
 1200|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1201|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1202|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1203|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1204|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1205|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119] = t;
 1206|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1207|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1208|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1209|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1210|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1211|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1212|       |                         p113, p114, p115, p116, p117, p118, p119);
 1213|       |      }
 1214|       |      else if constexpr (N == 121) {
 1215|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1216|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1217|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1218|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1219|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1220|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120] = t;
 1221|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1222|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1223|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1224|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1225|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1226|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1227|       |                         p113, p114, p115, p116, p117, p118, p119, p120);
 1228|       |      }
 1229|       |      else if constexpr (N == 122) {
 1230|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1231|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1232|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1233|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1234|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1235|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121] =
 1236|       |            t;
 1237|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1238|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1239|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1240|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1241|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1242|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1243|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121);
 1244|       |      }
 1245|       |      else if constexpr (N == 123) {
 1246|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1247|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1248|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1249|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1250|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1251|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1252|       |                p122] = t;
 1253|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1254|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1255|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1256|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1257|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1258|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1259|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122);
 1260|       |      }
 1261|       |      else if constexpr (N == 124) {
 1262|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1263|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1264|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1265|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1266|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1267|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1268|       |                p122, p123] = t;
 1269|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1270|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1271|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1272|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1273|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1274|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1275|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123);
 1276|       |      }
 1277|       |      else if constexpr (N == 125) {
 1278|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1279|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1280|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1281|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1282|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1283|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1284|       |                p122, p123, p124] = t;
 1285|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1286|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1287|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1288|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1289|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1290|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1291|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123, p124);
 1292|       |      }
 1293|       |      else if constexpr (N == 126) {
 1294|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1295|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1296|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1297|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1298|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1299|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1300|       |                p122, p123, p124, p125] = t;
 1301|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1302|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1303|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1304|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1305|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1306|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1307|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123, p124, p125);
 1308|       |      }
 1309|       |      else if constexpr (N == 127) {
 1310|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1311|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1312|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1313|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1314|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1315|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1316|       |                p122, p123, p124, p125, p126] = t;
 1317|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1318|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1319|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1320|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1321|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1322|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1323|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123, p124, p125, p126);
 1324|       |      }
 1325|       |      else if constexpr (N == 128) {
 1326|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1327|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1328|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1329|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1330|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1331|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1332|       |                p122, p123, p124, p125, p126, p127] = t;
 1333|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1334|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1335|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1336|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1337|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1338|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1339|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123, p124, p125, p126, p127);
 1340|       |      }
 1341|   372k|   }
_ZN3glz6to_tieIRN9repe_fuzz6nestedELm2EQleT0_L_ZNS_6detail25max_pure_reflection_countEEEEDcOT_:
  137|   344k|   {
  138|       |      if constexpr (N == 0) {
  139|       |         return tuple{};
  140|       |      }
  141|       |      else if constexpr (N == 1) {
  142|       |         auto& [p] = t;
  143|       |         return glz::tie(p);
  144|       |      }
  145|   344k|      else if constexpr (N == 2) {
  146|   344k|         auto& [p0, p1] = t;
  147|   344k|         return glz::tie(p0, p1);
  148|       |      }
  149|       |      else if constexpr (N == 3) {
  150|       |         auto& [p0, p1, p2] = t;
  151|       |         return glz::tie(p0, p1, p2);
  152|       |      }
  153|       |      else if constexpr (N == 4) {
  154|       |         auto& [p0, p1, p2, p3] = t;
  155|       |         return glz::tie(p0, p1, p2, p3);
  156|       |      }
  157|       |      else if constexpr (N == 5) {
  158|       |         auto& [p0, p1, p2, p3, p4] = t;
  159|       |         return glz::tie(p0, p1, p2, p3, p4);
  160|       |      }
  161|       |      else if constexpr (N == 6) {
  162|       |         auto& [p0, p1, p2, p3, p4, p5] = t;
  163|       |         return glz::tie(p0, p1, p2, p3, p4, p5);
  164|       |      }
  165|       |      else if constexpr (N == 7) {
  166|       |         auto& [p0, p1, p2, p3, p4, p5, p6] = t;
  167|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6);
  168|       |      }
  169|       |      else if constexpr (N == 8) {
  170|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7] = t;
  171|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7);
  172|       |      }
  173|       |      else if constexpr (N == 9) {
  174|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8] = t;
  175|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8);
  176|       |      }
  177|       |      else if constexpr (N == 10) {
  178|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9] = t;
  179|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
  180|       |      }
  181|       |      else if constexpr (N == 11) {
  182|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10] = t;
  183|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
  184|       |      }
  185|       |      else if constexpr (N == 12) {
  186|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11] = t;
  187|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11);
  188|       |      }
  189|       |      else if constexpr (N == 13) {
  190|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12] = t;
  191|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12);
  192|       |      }
  193|       |      else if constexpr (N == 14) {
  194|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13] = t;
  195|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13);
  196|       |      }
  197|       |      else if constexpr (N == 15) {
  198|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14] = t;
  199|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14);
  200|       |      }
  201|       |      else if constexpr (N == 16) {
  202|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15] = t;
  203|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15);
  204|       |      }
  205|       |      else if constexpr (N == 17) {
  206|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16] = t;
  207|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16);
  208|       |      }
  209|       |      else if constexpr (N == 18) {
  210|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17] = t;
  211|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17);
  212|       |      }
  213|       |      else if constexpr (N == 19) {
  214|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18] = t;
  215|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18);
  216|       |      }
  217|       |      else if constexpr (N == 20) {
  218|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19] = t;
  219|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19);
  220|       |      }
  221|       |      else if constexpr (N == 21) {
  222|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20] = t;
  223|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20);
  224|       |      }
  225|       |      else if constexpr (N == 22) {
  226|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21] = t;
  227|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  228|       |                         p21);
  229|       |      }
  230|       |      else if constexpr (N == 23) {
  231|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21,
  232|       |                p22] = t;
  233|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  234|       |                         p21, p22);
  235|       |      }
  236|       |      else if constexpr (N == 24) {
  237|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  238|       |                p23] = t;
  239|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  240|       |                         p21, p22, p23);
  241|       |      }
  242|       |      else if constexpr (N == 25) {
  243|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  244|       |                p23, p24] = t;
  245|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  246|       |                         p21, p22, p23, p24);
  247|       |      }
  248|       |      else if constexpr (N == 26) {
  249|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  250|       |                p23, p24, p25] = t;
  251|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  252|       |                         p21, p22, p23, p24, p25);
  253|       |      }
  254|       |      else if constexpr (N == 27) {
  255|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  256|       |                p23, p24, p25, p26] = t;
  257|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  258|       |                         p21, p22, p23, p24, p25, p26);
  259|       |      }
  260|       |      else if constexpr (N == 28) {
  261|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  262|       |                p23, p24, p25, p26, p27] = t;
  263|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  264|       |                         p21, p22, p23, p24, p25, p26, p27);
  265|       |      }
  266|       |      else if constexpr (N == 29) {
  267|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  268|       |                p23, p24, p25, p26, p27, p28] = t;
  269|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  270|       |                         p21, p22, p23, p24, p25, p26, p27, p28);
  271|       |      }
  272|       |      else if constexpr (N == 30) {
  273|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  274|       |                p23, p24, p25, p26, p27, p28, p29] = t;
  275|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  276|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29);
  277|       |      }
  278|       |      else if constexpr (N == 31) {
  279|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  280|       |                p23, p24, p25, p26, p27, p28, p29, p30] = t;
  281|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  282|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30);
  283|       |      }
  284|       |      else if constexpr (N == 32) {
  285|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  286|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31] = t;
  287|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  288|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31);
  289|       |      }
  290|       |      else if constexpr (N == 33) {
  291|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  292|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32] = t;
  293|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  294|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32);
  295|       |      }
  296|       |      else if constexpr (N == 34) {
  297|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  298|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33] = t;
  299|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  300|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33);
  301|       |      }
  302|       |      else if constexpr (N == 35) {
  303|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  304|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34] = t;
  305|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  306|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34);
  307|       |      }
  308|       |      else if constexpr (N == 36) {
  309|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  310|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35] = t;
  311|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  312|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35);
  313|       |      }
  314|       |      else if constexpr (N == 37) {
  315|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  316|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36] = t;
  317|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  318|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36);
  319|       |      }
  320|       |      else if constexpr (N == 38) {
  321|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  322|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37] = t;
  323|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  324|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37);
  325|       |      }
  326|       |      else if constexpr (N == 39) {
  327|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  328|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38] = t;
  329|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  330|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38);
  331|       |      }
  332|       |      else if constexpr (N == 40) {
  333|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  334|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39] = t;
  335|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  336|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39);
  337|       |      }
  338|       |      else if constexpr (N == 41) {
  339|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  340|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40] = t;
  341|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  342|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  343|       |                         p40);
  344|       |      }
  345|       |      else if constexpr (N == 42) {
  346|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  347|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41] = t;
  348|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  349|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  350|       |                         p40, p41);
  351|       |      }
  352|       |      else if constexpr (N == 43) {
  353|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  354|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42] = t;
  355|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  356|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  357|       |                         p40, p41, p42);
  358|       |      }
  359|       |      else if constexpr (N == 44) {
  360|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  361|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42,
  362|       |                p43] = t;
  363|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  364|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  365|       |                         p40, p41, p42, p43);
  366|       |      }
  367|       |      else if constexpr (N == 45) {
  368|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  369|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  370|       |                p44] = t;
  371|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  372|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  373|       |                         p40, p41, p42, p43, p44);
  374|       |      }
  375|       |      else if constexpr (N == 46) {
  376|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  377|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  378|       |                p44, p45] = t;
  379|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  380|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  381|       |                         p40, p41, p42, p43, p44, p45);
  382|       |      }
  383|       |      else if constexpr (N == 47) {
  384|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  385|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  386|       |                p44, p45, p46] = t;
  387|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  388|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  389|       |                         p40, p41, p42, p43, p44, p45, p46);
  390|       |      }
  391|       |      else if constexpr (N == 48) {
  392|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  393|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  394|       |                p44, p45, p46, p47] = t;
  395|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  396|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  397|       |                         p40, p41, p42, p43, p44, p45, p46, p47);
  398|       |      }
  399|       |      else if constexpr (N == 49) {
  400|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  401|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  402|       |                p44, p45, p46, p47, p48] = t;
  403|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  404|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  405|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48);
  406|       |      }
  407|       |      else if constexpr (N == 50) {
  408|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  409|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  410|       |                p44, p45, p46, p47, p48, p49] = t;
  411|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  412|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  413|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49);
  414|       |      }
  415|       |      else if constexpr (N == 51) {
  416|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  417|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  418|       |                p44, p45, p46, p47, p48, p49, p50] = t;
  419|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  420|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  421|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50);
  422|       |      }
  423|       |      else if constexpr (N == 52) {
  424|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  425|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  426|       |                p44, p45, p46, p47, p48, p49, p50, p51] = t;
  427|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  428|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  429|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51);
  430|       |      }
  431|       |      else if constexpr (N == 53) {
  432|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  433|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  434|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52] = t;
  435|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  436|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  437|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52);
  438|       |      }
  439|       |      else if constexpr (N == 54) {
  440|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  441|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  442|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53] = t;
  443|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  444|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  445|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53);
  446|       |      }
  447|       |      else if constexpr (N == 55) {
  448|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  449|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  450|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54] = t;
  451|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  452|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  453|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54);
  454|       |      }
  455|       |      else if constexpr (N == 56) {
  456|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  457|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  458|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55] = t;
  459|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  460|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  461|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55);
  462|       |      }
  463|       |      else if constexpr (N == 57) {
  464|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  465|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  466|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56] = t;
  467|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  468|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  469|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56);
  470|       |      }
  471|       |      else if constexpr (N == 58) {
  472|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  473|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  474|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57] = t;
  475|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  476|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  477|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57);
  478|       |      }
  479|       |      else if constexpr (N == 59) {
  480|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  481|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  482|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58] = t;
  483|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  484|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  485|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58);
  486|       |      }
  487|       |      else if constexpr (N == 60) {
  488|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  489|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  490|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59] = t;
  491|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  492|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  493|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  494|       |                         p59);
  495|       |      }
  496|       |      else if constexpr (N == 61) {
  497|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  498|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  499|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60] = t;
  500|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  501|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  502|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  503|       |                         p59, p60);
  504|       |      }
  505|       |      else if constexpr (N == 62) {
  506|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  507|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  508|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61] = t;
  509|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  510|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  511|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  512|       |                         p59, p60, p61);
  513|       |      }
  514|       |      else if constexpr (N == 63) {
  515|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  516|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  517|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62] = t;
  518|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  519|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  520|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  521|       |                         p59, p60, p61, p62);
  522|       |      }
  523|       |      else if constexpr (N == 64) {
  524|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  525|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  526|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63] = t;
  527|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  528|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  529|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  530|       |                         p59, p60, p61, p62, p63);
  531|       |      }
  532|       |      else if constexpr (N == 65) {
  533|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  534|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  535|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63,
  536|       |                p64] = t;
  537|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  538|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  539|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  540|       |                         p59, p60, p61, p62, p63, p64);
  541|       |      }
  542|       |      else if constexpr (N == 66) {
  543|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  544|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  545|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  546|       |                p65] = t;
  547|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  548|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  549|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  550|       |                         p59, p60, p61, p62, p63, p64, p65);
  551|       |      }
  552|       |      else if constexpr (N == 67) {
  553|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  554|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  555|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  556|       |                p65, p66] = t;
  557|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  558|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  559|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  560|       |                         p59, p60, p61, p62, p63, p64, p65, p66);
  561|       |      }
  562|       |      else if constexpr (N == 68) {
  563|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  564|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  565|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  566|       |                p65, p66, p67] = t;
  567|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  568|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  569|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  570|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67);
  571|       |      }
  572|       |      else if constexpr (N == 69) {
  573|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  574|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  575|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  576|       |                p65, p66, p67, p68] = t;
  577|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  578|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  579|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  580|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68);
  581|       |      }
  582|       |      else if constexpr (N == 70) {
  583|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  584|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  585|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  586|       |                p65, p66, p67, p68, p69] = t;
  587|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  588|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  589|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  590|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69);
  591|       |      }
  592|       |      else if constexpr (N == 71) {
  593|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  594|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  595|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  596|       |                p65, p66, p67, p68, p69, p70] = t;
  597|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  598|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  599|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  600|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70);
  601|       |      }
  602|       |      else if constexpr (N == 72) {
  603|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  604|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  605|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  606|       |                p65, p66, p67, p68, p69, p70, p71] = t;
  607|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  608|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  609|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  610|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71);
  611|       |      }
  612|       |      else if constexpr (N == 73) {
  613|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  614|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  615|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  616|       |                p65, p66, p67, p68, p69, p70, p71, p72] = t;
  617|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  618|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  619|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  620|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72);
  621|       |      }
  622|       |      else if constexpr (N == 74) {
  623|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  624|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  625|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  626|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73] = t;
  627|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  628|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  629|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  630|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73);
  631|       |      }
  632|       |      else if constexpr (N == 75) {
  633|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  634|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  635|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  636|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74] = t;
  637|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  638|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  639|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  640|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74);
  641|       |      }
  642|       |      else if constexpr (N == 76) {
  643|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  644|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  645|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  646|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75] = t;
  647|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  648|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  649|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  650|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75);
  651|       |      }
  652|       |      else if constexpr (N == 77) {
  653|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  654|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  655|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  656|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76] = t;
  657|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  658|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  659|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  660|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76);
  661|       |      }
  662|       |      else if constexpr (N == 78) {
  663|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  664|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  665|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  666|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77] = t;
  667|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  668|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  669|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  670|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77);
  671|       |      }
  672|       |      else if constexpr (N == 79) {
  673|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  674|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  675|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  676|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78] = t;
  677|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  678|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  679|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  680|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  681|       |                         p78);
  682|       |      }
  683|       |      else if constexpr (N == 80) {
  684|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  685|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  686|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  687|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79] = t;
  688|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  689|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  690|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  691|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  692|       |                         p78, p79);
  693|       |      }
  694|       |      else if constexpr (N == 81) {
  695|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  696|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  697|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  698|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80] = t;
  699|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  700|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  701|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  702|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  703|       |                         p78, p79, p80);
  704|       |      }
  705|       |      else if constexpr (N == 82) {
  706|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  707|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  708|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  709|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81] = t;
  710|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  711|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  712|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  713|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  714|       |                         p78, p79, p80, p81);
  715|       |      }
  716|       |      else if constexpr (N == 83) {
  717|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  718|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  719|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  720|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82] = t;
  721|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  722|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  723|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  724|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  725|       |                         p78, p79, p80, p81, p82);
  726|       |      }
  727|       |      else if constexpr (N == 84) {
  728|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  729|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  730|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  731|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83] = t;
  732|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  733|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  734|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  735|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  736|       |                         p78, p79, p80, p81, p82, p83);
  737|       |      }
  738|       |      else if constexpr (N == 85) {
  739|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  740|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  741|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  742|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84] = t;
  743|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  744|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  745|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  746|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  747|       |                         p78, p79, p80, p81, p82, p83, p84);
  748|       |      }
  749|       |      else if constexpr (N == 86) {
  750|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  751|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  752|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  753|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84,
  754|       |                p85] = t;
  755|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  756|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  757|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  758|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  759|       |                         p78, p79, p80, p81, p82, p83, p84, p85);
  760|       |      }
  761|       |      else if constexpr (N == 87) {
  762|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  763|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  764|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  765|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  766|       |                p86] = t;
  767|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  768|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  769|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  770|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  771|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86);
  772|       |      }
  773|       |      else if constexpr (N == 88) {
  774|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  775|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  776|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  777|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  778|       |                p86, p87] = t;
  779|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  780|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  781|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  782|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  783|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87);
  784|       |      }
  785|       |      else if constexpr (N == 89) {
  786|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  787|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  788|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  789|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  790|       |                p86, p87, p88] = t;
  791|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  792|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  793|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  794|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  795|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88);
  796|       |      }
  797|       |      else if constexpr (N == 90) {
  798|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  799|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  800|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  801|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  802|       |                p86, p87, p88, p89] = t;
  803|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  804|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  805|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  806|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  807|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89);
  808|       |      }
  809|       |      else if constexpr (N == 91) {
  810|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  811|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  812|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  813|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  814|       |                p86, p87, p88, p89, p90] = t;
  815|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  816|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  817|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  818|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  819|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90);
  820|       |      }
  821|       |      else if constexpr (N == 92) {
  822|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  823|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  824|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  825|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  826|       |                p86, p87, p88, p89, p90, p91] = t;
  827|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  828|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  829|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  830|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  831|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91);
  832|       |      }
  833|       |      else if constexpr (N == 93) {
  834|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  835|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  836|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  837|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  838|       |                p86, p87, p88, p89, p90, p91, p92] = t;
  839|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  840|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  841|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  842|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  843|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92);
  844|       |      }
  845|       |      else if constexpr (N == 94) {
  846|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  847|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  848|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  849|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  850|       |                p86, p87, p88, p89, p90, p91, p92, p93] = t;
  851|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  852|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  853|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  854|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  855|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93);
  856|       |      }
  857|       |      else if constexpr (N == 95) {
  858|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  859|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  860|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  861|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  862|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94] = t;
  863|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  864|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  865|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  866|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  867|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94);
  868|       |      }
  869|       |      else if constexpr (N == 96) {
  870|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  871|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  872|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  873|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  874|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95] = t;
  875|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  876|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  877|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  878|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  879|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95);
  880|       |      }
  881|       |      else if constexpr (N == 97) {
  882|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  883|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  884|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  885|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  886|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96] = t;
  887|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  888|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  889|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  890|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  891|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96);
  892|       |      }
  893|       |      else if constexpr (N == 98) {
  894|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  895|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  896|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  897|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  898|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97] = t;
  899|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  900|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  901|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  902|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  903|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  904|       |                         p97);
  905|       |      }
  906|       |      else if constexpr (N == 99) {
  907|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  908|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  909|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  910|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  911|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98] = t;
  912|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  913|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  914|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  915|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  916|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  917|       |                         p97, p98);
  918|       |      }
  919|       |      else if constexpr (N == 100) {
  920|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  921|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  922|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  923|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  924|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99] = t;
  925|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  926|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  927|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  928|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  929|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  930|       |                         p97, p98, p99);
  931|       |      }
  932|       |      else if constexpr (N == 101) {
  933|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  934|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  935|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  936|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  937|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100] = t;
  938|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  939|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  940|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  941|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  942|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  943|       |                         p97, p98, p99, p100);
  944|       |      }
  945|       |      else if constexpr (N == 102) {
  946|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  947|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  948|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  949|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  950|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101] = t;
  951|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  952|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  953|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  954|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  955|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  956|       |                         p97, p98, p99, p100, p101);
  957|       |      }
  958|       |      else if constexpr (N == 103) {
  959|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  960|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  961|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  962|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  963|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102] = t;
  964|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  965|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  966|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  967|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  968|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  969|       |                         p97, p98, p99, p100, p101, p102);
  970|       |      }
  971|       |      else if constexpr (N == 104) {
  972|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  973|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  974|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  975|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  976|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103] = t;
  977|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  978|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  979|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  980|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  981|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  982|       |                         p97, p98, p99, p100, p101, p102, p103);
  983|       |      }
  984|       |      else if constexpr (N == 105) {
  985|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  986|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  987|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  988|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  989|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104] = t;
  990|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  991|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  992|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  993|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  994|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  995|       |                         p97, p98, p99, p100, p101, p102, p103, p104);
  996|       |      }
  997|       |      else if constexpr (N == 106) {
  998|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  999|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1000|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1001|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1002|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1003|       |                p105] = t;
 1004|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1005|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1006|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1007|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1008|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1009|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105);
 1010|       |      }
 1011|       |      else if constexpr (N == 107) {
 1012|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1013|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1014|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1015|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1016|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1017|       |                p105, p106] = t;
 1018|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1019|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1020|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1021|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1022|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1023|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106);
 1024|       |      }
 1025|       |      else if constexpr (N == 108) {
 1026|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1027|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1028|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1029|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1030|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1031|       |                p105, p106, p107] = t;
 1032|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1033|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1034|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1035|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1036|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1037|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107);
 1038|       |      }
 1039|       |      else if constexpr (N == 109) {
 1040|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1041|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1042|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1043|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1044|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1045|       |                p105, p106, p107, p108] = t;
 1046|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1047|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1048|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1049|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1050|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1051|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108);
 1052|       |      }
 1053|       |      else if constexpr (N == 110) {
 1054|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1055|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1056|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1057|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1058|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1059|       |                p105, p106, p107, p108, p109] = t;
 1060|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1061|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1062|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1063|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1064|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1065|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109);
 1066|       |      }
 1067|       |      else if constexpr (N == 111) {
 1068|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1069|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1070|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1071|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1072|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1073|       |                p105, p106, p107, p108, p109, p110] = t;
 1074|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1075|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1076|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1077|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1078|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1079|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110);
 1080|       |      }
 1081|       |      else if constexpr (N == 112) {
 1082|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1083|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1084|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1085|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1086|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1087|       |                p105, p106, p107, p108, p109, p110, p111] = t;
 1088|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1089|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1090|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1091|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1092|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1093|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111);
 1094|       |      }
 1095|       |      else if constexpr (N == 113) {
 1096|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1097|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1098|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1099|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1100|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1101|       |                p105, p106, p107, p108, p109, p110, p111, p112] = t;
 1102|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1103|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1104|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1105|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1106|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1107|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112);
 1108|       |      }
 1109|       |      else if constexpr (N == 114) {
 1110|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1111|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1112|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1113|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1114|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1115|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113] = t;
 1116|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1117|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1118|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1119|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1120|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1121|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1122|       |                         p113);
 1123|       |      }
 1124|       |      else if constexpr (N == 115) {
 1125|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1126|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1127|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1128|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1129|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1130|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114] = t;
 1131|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1132|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1133|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1134|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1135|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1136|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1137|       |                         p113, p114);
 1138|       |      }
 1139|       |      else if constexpr (N == 116) {
 1140|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1141|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1142|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1143|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1144|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1145|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115] = t;
 1146|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1147|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1148|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1149|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1150|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1151|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1152|       |                         p113, p114, p115);
 1153|       |      }
 1154|       |      else if constexpr (N == 117) {
 1155|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1156|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1157|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1158|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1159|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1160|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116] = t;
 1161|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1162|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1163|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1164|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1165|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1166|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1167|       |                         p113, p114, p115, p116);
 1168|       |      }
 1169|       |      else if constexpr (N == 118) {
 1170|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1171|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1172|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1173|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1174|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1175|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117] = t;
 1176|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1177|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1178|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1179|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1180|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1181|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1182|       |                         p113, p114, p115, p116, p117);
 1183|       |      }
 1184|       |      else if constexpr (N == 119) {
 1185|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1186|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1187|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1188|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1189|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1190|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118] = t;
 1191|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1192|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1193|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1194|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1195|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1196|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1197|       |                         p113, p114, p115, p116, p117, p118);
 1198|       |      }
 1199|       |      else if constexpr (N == 120) {
 1200|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1201|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1202|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1203|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1204|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1205|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119] = t;
 1206|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1207|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1208|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1209|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1210|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1211|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1212|       |                         p113, p114, p115, p116, p117, p118, p119);
 1213|       |      }
 1214|       |      else if constexpr (N == 121) {
 1215|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1216|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1217|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1218|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1219|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1220|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120] = t;
 1221|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1222|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1223|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1224|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1225|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1226|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1227|       |                         p113, p114, p115, p116, p117, p118, p119, p120);
 1228|       |      }
 1229|       |      else if constexpr (N == 122) {
 1230|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1231|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1232|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1233|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1234|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1235|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121] =
 1236|       |            t;
 1237|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1238|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1239|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1240|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1241|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1242|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1243|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121);
 1244|       |      }
 1245|       |      else if constexpr (N == 123) {
 1246|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1247|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1248|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1249|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1250|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1251|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1252|       |                p122] = t;
 1253|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1254|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1255|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1256|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1257|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1258|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1259|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122);
 1260|       |      }
 1261|       |      else if constexpr (N == 124) {
 1262|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1263|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1264|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1265|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1266|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1267|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1268|       |                p122, p123] = t;
 1269|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1270|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1271|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1272|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1273|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1274|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1275|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123);
 1276|       |      }
 1277|       |      else if constexpr (N == 125) {
 1278|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1279|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1280|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1281|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1282|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1283|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1284|       |                p122, p123, p124] = t;
 1285|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1286|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1287|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1288|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1289|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1290|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1291|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123, p124);
 1292|       |      }
 1293|       |      else if constexpr (N == 126) {
 1294|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1295|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1296|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1297|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1298|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1299|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1300|       |                p122, p123, p124, p125] = t;
 1301|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1302|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1303|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1304|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1305|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1306|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1307|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123, p124, p125);
 1308|       |      }
 1309|       |      else if constexpr (N == 127) {
 1310|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1311|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1312|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1313|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1314|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1315|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1316|       |                p122, p123, p124, p125, p126] = t;
 1317|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1318|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1319|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1320|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1321|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1322|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1323|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123, p124, p125, p126);
 1324|       |      }
 1325|       |      else if constexpr (N == 128) {
 1326|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1327|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1328|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1329|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1330|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1331|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1332|       |                p122, p123, p124, p125, p126, p127] = t;
 1333|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1334|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1335|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1336|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1337|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1338|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1339|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123, p124, p125, p126, p127);
 1340|       |      }
 1341|   344k|   }
_ZN3glz6to_tieIRN9repe_fuzz8fuzz_apiELm13EQleT0_L_ZNS_6detail25max_pure_reflection_countEEEEDcOT_:
  137|   396k|   {
  138|       |      if constexpr (N == 0) {
  139|       |         return tuple{};
  140|       |      }
  141|       |      else if constexpr (N == 1) {
  142|       |         auto& [p] = t;
  143|       |         return glz::tie(p);
  144|       |      }
  145|       |      else if constexpr (N == 2) {
  146|       |         auto& [p0, p1] = t;
  147|       |         return glz::tie(p0, p1);
  148|       |      }
  149|       |      else if constexpr (N == 3) {
  150|       |         auto& [p0, p1, p2] = t;
  151|       |         return glz::tie(p0, p1, p2);
  152|       |      }
  153|       |      else if constexpr (N == 4) {
  154|       |         auto& [p0, p1, p2, p3] = t;
  155|       |         return glz::tie(p0, p1, p2, p3);
  156|       |      }
  157|       |      else if constexpr (N == 5) {
  158|       |         auto& [p0, p1, p2, p3, p4] = t;
  159|       |         return glz::tie(p0, p1, p2, p3, p4);
  160|       |      }
  161|       |      else if constexpr (N == 6) {
  162|       |         auto& [p0, p1, p2, p3, p4, p5] = t;
  163|       |         return glz::tie(p0, p1, p2, p3, p4, p5);
  164|       |      }
  165|       |      else if constexpr (N == 7) {
  166|       |         auto& [p0, p1, p2, p3, p4, p5, p6] = t;
  167|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6);
  168|       |      }
  169|       |      else if constexpr (N == 8) {
  170|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7] = t;
  171|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7);
  172|       |      }
  173|       |      else if constexpr (N == 9) {
  174|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8] = t;
  175|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8);
  176|       |      }
  177|       |      else if constexpr (N == 10) {
  178|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9] = t;
  179|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
  180|       |      }
  181|       |      else if constexpr (N == 11) {
  182|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10] = t;
  183|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
  184|       |      }
  185|       |      else if constexpr (N == 12) {
  186|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11] = t;
  187|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11);
  188|       |      }
  189|   396k|      else if constexpr (N == 13) {
  190|   396k|         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12] = t;
  191|   396k|         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12);
  192|       |      }
  193|       |      else if constexpr (N == 14) {
  194|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13] = t;
  195|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13);
  196|       |      }
  197|       |      else if constexpr (N == 15) {
  198|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14] = t;
  199|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14);
  200|       |      }
  201|       |      else if constexpr (N == 16) {
  202|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15] = t;
  203|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15);
  204|       |      }
  205|       |      else if constexpr (N == 17) {
  206|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16] = t;
  207|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16);
  208|       |      }
  209|       |      else if constexpr (N == 18) {
  210|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17] = t;
  211|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17);
  212|       |      }
  213|       |      else if constexpr (N == 19) {
  214|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18] = t;
  215|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18);
  216|       |      }
  217|       |      else if constexpr (N == 20) {
  218|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19] = t;
  219|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19);
  220|       |      }
  221|       |      else if constexpr (N == 21) {
  222|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20] = t;
  223|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20);
  224|       |      }
  225|       |      else if constexpr (N == 22) {
  226|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21] = t;
  227|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  228|       |                         p21);
  229|       |      }
  230|       |      else if constexpr (N == 23) {
  231|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21,
  232|       |                p22] = t;
  233|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  234|       |                         p21, p22);
  235|       |      }
  236|       |      else if constexpr (N == 24) {
  237|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  238|       |                p23] = t;
  239|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  240|       |                         p21, p22, p23);
  241|       |      }
  242|       |      else if constexpr (N == 25) {
  243|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  244|       |                p23, p24] = t;
  245|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  246|       |                         p21, p22, p23, p24);
  247|       |      }
  248|       |      else if constexpr (N == 26) {
  249|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  250|       |                p23, p24, p25] = t;
  251|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  252|       |                         p21, p22, p23, p24, p25);
  253|       |      }
  254|       |      else if constexpr (N == 27) {
  255|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  256|       |                p23, p24, p25, p26] = t;
  257|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  258|       |                         p21, p22, p23, p24, p25, p26);
  259|       |      }
  260|       |      else if constexpr (N == 28) {
  261|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  262|       |                p23, p24, p25, p26, p27] = t;
  263|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  264|       |                         p21, p22, p23, p24, p25, p26, p27);
  265|       |      }
  266|       |      else if constexpr (N == 29) {
  267|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  268|       |                p23, p24, p25, p26, p27, p28] = t;
  269|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  270|       |                         p21, p22, p23, p24, p25, p26, p27, p28);
  271|       |      }
  272|       |      else if constexpr (N == 30) {
  273|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  274|       |                p23, p24, p25, p26, p27, p28, p29] = t;
  275|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  276|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29);
  277|       |      }
  278|       |      else if constexpr (N == 31) {
  279|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  280|       |                p23, p24, p25, p26, p27, p28, p29, p30] = t;
  281|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  282|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30);
  283|       |      }
  284|       |      else if constexpr (N == 32) {
  285|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  286|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31] = t;
  287|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  288|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31);
  289|       |      }
  290|       |      else if constexpr (N == 33) {
  291|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  292|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32] = t;
  293|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  294|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32);
  295|       |      }
  296|       |      else if constexpr (N == 34) {
  297|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  298|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33] = t;
  299|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  300|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33);
  301|       |      }
  302|       |      else if constexpr (N == 35) {
  303|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  304|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34] = t;
  305|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  306|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34);
  307|       |      }
  308|       |      else if constexpr (N == 36) {
  309|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  310|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35] = t;
  311|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  312|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35);
  313|       |      }
  314|       |      else if constexpr (N == 37) {
  315|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  316|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36] = t;
  317|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  318|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36);
  319|       |      }
  320|       |      else if constexpr (N == 38) {
  321|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  322|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37] = t;
  323|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  324|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37);
  325|       |      }
  326|       |      else if constexpr (N == 39) {
  327|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  328|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38] = t;
  329|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  330|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38);
  331|       |      }
  332|       |      else if constexpr (N == 40) {
  333|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  334|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39] = t;
  335|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  336|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39);
  337|       |      }
  338|       |      else if constexpr (N == 41) {
  339|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  340|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40] = t;
  341|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  342|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  343|       |                         p40);
  344|       |      }
  345|       |      else if constexpr (N == 42) {
  346|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  347|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41] = t;
  348|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  349|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  350|       |                         p40, p41);
  351|       |      }
  352|       |      else if constexpr (N == 43) {
  353|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  354|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42] = t;
  355|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  356|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  357|       |                         p40, p41, p42);
  358|       |      }
  359|       |      else if constexpr (N == 44) {
  360|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  361|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42,
  362|       |                p43] = t;
  363|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  364|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  365|       |                         p40, p41, p42, p43);
  366|       |      }
  367|       |      else if constexpr (N == 45) {
  368|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  369|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  370|       |                p44] = t;
  371|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  372|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  373|       |                         p40, p41, p42, p43, p44);
  374|       |      }
  375|       |      else if constexpr (N == 46) {
  376|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  377|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  378|       |                p44, p45] = t;
  379|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  380|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  381|       |                         p40, p41, p42, p43, p44, p45);
  382|       |      }
  383|       |      else if constexpr (N == 47) {
  384|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  385|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  386|       |                p44, p45, p46] = t;
  387|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  388|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  389|       |                         p40, p41, p42, p43, p44, p45, p46);
  390|       |      }
  391|       |      else if constexpr (N == 48) {
  392|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  393|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  394|       |                p44, p45, p46, p47] = t;
  395|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  396|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  397|       |                         p40, p41, p42, p43, p44, p45, p46, p47);
  398|       |      }
  399|       |      else if constexpr (N == 49) {
  400|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  401|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  402|       |                p44, p45, p46, p47, p48] = t;
  403|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  404|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  405|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48);
  406|       |      }
  407|       |      else if constexpr (N == 50) {
  408|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  409|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  410|       |                p44, p45, p46, p47, p48, p49] = t;
  411|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  412|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  413|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49);
  414|       |      }
  415|       |      else if constexpr (N == 51) {
  416|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  417|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  418|       |                p44, p45, p46, p47, p48, p49, p50] = t;
  419|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  420|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  421|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50);
  422|       |      }
  423|       |      else if constexpr (N == 52) {
  424|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  425|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  426|       |                p44, p45, p46, p47, p48, p49, p50, p51] = t;
  427|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  428|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  429|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51);
  430|       |      }
  431|       |      else if constexpr (N == 53) {
  432|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  433|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  434|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52] = t;
  435|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  436|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  437|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52);
  438|       |      }
  439|       |      else if constexpr (N == 54) {
  440|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  441|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  442|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53] = t;
  443|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  444|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  445|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53);
  446|       |      }
  447|       |      else if constexpr (N == 55) {
  448|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  449|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  450|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54] = t;
  451|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  452|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  453|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54);
  454|       |      }
  455|       |      else if constexpr (N == 56) {
  456|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  457|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  458|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55] = t;
  459|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  460|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  461|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55);
  462|       |      }
  463|       |      else if constexpr (N == 57) {
  464|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  465|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  466|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56] = t;
  467|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  468|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  469|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56);
  470|       |      }
  471|       |      else if constexpr (N == 58) {
  472|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  473|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  474|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57] = t;
  475|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  476|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  477|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57);
  478|       |      }
  479|       |      else if constexpr (N == 59) {
  480|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  481|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  482|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58] = t;
  483|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  484|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  485|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58);
  486|       |      }
  487|       |      else if constexpr (N == 60) {
  488|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  489|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  490|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59] = t;
  491|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  492|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  493|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  494|       |                         p59);
  495|       |      }
  496|       |      else if constexpr (N == 61) {
  497|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  498|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  499|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60] = t;
  500|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  501|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  502|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  503|       |                         p59, p60);
  504|       |      }
  505|       |      else if constexpr (N == 62) {
  506|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  507|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  508|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61] = t;
  509|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  510|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  511|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  512|       |                         p59, p60, p61);
  513|       |      }
  514|       |      else if constexpr (N == 63) {
  515|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  516|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  517|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62] = t;
  518|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  519|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  520|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  521|       |                         p59, p60, p61, p62);
  522|       |      }
  523|       |      else if constexpr (N == 64) {
  524|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  525|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  526|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63] = t;
  527|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  528|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  529|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  530|       |                         p59, p60, p61, p62, p63);
  531|       |      }
  532|       |      else if constexpr (N == 65) {
  533|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  534|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  535|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63,
  536|       |                p64] = t;
  537|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  538|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  539|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  540|       |                         p59, p60, p61, p62, p63, p64);
  541|       |      }
  542|       |      else if constexpr (N == 66) {
  543|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  544|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  545|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  546|       |                p65] = t;
  547|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  548|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  549|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  550|       |                         p59, p60, p61, p62, p63, p64, p65);
  551|       |      }
  552|       |      else if constexpr (N == 67) {
  553|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  554|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  555|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  556|       |                p65, p66] = t;
  557|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  558|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  559|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  560|       |                         p59, p60, p61, p62, p63, p64, p65, p66);
  561|       |      }
  562|       |      else if constexpr (N == 68) {
  563|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  564|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  565|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  566|       |                p65, p66, p67] = t;
  567|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  568|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  569|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  570|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67);
  571|       |      }
  572|       |      else if constexpr (N == 69) {
  573|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  574|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  575|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  576|       |                p65, p66, p67, p68] = t;
  577|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  578|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  579|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  580|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68);
  581|       |      }
  582|       |      else if constexpr (N == 70) {
  583|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  584|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  585|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  586|       |                p65, p66, p67, p68, p69] = t;
  587|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  588|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  589|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  590|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69);
  591|       |      }
  592|       |      else if constexpr (N == 71) {
  593|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  594|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  595|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  596|       |                p65, p66, p67, p68, p69, p70] = t;
  597|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  598|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  599|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  600|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70);
  601|       |      }
  602|       |      else if constexpr (N == 72) {
  603|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  604|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  605|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  606|       |                p65, p66, p67, p68, p69, p70, p71] = t;
  607|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  608|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  609|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  610|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71);
  611|       |      }
  612|       |      else if constexpr (N == 73) {
  613|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  614|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  615|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  616|       |                p65, p66, p67, p68, p69, p70, p71, p72] = t;
  617|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  618|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  619|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  620|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72);
  621|       |      }
  622|       |      else if constexpr (N == 74) {
  623|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  624|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  625|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  626|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73] = t;
  627|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  628|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  629|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  630|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73);
  631|       |      }
  632|       |      else if constexpr (N == 75) {
  633|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  634|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  635|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  636|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74] = t;
  637|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  638|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  639|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  640|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74);
  641|       |      }
  642|       |      else if constexpr (N == 76) {
  643|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  644|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  645|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  646|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75] = t;
  647|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  648|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  649|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  650|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75);
  651|       |      }
  652|       |      else if constexpr (N == 77) {
  653|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  654|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  655|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  656|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76] = t;
  657|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  658|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  659|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  660|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76);
  661|       |      }
  662|       |      else if constexpr (N == 78) {
  663|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  664|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  665|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  666|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77] = t;
  667|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  668|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  669|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  670|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77);
  671|       |      }
  672|       |      else if constexpr (N == 79) {
  673|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  674|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  675|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  676|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78] = t;
  677|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  678|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  679|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  680|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  681|       |                         p78);
  682|       |      }
  683|       |      else if constexpr (N == 80) {
  684|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  685|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  686|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  687|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79] = t;
  688|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  689|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  690|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  691|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  692|       |                         p78, p79);
  693|       |      }
  694|       |      else if constexpr (N == 81) {
  695|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  696|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  697|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  698|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80] = t;
  699|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  700|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  701|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  702|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  703|       |                         p78, p79, p80);
  704|       |      }
  705|       |      else if constexpr (N == 82) {
  706|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  707|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  708|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  709|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81] = t;
  710|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  711|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  712|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  713|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  714|       |                         p78, p79, p80, p81);
  715|       |      }
  716|       |      else if constexpr (N == 83) {
  717|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  718|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  719|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  720|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82] = t;
  721|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  722|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  723|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  724|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  725|       |                         p78, p79, p80, p81, p82);
  726|       |      }
  727|       |      else if constexpr (N == 84) {
  728|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  729|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  730|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  731|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83] = t;
  732|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  733|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  734|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  735|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  736|       |                         p78, p79, p80, p81, p82, p83);
  737|       |      }
  738|       |      else if constexpr (N == 85) {
  739|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  740|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  741|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  742|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84] = t;
  743|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  744|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  745|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  746|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  747|       |                         p78, p79, p80, p81, p82, p83, p84);
  748|       |      }
  749|       |      else if constexpr (N == 86) {
  750|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  751|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  752|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  753|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84,
  754|       |                p85] = t;
  755|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  756|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  757|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  758|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  759|       |                         p78, p79, p80, p81, p82, p83, p84, p85);
  760|       |      }
  761|       |      else if constexpr (N == 87) {
  762|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  763|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  764|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  765|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  766|       |                p86] = t;
  767|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  768|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  769|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  770|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  771|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86);
  772|       |      }
  773|       |      else if constexpr (N == 88) {
  774|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  775|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  776|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  777|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  778|       |                p86, p87] = t;
  779|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  780|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  781|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  782|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  783|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87);
  784|       |      }
  785|       |      else if constexpr (N == 89) {
  786|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  787|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  788|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  789|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  790|       |                p86, p87, p88] = t;
  791|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  792|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  793|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  794|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  795|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88);
  796|       |      }
  797|       |      else if constexpr (N == 90) {
  798|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  799|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  800|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  801|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  802|       |                p86, p87, p88, p89] = t;
  803|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  804|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  805|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  806|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  807|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89);
  808|       |      }
  809|       |      else if constexpr (N == 91) {
  810|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  811|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  812|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  813|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  814|       |                p86, p87, p88, p89, p90] = t;
  815|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  816|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  817|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  818|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  819|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90);
  820|       |      }
  821|       |      else if constexpr (N == 92) {
  822|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  823|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  824|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  825|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  826|       |                p86, p87, p88, p89, p90, p91] = t;
  827|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  828|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  829|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  830|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  831|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91);
  832|       |      }
  833|       |      else if constexpr (N == 93) {
  834|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  835|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  836|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  837|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  838|       |                p86, p87, p88, p89, p90, p91, p92] = t;
  839|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  840|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  841|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  842|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  843|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92);
  844|       |      }
  845|       |      else if constexpr (N == 94) {
  846|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  847|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  848|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  849|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  850|       |                p86, p87, p88, p89, p90, p91, p92, p93] = t;
  851|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  852|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  853|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  854|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  855|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93);
  856|       |      }
  857|       |      else if constexpr (N == 95) {
  858|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  859|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  860|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  861|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  862|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94] = t;
  863|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  864|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  865|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  866|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  867|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94);
  868|       |      }
  869|       |      else if constexpr (N == 96) {
  870|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  871|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  872|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  873|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  874|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95] = t;
  875|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  876|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  877|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  878|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  879|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95);
  880|       |      }
  881|       |      else if constexpr (N == 97) {
  882|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  883|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  884|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  885|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  886|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96] = t;
  887|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  888|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  889|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  890|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  891|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96);
  892|       |      }
  893|       |      else if constexpr (N == 98) {
  894|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  895|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  896|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  897|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  898|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97] = t;
  899|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  900|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  901|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  902|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  903|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  904|       |                         p97);
  905|       |      }
  906|       |      else if constexpr (N == 99) {
  907|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  908|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  909|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  910|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  911|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98] = t;
  912|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  913|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  914|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  915|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  916|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  917|       |                         p97, p98);
  918|       |      }
  919|       |      else if constexpr (N == 100) {
  920|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  921|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  922|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  923|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  924|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99] = t;
  925|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  926|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  927|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  928|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  929|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  930|       |                         p97, p98, p99);
  931|       |      }
  932|       |      else if constexpr (N == 101) {
  933|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  934|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  935|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  936|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  937|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100] = t;
  938|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  939|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  940|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  941|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  942|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  943|       |                         p97, p98, p99, p100);
  944|       |      }
  945|       |      else if constexpr (N == 102) {
  946|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  947|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  948|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  949|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  950|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101] = t;
  951|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  952|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  953|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  954|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  955|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  956|       |                         p97, p98, p99, p100, p101);
  957|       |      }
  958|       |      else if constexpr (N == 103) {
  959|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  960|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  961|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  962|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  963|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102] = t;
  964|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  965|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  966|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  967|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  968|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  969|       |                         p97, p98, p99, p100, p101, p102);
  970|       |      }
  971|       |      else if constexpr (N == 104) {
  972|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  973|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  974|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  975|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  976|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103] = t;
  977|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  978|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  979|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  980|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  981|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  982|       |                         p97, p98, p99, p100, p101, p102, p103);
  983|       |      }
  984|       |      else if constexpr (N == 105) {
  985|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  986|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  987|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  988|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  989|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104] = t;
  990|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  991|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  992|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  993|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  994|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  995|       |                         p97, p98, p99, p100, p101, p102, p103, p104);
  996|       |      }
  997|       |      else if constexpr (N == 106) {
  998|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  999|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1000|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1001|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1002|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1003|       |                p105] = t;
 1004|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1005|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1006|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1007|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1008|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1009|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105);
 1010|       |      }
 1011|       |      else if constexpr (N == 107) {
 1012|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1013|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1014|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1015|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1016|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1017|       |                p105, p106] = t;
 1018|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1019|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1020|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1021|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1022|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1023|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106);
 1024|       |      }
 1025|       |      else if constexpr (N == 108) {
 1026|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1027|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1028|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1029|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1030|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1031|       |                p105, p106, p107] = t;
 1032|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1033|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1034|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1035|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1036|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1037|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107);
 1038|       |      }
 1039|       |      else if constexpr (N == 109) {
 1040|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1041|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1042|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1043|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1044|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1045|       |                p105, p106, p107, p108] = t;
 1046|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1047|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1048|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1049|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1050|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1051|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108);
 1052|       |      }
 1053|       |      else if constexpr (N == 110) {
 1054|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1055|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1056|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1057|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1058|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1059|       |                p105, p106, p107, p108, p109] = t;
 1060|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1061|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1062|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1063|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1064|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1065|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109);
 1066|       |      }
 1067|       |      else if constexpr (N == 111) {
 1068|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1069|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1070|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1071|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1072|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1073|       |                p105, p106, p107, p108, p109, p110] = t;
 1074|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1075|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1076|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1077|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1078|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1079|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110);
 1080|       |      }
 1081|       |      else if constexpr (N == 112) {
 1082|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1083|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1084|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1085|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1086|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1087|       |                p105, p106, p107, p108, p109, p110, p111] = t;
 1088|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1089|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1090|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1091|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1092|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1093|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111);
 1094|       |      }
 1095|       |      else if constexpr (N == 113) {
 1096|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1097|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1098|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1099|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1100|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1101|       |                p105, p106, p107, p108, p109, p110, p111, p112] = t;
 1102|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1103|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1104|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1105|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1106|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1107|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112);
 1108|       |      }
 1109|       |      else if constexpr (N == 114) {
 1110|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1111|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1112|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1113|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1114|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1115|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113] = t;
 1116|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1117|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1118|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1119|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1120|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1121|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1122|       |                         p113);
 1123|       |      }
 1124|       |      else if constexpr (N == 115) {
 1125|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1126|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1127|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1128|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1129|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1130|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114] = t;
 1131|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1132|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1133|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1134|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1135|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1136|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1137|       |                         p113, p114);
 1138|       |      }
 1139|       |      else if constexpr (N == 116) {
 1140|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1141|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1142|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1143|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1144|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1145|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115] = t;
 1146|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1147|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1148|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1149|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1150|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1151|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1152|       |                         p113, p114, p115);
 1153|       |      }
 1154|       |      else if constexpr (N == 117) {
 1155|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1156|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1157|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1158|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1159|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1160|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116] = t;
 1161|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1162|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1163|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1164|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1165|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1166|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1167|       |                         p113, p114, p115, p116);
 1168|       |      }
 1169|       |      else if constexpr (N == 118) {
 1170|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1171|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1172|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1173|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1174|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1175|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117] = t;
 1176|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1177|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1178|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1179|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1180|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1181|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1182|       |                         p113, p114, p115, p116, p117);
 1183|       |      }
 1184|       |      else if constexpr (N == 119) {
 1185|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1186|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1187|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1188|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1189|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1190|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118] = t;
 1191|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1192|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1193|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1194|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1195|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1196|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1197|       |                         p113, p114, p115, p116, p117, p118);
 1198|       |      }
 1199|       |      else if constexpr (N == 120) {
 1200|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1201|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1202|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1203|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1204|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1205|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119] = t;
 1206|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1207|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1208|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1209|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1210|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1211|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1212|       |                         p113, p114, p115, p116, p117, p118, p119);
 1213|       |      }
 1214|       |      else if constexpr (N == 121) {
 1215|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1216|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1217|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1218|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1219|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1220|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120] = t;
 1221|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1222|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1223|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1224|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1225|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1226|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1227|       |                         p113, p114, p115, p116, p117, p118, p119, p120);
 1228|       |      }
 1229|       |      else if constexpr (N == 122) {
 1230|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1231|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1232|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1233|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1234|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1235|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121] =
 1236|       |            t;
 1237|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1238|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1239|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1240|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1241|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1242|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1243|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121);
 1244|       |      }
 1245|       |      else if constexpr (N == 123) {
 1246|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1247|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1248|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1249|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1250|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1251|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1252|       |                p122] = t;
 1253|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1254|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1255|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1256|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1257|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1258|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1259|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122);
 1260|       |      }
 1261|       |      else if constexpr (N == 124) {
 1262|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1263|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1264|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1265|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1266|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1267|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1268|       |                p122, p123] = t;
 1269|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1270|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1271|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1272|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1273|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1274|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1275|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123);
 1276|       |      }
 1277|       |      else if constexpr (N == 125) {
 1278|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1279|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1280|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1281|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1282|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1283|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1284|       |                p122, p123, p124] = t;
 1285|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1286|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1287|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1288|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1289|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1290|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1291|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123, p124);
 1292|       |      }
 1293|       |      else if constexpr (N == 126) {
 1294|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1295|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1296|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1297|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1298|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1299|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1300|       |                p122, p123, p124, p125] = t;
 1301|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1302|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1303|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1304|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1305|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1306|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1307|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123, p124, p125);
 1308|       |      }
 1309|       |      else if constexpr (N == 127) {
 1310|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1311|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1312|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1313|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1314|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1315|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1316|       |                p122, p123, p124, p125, p126] = t;
 1317|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1318|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1319|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1320|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1321|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1322|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1323|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123, p124, p125, p126);
 1324|       |      }
 1325|       |      else if constexpr (N == 128) {
 1326|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1327|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1328|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1329|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1330|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1331|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1332|       |                p122, p123, p124, p125, p126, p127] = t;
 1333|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1334|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1335|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1336|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1337|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1338|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1339|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123, p124, p125, p126, p127);
 1340|       |      }
 1341|   396k|   }
_ZN3glz6to_tieIRN9repe_fuzz6amountELm1EQleT0_L_ZNS_6detail25max_pure_reflection_countEEEEDcOT_:
  137|  20.2k|   {
  138|       |      if constexpr (N == 0) {
  139|       |         return tuple{};
  140|       |      }
  141|  20.2k|      else if constexpr (N == 1) {
  142|  20.2k|         auto& [p] = t;
  143|  20.2k|         return glz::tie(p);
  144|       |      }
  145|       |      else if constexpr (N == 2) {
  146|       |         auto& [p0, p1] = t;
  147|       |         return glz::tie(p0, p1);
  148|       |      }
  149|       |      else if constexpr (N == 3) {
  150|       |         auto& [p0, p1, p2] = t;
  151|       |         return glz::tie(p0, p1, p2);
  152|       |      }
  153|       |      else if constexpr (N == 4) {
  154|       |         auto& [p0, p1, p2, p3] = t;
  155|       |         return glz::tie(p0, p1, p2, p3);
  156|       |      }
  157|       |      else if constexpr (N == 5) {
  158|       |         auto& [p0, p1, p2, p3, p4] = t;
  159|       |         return glz::tie(p0, p1, p2, p3, p4);
  160|       |      }
  161|       |      else if constexpr (N == 6) {
  162|       |         auto& [p0, p1, p2, p3, p4, p5] = t;
  163|       |         return glz::tie(p0, p1, p2, p3, p4, p5);
  164|       |      }
  165|       |      else if constexpr (N == 7) {
  166|       |         auto& [p0, p1, p2, p3, p4, p5, p6] = t;
  167|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6);
  168|       |      }
  169|       |      else if constexpr (N == 8) {
  170|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7] = t;
  171|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7);
  172|       |      }
  173|       |      else if constexpr (N == 9) {
  174|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8] = t;
  175|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8);
  176|       |      }
  177|       |      else if constexpr (N == 10) {
  178|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9] = t;
  179|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9);
  180|       |      }
  181|       |      else if constexpr (N == 11) {
  182|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10] = t;
  183|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10);
  184|       |      }
  185|       |      else if constexpr (N == 12) {
  186|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11] = t;
  187|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11);
  188|       |      }
  189|       |      else if constexpr (N == 13) {
  190|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12] = t;
  191|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12);
  192|       |      }
  193|       |      else if constexpr (N == 14) {
  194|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13] = t;
  195|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13);
  196|       |      }
  197|       |      else if constexpr (N == 15) {
  198|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14] = t;
  199|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14);
  200|       |      }
  201|       |      else if constexpr (N == 16) {
  202|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15] = t;
  203|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15);
  204|       |      }
  205|       |      else if constexpr (N == 17) {
  206|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16] = t;
  207|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16);
  208|       |      }
  209|       |      else if constexpr (N == 18) {
  210|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17] = t;
  211|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17);
  212|       |      }
  213|       |      else if constexpr (N == 19) {
  214|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18] = t;
  215|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18);
  216|       |      }
  217|       |      else if constexpr (N == 20) {
  218|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19] = t;
  219|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19);
  220|       |      }
  221|       |      else if constexpr (N == 21) {
  222|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20] = t;
  223|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20);
  224|       |      }
  225|       |      else if constexpr (N == 22) {
  226|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21] = t;
  227|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  228|       |                         p21);
  229|       |      }
  230|       |      else if constexpr (N == 23) {
  231|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21,
  232|       |                p22] = t;
  233|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  234|       |                         p21, p22);
  235|       |      }
  236|       |      else if constexpr (N == 24) {
  237|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  238|       |                p23] = t;
  239|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  240|       |                         p21, p22, p23);
  241|       |      }
  242|       |      else if constexpr (N == 25) {
  243|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  244|       |                p23, p24] = t;
  245|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  246|       |                         p21, p22, p23, p24);
  247|       |      }
  248|       |      else if constexpr (N == 26) {
  249|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  250|       |                p23, p24, p25] = t;
  251|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  252|       |                         p21, p22, p23, p24, p25);
  253|       |      }
  254|       |      else if constexpr (N == 27) {
  255|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  256|       |                p23, p24, p25, p26] = t;
  257|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  258|       |                         p21, p22, p23, p24, p25, p26);
  259|       |      }
  260|       |      else if constexpr (N == 28) {
  261|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  262|       |                p23, p24, p25, p26, p27] = t;
  263|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  264|       |                         p21, p22, p23, p24, p25, p26, p27);
  265|       |      }
  266|       |      else if constexpr (N == 29) {
  267|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  268|       |                p23, p24, p25, p26, p27, p28] = t;
  269|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  270|       |                         p21, p22, p23, p24, p25, p26, p27, p28);
  271|       |      }
  272|       |      else if constexpr (N == 30) {
  273|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  274|       |                p23, p24, p25, p26, p27, p28, p29] = t;
  275|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  276|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29);
  277|       |      }
  278|       |      else if constexpr (N == 31) {
  279|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  280|       |                p23, p24, p25, p26, p27, p28, p29, p30] = t;
  281|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  282|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30);
  283|       |      }
  284|       |      else if constexpr (N == 32) {
  285|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  286|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31] = t;
  287|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  288|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31);
  289|       |      }
  290|       |      else if constexpr (N == 33) {
  291|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  292|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32] = t;
  293|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  294|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32);
  295|       |      }
  296|       |      else if constexpr (N == 34) {
  297|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  298|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33] = t;
  299|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  300|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33);
  301|       |      }
  302|       |      else if constexpr (N == 35) {
  303|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  304|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34] = t;
  305|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  306|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34);
  307|       |      }
  308|       |      else if constexpr (N == 36) {
  309|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  310|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35] = t;
  311|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  312|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35);
  313|       |      }
  314|       |      else if constexpr (N == 37) {
  315|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  316|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36] = t;
  317|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  318|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36);
  319|       |      }
  320|       |      else if constexpr (N == 38) {
  321|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  322|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37] = t;
  323|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  324|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37);
  325|       |      }
  326|       |      else if constexpr (N == 39) {
  327|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  328|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38] = t;
  329|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  330|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38);
  331|       |      }
  332|       |      else if constexpr (N == 40) {
  333|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  334|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39] = t;
  335|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  336|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39);
  337|       |      }
  338|       |      else if constexpr (N == 41) {
  339|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  340|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40] = t;
  341|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  342|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  343|       |                         p40);
  344|       |      }
  345|       |      else if constexpr (N == 42) {
  346|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  347|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41] = t;
  348|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  349|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  350|       |                         p40, p41);
  351|       |      }
  352|       |      else if constexpr (N == 43) {
  353|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  354|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42] = t;
  355|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  356|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  357|       |                         p40, p41, p42);
  358|       |      }
  359|       |      else if constexpr (N == 44) {
  360|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  361|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42,
  362|       |                p43] = t;
  363|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  364|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  365|       |                         p40, p41, p42, p43);
  366|       |      }
  367|       |      else if constexpr (N == 45) {
  368|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  369|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  370|       |                p44] = t;
  371|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  372|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  373|       |                         p40, p41, p42, p43, p44);
  374|       |      }
  375|       |      else if constexpr (N == 46) {
  376|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  377|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  378|       |                p44, p45] = t;
  379|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  380|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  381|       |                         p40, p41, p42, p43, p44, p45);
  382|       |      }
  383|       |      else if constexpr (N == 47) {
  384|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  385|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  386|       |                p44, p45, p46] = t;
  387|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  388|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  389|       |                         p40, p41, p42, p43, p44, p45, p46);
  390|       |      }
  391|       |      else if constexpr (N == 48) {
  392|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  393|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  394|       |                p44, p45, p46, p47] = t;
  395|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  396|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  397|       |                         p40, p41, p42, p43, p44, p45, p46, p47);
  398|       |      }
  399|       |      else if constexpr (N == 49) {
  400|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  401|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  402|       |                p44, p45, p46, p47, p48] = t;
  403|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  404|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  405|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48);
  406|       |      }
  407|       |      else if constexpr (N == 50) {
  408|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  409|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  410|       |                p44, p45, p46, p47, p48, p49] = t;
  411|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  412|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  413|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49);
  414|       |      }
  415|       |      else if constexpr (N == 51) {
  416|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  417|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  418|       |                p44, p45, p46, p47, p48, p49, p50] = t;
  419|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  420|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  421|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50);
  422|       |      }
  423|       |      else if constexpr (N == 52) {
  424|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  425|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  426|       |                p44, p45, p46, p47, p48, p49, p50, p51] = t;
  427|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  428|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  429|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51);
  430|       |      }
  431|       |      else if constexpr (N == 53) {
  432|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  433|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  434|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52] = t;
  435|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  436|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  437|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52);
  438|       |      }
  439|       |      else if constexpr (N == 54) {
  440|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  441|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  442|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53] = t;
  443|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  444|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  445|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53);
  446|       |      }
  447|       |      else if constexpr (N == 55) {
  448|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  449|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  450|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54] = t;
  451|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  452|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  453|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54);
  454|       |      }
  455|       |      else if constexpr (N == 56) {
  456|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  457|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  458|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55] = t;
  459|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  460|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  461|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55);
  462|       |      }
  463|       |      else if constexpr (N == 57) {
  464|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  465|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  466|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56] = t;
  467|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  468|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  469|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56);
  470|       |      }
  471|       |      else if constexpr (N == 58) {
  472|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  473|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  474|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57] = t;
  475|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  476|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  477|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57);
  478|       |      }
  479|       |      else if constexpr (N == 59) {
  480|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  481|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  482|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58] = t;
  483|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  484|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  485|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58);
  486|       |      }
  487|       |      else if constexpr (N == 60) {
  488|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  489|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  490|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59] = t;
  491|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  492|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  493|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  494|       |                         p59);
  495|       |      }
  496|       |      else if constexpr (N == 61) {
  497|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  498|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  499|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60] = t;
  500|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  501|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  502|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  503|       |                         p59, p60);
  504|       |      }
  505|       |      else if constexpr (N == 62) {
  506|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  507|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  508|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61] = t;
  509|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  510|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  511|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  512|       |                         p59, p60, p61);
  513|       |      }
  514|       |      else if constexpr (N == 63) {
  515|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  516|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  517|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62] = t;
  518|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  519|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  520|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  521|       |                         p59, p60, p61, p62);
  522|       |      }
  523|       |      else if constexpr (N == 64) {
  524|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  525|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  526|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63] = t;
  527|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  528|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  529|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  530|       |                         p59, p60, p61, p62, p63);
  531|       |      }
  532|       |      else if constexpr (N == 65) {
  533|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  534|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  535|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63,
  536|       |                p64] = t;
  537|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  538|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  539|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  540|       |                         p59, p60, p61, p62, p63, p64);
  541|       |      }
  542|       |      else if constexpr (N == 66) {
  543|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  544|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  545|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  546|       |                p65] = t;
  547|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  548|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  549|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  550|       |                         p59, p60, p61, p62, p63, p64, p65);
  551|       |      }
  552|       |      else if constexpr (N == 67) {
  553|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  554|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  555|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  556|       |                p65, p66] = t;
  557|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  558|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  559|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  560|       |                         p59, p60, p61, p62, p63, p64, p65, p66);
  561|       |      }
  562|       |      else if constexpr (N == 68) {
  563|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  564|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  565|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  566|       |                p65, p66, p67] = t;
  567|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  568|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  569|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  570|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67);
  571|       |      }
  572|       |      else if constexpr (N == 69) {
  573|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  574|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  575|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  576|       |                p65, p66, p67, p68] = t;
  577|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  578|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  579|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  580|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68);
  581|       |      }
  582|       |      else if constexpr (N == 70) {
  583|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  584|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  585|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  586|       |                p65, p66, p67, p68, p69] = t;
  587|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  588|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  589|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  590|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69);
  591|       |      }
  592|       |      else if constexpr (N == 71) {
  593|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  594|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  595|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  596|       |                p65, p66, p67, p68, p69, p70] = t;
  597|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  598|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  599|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  600|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70);
  601|       |      }
  602|       |      else if constexpr (N == 72) {
  603|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  604|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  605|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  606|       |                p65, p66, p67, p68, p69, p70, p71] = t;
  607|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  608|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  609|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  610|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71);
  611|       |      }
  612|       |      else if constexpr (N == 73) {
  613|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  614|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  615|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  616|       |                p65, p66, p67, p68, p69, p70, p71, p72] = t;
  617|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  618|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  619|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  620|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72);
  621|       |      }
  622|       |      else if constexpr (N == 74) {
  623|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  624|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  625|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  626|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73] = t;
  627|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  628|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  629|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  630|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73);
  631|       |      }
  632|       |      else if constexpr (N == 75) {
  633|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  634|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  635|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  636|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74] = t;
  637|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  638|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  639|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  640|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74);
  641|       |      }
  642|       |      else if constexpr (N == 76) {
  643|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  644|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  645|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  646|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75] = t;
  647|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  648|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  649|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  650|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75);
  651|       |      }
  652|       |      else if constexpr (N == 77) {
  653|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  654|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  655|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  656|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76] = t;
  657|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  658|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  659|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  660|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76);
  661|       |      }
  662|       |      else if constexpr (N == 78) {
  663|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  664|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  665|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  666|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77] = t;
  667|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  668|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  669|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  670|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77);
  671|       |      }
  672|       |      else if constexpr (N == 79) {
  673|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  674|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  675|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  676|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78] = t;
  677|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  678|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  679|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  680|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  681|       |                         p78);
  682|       |      }
  683|       |      else if constexpr (N == 80) {
  684|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  685|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  686|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  687|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79] = t;
  688|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  689|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  690|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  691|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  692|       |                         p78, p79);
  693|       |      }
  694|       |      else if constexpr (N == 81) {
  695|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  696|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  697|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  698|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80] = t;
  699|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  700|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  701|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  702|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  703|       |                         p78, p79, p80);
  704|       |      }
  705|       |      else if constexpr (N == 82) {
  706|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  707|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  708|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  709|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81] = t;
  710|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  711|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  712|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  713|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  714|       |                         p78, p79, p80, p81);
  715|       |      }
  716|       |      else if constexpr (N == 83) {
  717|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  718|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  719|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  720|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82] = t;
  721|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  722|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  723|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  724|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  725|       |                         p78, p79, p80, p81, p82);
  726|       |      }
  727|       |      else if constexpr (N == 84) {
  728|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  729|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  730|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  731|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83] = t;
  732|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  733|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  734|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  735|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  736|       |                         p78, p79, p80, p81, p82, p83);
  737|       |      }
  738|       |      else if constexpr (N == 85) {
  739|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  740|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  741|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  742|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84] = t;
  743|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  744|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  745|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  746|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  747|       |                         p78, p79, p80, p81, p82, p83, p84);
  748|       |      }
  749|       |      else if constexpr (N == 86) {
  750|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  751|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  752|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  753|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84,
  754|       |                p85] = t;
  755|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  756|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  757|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  758|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  759|       |                         p78, p79, p80, p81, p82, p83, p84, p85);
  760|       |      }
  761|       |      else if constexpr (N == 87) {
  762|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  763|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  764|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  765|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  766|       |                p86] = t;
  767|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  768|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  769|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  770|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  771|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86);
  772|       |      }
  773|       |      else if constexpr (N == 88) {
  774|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  775|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  776|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  777|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  778|       |                p86, p87] = t;
  779|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  780|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  781|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  782|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  783|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87);
  784|       |      }
  785|       |      else if constexpr (N == 89) {
  786|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  787|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  788|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  789|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  790|       |                p86, p87, p88] = t;
  791|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  792|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  793|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  794|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  795|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88);
  796|       |      }
  797|       |      else if constexpr (N == 90) {
  798|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  799|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  800|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  801|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  802|       |                p86, p87, p88, p89] = t;
  803|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  804|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  805|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  806|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  807|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89);
  808|       |      }
  809|       |      else if constexpr (N == 91) {
  810|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  811|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  812|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  813|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  814|       |                p86, p87, p88, p89, p90] = t;
  815|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  816|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  817|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  818|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  819|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90);
  820|       |      }
  821|       |      else if constexpr (N == 92) {
  822|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  823|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  824|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  825|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  826|       |                p86, p87, p88, p89, p90, p91] = t;
  827|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  828|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  829|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  830|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  831|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91);
  832|       |      }
  833|       |      else if constexpr (N == 93) {
  834|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  835|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  836|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  837|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  838|       |                p86, p87, p88, p89, p90, p91, p92] = t;
  839|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  840|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  841|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  842|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  843|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92);
  844|       |      }
  845|       |      else if constexpr (N == 94) {
  846|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  847|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  848|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  849|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  850|       |                p86, p87, p88, p89, p90, p91, p92, p93] = t;
  851|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  852|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  853|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  854|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  855|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93);
  856|       |      }
  857|       |      else if constexpr (N == 95) {
  858|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  859|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  860|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  861|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  862|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94] = t;
  863|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  864|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  865|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  866|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  867|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94);
  868|       |      }
  869|       |      else if constexpr (N == 96) {
  870|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  871|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  872|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  873|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  874|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95] = t;
  875|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  876|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  877|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  878|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  879|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95);
  880|       |      }
  881|       |      else if constexpr (N == 97) {
  882|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  883|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  884|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  885|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  886|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96] = t;
  887|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  888|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  889|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  890|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  891|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96);
  892|       |      }
  893|       |      else if constexpr (N == 98) {
  894|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  895|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  896|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  897|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  898|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97] = t;
  899|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  900|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  901|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  902|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  903|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  904|       |                         p97);
  905|       |      }
  906|       |      else if constexpr (N == 99) {
  907|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  908|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  909|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  910|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  911|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98] = t;
  912|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  913|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  914|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  915|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  916|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  917|       |                         p97, p98);
  918|       |      }
  919|       |      else if constexpr (N == 100) {
  920|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  921|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  922|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  923|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  924|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99] = t;
  925|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  926|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  927|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  928|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  929|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  930|       |                         p97, p98, p99);
  931|       |      }
  932|       |      else if constexpr (N == 101) {
  933|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  934|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  935|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  936|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  937|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100] = t;
  938|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  939|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  940|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  941|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  942|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  943|       |                         p97, p98, p99, p100);
  944|       |      }
  945|       |      else if constexpr (N == 102) {
  946|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  947|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  948|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  949|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  950|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101] = t;
  951|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  952|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  953|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  954|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  955|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  956|       |                         p97, p98, p99, p100, p101);
  957|       |      }
  958|       |      else if constexpr (N == 103) {
  959|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  960|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  961|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  962|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  963|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102] = t;
  964|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  965|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  966|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  967|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  968|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  969|       |                         p97, p98, p99, p100, p101, p102);
  970|       |      }
  971|       |      else if constexpr (N == 104) {
  972|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  973|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  974|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  975|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  976|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103] = t;
  977|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  978|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  979|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  980|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  981|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  982|       |                         p97, p98, p99, p100, p101, p102, p103);
  983|       |      }
  984|       |      else if constexpr (N == 105) {
  985|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  986|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
  987|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
  988|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
  989|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104] = t;
  990|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
  991|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
  992|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
  993|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
  994|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
  995|       |                         p97, p98, p99, p100, p101, p102, p103, p104);
  996|       |      }
  997|       |      else if constexpr (N == 106) {
  998|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
  999|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1000|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1001|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1002|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1003|       |                p105] = t;
 1004|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1005|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1006|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1007|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1008|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1009|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105);
 1010|       |      }
 1011|       |      else if constexpr (N == 107) {
 1012|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1013|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1014|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1015|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1016|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1017|       |                p105, p106] = t;
 1018|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1019|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1020|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1021|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1022|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1023|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106);
 1024|       |      }
 1025|       |      else if constexpr (N == 108) {
 1026|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1027|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1028|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1029|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1030|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1031|       |                p105, p106, p107] = t;
 1032|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1033|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1034|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1035|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1036|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1037|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107);
 1038|       |      }
 1039|       |      else if constexpr (N == 109) {
 1040|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1041|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1042|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1043|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1044|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1045|       |                p105, p106, p107, p108] = t;
 1046|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1047|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1048|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1049|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1050|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1051|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108);
 1052|       |      }
 1053|       |      else if constexpr (N == 110) {
 1054|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1055|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1056|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1057|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1058|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1059|       |                p105, p106, p107, p108, p109] = t;
 1060|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1061|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1062|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1063|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1064|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1065|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109);
 1066|       |      }
 1067|       |      else if constexpr (N == 111) {
 1068|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1069|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1070|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1071|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1072|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1073|       |                p105, p106, p107, p108, p109, p110] = t;
 1074|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1075|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1076|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1077|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1078|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1079|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110);
 1080|       |      }
 1081|       |      else if constexpr (N == 112) {
 1082|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1083|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1084|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1085|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1086|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1087|       |                p105, p106, p107, p108, p109, p110, p111] = t;
 1088|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1089|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1090|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1091|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1092|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1093|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111);
 1094|       |      }
 1095|       |      else if constexpr (N == 113) {
 1096|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1097|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1098|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1099|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1100|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1101|       |                p105, p106, p107, p108, p109, p110, p111, p112] = t;
 1102|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1103|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1104|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1105|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1106|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1107|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112);
 1108|       |      }
 1109|       |      else if constexpr (N == 114) {
 1110|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1111|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1112|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1113|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1114|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1115|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113] = t;
 1116|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1117|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1118|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1119|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1120|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1121|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1122|       |                         p113);
 1123|       |      }
 1124|       |      else if constexpr (N == 115) {
 1125|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1126|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1127|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1128|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1129|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1130|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114] = t;
 1131|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1132|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1133|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1134|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1135|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1136|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1137|       |                         p113, p114);
 1138|       |      }
 1139|       |      else if constexpr (N == 116) {
 1140|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1141|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1142|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1143|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1144|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1145|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115] = t;
 1146|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1147|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1148|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1149|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1150|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1151|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1152|       |                         p113, p114, p115);
 1153|       |      }
 1154|       |      else if constexpr (N == 117) {
 1155|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1156|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1157|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1158|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1159|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1160|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116] = t;
 1161|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1162|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1163|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1164|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1165|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1166|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1167|       |                         p113, p114, p115, p116);
 1168|       |      }
 1169|       |      else if constexpr (N == 118) {
 1170|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1171|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1172|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1173|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1174|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1175|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117] = t;
 1176|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1177|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1178|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1179|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1180|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1181|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1182|       |                         p113, p114, p115, p116, p117);
 1183|       |      }
 1184|       |      else if constexpr (N == 119) {
 1185|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1186|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1187|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1188|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1189|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1190|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118] = t;
 1191|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1192|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1193|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1194|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1195|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1196|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1197|       |                         p113, p114, p115, p116, p117, p118);
 1198|       |      }
 1199|       |      else if constexpr (N == 120) {
 1200|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1201|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1202|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1203|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1204|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1205|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119] = t;
 1206|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1207|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1208|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1209|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1210|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1211|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1212|       |                         p113, p114, p115, p116, p117, p118, p119);
 1213|       |      }
 1214|       |      else if constexpr (N == 121) {
 1215|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1216|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1217|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1218|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1219|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1220|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120] = t;
 1221|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1222|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1223|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1224|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1225|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1226|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1227|       |                         p113, p114, p115, p116, p117, p118, p119, p120);
 1228|       |      }
 1229|       |      else if constexpr (N == 122) {
 1230|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1231|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1232|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1233|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1234|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1235|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121] =
 1236|       |            t;
 1237|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1238|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1239|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1240|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1241|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1242|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1243|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121);
 1244|       |      }
 1245|       |      else if constexpr (N == 123) {
 1246|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1247|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1248|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1249|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1250|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1251|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1252|       |                p122] = t;
 1253|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1254|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1255|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1256|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1257|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1258|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1259|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122);
 1260|       |      }
 1261|       |      else if constexpr (N == 124) {
 1262|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1263|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1264|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1265|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1266|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1267|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1268|       |                p122, p123] = t;
 1269|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1270|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1271|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1272|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1273|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1274|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1275|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123);
 1276|       |      }
 1277|       |      else if constexpr (N == 125) {
 1278|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1279|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1280|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1281|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1282|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1283|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1284|       |                p122, p123, p124] = t;
 1285|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1286|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1287|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1288|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1289|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1290|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1291|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123, p124);
 1292|       |      }
 1293|       |      else if constexpr (N == 126) {
 1294|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1295|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1296|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1297|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1298|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1299|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1300|       |                p122, p123, p124, p125] = t;
 1301|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1302|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1303|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1304|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1305|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1306|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1307|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123, p124, p125);
 1308|       |      }
 1309|       |      else if constexpr (N == 127) {
 1310|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1311|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1312|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1313|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1314|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1315|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1316|       |                p122, p123, p124, p125, p126] = t;
 1317|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1318|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1319|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1320|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1321|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1322|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1323|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123, p124, p125, p126);
 1324|       |      }
 1325|       |      else if constexpr (N == 128) {
 1326|       |         auto& [p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20, p21, p22,
 1327|       |                p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39, p40, p41, p42, p43,
 1328|       |                p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58, p59, p60, p61, p62, p63, p64,
 1329|       |                p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77, p78, p79, p80, p81, p82, p83, p84, p85,
 1330|       |                p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96, p97, p98, p99, p100, p101, p102, p103, p104,
 1331|       |                p105, p106, p107, p108, p109, p110, p111, p112, p113, p114, p115, p116, p117, p118, p119, p120, p121,
 1332|       |                p122, p123, p124, p125, p126, p127] = t;
 1333|       |         return glz::tie(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18, p19, p20,
 1334|       |                         p21, p22, p23, p24, p25, p26, p27, p28, p29, p30, p31, p32, p33, p34, p35, p36, p37, p38, p39,
 1335|       |                         p40, p41, p42, p43, p44, p45, p46, p47, p48, p49, p50, p51, p52, p53, p54, p55, p56, p57, p58,
 1336|       |                         p59, p60, p61, p62, p63, p64, p65, p66, p67, p68, p69, p70, p71, p72, p73, p74, p75, p76, p77,
 1337|       |                         p78, p79, p80, p81, p82, p83, p84, p85, p86, p87, p88, p89, p90, p91, p92, p93, p94, p95, p96,
 1338|       |                         p97, p98, p99, p100, p101, p102, p103, p104, p105, p106, p107, p108, p109, p110, p111, p112,
 1339|       |                         p113, p114, p115, p116, p117, p118, p119, p120, p121, p122, p123, p124, p125, p126, p127);
 1340|       |      }
 1341|  20.2k|   }

repe_registry.cpp:_ZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE2onIL_ZNS_6detailL10empty_pathEEN9repe_fuzz10member_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_:
  306|   321k|      {
  307|   321k|         using impl = registry_impl<read_opts, Proto>;
  308|       |
  309|   321k|         if constexpr (parent == root && (glaze_object_t<T> || reflectable<T>)) {
  310|   321k|            impl::register_endpoint(root, value, *this);
  311|   321k|         }
  312|       |
  313|   321k|         register_members<root, T, parent>(value);
  314|   321k|      }
repe_registry.cpp:_ZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz10member_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_:
  175|   321k|      {
  176|   321k|         using namespace glz::detail;
  177|   321k|         static constexpr auto N = reflect<T>::size;
  178|       |
  179|   321k|         [[maybe_unused]] decltype(auto) t = [&]() -> decltype(auto) {
  180|   321k|            if constexpr (reflectable<T> && requires { to_tie(value); }) {
  181|   321k|               return to_tie(value);
  182|   321k|            }
  183|   321k|            else {
  184|   321k|               return nullptr;
  185|   321k|            }
  186|   321k|         }();
  187|       |
  188|   321k|         using impl = registry_impl<read_opts, Proto>;
  189|       |
  190|   321k|         for_each<N>([&]<auto I>() {
  191|   321k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   321k|               if constexpr (reflectable<T>) {
  193|   321k|                  return get_member(value, get<I>(t));
  194|   321k|               }
  195|   321k|               else {
  196|   321k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   321k|               }
  198|   321k|            }();
  199|       |
  200|   321k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   321k|            static constexpr std::string_view full_key = [&] {
  203|   321k|               if constexpr (parent == detail::empty_path) {
  204|   321k|                  return join_v<chars<"/">, key>;
  205|   321k|               }
  206|   321k|               else {
  207|   321k|                  return join_v<parent, chars<"/">, key>;
  208|   321k|               }
  209|   321k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   321k|            using Func = decltype(func);
  213|   321k|            if constexpr (std::is_invocable_v<Func>) {
  214|   321k|               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|   321k|               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|   321k|            }
  217|   321k|            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|   321k|               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|   321k|               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|   321k|               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|   321k|               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|   321k|               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|   321k|            }
  226|   321k|            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|   321k|               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|   321k|               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|   321k|               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|   321k|               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|   321k|               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|   321k|            }
  236|   321k|            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|   321k|                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|   321k|                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|   321k|               if (func) { // Only traverse if pointer is valid
  241|   321k|                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|   321k|                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|   321k|                     full_key, *func, *this);
  244|   321k|               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|   321k|            }
  247|   321k|            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|   321k|               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|   321k|               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|   321k|            }
  252|   321k|            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|   321k|               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|   321k|            }
  256|   321k|            else {
  257|   321k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|   321k|               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|   321k|                  using F = std::decay_t<Func>;
  261|   321k|                  using Ret = typename return_type<F>::type;
  262|   321k|                  using Tuple = typename inputs_as_tuple<F>::type;
  263|   321k|                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|   321k|                  if constexpr (std::is_void_v<Ret>) {
  265|   321k|                     if constexpr (n_args == 0) {
  266|   321k|                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|   321k|                     }
  268|   321k|                     else if constexpr (n_args == 1) {
  269|   321k|                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|   321k|                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|   321k|                                                                                                        func, *this);
  272|   321k|                     }
  273|   321k|                     else {
  274|   321k|                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|   321k|                     }
  276|   321k|                  }
  277|   321k|                  else {
  278|       |                     // Member function pointers
  279|   321k|                     if constexpr (n_args == 0) {
  280|   321k|                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|   321k|                     }
  282|   321k|                     else if constexpr (n_args == 1) {
  283|   321k|                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|   321k|                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|   321k|                                                                                                       func, *this);
  286|   321k|                     }
  287|   321k|                     else {
  288|   321k|                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|   321k|                     }
  290|   321k|                  }
  291|   321k|               }
  292|   321k|               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|   321k|                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|   321k|               }
  297|   321k|            }
  298|   321k|         });
  299|   321k|      }
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz10member_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlvE_clEv:
  179|   321k|         [[maybe_unused]] decltype(auto) t = [&]() -> decltype(auto) {
  180|       |            if constexpr (reflectable<T> && requires { to_tie(value); }) {
  181|       |               return to_tie(value);
  182|       |            }
  183|   321k|            else {
  184|   321k|               return nullptr;
  185|   321k|            }
  186|   321k|         }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz10member_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm0EEEDav:
  190|   321k|         for_each<N>([&]<auto I>() {
  191|   321k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   321k|               if constexpr (reflectable<T>) {
  193|   321k|                  return get_member(value, get<I>(t));
  194|   321k|               }
  195|   321k|               else {
  196|   321k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   321k|               }
  198|   321k|            }();
  199|       |
  200|   321k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   321k|            static constexpr std::string_view full_key = [&] {
  203|   321k|               if constexpr (parent == detail::empty_path) {
  204|   321k|                  return join_v<chars<"/">, key>;
  205|   321k|               }
  206|   321k|               else {
  207|   321k|                  return join_v<parent, chars<"/">, key>;
  208|   321k|               }
  209|   321k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   321k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|   321k|            else {
  257|   321k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|   321k|               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|   321k|                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|   321k|               }
  297|   321k|            }
  298|   321k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz10member_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm0EEEDavENKUlvE_clEv:
  191|   321k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|       |               if constexpr (reflectable<T>) {
  193|       |                  return get_member(value, get<I>(t));
  194|       |               }
  195|   321k|               else {
  196|   321k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   321k|               }
  198|   321k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz10member_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm1EEEDav:
  190|   321k|         for_each<N>([&]<auto I>() {
  191|   321k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   321k|               if constexpr (reflectable<T>) {
  193|   321k|                  return get_member(value, get<I>(t));
  194|   321k|               }
  195|   321k|               else {
  196|   321k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   321k|               }
  198|   321k|            }();
  199|       |
  200|   321k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   321k|            static constexpr std::string_view full_key = [&] {
  203|   321k|               if constexpr (parent == detail::empty_path) {
  204|   321k|                  return join_v<chars<"/">, key>;
  205|   321k|               }
  206|   321k|               else {
  207|   321k|                  return join_v<parent, chars<"/">, key>;
  208|   321k|               }
  209|   321k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   321k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|   321k|            else {
  257|   321k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|   321k|               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|   321k|                  using F = std::decay_t<Func>;
  261|   321k|                  using Ret = typename return_type<F>::type;
  262|   321k|                  using Tuple = typename inputs_as_tuple<F>::type;
  263|   321k|                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|   321k|                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|   321k|                     else if constexpr (n_args == 1) {
  283|   321k|                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|   321k|                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|   321k|                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|   321k|                  }
  291|       |               }
  292|       |               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|       |                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|       |               }
  297|   321k|            }
  298|   321k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz10member_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm1EEEDavENKUlvE_clEv:
  191|   321k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|       |               if constexpr (reflectable<T>) {
  193|       |                  return get_member(value, get<I>(t));
  194|       |               }
  195|   321k|               else {
  196|   321k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   321k|               }
  198|   321k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz10member_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm2EEEDav:
  190|   321k|         for_each<N>([&]<auto I>() {
  191|   321k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   321k|               if constexpr (reflectable<T>) {
  193|   321k|                  return get_member(value, get<I>(t));
  194|   321k|               }
  195|   321k|               else {
  196|   321k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   321k|               }
  198|   321k|            }();
  199|       |
  200|   321k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   321k|            static constexpr std::string_view full_key = [&] {
  203|   321k|               if constexpr (parent == detail::empty_path) {
  204|   321k|                  return join_v<chars<"/">, key>;
  205|   321k|               }
  206|   321k|               else {
  207|   321k|                  return join_v<parent, chars<"/">, key>;
  208|   321k|               }
  209|   321k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   321k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|   321k|            else {
  257|   321k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|   321k|               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|   321k|                  using F = std::decay_t<Func>;
  261|   321k|                  using Ret = typename return_type<F>::type;
  262|   321k|                  using Tuple = typename inputs_as_tuple<F>::type;
  263|   321k|                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|   321k|                  if constexpr (std::is_void_v<Ret>) {
  265|   321k|                     if constexpr (n_args == 0) {
  266|   321k|                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|       |               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|       |                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|       |               }
  297|   321k|            }
  298|   321k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz10member_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm2EEEDavENKUlvE_clEv:
  191|   321k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|       |               if constexpr (reflectable<T>) {
  193|       |                  return get_member(value, get<I>(t));
  194|       |               }
  195|   321k|               else {
  196|   321k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   321k|               }
  198|   321k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz10member_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm3EEEDav:
  190|   321k|         for_each<N>([&]<auto I>() {
  191|   321k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   321k|               if constexpr (reflectable<T>) {
  193|   321k|                  return get_member(value, get<I>(t));
  194|   321k|               }
  195|   321k|               else {
  196|   321k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   321k|               }
  198|   321k|            }();
  199|       |
  200|   321k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   321k|            static constexpr std::string_view full_key = [&] {
  203|   321k|               if constexpr (parent == detail::empty_path) {
  204|   321k|                  return join_v<chars<"/">, key>;
  205|   321k|               }
  206|   321k|               else {
  207|   321k|                  return join_v<parent, chars<"/">, key>;
  208|   321k|               }
  209|   321k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   321k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|   321k|            else {
  257|   321k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|   321k|               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|   321k|                  using F = std::decay_t<Func>;
  261|   321k|                  using Ret = typename return_type<F>::type;
  262|   321k|                  using Tuple = typename inputs_as_tuple<F>::type;
  263|   321k|                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|   321k|                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|   321k|                     else if constexpr (n_args == 1) {
  283|   321k|                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|   321k|                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|   321k|                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|   321k|                  }
  291|       |               }
  292|       |               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|       |                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|       |               }
  297|   321k|            }
  298|   321k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz10member_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm3EEEDavENKUlvE_clEv:
  191|   321k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|       |               if constexpr (reflectable<T>) {
  193|       |                  return get_member(value, get<I>(t));
  194|       |               }
  195|   321k|               else {
  196|   321k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   321k|               }
  198|   321k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz10member_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm4EEEDav:
  190|   321k|         for_each<N>([&]<auto I>() {
  191|   321k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   321k|               if constexpr (reflectable<T>) {
  193|   321k|                  return get_member(value, get<I>(t));
  194|   321k|               }
  195|   321k|               else {
  196|   321k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   321k|               }
  198|   321k|            }();
  199|       |
  200|   321k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   321k|            static constexpr std::string_view full_key = [&] {
  203|   321k|               if constexpr (parent == detail::empty_path) {
  204|   321k|                  return join_v<chars<"/">, key>;
  205|   321k|               }
  206|   321k|               else {
  207|   321k|                  return join_v<parent, chars<"/">, key>;
  208|   321k|               }
  209|   321k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   321k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|   321k|            else {
  257|   321k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|   321k|               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|   321k|                  using F = std::decay_t<Func>;
  261|   321k|                  using Ret = typename return_type<F>::type;
  262|   321k|                  using Tuple = typename inputs_as_tuple<F>::type;
  263|   321k|                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|   321k|                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|   321k|                     else if constexpr (n_args == 1) {
  283|   321k|                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|   321k|                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|   321k|                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|   321k|                  }
  291|       |               }
  292|       |               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|       |                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|       |               }
  297|   321k|            }
  298|   321k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz10member_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm4EEEDavENKUlvE_clEv:
  191|   321k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|       |               if constexpr (reflectable<T>) {
  193|       |                  return get_member(value, get<I>(t));
  194|       |               }
  195|   321k|               else {
  196|   321k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   321k|               }
  198|   321k|            }();
repe_registry.cpp:_ZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE2onIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_:
  306|   335k|      {
  307|   335k|         using impl = registry_impl<read_opts, Proto>;
  308|       |
  309|   335k|         if constexpr (parent == root && (glaze_object_t<T> || reflectable<T>)) {
  310|   335k|            impl::register_endpoint(root, value, *this);
  311|   335k|         }
  312|       |
  313|   335k|         register_members<root, T, parent>(value);
  314|   335k|      }
repe_registry.cpp:_ZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_:
  175|   335k|      {
  176|   335k|         using namespace glz::detail;
  177|   335k|         static constexpr auto N = reflect<T>::size;
  178|       |
  179|   335k|         [[maybe_unused]] decltype(auto) t = [&]() -> decltype(auto) {
  180|   335k|            if constexpr (reflectable<T> && requires { to_tie(value); }) {
  181|   335k|               return to_tie(value);
  182|   335k|            }
  183|   335k|            else {
  184|   335k|               return nullptr;
  185|   335k|            }
  186|   335k|         }();
  187|       |
  188|   335k|         using impl = registry_impl<read_opts, Proto>;
  189|       |
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|   335k|            if constexpr (std::is_invocable_v<Func>) {
  214|   335k|               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|   335k|               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|   335k|            }
  217|   335k|            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|   335k|               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|   335k|               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|   335k|               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|   335k|               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|   335k|               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|   335k|            }
  226|   335k|            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|   335k|               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|   335k|               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|   335k|               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|   335k|               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|   335k|               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|   335k|            }
  236|   335k|            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|   335k|                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|   335k|                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|   335k|               if (func) { // Only traverse if pointer is valid
  241|   335k|                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|   335k|                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|   335k|                     full_key, *func, *this);
  244|   335k|               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|   335k|            }
  247|   335k|            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|   335k|               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|   335k|               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|   335k|            }
  252|   335k|            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|   335k|               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|   335k|            }
  256|   335k|            else {
  257|   335k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|   335k|               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|   335k|                  using F = std::decay_t<Func>;
  261|   335k|                  using Ret = typename return_type<F>::type;
  262|   335k|                  using Tuple = typename inputs_as_tuple<F>::type;
  263|   335k|                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|   335k|                  if constexpr (std::is_void_v<Ret>) {
  265|   335k|                     if constexpr (n_args == 0) {
  266|   335k|                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|   335k|                     }
  268|   335k|                     else if constexpr (n_args == 1) {
  269|   335k|                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|   335k|                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|   335k|                                                                                                        func, *this);
  272|   335k|                     }
  273|   335k|                     else {
  274|   335k|                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|   335k|                     }
  276|   335k|                  }
  277|   335k|                  else {
  278|       |                     // Member function pointers
  279|   335k|                     if constexpr (n_args == 0) {
  280|   335k|                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|   335k|                     }
  282|   335k|                     else if constexpr (n_args == 1) {
  283|   335k|                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|   335k|                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|   335k|                                                                                                       func, *this);
  286|   335k|                     }
  287|   335k|                     else {
  288|   335k|                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|   335k|                     }
  290|   335k|                  }
  291|   335k|               }
  292|   335k|               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|   335k|                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|   335k|               }
  297|   335k|            }
  298|   335k|         });
  299|   335k|      }
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlvE_clEv:
  179|   335k|         [[maybe_unused]] decltype(auto) t = [&]() -> decltype(auto) {
  180|   335k|            if constexpr (reflectable<T> && requires { to_tie(value); }) {
  181|   335k|               return to_tie(value);
  182|       |            }
  183|       |            else {
  184|       |               return nullptr;
  185|       |            }
  186|   335k|         }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm0EEEDav:
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|   335k|            else {
  257|   335k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|   335k|               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|   335k|                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|   335k|               }
  297|   335k|            }
  298|   335k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm0EEEDavENKUlvE_clEv:
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|       |               }
  195|       |               else {
  196|       |                  return get_member(value, get<I>(reflect<T>::values));
  197|       |               }
  198|   335k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm1EEEDav:
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|   335k|            else {
  257|   335k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|   335k|               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|   335k|                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|   335k|               }
  297|   335k|            }
  298|   335k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm1EEEDavENKUlvE_clEv:
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|       |               }
  195|       |               else {
  196|       |                  return get_member(value, get<I>(reflect<T>::values));
  197|       |               }
  198|   335k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm2EEEDav:
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|   335k|            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|   335k|               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|   335k|               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|       |            else {
  257|       |               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|       |               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|       |                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|       |               }
  297|       |            }
  298|   335k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm2EEEDavENKUlvE_clEv:
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|       |               }
  195|       |               else {
  196|       |                  return get_member(value, get<I>(reflect<T>::values));
  197|       |               }
  198|   335k|            }();
repe_registry.cpp:_ZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE2onIL_ZNS_6detailL10empty_pathEEN9repe_fuzz5pointEL_ZZZNS2_16register_membersIL_ZNS4_L10empty_pathEENS5_8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS9_EEEvRT0_ENKUlTnDavE_clILm2EEEDavE8full_keyEQoo14glaze_object_tIS9_E11reflectableIS9_EEEvSB_:
  306|   335k|      {
  307|   335k|         using impl = registry_impl<read_opts, Proto>;
  308|       |
  309|       |         if constexpr (parent == root && (glaze_object_t<T> || reflectable<T>)) {
  310|       |            impl::register_endpoint(root, value, *this);
  311|       |         }
  312|       |
  313|   335k|         register_members<root, T, parent>(value);
  314|   335k|      }
repe_registry.cpp:_ZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz5pointEL_ZZZNS3_IL_ZNS4_L10empty_pathEENS5_8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS8_EEEvRT0_ENKUlTnDavE_clILm2EEEDavE8full_keyEQoo14glaze_object_tIS8_E11reflectableIS8_EEEvSA_:
  175|   335k|      {
  176|   335k|         using namespace glz::detail;
  177|   335k|         static constexpr auto N = reflect<T>::size;
  178|       |
  179|   335k|         [[maybe_unused]] decltype(auto) t = [&]() -> decltype(auto) {
  180|   335k|            if constexpr (reflectable<T> && requires { to_tie(value); }) {
  181|   335k|               return to_tie(value);
  182|   335k|            }
  183|   335k|            else {
  184|   335k|               return nullptr;
  185|   335k|            }
  186|   335k|         }();
  187|       |
  188|   335k|         using impl = registry_impl<read_opts, Proto>;
  189|       |
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|   335k|            if constexpr (std::is_invocable_v<Func>) {
  214|   335k|               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|   335k|               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|   335k|            }
  217|   335k|            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|   335k|               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|   335k|               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|   335k|               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|   335k|               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|   335k|               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|   335k|            }
  226|   335k|            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|   335k|               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|   335k|               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|   335k|               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|   335k|               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|   335k|               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|   335k|            }
  236|   335k|            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|   335k|                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|   335k|                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|   335k|               if (func) { // Only traverse if pointer is valid
  241|   335k|                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|   335k|                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|   335k|                     full_key, *func, *this);
  244|   335k|               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|   335k|            }
  247|   335k|            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|   335k|               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|   335k|               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|   335k|            }
  252|   335k|            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|   335k|               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|   335k|            }
  256|   335k|            else {
  257|   335k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|   335k|               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|   335k|                  using F = std::decay_t<Func>;
  261|   335k|                  using Ret = typename return_type<F>::type;
  262|   335k|                  using Tuple = typename inputs_as_tuple<F>::type;
  263|   335k|                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|   335k|                  if constexpr (std::is_void_v<Ret>) {
  265|   335k|                     if constexpr (n_args == 0) {
  266|   335k|                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|   335k|                     }
  268|   335k|                     else if constexpr (n_args == 1) {
  269|   335k|                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|   335k|                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|   335k|                                                                                                        func, *this);
  272|   335k|                     }
  273|   335k|                     else {
  274|   335k|                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|   335k|                     }
  276|   335k|                  }
  277|   335k|                  else {
  278|       |                     // Member function pointers
  279|   335k|                     if constexpr (n_args == 0) {
  280|   335k|                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|   335k|                     }
  282|   335k|                     else if constexpr (n_args == 1) {
  283|   335k|                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|   335k|                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|   335k|                                                                                                       func, *this);
  286|   335k|                     }
  287|   335k|                     else {
  288|   335k|                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|   335k|                     }
  290|   335k|                  }
  291|   335k|               }
  292|   335k|               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|   335k|                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|   335k|               }
  297|   335k|            }
  298|   335k|         });
  299|   335k|      }
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz5pointEL_ZZZNS3_IL_ZNS4_L10empty_pathEENS5_8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS8_EEEvRT0_ENKUlTnDavE_clILm2EEEDavE8full_keyEQoo14glaze_object_tIS8_E11reflectableIS8_EEEvSA_ENKUlvE_clEv:
  179|   335k|         [[maybe_unused]] decltype(auto) t = [&]() -> decltype(auto) {
  180|   335k|            if constexpr (reflectable<T> && requires { to_tie(value); }) {
  181|   335k|               return to_tie(value);
  182|       |            }
  183|       |            else {
  184|       |               return nullptr;
  185|       |            }
  186|   335k|         }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz5pointEL_ZZZNS3_IL_ZNS4_L10empty_pathEENS5_8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS8_EEEvRT0_ENKUlTnDavE_clILm2EEEDavE8full_keyEQoo14glaze_object_tIS8_E11reflectableIS8_EEEvSA_ENKUlTnDavE_clILi0EEEDav:
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|   335k|            else {
  257|   335k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|   335k|               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|   335k|                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|   335k|               }
  297|   335k|            }
  298|   335k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz5pointEL_ZZZNS3_IL_ZNS4_L10empty_pathEENS5_8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS8_EEEvRT0_ENKUlTnDavE_clILm2EEEDavE8full_keyEQoo14glaze_object_tIS8_E11reflectableIS8_EEEvSA_ENKUlTnDavE_clILi0EEEDavENKUlvE_clEv:
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|       |               }
  195|       |               else {
  196|       |                  return get_member(value, get<I>(reflect<T>::values));
  197|       |               }
  198|   335k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz5pointEL_ZZZNS3_IL_ZNS4_L10empty_pathEENS5_8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS8_EEEvRT0_ENKUlTnDavE_clILm2EEEDavE8full_keyEQoo14glaze_object_tIS8_E11reflectableIS8_EEEvSA_ENKUlTnDavE_clILi1EEEDav:
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|   335k|            else {
  257|   335k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|   335k|               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|   335k|                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|   335k|               }
  297|   335k|            }
  298|   335k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz5pointEL_ZZZNS3_IL_ZNS4_L10empty_pathEENS5_8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS8_EEEvRT0_ENKUlTnDavE_clILm2EEEDavE8full_keyEQoo14glaze_object_tIS8_E11reflectableIS8_EEEvSA_ENKUlTnDavE_clILi1EEEDavENKUlvE_clEv:
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|       |               }
  195|       |               else {
  196|       |                  return get_member(value, get<I>(reflect<T>::values));
  197|       |               }
  198|   335k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm3EEEDav:
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|   335k|            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|   335k|               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|   335k|               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|       |            else {
  257|       |               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|       |               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|       |                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|       |               }
  297|       |            }
  298|   335k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm3EEEDavENKUlvE_clEv:
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|       |               }
  195|       |               else {
  196|       |                  return get_member(value, get<I>(reflect<T>::values));
  197|       |               }
  198|   335k|            }();
repe_registry.cpp:_ZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE2onIL_ZNS_6detailL10empty_pathEEN9repe_fuzz6nestedEL_ZZZNS2_16register_membersIL_ZNS4_L10empty_pathEENS5_8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS9_EEEvRT0_ENKUlTnDavE_clILm3EEEDavE8full_keyEQoo14glaze_object_tIS9_E11reflectableIS9_EEEvSB_:
  306|   335k|      {
  307|   335k|         using impl = registry_impl<read_opts, Proto>;
  308|       |
  309|       |         if constexpr (parent == root && (glaze_object_t<T> || reflectable<T>)) {
  310|       |            impl::register_endpoint(root, value, *this);
  311|       |         }
  312|       |
  313|   335k|         register_members<root, T, parent>(value);
  314|   335k|      }
repe_registry.cpp:_ZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz6nestedEL_ZZZNS3_IL_ZNS4_L10empty_pathEENS5_8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS8_EEEvRT0_ENKUlTnDavE_clILm3EEEDavE8full_keyEQoo14glaze_object_tIS8_E11reflectableIS8_EEEvSA_:
  175|   335k|      {
  176|   335k|         using namespace glz::detail;
  177|   335k|         static constexpr auto N = reflect<T>::size;
  178|       |
  179|   335k|         [[maybe_unused]] decltype(auto) t = [&]() -> decltype(auto) {
  180|   335k|            if constexpr (reflectable<T> && requires { to_tie(value); }) {
  181|   335k|               return to_tie(value);
  182|   335k|            }
  183|   335k|            else {
  184|   335k|               return nullptr;
  185|   335k|            }
  186|   335k|         }();
  187|       |
  188|   335k|         using impl = registry_impl<read_opts, Proto>;
  189|       |
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|   335k|            if constexpr (std::is_invocable_v<Func>) {
  214|   335k|               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|   335k|               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|   335k|            }
  217|   335k|            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|   335k|               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|   335k|               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|   335k|               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|   335k|               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|   335k|               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|   335k|            }
  226|   335k|            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|   335k|               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|   335k|               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|   335k|               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|   335k|               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|   335k|               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|   335k|            }
  236|   335k|            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|   335k|                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|   335k|                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|   335k|               if (func) { // Only traverse if pointer is valid
  241|   335k|                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|   335k|                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|   335k|                     full_key, *func, *this);
  244|   335k|               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|   335k|            }
  247|   335k|            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|   335k|               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|   335k|               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|   335k|            }
  252|   335k|            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|   335k|               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|   335k|            }
  256|   335k|            else {
  257|   335k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|   335k|               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|   335k|                  using F = std::decay_t<Func>;
  261|   335k|                  using Ret = typename return_type<F>::type;
  262|   335k|                  using Tuple = typename inputs_as_tuple<F>::type;
  263|   335k|                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|   335k|                  if constexpr (std::is_void_v<Ret>) {
  265|   335k|                     if constexpr (n_args == 0) {
  266|   335k|                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|   335k|                     }
  268|   335k|                     else if constexpr (n_args == 1) {
  269|   335k|                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|   335k|                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|   335k|                                                                                                        func, *this);
  272|   335k|                     }
  273|   335k|                     else {
  274|   335k|                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|   335k|                     }
  276|   335k|                  }
  277|   335k|                  else {
  278|       |                     // Member function pointers
  279|   335k|                     if constexpr (n_args == 0) {
  280|   335k|                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|   335k|                     }
  282|   335k|                     else if constexpr (n_args == 1) {
  283|   335k|                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|   335k|                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|   335k|                                                                                                       func, *this);
  286|   335k|                     }
  287|   335k|                     else {
  288|   335k|                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|   335k|                     }
  290|   335k|                  }
  291|   335k|               }
  292|   335k|               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|   335k|                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|   335k|               }
  297|   335k|            }
  298|   335k|         });
  299|   335k|      }
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz6nestedEL_ZZZNS3_IL_ZNS4_L10empty_pathEENS5_8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS8_EEEvRT0_ENKUlTnDavE_clILm3EEEDavE8full_keyEQoo14glaze_object_tIS8_E11reflectableIS8_EEEvSA_ENKUlvE_clEv:
  179|   335k|         [[maybe_unused]] decltype(auto) t = [&]() -> decltype(auto) {
  180|   335k|            if constexpr (reflectable<T> && requires { to_tie(value); }) {
  181|   335k|               return to_tie(value);
  182|       |            }
  183|       |            else {
  184|       |               return nullptr;
  185|       |            }
  186|   335k|         }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz6nestedEL_ZZZNS3_IL_ZNS4_L10empty_pathEENS5_8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS8_EEEvRT0_ENKUlTnDavE_clILm3EEEDavE8full_keyEQoo14glaze_object_tIS8_E11reflectableIS8_EEEvSA_ENKUlTnDavE_clILi0EEEDav:
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|   335k|            else {
  257|   335k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|   335k|               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|   335k|                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|   335k|               }
  297|   335k|            }
  298|   335k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz6nestedEL_ZZZNS3_IL_ZNS4_L10empty_pathEENS5_8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS8_EEEvRT0_ENKUlTnDavE_clILm3EEEDavE8full_keyEQoo14glaze_object_tIS8_E11reflectableIS8_EEEvSA_ENKUlTnDavE_clILi0EEEDavENKUlvE_clEv:
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|       |               }
  195|       |               else {
  196|       |                  return get_member(value, get<I>(reflect<T>::values));
  197|       |               }
  198|   335k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz6nestedEL_ZZZNS3_IL_ZNS4_L10empty_pathEENS5_8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS8_EEEvRT0_ENKUlTnDavE_clILm3EEEDavE8full_keyEQoo14glaze_object_tIS8_E11reflectableIS8_EEEvSA_ENKUlTnDavE_clILi1EEEDav:
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|   335k|            else {
  257|   335k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|   335k|               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|   335k|                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|   335k|               }
  297|   335k|            }
  298|   335k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz6nestedEL_ZZZNS3_IL_ZNS4_L10empty_pathEENS5_8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS8_EEEvRT0_ENKUlTnDavE_clILm3EEEDavE8full_keyEQoo14glaze_object_tIS8_E11reflectableIS8_EEEvSA_ENKUlTnDavE_clILi1EEEDavENKUlvE_clEv:
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|       |               }
  195|       |               else {
  196|       |                  return get_member(value, get<I>(reflect<T>::values));
  197|       |               }
  198|   335k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm4EEEDav:
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|   335k|            else {
  257|   335k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|   335k|               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|   335k|                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|   335k|               }
  297|   335k|            }
  298|   335k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm4EEEDavENKUlvE_clEv:
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|       |               }
  195|       |               else {
  196|       |                  return get_member(value, get<I>(reflect<T>::values));
  197|       |               }
  198|   335k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm5EEEDav:
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|   335k|            else {
  257|   335k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|   335k|               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|   335k|                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|   335k|               }
  297|   335k|            }
  298|   335k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm5EEEDavENKUlvE_clEv:
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|       |               }
  195|       |               else {
  196|       |                  return get_member(value, get<I>(reflect<T>::values));
  197|       |               }
  198|   335k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm6EEEDav:
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|   335k|            else {
  257|   335k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|   335k|               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|   335k|                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|   335k|               }
  297|   335k|            }
  298|   335k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm6EEEDavENKUlvE_clEv:
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|       |               }
  195|       |               else {
  196|       |                  return get_member(value, get<I>(reflect<T>::values));
  197|       |               }
  198|   335k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm7EEEDav:
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|   335k|            else {
  257|   335k|               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|   335k|               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|   335k|                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|   335k|               }
  297|   335k|            }
  298|   335k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm7EEEDavENKUlvE_clEv:
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|       |               }
  195|       |               else {
  196|       |                  return get_member(value, get<I>(reflect<T>::values));
  197|       |               }
  198|   335k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm8EEEDav:
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|   335k|            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|   335k|               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|   335k|               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|   335k|               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|   335k|               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|   335k|               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|       |            else {
  257|       |               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|       |               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|       |                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|       |               }
  297|       |            }
  298|   335k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm8EEEDavENKUlvE_clEv:
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|       |               }
  195|       |               else {
  196|       |                  return get_member(value, get<I>(reflect<T>::values));
  197|       |               }
  198|   335k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm9EEEDav:
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|   335k|            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|   335k|               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|   335k|               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|   335k|               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|   335k|               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|   335k|               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|       |            else {
  257|       |               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|       |               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|       |                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|       |               }
  297|       |            }
  298|   335k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm9EEEDavENKUlvE_clEv:
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|       |               }
  195|       |               else {
  196|       |                  return get_member(value, get<I>(reflect<T>::values));
  197|       |               }
  198|   335k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm10EEEDav:
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|   335k|            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|   335k|               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|   335k|               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|   335k|               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|   335k|               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|   335k|               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|       |            else {
  257|       |               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|       |               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|       |                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|       |               }
  297|       |            }
  298|   335k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm10EEEDavENKUlvE_clEv:
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|       |               }
  195|       |               else {
  196|       |                  return get_member(value, get<I>(reflect<T>::values));
  197|       |               }
  198|   335k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm11EEEDav:
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|       |            if constexpr (std::is_invocable_v<Func>) {
  214|       |               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|       |               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|   335k|            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|   335k|               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|   335k|               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|   335k|               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|   335k|               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|   335k|               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|       |            else {
  257|       |               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|       |               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|       |                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|       |               }
  297|       |            }
  298|   335k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm11EEEDavENKUlvE_clEv:
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|       |               }
  195|       |               else {
  196|       |                  return get_member(value, get<I>(reflect<T>::values));
  197|       |               }
  198|   335k|            }();
repe_registry.cpp:_ZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm12EEEDav:
  190|   335k|         for_each<N>([&]<auto I>() {
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|   335k|               }
  195|   335k|               else {
  196|   335k|                  return get_member(value, get<I>(reflect<T>::values));
  197|   335k|               }
  198|   335k|            }();
  199|       |
  200|   335k|            static constexpr auto key = reflect<T>::keys[I];
  201|       |
  202|   335k|            static constexpr std::string_view full_key = [&] {
  203|   335k|               if constexpr (parent == detail::empty_path) {
  204|   335k|                  return join_v<chars<"/">, key>;
  205|   335k|               }
  206|   335k|               else {
  207|   335k|                  return join_v<parent, chars<"/">, key>;
  208|   335k|               }
  209|   335k|            }();
  210|       |
  211|       |            // This logic chain should match glz::cli_menu
  212|   335k|            using Func = decltype(func);
  213|   335k|            if constexpr (std::is_invocable_v<Func>) {
  214|   335k|               using Result = std::decay_t<std::invoke_result_t<Func>>;
  215|   335k|               impl::template register_function_endpoint<Func, Result>(full_key, func, *this);
  216|       |            }
  217|       |            else if constexpr (is_invocable_concrete<std::remove_cvref_t<Func>>) {
  218|       |               using Tuple = invocable_args_t<std::remove_cvref_t<Func>>;
  219|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  220|       |               static_assert(N == 1, "Only one input is allowed for your function");
  221|       |
  222|       |               using Params = glz::tuple_element_t<0, Tuple>;
  223|       |
  224|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  225|       |            }
  226|       |            else if constexpr (is_function_ptr_invocable<std::remove_cvref_t<Func>>) {
  227|       |               // Handle function pointers with arguments (e.g., void(*)(int))
  228|       |               using Tuple = function_ptr_args_t<std::remove_cvref_t<Func>>;
  229|       |               constexpr auto N = glz::tuple_size_v<Tuple>;
  230|       |               static_assert(N == 1, "Only one input is allowed for your function pointer");
  231|       |
  232|       |               using Params = glz::tuple_element_t<0, Tuple>;
  233|       |
  234|       |               impl::template register_param_function_endpoint<Func, Params>(full_key, func, *this);
  235|       |            }
  236|       |            else if constexpr (std::is_pointer_v<std::remove_cvref_t<Func>> &&
  237|       |                               (glaze_object_t<std::remove_pointer_t<std::remove_cvref_t<Func>>> ||
  238|       |                                reflectable<std::remove_pointer_t<std::remove_cvref_t<Func>>>)) {
  239|       |               // Handle pointer members explicitly for RPC traversal
  240|       |               if (func) { // Only traverse if pointer is valid
  241|       |                  on<root, std::remove_pointer_t<std::remove_cvref_t<Func>>, full_key>(*func);
  242|       |                  impl::template register_object_endpoint<std::remove_pointer_t<std::remove_cvref_t<Func>>>(
  243|       |                     full_key, *func, *this);
  244|       |               }
  245|       |               // else: skip registration for null pointers - no endpoints created
  246|       |            }
  247|       |            else if constexpr (glaze_object_t<std::remove_cvref_t<Func>> || reflectable<std::remove_cvref_t<Func>>) {
  248|       |               on<root, std::remove_cvref_t<Func>, full_key>(func);
  249|       |
  250|       |               impl::template register_object_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  251|       |            }
  252|       |            else if constexpr (not std::is_lvalue_reference_v<Func>) {
  253|       |               // For glz::custom, glz::manage, etc.
  254|       |               impl::template register_value_endpoint<std::remove_cvref_t<Func>>(full_key, func, *this);
  255|       |            }
  256|       |            else {
  257|       |               static_assert(std::is_lvalue_reference_v<Func>);
  258|       |
  259|       |               if constexpr (std::is_member_function_pointer_v<std::decay_t<Func>>) {
  260|       |                  using F = std::decay_t<Func>;
  261|       |                  using Ret = typename return_type<F>::type;
  262|       |                  using Tuple = typename inputs_as_tuple<F>::type;
  263|       |                  constexpr auto n_args = glz::tuple_size_v<Tuple>;
  264|       |                  if constexpr (std::is_void_v<Ret>) {
  265|       |                     if constexpr (n_args == 0) {
  266|       |                        impl::template register_member_function_endpoint<T, F, void>(full_key, value, func, *this);
  267|       |                     }
  268|       |                     else if constexpr (n_args == 1) {
  269|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  270|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, void>(full_key, value,
  271|       |                                                                                                        func, *this);
  272|       |                     }
  273|       |                     else {
  274|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  275|       |                     }
  276|       |                  }
  277|       |                  else {
  278|       |                     // Member function pointers
  279|       |                     if constexpr (n_args == 0) {
  280|       |                        impl::template register_member_function_endpoint<T, F, Ret>(full_key, value, func, *this);
  281|       |                     }
  282|       |                     else if constexpr (n_args == 1) {
  283|       |                        using Input = std::decay_t<glz::tuple_element_t<0, Tuple>>;
  284|       |                        impl::template register_member_function_with_params_endpoint<T, F, Input, Ret>(full_key, value,
  285|       |                                                                                                       func, *this);
  286|       |                     }
  287|       |                     else {
  288|       |                        static_assert(false_v<Func>, "function cannot have more than one input");
  289|       |                     }
  290|       |                  }
  291|       |               }
  292|       |               else {
  293|       |                  // this is a variable and not a function, so we build RPC read/write calls
  294|       |                  // We can't remove const here, because const fields need to be able to be written
  295|       |                  impl::template register_variable_endpoint<std::remove_reference_t<Func>>(full_key, func, *this);
  296|       |               }
  297|       |            }
  298|   335k|         });
repe_registry.cpp:_ZZZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS4_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS7_EEEvRT0_ENKUlTnDavE_clILm12EEEDavENKUlvE_clEv:
  191|   335k|            decltype(auto) func = [&]() -> decltype(auto) {
  192|   335k|               if constexpr (reflectable<T>) {
  193|   335k|                  return get_member(value, get<I>(t));
  194|       |               }
  195|       |               else {
  196|       |                  return get_member(value, get<I>(reflect<T>::values));
  197|       |               }
  198|   335k|            }();
_ZN3glz8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE4callENSt3__14spanIKcLm18446744073709551615EEERNS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEQeqT0_L_ZNS_4REPEEE:
  416|   335k|      {
  417|   335k|         response_buffer.clear(); // Empty buffer means no response
  418|   335k|         repe::response_builder resp{response_buffer};
  419|       |
  420|       |         // Parse request with zero-copy (header copied to stack, query/body are views)
  421|   335k|         auto result = repe::parse_request(request);
  422|   335k|         if (!result) {
  ------------------
  |  Branch (422:14): [True: 27.8k, False: 307k]
  ------------------
  423|       |            // Use the specific error code from parse_result
  424|       |            // Note: parse_request copies the header before validation, so we can access it
  425|  27.8k|            resp.reset(result.request.hdr.id);
  426|       |
  427|       |            // Build appropriate error message based on error code
  428|  27.8k|            if (result.ec == error_code::version_mismatch) {
  ------------------
  |  Branch (428:17): [True: 28, False: 27.8k]
  ------------------
  429|     28|               resp.set_error(result.ec, detail::build_version_error(result.request.hdr.version));
  430|     28|            }
  431|  27.8k|            else if (result.ec == error_code::invalid_header) {
  ------------------
  |  Branch (431:22): [True: 27.7k, False: 56]
  ------------------
  432|       |               // Could be magic mismatch, length mismatch, or buffer too small
  433|  27.7k|               if (request.size() >= sizeof(repe::header)) {
  ------------------
  |  Branch (433:20): [True: 7.84k, False: 19.9k]
  ------------------
  434|  7.84k|                  const auto& hdr = result.request.hdr;
  435|  7.84k|                  if (hdr.spec != repe::repe_magic) {
  ------------------
  |  Branch (435:23): [True: 7.18k, False: 656]
  ------------------
  436|  7.18k|                     resp.set_error(result.ec, detail::build_magic_error(hdr.spec));
  437|  7.18k|                  }
  438|    656|                  else {
  439|       |                     // Length mismatch, or query/body lengths that overflow the total
  440|       |                     // (overflow-safe: query_length/body_length are attacker-controlled).
  441|    656|                     uint64_t expected{};
  442|    656|                     if (repe::checked_message_length(hdr, expected)) {
  ------------------
  |  Branch (442:26): [True: 498, False: 158]
  ------------------
  443|    498|                        resp.set_error(result.ec, detail::build_length_error(expected, hdr.length));
  444|    498|                     }
  445|    158|                     else {
  446|    158|                        resp.set_error(result.ec,
  447|    158|                                       detail::build_length_overflow_error(hdr.query_length, hdr.body_length));
  448|    158|                     }
  449|    656|                  }
  450|  7.84k|               }
  451|  19.9k|               else {
  452|  19.9k|                  resp.set_error(result.ec, "Invalid header");
  453|  19.9k|               }
  454|  27.7k|            }
  455|     56|            else {
  456|     56|               resp.set_error(result.ec, "Failed to parse request");
  457|     56|            }
  458|  27.8k|            return;
  459|  27.8k|         }
  460|       |
  461|   307k|         const auto& req = result.request;
  462|       |
  463|       |         // Look up endpoint (transparent comparison avoids allocation)
  464|   307k|         auto it = endpoints.find(req.query);
  465|   307k|         if (it == endpoints.end()) {
  ------------------
  |  Branch (465:14): [True: 2.67k, False: 305k]
  ------------------
  466|  2.67k|            if (req.is_notify()) {
  ------------------
  |  Branch (466:17): [True: 1.27k, False: 1.39k]
  ------------------
  467|  1.27k|               return; // Silent ignore for unknown notifications (buffer stays empty)
  468|  1.27k|            }
  469|  1.39k|            resp.reset(req);
  470|  1.39k|            resp.set_error(error_code::method_not_found, detail::build_invalid_query_error(req.query));
  471|  1.39k|            return;
  472|  2.67k|         }
  473|       |
  474|       |         // If request has an error, just echo it back -- unless it is a notification, whose sender
  475|       |         // has said it will not read a reply, so answering one desynchronizes the connection: the
  476|       |         // client takes the echo as the answer to its next call. The header parsed and validated
  477|       |         // cleanly to reach here, so its notify bit can be trusted, which is what separates this
  478|       |         // from the malformed-header paths above.
  479|   305k|         if (bool(req.hdr.ec)) {
  ------------------
  |  Branch (479:14): [True: 2.26k, False: 303k]
  ------------------
  480|  2.26k|            if (req.is_notify()) {
  ------------------
  |  Branch (480:17): [True: 1.61k, False: 654]
  ------------------
  481|  1.61k|               return; // Silent ignore for a notification that carries an error (buffer stays empty)
  482|  1.61k|            }
  483|    654|            resp.reset(req);
  484|    654|            resp.set_error(req.hdr.ec);
  485|    654|            return;
  486|  2.26k|         }
  487|       |
  488|       |         // Zero-copy call: state_view references the parsed request and response builder directly
  489|   303k|         repe::state_view state{req, resp};
  490|       |
  491|   303k|         try {
  492|   303k|            it->second(state);
  493|   303k|         }
  494|   303k|         catch (const std::exception& e) {
  495|      0|            resp.reset(req);
  496|      0|            resp.set_error(error_code::parse_error, detail::build_registry_error(req.query, e.what()));
  497|      0|            return;
  498|      0|         }
  499|   303k|         catch (...) {
  500|      0|            resp.reset(req);
  501|      0|            resp.set_error(error_code::parse_error, "Unknown error");
  502|      0|            return;
  503|      0|         }
  504|       |
  505|       |         // For notifications, response buffer stays empty (no response sent)
  506|   303k|      }
_ZN3glz6detail19build_version_errorEh:
   43|     28|      {
   44|     28|         auto& buf = error_buffer();
   45|     28|         buf = "REPE version mismatch: expected 1, got ";
   46|     28|         const auto n = buf.size();
   47|     28|         buf.resize(n + 8);
   48|     28|         auto* end = glz::to_chars(buf.data() + n, uint32_t(version));
   49|     28|         buf.resize(size_t(end - buf.data()));
   50|     28|         return buf;
   51|     28|      }
_ZN3glz6detail12error_bufferEv:
   18|  9.26k|      {
   19|  9.26k|         thread_local std::string buffer;
   20|  9.26k|         buffer.clear();
   21|  9.26k|         return buffer;
   22|  9.26k|      }
_ZN3glz6detail17build_magic_errorEt:
   89|  7.18k|      {
   90|  7.18k|         auto& buf = error_buffer();
   91|  7.18k|         buf = "REPE magic number mismatch: expected 0x1507, got 0x";
   92|  7.18k|         constexpr char hex_chars[] = "0123456789abcdef";
   93|  7.18k|         char hex[4];
   94|  7.18k|         hex[0] = hex_chars[(spec >> 12) & 0xF];
   95|  7.18k|         hex[1] = hex_chars[(spec >> 8) & 0xF];
   96|  7.18k|         hex[2] = hex_chars[(spec >> 4) & 0xF];
   97|  7.18k|         hex[3] = hex_chars[spec & 0xF];
   98|  7.18k|         buf.append(hex, 4);
   99|  7.18k|         return buf;
  100|  7.18k|      }
_ZN3glz6detail18build_length_errorEmm:
   54|    498|      {
   55|    498|         auto& buf = error_buffer();
   56|    498|         buf = "REPE length mismatch: expected ";
   57|    498|         auto n = buf.size();
   58|    498|         buf.resize(n + 24);
   59|    498|         auto* end = glz::to_chars(buf.data() + n, expected);
   60|    498|         buf.resize(size_t(end - buf.data()));
   61|    498|         buf.append(", got ");
   62|    498|         n = buf.size();
   63|    498|         buf.resize(n + 24);
   64|    498|         end = glz::to_chars(buf.data() + n, actual);
   65|    498|         buf.resize(size_t(end - buf.data()));
   66|    498|         return buf;
   67|    498|      }
_ZN3glz6detail27build_length_overflow_errorEmm:
   72|    158|      {
   73|    158|         auto& buf = error_buffer();
   74|    158|         buf = "REPE length overflow: query_length ";
   75|    158|         auto n = buf.size();
   76|    158|         buf.resize(n + 24);
   77|    158|         auto* end = glz::to_chars(buf.data() + n, query_length);
   78|    158|         buf.resize(size_t(end - buf.data()));
   79|    158|         buf.append(" + body_length ");
   80|    158|         n = buf.size();
   81|    158|         buf.resize(n + 24);
   82|    158|         end = glz::to_chars(buf.data() + n, body_length);
   83|    158|         buf.resize(size_t(end - buf.data()));
   84|    158|         buf.append(" exceed uint64_t");
   85|    158|         return buf;
   86|    158|      }
_ZN3glz6detail25build_invalid_query_errorENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
   35|  1.39k|      {
   36|  1.39k|         auto& buf = error_buffer();
   37|  1.39k|         buf = "invalid_query: ";
   38|  1.39k|         buf.append(query);
   39|  1.39k|         return buf;
   40|  1.39k|      }

_ZN3glz4repe22checked_message_lengthERKNS0_6headerERm:
   52|   503k|   {
   53|   503k|      constexpr uint64_t header_size = sizeof(header);
   54|   503k|      if (hdr.query_length > (std::numeric_limits<uint64_t>::max)() - header_size) {
  ------------------
  |  Branch (54:11): [True: 16, False: 503k]
  ------------------
   55|     16|         return false;
   56|     16|      }
   57|   503k|      const uint64_t header_and_query = header_size + hdr.query_length;
   58|   503k|      if (hdr.body_length > (std::numeric_limits<uint64_t>::max)() - header_and_query) {
  ------------------
  |  Branch (58:11): [True: 300, False: 503k]
  ------------------
   59|    300|         return false;
   60|    300|      }
   61|   503k|      expected = header_and_query + hdr.body_length;
   62|   503k|      return true;
   63|   503k|   }

_ZN3glz4repe11plugin_callINS_8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EEEEE11repe_bufferRT_PKcm:
   34|  13.9k|   {
   35|       |      // Use zero-copy span-based call - parses request in-place, writes directly to response buffer
   36|       |      // Exception handling is done internally by the registry
   37|  13.9k|      registry.call(std::span<const char>{request, static_cast<size_t>(request_size)}, plugin_response_buffer);
   38|  13.9k|      return {plugin_response_buffer.data(), plugin_response_buffer.size()};
   39|  13.9k|   }

_ZNK3glz6detail11string_hashclENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
   27|  8.28M|      [[nodiscard]] size_t operator()(std::string_view txt) const { return std::hash<std::string_view>{}(txt); }
_ZNK3glz4repe10state_view8has_bodyEv:
  556|   224k|      [[nodiscard]] bool has_body() const noexcept { return !in.body.empty(); }
_ZN3glz4repe16response_builder5resetERKNS0_12request_viewE:
  373|   180k|      void reset(const request_view& request) noexcept { reset(request.id()); }
_ZN3glz4repe16response_builder5resetEm:
  360|   208k|      {
  361|   208k|         if (msg_) {
  ------------------
  |  Branch (361:14): [True: 0, False: 208k]
  ------------------
  362|      0|            init_header(msg_->header, id);
  363|      0|            msg_->query.clear();
  364|      0|            msg_->body.clear();
  365|      0|         }
  366|   208k|         else {
  367|   208k|            buffer_->clear();
  368|   208k|            init_header(hdr_, id);
  369|   208k|         }
  370|   208k|      }
_ZN3glz4repe16response_builder11init_headerERNS0_6headerEm:
  339|   208k|      {
  340|   208k|         hdr = {};
  341|   208k|         hdr.spec = repe_magic;
  342|   208k|         hdr.version = 1;
  343|   208k|         hdr.id = id;
  344|   208k|      }
_ZNK3glz4repe12request_view2idEv:
  256|   180k|      [[nodiscard]] uint64_t id() const noexcept { return hdr.id; }
_ZN3glz4repe16response_builder9set_errorENS_10error_codeENSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
  377|   185k|      {
  378|   185k|         if (msg_) {
  ------------------
  |  Branch (378:14): [True: 0, False: 185k]
  ------------------
  379|      0|            msg_->header.ec = ec;
  380|      0|            msg_->header.body_format = body_format::UTF8;
  381|      0|            msg_->header.query_length = 0;
  382|      0|            msg_->header.body_length = error_message.size();
  383|      0|            msg_->header.length = sizeof(header) + error_message.size();
  384|      0|            msg_->query.clear();
  385|      0|            msg_->body = error_message;
  386|      0|         }
  387|   185k|         else {
  388|   185k|            hdr_.ec = ec;
  389|   185k|            hdr_.body_format = body_format::UTF8;
  390|   185k|            hdr_.query_length = 0;
  391|   185k|            hdr_.body_length = error_message.size();
  392|   185k|            hdr_.length = sizeof(header) + error_message.size();
  393|       |
  394|   185k|            buffer_->resize(hdr_.length);
  395|   185k|            std::memcpy(buffer_->data(), &hdr_, sizeof(header));
  396|   185k|            if (!error_message.empty()) {
  ------------------
  |  Branch (396:17): [True: 184k, False: 654]
  ------------------
  397|   184k|               std::memcpy(buffer_->data() + sizeof(header), error_message.data(), error_message.size());
  398|   184k|            }
  399|   185k|         }
  400|   185k|      }
_ZNK3glz4repe10state_view6notifyEv:
  555|   303k|      [[nodiscard]] bool notify() const noexcept { return in.is_notify(); }
_ZNK3glz4repe12request_view9is_notifyEv:
  257|   307k|      [[nodiscard]] bool is_notify() const noexcept { return hdr.notify != 0; }
_ZN3glz4repe14write_responseITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEEEvRNS0_10state_viewE:
  616|  20.5k|   {
  617|  20.5k|      state.out.reset(state.in);
  618|  20.5k|      auto ec = state.out.template set_body<Opts>(nullptr);
  619|  20.5k|      if (bool(ec)) [[unlikely]] {
  ------------------
  |  Branch (619:11): [True: 0, False: 20.5k]
  ------------------
  620|      0|         state.out.set_error(ec, "Failed to serialize response");
  621|      0|      }
  622|  20.5k|   }
_ZN3glz4repe16response_builder8set_bodyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEDnEENS_10error_codeEOT0_:
  413|  20.5k|      {
  414|  20.5k|         if (msg_) {
  ------------------
  |  Branch (414:14): [True: 0, False: 20.5k]
  ------------------
  415|       |            // Write directly to message body
  416|      0|            auto ec = glz::write<Opts>(std::forward<T>(value), msg_->body);
  417|      0|            if (ec) {
  ------------------
  |  Branch (417:17): [True: 0, False: 0]
  ------------------
  418|      0|               return ec.ec;
  419|      0|            }
  420|       |
  421|      0|            msg_->header.ec = error_code::none;
  422|      0|            if constexpr (Opts.format == JSON) {
  423|      0|               msg_->header.body_format = body_format::JSON;
  424|       |            }
  425|       |            else if constexpr (Opts.format == BEVE) {
  426|       |               msg_->header.body_format = body_format::BEVE;
  427|       |            }
  428|       |            else {
  429|       |               msg_->header.body_format = body_format::JSON;
  430|       |            }
  431|      0|            msg_->header.query_length = 0;
  432|      0|            msg_->header.body_length = msg_->body.size();
  433|      0|            msg_->header.length = sizeof(header) + msg_->body.size();
  434|      0|            return error_code::none;
  435|      0|         }
  436|  20.5k|         else {
  437|       |            // Serialize body to temporary buffer first (glz::write clears the buffer)
  438|  20.5k|            std::string body_buffer;
  439|  20.5k|            auto ec = glz::write<Opts>(std::forward<T>(value), body_buffer);
  440|  20.5k|            if (ec) {
  ------------------
  |  Branch (440:17): [True: 0, False: 20.5k]
  ------------------
  441|      0|               return ec.ec;
  442|      0|            }
  443|       |
  444|  20.5k|            hdr_.ec = error_code::none;
  445|  20.5k|            if constexpr (Opts.format == JSON) {
  446|  20.5k|               hdr_.body_format = body_format::JSON;
  447|       |            }
  448|       |            else if constexpr (Opts.format == BEVE) {
  449|       |               hdr_.body_format = body_format::BEVE;
  450|       |            }
  451|       |            else {
  452|       |               hdr_.body_format = body_format::JSON;
  453|       |            }
  454|  20.5k|            hdr_.query_length = 0;
  455|  20.5k|            hdr_.body_length = body_buffer.size();
  456|  20.5k|            hdr_.length = sizeof(header) + body_buffer.size();
  457|       |
  458|       |            // Write header then body
  459|  20.5k|            buffer_->resize(hdr_.length);
  460|  20.5k|            std::memcpy(buffer_->data(), &hdr_, sizeof(header));
  461|  20.5k|            if (!body_buffer.empty()) {
  ------------------
  |  Branch (461:17): [True: 20.5k, False: 0]
  ------------------
  462|  20.5k|               std::memcpy(buffer_->data() + sizeof(header), body_buffer.data(), body_buffer.size());
  463|  20.5k|            }
  464|  20.5k|            return error_code::none;
  465|  20.5k|         }
  466|  20.5k|      }
_ZN3glz4repe11read_paramsITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERiEEbOT0_RNS0_10state_viewE:
  568|  55.2k|   {
  569|  55.2k|      glz::context ctx{};
  570|  55.2k|      auto body = state.in.body;
  571|  55.2k|      auto b = body.data();
  572|  55.2k|      auto e = b + body.size();
  573|  55.2k|      auto start = b;
  574|       |
  575|       |      // An empty body answers like any other failure; see the note in the message overload above.
  576|  55.2k|      if (body.empty()) [[unlikely]] {
  ------------------
  |  Branch (576:11): [True: 109, False: 55.1k]
  ------------------
  577|    109|         ctx.error = error_code::no_read_input;
  578|    109|      }
  579|  55.1k|      else {
  580|  55.1k|         glz::parse<Opts.format>::template op<is_padded_off<Opts>()>(std::forward<Value>(value), ctx, b, e);
  581|       |         // See the note in the message overload above for why glz::read's bookkeeping is repeated.
  582|  55.1k|         finalize_top_level_read<Opts>(ctx, start, b, e);
  583|  55.1k|      }
  584|       |
  585|  55.2k|      if (bool(ctx.error)) {
  ------------------
  |  Branch (585:11): [True: 53.6k, False: 1.55k]
  ------------------
  586|       |         // A notification is a request the sender has said it will not read a reply to, so a failed
  587|       |         // read of one is reported by not answering, exactly as a successful read of one is.
  588|  53.6k|         if (state.notify()) {
  ------------------
  |  Branch (588:14): [True: 22.3k, False: 31.3k]
  ------------------
  589|  22.3k|            return false;
  590|  22.3k|         }
  591|       |
  592|  31.3k|         error_ctx ec{size_t(b - start), ctx.error, ctx.custom_error_message};
  593|  31.3k|         std::string error_message = format_error(ec, body);
  594|  31.3k|         state.out.reset(state.in);
  595|  31.3k|         state.out.set_error(ctx.error, error_message);
  596|  31.3k|         return false;
  597|  53.6k|      }
  598|       |
  599|  1.55k|      return true;
  600|  55.2k|   }
_ZN3glz4repe14write_responseITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERiEEvOT0_RNS0_10state_viewE:
  605|    436|   {
  606|    436|      state.out.reset(state.in);
  607|    436|      auto ec = state.out.template set_body<Opts>(std::forward<Value>(value));
  608|    436|      if (bool(ec)) [[unlikely]] {
  ------------------
  |  Branch (608:11): [True: 0, False: 436]
  ------------------
  609|      0|         state.out.set_error(ec, "Failed to serialize response");
  610|      0|      }
  611|    436|   }
_ZN3glz4repe16response_builder8set_bodyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERiEENS_10error_codeEOT0_:
  413|    436|      {
  414|    436|         if (msg_) {
  ------------------
  |  Branch (414:14): [True: 0, False: 436]
  ------------------
  415|       |            // Write directly to message body
  416|      0|            auto ec = glz::write<Opts>(std::forward<T>(value), msg_->body);
  417|      0|            if (ec) {
  ------------------
  |  Branch (417:17): [True: 0, False: 0]
  ------------------
  418|      0|               return ec.ec;
  419|      0|            }
  420|       |
  421|      0|            msg_->header.ec = error_code::none;
  422|      0|            if constexpr (Opts.format == JSON) {
  423|      0|               msg_->header.body_format = body_format::JSON;
  424|       |            }
  425|       |            else if constexpr (Opts.format == BEVE) {
  426|       |               msg_->header.body_format = body_format::BEVE;
  427|       |            }
  428|       |            else {
  429|       |               msg_->header.body_format = body_format::JSON;
  430|       |            }
  431|      0|            msg_->header.query_length = 0;
  432|      0|            msg_->header.body_length = msg_->body.size();
  433|      0|            msg_->header.length = sizeof(header) + msg_->body.size();
  434|      0|            return error_code::none;
  435|      0|         }
  436|    436|         else {
  437|       |            // Serialize body to temporary buffer first (glz::write clears the buffer)
  438|    436|            std::string body_buffer;
  439|    436|            auto ec = glz::write<Opts>(std::forward<T>(value), body_buffer);
  440|    436|            if (ec) {
  ------------------
  |  Branch (440:17): [True: 0, False: 436]
  ------------------
  441|      0|               return ec.ec;
  442|      0|            }
  443|       |
  444|    436|            hdr_.ec = error_code::none;
  445|    436|            if constexpr (Opts.format == JSON) {
  446|    436|               hdr_.body_format = body_format::JSON;
  447|       |            }
  448|       |            else if constexpr (Opts.format == BEVE) {
  449|       |               hdr_.body_format = body_format::BEVE;
  450|       |            }
  451|       |            else {
  452|       |               hdr_.body_format = body_format::JSON;
  453|       |            }
  454|    436|            hdr_.query_length = 0;
  455|    436|            hdr_.body_length = body_buffer.size();
  456|    436|            hdr_.length = sizeof(header) + body_buffer.size();
  457|       |
  458|       |            // Write header then body
  459|    436|            buffer_->resize(hdr_.length);
  460|    436|            std::memcpy(buffer_->data(), &hdr_, sizeof(header));
  461|    436|            if (!body_buffer.empty()) {
  ------------------
  |  Branch (461:17): [True: 436, False: 0]
  ------------------
  462|    436|               std::memcpy(buffer_->data() + sizeof(header), body_buffer.data(), body_buffer.size());
  463|    436|            }
  464|    436|            return error_code::none;
  465|    436|         }
  466|    436|      }
_ZN3glz4repe14write_responseITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEiEEvOT0_RNS0_10state_viewE:
  605|    375|   {
  606|    375|      state.out.reset(state.in);
  607|    375|      auto ec = state.out.template set_body<Opts>(std::forward<Value>(value));
  608|    375|      if (bool(ec)) [[unlikely]] {
  ------------------
  |  Branch (608:11): [True: 0, False: 375]
  ------------------
  609|      0|         state.out.set_error(ec, "Failed to serialize response");
  610|      0|      }
  611|    375|   }
_ZN3glz4repe16response_builder8set_bodyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEiEENS_10error_codeEOT0_:
  413|    375|      {
  414|    375|         if (msg_) {
  ------------------
  |  Branch (414:14): [True: 0, False: 375]
  ------------------
  415|       |            // Write directly to message body
  416|      0|            auto ec = glz::write<Opts>(std::forward<T>(value), msg_->body);
  417|      0|            if (ec) {
  ------------------
  |  Branch (417:17): [True: 0, False: 0]
  ------------------
  418|      0|               return ec.ec;
  419|      0|            }
  420|       |
  421|      0|            msg_->header.ec = error_code::none;
  422|      0|            if constexpr (Opts.format == JSON) {
  423|      0|               msg_->header.body_format = body_format::JSON;
  424|       |            }
  425|       |            else if constexpr (Opts.format == BEVE) {
  426|       |               msg_->header.body_format = body_format::BEVE;
  427|       |            }
  428|       |            else {
  429|       |               msg_->header.body_format = body_format::JSON;
  430|       |            }
  431|      0|            msg_->header.query_length = 0;
  432|      0|            msg_->header.body_length = msg_->body.size();
  433|      0|            msg_->header.length = sizeof(header) + msg_->body.size();
  434|      0|            return error_code::none;
  435|      0|         }
  436|    375|         else {
  437|       |            // Serialize body to temporary buffer first (glz::write clears the buffer)
  438|    375|            std::string body_buffer;
  439|    375|            auto ec = glz::write<Opts>(std::forward<T>(value), body_buffer);
  440|    375|            if (ec) {
  ------------------
  |  Branch (440:17): [True: 0, False: 375]
  ------------------
  441|      0|               return ec.ec;
  442|      0|            }
  443|       |
  444|    375|            hdr_.ec = error_code::none;
  445|    375|            if constexpr (Opts.format == JSON) {
  446|    375|               hdr_.body_format = body_format::JSON;
  447|       |            }
  448|       |            else if constexpr (Opts.format == BEVE) {
  449|       |               hdr_.body_format = body_format::BEVE;
  450|       |            }
  451|       |            else {
  452|       |               hdr_.body_format = body_format::JSON;
  453|       |            }
  454|    375|            hdr_.query_length = 0;
  455|    375|            hdr_.body_length = body_buffer.size();
  456|    375|            hdr_.length = sizeof(header) + body_buffer.size();
  457|       |
  458|       |            // Write header then body
  459|    375|            buffer_->resize(hdr_.length);
  460|    375|            std::memcpy(buffer_->data(), &hdr_, sizeof(header));
  461|    375|            if (!body_buffer.empty()) {
  ------------------
  |  Branch (461:17): [True: 375, False: 0]
  ------------------
  462|    375|               std::memcpy(buffer_->data() + sizeof(header), body_buffer.data(), body_buffer.size());
  463|    375|            }
  464|    375|            return error_code::none;
  465|    375|         }
  466|    375|      }
_ZN3glz4repe11read_paramsITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz5pointEEEbOT0_RNS0_10state_viewE:
  568|  41.5k|   {
  569|  41.5k|      glz::context ctx{};
  570|  41.5k|      auto body = state.in.body;
  571|  41.5k|      auto b = body.data();
  572|  41.5k|      auto e = b + body.size();
  573|  41.5k|      auto start = b;
  574|       |
  575|       |      // An empty body answers like any other failure; see the note in the message overload above.
  576|  41.5k|      if (body.empty()) [[unlikely]] {
  ------------------
  |  Branch (576:11): [True: 109, False: 41.4k]
  ------------------
  577|    109|         ctx.error = error_code::no_read_input;
  578|    109|      }
  579|  41.4k|      else {
  580|  41.4k|         glz::parse<Opts.format>::template op<is_padded_off<Opts>()>(std::forward<Value>(value), ctx, b, e);
  581|       |         // See the note in the message overload above for why glz::read's bookkeeping is repeated.
  582|  41.4k|         finalize_top_level_read<Opts>(ctx, start, b, e);
  583|  41.4k|      }
  584|       |
  585|  41.5k|      if (bool(ctx.error)) {
  ------------------
  |  Branch (585:11): [True: 41.3k, False: 203]
  ------------------
  586|       |         // A notification is a request the sender has said it will not read a reply to, so a failed
  587|       |         // read of one is reported by not answering, exactly as a successful read of one is.
  588|  41.3k|         if (state.notify()) {
  ------------------
  |  Branch (588:14): [True: 17.0k, False: 24.3k]
  ------------------
  589|  17.0k|            return false;
  590|  17.0k|         }
  591|       |
  592|  24.3k|         error_ctx ec{size_t(b - start), ctx.error, ctx.custom_error_message};
  593|  24.3k|         std::string error_message = format_error(ec, body);
  594|  24.3k|         state.out.reset(state.in);
  595|  24.3k|         state.out.set_error(ctx.error, error_message);
  596|  24.3k|         return false;
  597|  41.3k|      }
  598|       |
  599|    203|      return true;
  600|  41.5k|   }
_ZN3glz4repe14write_responseITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz5pointEEEvOT0_RNS0_10state_viewE:
  605|    120|   {
  606|    120|      state.out.reset(state.in);
  607|    120|      auto ec = state.out.template set_body<Opts>(std::forward<Value>(value));
  608|    120|      if (bool(ec)) [[unlikely]] {
  ------------------
  |  Branch (608:11): [True: 0, False: 120]
  ------------------
  609|      0|         state.out.set_error(ec, "Failed to serialize response");
  610|      0|      }
  611|    120|   }
_ZN3glz4repe16response_builder8set_bodyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz5pointEEENS_10error_codeEOT0_:
  413|    120|      {
  414|    120|         if (msg_) {
  ------------------
  |  Branch (414:14): [True: 0, False: 120]
  ------------------
  415|       |            // Write directly to message body
  416|      0|            auto ec = glz::write<Opts>(std::forward<T>(value), msg_->body);
  417|      0|            if (ec) {
  ------------------
  |  Branch (417:17): [True: 0, False: 0]
  ------------------
  418|      0|               return ec.ec;
  419|      0|            }
  420|       |
  421|      0|            msg_->header.ec = error_code::none;
  422|      0|            if constexpr (Opts.format == JSON) {
  423|      0|               msg_->header.body_format = body_format::JSON;
  424|       |            }
  425|       |            else if constexpr (Opts.format == BEVE) {
  426|       |               msg_->header.body_format = body_format::BEVE;
  427|       |            }
  428|       |            else {
  429|       |               msg_->header.body_format = body_format::JSON;
  430|       |            }
  431|      0|            msg_->header.query_length = 0;
  432|      0|            msg_->header.body_length = msg_->body.size();
  433|      0|            msg_->header.length = sizeof(header) + msg_->body.size();
  434|      0|            return error_code::none;
  435|      0|         }
  436|    120|         else {
  437|       |            // Serialize body to temporary buffer first (glz::write clears the buffer)
  438|    120|            std::string body_buffer;
  439|    120|            auto ec = glz::write<Opts>(std::forward<T>(value), body_buffer);
  440|    120|            if (ec) {
  ------------------
  |  Branch (440:17): [True: 0, False: 120]
  ------------------
  441|      0|               return ec.ec;
  442|      0|            }
  443|       |
  444|    120|            hdr_.ec = error_code::none;
  445|    120|            if constexpr (Opts.format == JSON) {
  446|    120|               hdr_.body_format = body_format::JSON;
  447|       |            }
  448|       |            else if constexpr (Opts.format == BEVE) {
  449|       |               hdr_.body_format = body_format::BEVE;
  450|       |            }
  451|       |            else {
  452|       |               hdr_.body_format = body_format::JSON;
  453|       |            }
  454|    120|            hdr_.query_length = 0;
  455|    120|            hdr_.body_length = body_buffer.size();
  456|    120|            hdr_.length = sizeof(header) + body_buffer.size();
  457|       |
  458|       |            // Write header then body
  459|    120|            buffer_->resize(hdr_.length);
  460|    120|            std::memcpy(buffer_->data(), &hdr_, sizeof(header));
  461|    120|            if (!body_buffer.empty()) {
  ------------------
  |  Branch (461:17): [True: 120, False: 0]
  ------------------
  462|    120|               std::memcpy(buffer_->data() + sizeof(header), body_buffer.data(), body_buffer.size());
  463|    120|            }
  464|    120|            return error_code::none;
  465|    120|         }
  466|    120|      }
_ZN3glz4repe11read_paramsITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz6nestedEEEbOT0_RNS0_10state_viewE:
  568|  27.8k|   {
  569|  27.8k|      glz::context ctx{};
  570|  27.8k|      auto body = state.in.body;
  571|  27.8k|      auto b = body.data();
  572|  27.8k|      auto e = b + body.size();
  573|  27.8k|      auto start = b;
  574|       |
  575|       |      // An empty body answers like any other failure; see the note in the message overload above.
  576|  27.8k|      if (body.empty()) [[unlikely]] {
  ------------------
  |  Branch (576:11): [True: 0, False: 27.8k]
  ------------------
  577|      0|         ctx.error = error_code::no_read_input;
  578|      0|      }
  579|  27.8k|      else {
  580|  27.8k|         glz::parse<Opts.format>::template op<is_padded_off<Opts>()>(std::forward<Value>(value), ctx, b, e);
  581|       |         // See the note in the message overload above for why glz::read's bookkeeping is repeated.
  582|  27.8k|         finalize_top_level_read<Opts>(ctx, start, b, e);
  583|  27.8k|      }
  584|       |
  585|  27.8k|      if (bool(ctx.error)) {
  ------------------
  |  Branch (585:11): [True: 27.4k, False: 398]
  ------------------
  586|       |         // A notification is a request the sender has said it will not read a reply to, so a failed
  587|       |         // read of one is reported by not answering, exactly as a successful read of one is.
  588|  27.4k|         if (state.notify()) {
  ------------------
  |  Branch (588:14): [True: 11.5k, False: 15.9k]
  ------------------
  589|  11.5k|            return false;
  590|  11.5k|         }
  591|       |
  592|  15.9k|         error_ctx ec{size_t(b - start), ctx.error, ctx.custom_error_message};
  593|  15.9k|         std::string error_message = format_error(ec, body);
  594|  15.9k|         state.out.reset(state.in);
  595|  15.9k|         state.out.set_error(ctx.error, error_message);
  596|  15.9k|         return false;
  597|  27.4k|      }
  598|       |
  599|    398|      return true;
  600|  27.8k|   }
_ZN3glz4repe14write_responseITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEENSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEEvOT0_RNS0_10state_viewE:
  605|    269|   {
  606|    269|      state.out.reset(state.in);
  607|    269|      auto ec = state.out.template set_body<Opts>(std::forward<Value>(value));
  608|    269|      if (bool(ec)) [[unlikely]] {
  ------------------
  |  Branch (608:11): [True: 0, False: 269]
  ------------------
  609|      0|         state.out.set_error(ec, "Failed to serialize response");
  610|      0|      }
  611|    269|   }
_ZN3glz4repe16response_builder8set_bodyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEENSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS_10error_codeEOT0_:
  413|    269|      {
  414|    269|         if (msg_) {
  ------------------
  |  Branch (414:14): [True: 0, False: 269]
  ------------------
  415|       |            // Write directly to message body
  416|      0|            auto ec = glz::write<Opts>(std::forward<T>(value), msg_->body);
  417|      0|            if (ec) {
  ------------------
  |  Branch (417:17): [True: 0, False: 0]
  ------------------
  418|      0|               return ec.ec;
  419|      0|            }
  420|       |
  421|      0|            msg_->header.ec = error_code::none;
  422|      0|            if constexpr (Opts.format == JSON) {
  423|      0|               msg_->header.body_format = body_format::JSON;
  424|       |            }
  425|       |            else if constexpr (Opts.format == BEVE) {
  426|       |               msg_->header.body_format = body_format::BEVE;
  427|       |            }
  428|       |            else {
  429|       |               msg_->header.body_format = body_format::JSON;
  430|       |            }
  431|      0|            msg_->header.query_length = 0;
  432|      0|            msg_->header.body_length = msg_->body.size();
  433|      0|            msg_->header.length = sizeof(header) + msg_->body.size();
  434|      0|            return error_code::none;
  435|      0|         }
  436|    269|         else {
  437|       |            // Serialize body to temporary buffer first (glz::write clears the buffer)
  438|    269|            std::string body_buffer;
  439|    269|            auto ec = glz::write<Opts>(std::forward<T>(value), body_buffer);
  440|    269|            if (ec) {
  ------------------
  |  Branch (440:17): [True: 0, False: 269]
  ------------------
  441|      0|               return ec.ec;
  442|      0|            }
  443|       |
  444|    269|            hdr_.ec = error_code::none;
  445|    269|            if constexpr (Opts.format == JSON) {
  446|    269|               hdr_.body_format = body_format::JSON;
  447|       |            }
  448|       |            else if constexpr (Opts.format == BEVE) {
  449|       |               hdr_.body_format = body_format::BEVE;
  450|       |            }
  451|       |            else {
  452|       |               hdr_.body_format = body_format::JSON;
  453|       |            }
  454|    269|            hdr_.query_length = 0;
  455|    269|            hdr_.body_length = body_buffer.size();
  456|    269|            hdr_.length = sizeof(header) + body_buffer.size();
  457|       |
  458|       |            // Write header then body
  459|    269|            buffer_->resize(hdr_.length);
  460|    269|            std::memcpy(buffer_->data(), &hdr_, sizeof(header));
  461|    269|            if (!body_buffer.empty()) {
  ------------------
  |  Branch (461:17): [True: 269, False: 0]
  ------------------
  462|    269|               std::memcpy(buffer_->data() + sizeof(header), body_buffer.data(), body_buffer.size());
  463|    269|            }
  464|    269|            return error_code::none;
  465|    269|         }
  466|    269|      }
_ZN3glz4repe11read_paramsITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz8fuzz_apiEEEbOT0_RNS0_10state_viewE:
  568|  24.1k|   {
  569|  24.1k|      glz::context ctx{};
  570|  24.1k|      auto body = state.in.body;
  571|  24.1k|      auto b = body.data();
  572|  24.1k|      auto e = b + body.size();
  573|  24.1k|      auto start = b;
  574|       |
  575|       |      // An empty body answers like any other failure; see the note in the message overload above.
  576|  24.1k|      if (body.empty()) [[unlikely]] {
  ------------------
  |  Branch (576:11): [True: 0, False: 24.1k]
  ------------------
  577|      0|         ctx.error = error_code::no_read_input;
  578|      0|      }
  579|  24.1k|      else {
  580|  24.1k|         glz::parse<Opts.format>::template op<is_padded_off<Opts>()>(std::forward<Value>(value), ctx, b, e);
  581|       |         // See the note in the message overload above for why glz::read's bookkeeping is repeated.
  582|  24.1k|         finalize_top_level_read<Opts>(ctx, start, b, e);
  583|  24.1k|      }
  584|       |
  585|  24.1k|      if (bool(ctx.error)) {
  ------------------
  |  Branch (585:11): [True: 24.0k, False: 53]
  ------------------
  586|       |         // A notification is a request the sender has said it will not read a reply to, so a failed
  587|       |         // read of one is reported by not answering, exactly as a successful read of one is.
  588|  24.0k|         if (state.notify()) {
  ------------------
  |  Branch (588:14): [True: 9.71k, False: 14.3k]
  ------------------
  589|  9.71k|            return false;
  590|  9.71k|         }
  591|       |
  592|  14.3k|         error_ctx ec{size_t(b - start), ctx.error, ctx.custom_error_message};
  593|  14.3k|         std::string error_message = format_error(ec, body);
  594|  14.3k|         state.out.reset(state.in);
  595|  14.3k|         state.out.set_error(ctx.error, error_message);
  596|  14.3k|         return false;
  597|  24.0k|      }
  598|       |
  599|     53|      return true;
  600|  24.1k|   }
_ZN3glz4repe14write_responseITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz8fuzz_apiEEEvOT0_RNS0_10state_viewE:
  605|     62|   {
  606|     62|      state.out.reset(state.in);
  607|     62|      auto ec = state.out.template set_body<Opts>(std::forward<Value>(value));
  608|     62|      if (bool(ec)) [[unlikely]] {
  ------------------
  |  Branch (608:11): [True: 0, False: 62]
  ------------------
  609|      0|         state.out.set_error(ec, "Failed to serialize response");
  610|      0|      }
  611|     62|   }
_ZN3glz4repe16response_builder8set_bodyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz8fuzz_apiEEENS_10error_codeEOT0_:
  413|     62|      {
  414|     62|         if (msg_) {
  ------------------
  |  Branch (414:14): [True: 0, False: 62]
  ------------------
  415|       |            // Write directly to message body
  416|      0|            auto ec = glz::write<Opts>(std::forward<T>(value), msg_->body);
  417|      0|            if (ec) {
  ------------------
  |  Branch (417:17): [True: 0, False: 0]
  ------------------
  418|      0|               return ec.ec;
  419|      0|            }
  420|       |
  421|      0|            msg_->header.ec = error_code::none;
  422|      0|            if constexpr (Opts.format == JSON) {
  423|      0|               msg_->header.body_format = body_format::JSON;
  424|       |            }
  425|       |            else if constexpr (Opts.format == BEVE) {
  426|       |               msg_->header.body_format = body_format::BEVE;
  427|       |            }
  428|       |            else {
  429|       |               msg_->header.body_format = body_format::JSON;
  430|       |            }
  431|      0|            msg_->header.query_length = 0;
  432|      0|            msg_->header.body_length = msg_->body.size();
  433|      0|            msg_->header.length = sizeof(header) + msg_->body.size();
  434|      0|            return error_code::none;
  435|      0|         }
  436|     62|         else {
  437|       |            // Serialize body to temporary buffer first (glz::write clears the buffer)
  438|     62|            std::string body_buffer;
  439|     62|            auto ec = glz::write<Opts>(std::forward<T>(value), body_buffer);
  440|     62|            if (ec) {
  ------------------
  |  Branch (440:17): [True: 0, False: 62]
  ------------------
  441|      0|               return ec.ec;
  442|      0|            }
  443|       |
  444|     62|            hdr_.ec = error_code::none;
  445|     62|            if constexpr (Opts.format == JSON) {
  446|     62|               hdr_.body_format = body_format::JSON;
  447|       |            }
  448|       |            else if constexpr (Opts.format == BEVE) {
  449|       |               hdr_.body_format = body_format::BEVE;
  450|       |            }
  451|       |            else {
  452|       |               hdr_.body_format = body_format::JSON;
  453|       |            }
  454|     62|            hdr_.query_length = 0;
  455|     62|            hdr_.body_length = body_buffer.size();
  456|     62|            hdr_.length = sizeof(header) + body_buffer.size();
  457|       |
  458|       |            // Write header then body
  459|     62|            buffer_->resize(hdr_.length);
  460|     62|            std::memcpy(buffer_->data(), &hdr_, sizeof(header));
  461|     62|            if (!body_buffer.empty()) {
  ------------------
  |  Branch (461:17): [True: 62, False: 0]
  ------------------
  462|     62|               std::memcpy(buffer_->data() + sizeof(header), body_buffer.data(), body_buffer.size());
  463|     62|            }
  464|     62|            return error_code::none;
  465|     62|         }
  466|     62|      }
_ZN3glz4repe11read_paramsITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEEbOT0_RNS0_10state_viewE:
  568|  41.6k|   {
  569|  41.6k|      glz::context ctx{};
  570|  41.6k|      auto body = state.in.body;
  571|  41.6k|      auto b = body.data();
  572|  41.6k|      auto e = b + body.size();
  573|  41.6k|      auto start = b;
  574|       |
  575|       |      // An empty body answers like any other failure; see the note in the message overload above.
  576|  41.6k|      if (body.empty()) [[unlikely]] {
  ------------------
  |  Branch (576:11): [True: 109, False: 41.5k]
  ------------------
  577|    109|         ctx.error = error_code::no_read_input;
  578|    109|      }
  579|  41.5k|      else {
  580|  41.5k|         glz::parse<Opts.format>::template op<is_padded_off<Opts>()>(std::forward<Value>(value), ctx, b, e);
  581|       |         // See the note in the message overload above for why glz::read's bookkeeping is repeated.
  582|  41.5k|         finalize_top_level_read<Opts>(ctx, start, b, e);
  583|  41.5k|      }
  584|       |
  585|  41.6k|      if (bool(ctx.error)) {
  ------------------
  |  Branch (585:11): [True: 40.1k, False: 1.46k]
  ------------------
  586|       |         // A notification is a request the sender has said it will not read a reply to, so a failed
  587|       |         // read of one is reported by not answering, exactly as a successful read of one is.
  588|  40.1k|         if (state.notify()) {
  ------------------
  |  Branch (588:14): [True: 16.4k, False: 23.6k]
  ------------------
  589|  16.4k|            return false;
  590|  16.4k|         }
  591|       |
  592|  23.6k|         error_ctx ec{size_t(b - start), ctx.error, ctx.custom_error_message};
  593|  23.6k|         std::string error_message = format_error(ec, body);
  594|  23.6k|         state.out.reset(state.in);
  595|  23.6k|         state.out.set_error(ctx.error, error_message);
  596|  23.6k|         return false;
  597|  40.1k|      }
  598|       |
  599|  1.46k|      return true;
  600|  41.6k|   }
_ZN3glz4repe14write_responseITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEEEvOT0_RNS0_10state_viewE:
  605|    395|   {
  606|    395|      state.out.reset(state.in);
  607|    395|      auto ec = state.out.template set_body<Opts>(std::forward<Value>(value));
  608|    395|      if (bool(ec)) [[unlikely]] {
  ------------------
  |  Branch (608:11): [True: 0, False: 395]
  ------------------
  609|      0|         state.out.set_error(ec, "Failed to serialize response");
  610|      0|      }
  611|    395|   }
_ZN3glz4repe16response_builder8set_bodyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEEENS_10error_codeEOT0_:
  413|    395|      {
  414|    395|         if (msg_) {
  ------------------
  |  Branch (414:14): [True: 0, False: 395]
  ------------------
  415|       |            // Write directly to message body
  416|      0|            auto ec = glz::write<Opts>(std::forward<T>(value), msg_->body);
  417|      0|            if (ec) {
  ------------------
  |  Branch (417:17): [True: 0, False: 0]
  ------------------
  418|      0|               return ec.ec;
  419|      0|            }
  420|       |
  421|      0|            msg_->header.ec = error_code::none;
  422|      0|            if constexpr (Opts.format == JSON) {
  423|      0|               msg_->header.body_format = body_format::JSON;
  424|       |            }
  425|       |            else if constexpr (Opts.format == BEVE) {
  426|       |               msg_->header.body_format = body_format::BEVE;
  427|       |            }
  428|       |            else {
  429|       |               msg_->header.body_format = body_format::JSON;
  430|       |            }
  431|      0|            msg_->header.query_length = 0;
  432|      0|            msg_->header.body_length = msg_->body.size();
  433|      0|            msg_->header.length = sizeof(header) + msg_->body.size();
  434|      0|            return error_code::none;
  435|      0|         }
  436|    395|         else {
  437|       |            // Serialize body to temporary buffer first (glz::write clears the buffer)
  438|    395|            std::string body_buffer;
  439|    395|            auto ec = glz::write<Opts>(std::forward<T>(value), body_buffer);
  440|    395|            if (ec) {
  ------------------
  |  Branch (440:17): [True: 0, False: 395]
  ------------------
  441|      0|               return ec.ec;
  442|      0|            }
  443|       |
  444|    395|            hdr_.ec = error_code::none;
  445|    395|            if constexpr (Opts.format == JSON) {
  446|    395|               hdr_.body_format = body_format::JSON;
  447|       |            }
  448|       |            else if constexpr (Opts.format == BEVE) {
  449|       |               hdr_.body_format = body_format::BEVE;
  450|       |            }
  451|       |            else {
  452|       |               hdr_.body_format = body_format::JSON;
  453|       |            }
  454|    395|            hdr_.query_length = 0;
  455|    395|            hdr_.body_length = body_buffer.size();
  456|    395|            hdr_.length = sizeof(header) + body_buffer.size();
  457|       |
  458|       |            // Write header then body
  459|    395|            buffer_->resize(hdr_.length);
  460|    395|            std::memcpy(buffer_->data(), &hdr_, sizeof(header));
  461|    395|            if (!body_buffer.empty()) {
  ------------------
  |  Branch (461:17): [True: 395, False: 0]
  ------------------
  462|    395|               std::memcpy(buffer_->data() + sizeof(header), body_buffer.data(), body_buffer.size());
  463|    395|            }
  464|    395|            return error_code::none;
  465|    395|         }
  466|    395|      }
_ZN3glz4repe11read_paramsITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERdEEbOT0_RNS0_10state_viewE:
  568|  13.7k|   {
  569|  13.7k|      glz::context ctx{};
  570|  13.7k|      auto body = state.in.body;
  571|  13.7k|      auto b = body.data();
  572|  13.7k|      auto e = b + body.size();
  573|  13.7k|      auto start = b;
  574|       |
  575|       |      // An empty body answers like any other failure; see the note in the message overload above.
  576|  13.7k|      if (body.empty()) [[unlikely]] {
  ------------------
  |  Branch (576:11): [True: 0, False: 13.7k]
  ------------------
  577|      0|         ctx.error = error_code::no_read_input;
  578|      0|      }
  579|  13.7k|      else {
  580|  13.7k|         glz::parse<Opts.format>::template op<is_padded_off<Opts>()>(std::forward<Value>(value), ctx, b, e);
  581|       |         // See the note in the message overload above for why glz::read's bookkeeping is repeated.
  582|  13.7k|         finalize_top_level_read<Opts>(ctx, start, b, e);
  583|  13.7k|      }
  584|       |
  585|  13.7k|      if (bool(ctx.error)) {
  ------------------
  |  Branch (585:11): [True: 11.9k, False: 1.86k]
  ------------------
  586|       |         // A notification is a request the sender has said it will not read a reply to, so a failed
  587|       |         // read of one is reported by not answering, exactly as a successful read of one is.
  588|  11.9k|         if (state.notify()) {
  ------------------
  |  Branch (588:14): [True: 4.96k, False: 6.95k]
  ------------------
  589|  4.96k|            return false;
  590|  4.96k|         }
  591|       |
  592|  6.95k|         error_ctx ec{size_t(b - start), ctx.error, ctx.custom_error_message};
  593|  6.95k|         std::string error_message = format_error(ec, body);
  594|  6.95k|         state.out.reset(state.in);
  595|  6.95k|         state.out.set_error(ctx.error, error_message);
  596|  6.95k|         return false;
  597|  11.9k|      }
  598|       |
  599|  1.86k|      return true;
  600|  13.7k|   }
_ZN3glz4repe14write_responseITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERdEEvOT0_RNS0_10state_viewE:
  605|    535|   {
  606|    535|      state.out.reset(state.in);
  607|    535|      auto ec = state.out.template set_body<Opts>(std::forward<Value>(value));
  608|    535|      if (bool(ec)) [[unlikely]] {
  ------------------
  |  Branch (608:11): [True: 0, False: 535]
  ------------------
  609|      0|         state.out.set_error(ec, "Failed to serialize response");
  610|      0|      }
  611|    535|   }
_ZN3glz4repe16response_builder8set_bodyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERdEENS_10error_codeEOT0_:
  413|    535|      {
  414|    535|         if (msg_) {
  ------------------
  |  Branch (414:14): [True: 0, False: 535]
  ------------------
  415|       |            // Write directly to message body
  416|      0|            auto ec = glz::write<Opts>(std::forward<T>(value), msg_->body);
  417|      0|            if (ec) {
  ------------------
  |  Branch (417:17): [True: 0, False: 0]
  ------------------
  418|      0|               return ec.ec;
  419|      0|            }
  420|       |
  421|      0|            msg_->header.ec = error_code::none;
  422|      0|            if constexpr (Opts.format == JSON) {
  423|      0|               msg_->header.body_format = body_format::JSON;
  424|       |            }
  425|       |            else if constexpr (Opts.format == BEVE) {
  426|       |               msg_->header.body_format = body_format::BEVE;
  427|       |            }
  428|       |            else {
  429|       |               msg_->header.body_format = body_format::JSON;
  430|       |            }
  431|      0|            msg_->header.query_length = 0;
  432|      0|            msg_->header.body_length = msg_->body.size();
  433|      0|            msg_->header.length = sizeof(header) + msg_->body.size();
  434|      0|            return error_code::none;
  435|      0|         }
  436|    535|         else {
  437|       |            // Serialize body to temporary buffer first (glz::write clears the buffer)
  438|    535|            std::string body_buffer;
  439|    535|            auto ec = glz::write<Opts>(std::forward<T>(value), body_buffer);
  440|    535|            if (ec) {
  ------------------
  |  Branch (440:17): [True: 0, False: 535]
  ------------------
  441|      0|               return ec.ec;
  442|      0|            }
  443|       |
  444|    535|            hdr_.ec = error_code::none;
  445|    535|            if constexpr (Opts.format == JSON) {
  446|    535|               hdr_.body_format = body_format::JSON;
  447|       |            }
  448|       |            else if constexpr (Opts.format == BEVE) {
  449|       |               hdr_.body_format = body_format::BEVE;
  450|       |            }
  451|       |            else {
  452|       |               hdr_.body_format = body_format::JSON;
  453|       |            }
  454|    535|            hdr_.query_length = 0;
  455|    535|            hdr_.body_length = body_buffer.size();
  456|    535|            hdr_.length = sizeof(header) + body_buffer.size();
  457|       |
  458|       |            // Write header then body
  459|    535|            buffer_->resize(hdr_.length);
  460|    535|            std::memcpy(buffer_->data(), &hdr_, sizeof(header));
  461|    535|            if (!body_buffer.empty()) {
  ------------------
  |  Branch (461:17): [True: 535, False: 0]
  ------------------
  462|    535|               std::memcpy(buffer_->data() + sizeof(header), body_buffer.data(), body_buffer.size());
  463|    535|            }
  464|    535|            return error_code::none;
  465|    535|         }
  466|    535|      }
_ZN3glz4repe14write_responseITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz5pointEEEvOT0_RNS0_10state_viewE:
  605|    119|   {
  606|    119|      state.out.reset(state.in);
  607|    119|      auto ec = state.out.template set_body<Opts>(std::forward<Value>(value));
  608|    119|      if (bool(ec)) [[unlikely]] {
  ------------------
  |  Branch (608:11): [True: 0, False: 119]
  ------------------
  609|      0|         state.out.set_error(ec, "Failed to serialize response");
  610|      0|      }
  611|    119|   }
_ZN3glz4repe16response_builder8set_bodyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz5pointEEENS_10error_codeEOT0_:
  413|    119|      {
  414|    119|         if (msg_) {
  ------------------
  |  Branch (414:14): [True: 0, False: 119]
  ------------------
  415|       |            // Write directly to message body
  416|      0|            auto ec = glz::write<Opts>(std::forward<T>(value), msg_->body);
  417|      0|            if (ec) {
  ------------------
  |  Branch (417:17): [True: 0, False: 0]
  ------------------
  418|      0|               return ec.ec;
  419|      0|            }
  420|       |
  421|      0|            msg_->header.ec = error_code::none;
  422|      0|            if constexpr (Opts.format == JSON) {
  423|      0|               msg_->header.body_format = body_format::JSON;
  424|       |            }
  425|       |            else if constexpr (Opts.format == BEVE) {
  426|       |               msg_->header.body_format = body_format::BEVE;
  427|       |            }
  428|       |            else {
  429|       |               msg_->header.body_format = body_format::JSON;
  430|       |            }
  431|      0|            msg_->header.query_length = 0;
  432|      0|            msg_->header.body_length = msg_->body.size();
  433|      0|            msg_->header.length = sizeof(header) + msg_->body.size();
  434|      0|            return error_code::none;
  435|      0|         }
  436|    119|         else {
  437|       |            // Serialize body to temporary buffer first (glz::write clears the buffer)
  438|    119|            std::string body_buffer;
  439|    119|            auto ec = glz::write<Opts>(std::forward<T>(value), body_buffer);
  440|    119|            if (ec) {
  ------------------
  |  Branch (440:17): [True: 0, False: 119]
  ------------------
  441|      0|               return ec.ec;
  442|      0|            }
  443|       |
  444|    119|            hdr_.ec = error_code::none;
  445|    119|            if constexpr (Opts.format == JSON) {
  446|    119|               hdr_.body_format = body_format::JSON;
  447|       |            }
  448|       |            else if constexpr (Opts.format == BEVE) {
  449|       |               hdr_.body_format = body_format::BEVE;
  450|       |            }
  451|       |            else {
  452|       |               hdr_.body_format = body_format::JSON;
  453|       |            }
  454|    119|            hdr_.query_length = 0;
  455|    119|            hdr_.body_length = body_buffer.size();
  456|    119|            hdr_.length = sizeof(header) + body_buffer.size();
  457|       |
  458|       |            // Write header then body
  459|    119|            buffer_->resize(hdr_.length);
  460|    119|            std::memcpy(buffer_->data(), &hdr_, sizeof(header));
  461|    119|            if (!body_buffer.empty()) {
  ------------------
  |  Branch (461:17): [True: 119, False: 0]
  ------------------
  462|    119|               std::memcpy(buffer_->data() + sizeof(header), body_buffer.data(), body_buffer.size());
  463|    119|            }
  464|    119|            return error_code::none;
  465|    119|         }
  466|    119|      }
_ZN3glz4repe14write_responseITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz6nestedEEEvOT0_RNS0_10state_viewE:
  605|     58|   {
  606|     58|      state.out.reset(state.in);
  607|     58|      auto ec = state.out.template set_body<Opts>(std::forward<Value>(value));
  608|     58|      if (bool(ec)) [[unlikely]] {
  ------------------
  |  Branch (608:11): [True: 0, False: 58]
  ------------------
  609|      0|         state.out.set_error(ec, "Failed to serialize response");
  610|      0|      }
  611|     58|   }
_ZN3glz4repe16response_builder8set_bodyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERN9repe_fuzz6nestedEEENS_10error_codeEOT0_:
  413|     58|      {
  414|     58|         if (msg_) {
  ------------------
  |  Branch (414:14): [True: 0, False: 58]
  ------------------
  415|       |            // Write directly to message body
  416|      0|            auto ec = glz::write<Opts>(std::forward<T>(value), msg_->body);
  417|      0|            if (ec) {
  ------------------
  |  Branch (417:17): [True: 0, False: 0]
  ------------------
  418|      0|               return ec.ec;
  419|      0|            }
  420|       |
  421|      0|            msg_->header.ec = error_code::none;
  422|      0|            if constexpr (Opts.format == JSON) {
  423|      0|               msg_->header.body_format = body_format::JSON;
  424|       |            }
  425|       |            else if constexpr (Opts.format == BEVE) {
  426|       |               msg_->header.body_format = body_format::BEVE;
  427|       |            }
  428|       |            else {
  429|       |               msg_->header.body_format = body_format::JSON;
  430|       |            }
  431|      0|            msg_->header.query_length = 0;
  432|      0|            msg_->header.body_length = msg_->body.size();
  433|      0|            msg_->header.length = sizeof(header) + msg_->body.size();
  434|      0|            return error_code::none;
  435|      0|         }
  436|     58|         else {
  437|       |            // Serialize body to temporary buffer first (glz::write clears the buffer)
  438|     58|            std::string body_buffer;
  439|     58|            auto ec = glz::write<Opts>(std::forward<T>(value), body_buffer);
  440|     58|            if (ec) {
  ------------------
  |  Branch (440:17): [True: 0, False: 58]
  ------------------
  441|      0|               return ec.ec;
  442|      0|            }
  443|       |
  444|     58|            hdr_.ec = error_code::none;
  445|     58|            if constexpr (Opts.format == JSON) {
  446|     58|               hdr_.body_format = body_format::JSON;
  447|       |            }
  448|       |            else if constexpr (Opts.format == BEVE) {
  449|       |               hdr_.body_format = body_format::BEVE;
  450|       |            }
  451|       |            else {
  452|       |               hdr_.body_format = body_format::JSON;
  453|       |            }
  454|     58|            hdr_.query_length = 0;
  455|     58|            hdr_.body_length = body_buffer.size();
  456|     58|            hdr_.length = sizeof(header) + body_buffer.size();
  457|       |
  458|       |            // Write header then body
  459|     58|            buffer_->resize(hdr_.length);
  460|     58|            std::memcpy(buffer_->data(), &hdr_, sizeof(header));
  461|     58|            if (!body_buffer.empty()) {
  ------------------
  |  Branch (461:17): [True: 58, False: 0]
  ------------------
  462|     58|               std::memcpy(buffer_->data() + sizeof(header), body_buffer.data(), body_buffer.size());
  463|     58|            }
  464|     58|            return error_code::none;
  465|     58|         }
  466|     58|      }
_ZN3glz4repe11read_paramsITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__16vectorIiNS3_9allocatorIiEEEEEEbOT0_RNS0_10state_viewE:
  568|  13.8k|   {
  569|  13.8k|      glz::context ctx{};
  570|  13.8k|      auto body = state.in.body;
  571|  13.8k|      auto b = body.data();
  572|  13.8k|      auto e = b + body.size();
  573|  13.8k|      auto start = b;
  574|       |
  575|       |      // An empty body answers like any other failure; see the note in the message overload above.
  576|  13.8k|      if (body.empty()) [[unlikely]] {
  ------------------
  |  Branch (576:11): [True: 0, False: 13.8k]
  ------------------
  577|      0|         ctx.error = error_code::no_read_input;
  578|      0|      }
  579|  13.8k|      else {
  580|  13.8k|         glz::parse<Opts.format>::template op<is_padded_off<Opts>()>(std::forward<Value>(value), ctx, b, e);
  581|       |         // See the note in the message overload above for why glz::read's bookkeeping is repeated.
  582|  13.8k|         finalize_top_level_read<Opts>(ctx, start, b, e);
  583|  13.8k|      }
  584|       |
  585|  13.8k|      if (bool(ctx.error)) {
  ------------------
  |  Branch (585:11): [True: 13.7k, False: 80]
  ------------------
  586|       |         // A notification is a request the sender has said it will not read a reply to, so a failed
  587|       |         // read of one is reported by not answering, exactly as a successful read of one is.
  588|  13.7k|         if (state.notify()) {
  ------------------
  |  Branch (588:14): [True: 5.66k, False: 8.07k]
  ------------------
  589|  5.66k|            return false;
  590|  5.66k|         }
  591|       |
  592|  8.07k|         error_ctx ec{size_t(b - start), ctx.error, ctx.custom_error_message};
  593|  8.07k|         std::string error_message = format_error(ec, body);
  594|  8.07k|         state.out.reset(state.in);
  595|  8.07k|         state.out.set_error(ctx.error, error_message);
  596|  8.07k|         return false;
  597|  13.7k|      }
  598|       |
  599|     80|      return true;
  600|  13.8k|   }
_ZN3glz4repe14write_responseITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__16vectorIiNS3_9allocatorIiEEEEEEvOT0_RNS0_10state_viewE:
  605|     58|   {
  606|     58|      state.out.reset(state.in);
  607|     58|      auto ec = state.out.template set_body<Opts>(std::forward<Value>(value));
  608|     58|      if (bool(ec)) [[unlikely]] {
  ------------------
  |  Branch (608:11): [True: 0, False: 58]
  ------------------
  609|      0|         state.out.set_error(ec, "Failed to serialize response");
  610|      0|      }
  611|     58|   }
_ZN3glz4repe16response_builder8set_bodyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__16vectorIiNS4_9allocatorIiEEEEEENS_10error_codeEOT0_:
  413|     58|      {
  414|     58|         if (msg_) {
  ------------------
  |  Branch (414:14): [True: 0, False: 58]
  ------------------
  415|       |            // Write directly to message body
  416|      0|            auto ec = glz::write<Opts>(std::forward<T>(value), msg_->body);
  417|      0|            if (ec) {
  ------------------
  |  Branch (417:17): [True: 0, False: 0]
  ------------------
  418|      0|               return ec.ec;
  419|      0|            }
  420|       |
  421|      0|            msg_->header.ec = error_code::none;
  422|      0|            if constexpr (Opts.format == JSON) {
  423|      0|               msg_->header.body_format = body_format::JSON;
  424|       |            }
  425|       |            else if constexpr (Opts.format == BEVE) {
  426|       |               msg_->header.body_format = body_format::BEVE;
  427|       |            }
  428|       |            else {
  429|       |               msg_->header.body_format = body_format::JSON;
  430|       |            }
  431|      0|            msg_->header.query_length = 0;
  432|      0|            msg_->header.body_length = msg_->body.size();
  433|      0|            msg_->header.length = sizeof(header) + msg_->body.size();
  434|      0|            return error_code::none;
  435|      0|         }
  436|     58|         else {
  437|       |            // Serialize body to temporary buffer first (glz::write clears the buffer)
  438|     58|            std::string body_buffer;
  439|     58|            auto ec = glz::write<Opts>(std::forward<T>(value), body_buffer);
  440|     58|            if (ec) {
  ------------------
  |  Branch (440:17): [True: 0, False: 58]
  ------------------
  441|      0|               return ec.ec;
  442|      0|            }
  443|       |
  444|     58|            hdr_.ec = error_code::none;
  445|     58|            if constexpr (Opts.format == JSON) {
  446|     58|               hdr_.body_format = body_format::JSON;
  447|       |            }
  448|       |            else if constexpr (Opts.format == BEVE) {
  449|       |               hdr_.body_format = body_format::BEVE;
  450|       |            }
  451|       |            else {
  452|       |               hdr_.body_format = body_format::JSON;
  453|       |            }
  454|     58|            hdr_.query_length = 0;
  455|     58|            hdr_.body_length = body_buffer.size();
  456|     58|            hdr_.length = sizeof(header) + body_buffer.size();
  457|       |
  458|       |            // Write header then body
  459|     58|            buffer_->resize(hdr_.length);
  460|     58|            std::memcpy(buffer_->data(), &hdr_, sizeof(header));
  461|     58|            if (!body_buffer.empty()) {
  ------------------
  |  Branch (461:17): [True: 58, False: 0]
  ------------------
  462|     58|               std::memcpy(buffer_->data() + sizeof(header), body_buffer.data(), body_buffer.size());
  463|     58|            }
  464|     58|            return error_code::none;
  465|     58|         }
  466|     58|      }
_ZN3glz4repe11read_paramsITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__13mapINS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEiNS3_4lessISA_EENS8_INS3_4pairIKSA_iEEEEEEEEbOT0_RNS0_10state_viewE:
  568|  14.0k|   {
  569|  14.0k|      glz::context ctx{};
  570|  14.0k|      auto body = state.in.body;
  571|  14.0k|      auto b = body.data();
  572|  14.0k|      auto e = b + body.size();
  573|  14.0k|      auto start = b;
  574|       |
  575|       |      // An empty body answers like any other failure; see the note in the message overload above.
  576|  14.0k|      if (body.empty()) [[unlikely]] {
  ------------------
  |  Branch (576:11): [True: 0, False: 14.0k]
  ------------------
  577|      0|         ctx.error = error_code::no_read_input;
  578|      0|      }
  579|  14.0k|      else {
  580|  14.0k|         glz::parse<Opts.format>::template op<is_padded_off<Opts>()>(std::forward<Value>(value), ctx, b, e);
  581|       |         // See the note in the message overload above for why glz::read's bookkeeping is repeated.
  582|  14.0k|         finalize_top_level_read<Opts>(ctx, start, b, e);
  583|  14.0k|      }
  584|       |
  585|  14.0k|      if (bool(ctx.error)) {
  ------------------
  |  Branch (585:11): [True: 14.0k, False: 52]
  ------------------
  586|       |         // A notification is a request the sender has said it will not read a reply to, so a failed
  587|       |         // read of one is reported by not answering, exactly as a successful read of one is.
  588|  14.0k|         if (state.notify()) {
  ------------------
  |  Branch (588:14): [True: 5.67k, False: 8.36k]
  ------------------
  589|  5.67k|            return false;
  590|  5.67k|         }
  591|       |
  592|  8.36k|         error_ctx ec{size_t(b - start), ctx.error, ctx.custom_error_message};
  593|  8.36k|         std::string error_message = format_error(ec, body);
  594|  8.36k|         state.out.reset(state.in);
  595|  8.36k|         state.out.set_error(ctx.error, error_message);
  596|  8.36k|         return false;
  597|  14.0k|      }
  598|       |
  599|     52|      return true;
  600|  14.0k|   }
_ZN3glz4repe14write_responseITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__13mapINS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEiNS3_4lessISA_EENS8_INS3_4pairIKSA_iEEEEEEEEvOT0_RNS0_10state_viewE:
  605|     58|   {
  606|     58|      state.out.reset(state.in);
  607|     58|      auto ec = state.out.template set_body<Opts>(std::forward<Value>(value));
  608|     58|      if (bool(ec)) [[unlikely]] {
  ------------------
  |  Branch (608:11): [True: 0, False: 58]
  ------------------
  609|      0|         state.out.set_error(ec, "Failed to serialize response");
  610|      0|      }
  611|     58|   }
_ZN3glz4repe16response_builder8set_bodyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__13mapINS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEiNS4_4lessISB_EENS9_INS4_4pairIKSB_iEEEEEEEENS_10error_codeEOT0_:
  413|     58|      {
  414|     58|         if (msg_) {
  ------------------
  |  Branch (414:14): [True: 0, False: 58]
  ------------------
  415|       |            // Write directly to message body
  416|      0|            auto ec = glz::write<Opts>(std::forward<T>(value), msg_->body);
  417|      0|            if (ec) {
  ------------------
  |  Branch (417:17): [True: 0, False: 0]
  ------------------
  418|      0|               return ec.ec;
  419|      0|            }
  420|       |
  421|      0|            msg_->header.ec = error_code::none;
  422|      0|            if constexpr (Opts.format == JSON) {
  423|      0|               msg_->header.body_format = body_format::JSON;
  424|       |            }
  425|       |            else if constexpr (Opts.format == BEVE) {
  426|       |               msg_->header.body_format = body_format::BEVE;
  427|       |            }
  428|       |            else {
  429|       |               msg_->header.body_format = body_format::JSON;
  430|       |            }
  431|      0|            msg_->header.query_length = 0;
  432|      0|            msg_->header.body_length = msg_->body.size();
  433|      0|            msg_->header.length = sizeof(header) + msg_->body.size();
  434|      0|            return error_code::none;
  435|      0|         }
  436|     58|         else {
  437|       |            // Serialize body to temporary buffer first (glz::write clears the buffer)
  438|     58|            std::string body_buffer;
  439|     58|            auto ec = glz::write<Opts>(std::forward<T>(value), body_buffer);
  440|     58|            if (ec) {
  ------------------
  |  Branch (440:17): [True: 0, False: 58]
  ------------------
  441|      0|               return ec.ec;
  442|      0|            }
  443|       |
  444|     58|            hdr_.ec = error_code::none;
  445|     58|            if constexpr (Opts.format == JSON) {
  446|     58|               hdr_.body_format = body_format::JSON;
  447|       |            }
  448|       |            else if constexpr (Opts.format == BEVE) {
  449|       |               hdr_.body_format = body_format::BEVE;
  450|       |            }
  451|       |            else {
  452|       |               hdr_.body_format = body_format::JSON;
  453|       |            }
  454|     58|            hdr_.query_length = 0;
  455|     58|            hdr_.body_length = body_buffer.size();
  456|     58|            hdr_.length = sizeof(header) + body_buffer.size();
  457|       |
  458|       |            // Write header then body
  459|     58|            buffer_->resize(hdr_.length);
  460|     58|            std::memcpy(buffer_->data(), &hdr_, sizeof(header));
  461|     58|            if (!body_buffer.empty()) {
  ------------------
  |  Branch (461:17): [True: 58, False: 0]
  ------------------
  462|     58|               std::memcpy(buffer_->data() + sizeof(header), body_buffer.data(), body_buffer.size());
  463|     58|            }
  464|     58|            return error_code::none;
  465|     58|         }
  466|     58|      }
_ZN3glz4repe11read_paramsITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__18optionalIdEEEEbOT0_RNS0_10state_viewE:
  568|  13.7k|   {
  569|  13.7k|      glz::context ctx{};
  570|  13.7k|      auto body = state.in.body;
  571|  13.7k|      auto b = body.data();
  572|  13.7k|      auto e = b + body.size();
  573|  13.7k|      auto start = b;
  574|       |
  575|       |      // An empty body answers like any other failure; see the note in the message overload above.
  576|  13.7k|      if (body.empty()) [[unlikely]] {
  ------------------
  |  Branch (576:11): [True: 0, False: 13.7k]
  ------------------
  577|      0|         ctx.error = error_code::no_read_input;
  578|      0|      }
  579|  13.7k|      else {
  580|  13.7k|         glz::parse<Opts.format>::template op<is_padded_off<Opts>()>(std::forward<Value>(value), ctx, b, e);
  581|       |         // See the note in the message overload above for why glz::read's bookkeeping is repeated.
  582|  13.7k|         finalize_top_level_read<Opts>(ctx, start, b, e);
  583|  13.7k|      }
  584|       |
  585|  13.7k|      if (bool(ctx.error)) {
  ------------------
  |  Branch (585:11): [True: 11.9k, False: 1.87k]
  ------------------
  586|       |         // A notification is a request the sender has said it will not read a reply to, so a failed
  587|       |         // read of one is reported by not answering, exactly as a successful read of one is.
  588|  11.9k|         if (state.notify()) {
  ------------------
  |  Branch (588:14): [True: 4.96k, False: 6.95k]
  ------------------
  589|  4.96k|            return false;
  590|  4.96k|         }
  591|       |
  592|  6.95k|         error_ctx ec{size_t(b - start), ctx.error, ctx.custom_error_message};
  593|  6.95k|         std::string error_message = format_error(ec, body);
  594|  6.95k|         state.out.reset(state.in);
  595|  6.95k|         state.out.set_error(ctx.error, error_message);
  596|  6.95k|         return false;
  597|  11.9k|      }
  598|       |
  599|  1.87k|      return true;
  600|  13.7k|   }
_ZN3glz4repe14write_responseITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__18optionalIdEEEEvOT0_RNS0_10state_viewE:
  605|     58|   {
  606|     58|      state.out.reset(state.in);
  607|     58|      auto ec = state.out.template set_body<Opts>(std::forward<Value>(value));
  608|     58|      if (bool(ec)) [[unlikely]] {
  ------------------
  |  Branch (608:11): [True: 0, False: 58]
  ------------------
  609|      0|         state.out.set_error(ec, "Failed to serialize response");
  610|      0|      }
  611|     58|   }
_ZN3glz4repe16response_builder8set_bodyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__18optionalIdEEEENS_10error_codeEOT0_:
  413|     58|      {
  414|     58|         if (msg_) {
  ------------------
  |  Branch (414:14): [True: 0, False: 58]
  ------------------
  415|       |            // Write directly to message body
  416|      0|            auto ec = glz::write<Opts>(std::forward<T>(value), msg_->body);
  417|      0|            if (ec) {
  ------------------
  |  Branch (417:17): [True: 0, False: 0]
  ------------------
  418|      0|               return ec.ec;
  419|      0|            }
  420|       |
  421|      0|            msg_->header.ec = error_code::none;
  422|      0|            if constexpr (Opts.format == JSON) {
  423|      0|               msg_->header.body_format = body_format::JSON;
  424|       |            }
  425|       |            else if constexpr (Opts.format == BEVE) {
  426|       |               msg_->header.body_format = body_format::BEVE;
  427|       |            }
  428|       |            else {
  429|       |               msg_->header.body_format = body_format::JSON;
  430|       |            }
  431|      0|            msg_->header.query_length = 0;
  432|      0|            msg_->header.body_length = msg_->body.size();
  433|      0|            msg_->header.length = sizeof(header) + msg_->body.size();
  434|      0|            return error_code::none;
  435|      0|         }
  436|     58|         else {
  437|       |            // Serialize body to temporary buffer first (glz::write clears the buffer)
  438|     58|            std::string body_buffer;
  439|     58|            auto ec = glz::write<Opts>(std::forward<T>(value), body_buffer);
  440|     58|            if (ec) {
  ------------------
  |  Branch (440:17): [True: 0, False: 58]
  ------------------
  441|      0|               return ec.ec;
  442|      0|            }
  443|       |
  444|     58|            hdr_.ec = error_code::none;
  445|     58|            if constexpr (Opts.format == JSON) {
  446|     58|               hdr_.body_format = body_format::JSON;
  447|       |            }
  448|       |            else if constexpr (Opts.format == BEVE) {
  449|       |               hdr_.body_format = body_format::BEVE;
  450|       |            }
  451|       |            else {
  452|       |               hdr_.body_format = body_format::JSON;
  453|       |            }
  454|     58|            hdr_.query_length = 0;
  455|     58|            hdr_.body_length = body_buffer.size();
  456|     58|            hdr_.length = sizeof(header) + body_buffer.size();
  457|       |
  458|       |            // Write header then body
  459|     58|            buffer_->resize(hdr_.length);
  460|     58|            std::memcpy(buffer_->data(), &hdr_, sizeof(header));
  461|     58|            if (!body_buffer.empty()) {
  ------------------
  |  Branch (461:17): [True: 58, False: 0]
  ------------------
  462|     58|               std::memcpy(buffer_->data() + sizeof(header), body_buffer.data(), body_buffer.size());
  463|     58|            }
  464|     58|            return error_code::none;
  465|     58|         }
  466|     58|      }
_ZN3glz4repe11read_paramsITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__17variantIJNS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN9repe_fuzz6amountEEEEEEbOT0_RNS0_10state_viewE:
  568|  13.8k|   {
  569|  13.8k|      glz::context ctx{};
  570|  13.8k|      auto body = state.in.body;
  571|  13.8k|      auto b = body.data();
  572|  13.8k|      auto e = b + body.size();
  573|  13.8k|      auto start = b;
  574|       |
  575|       |      // An empty body answers like any other failure; see the note in the message overload above.
  576|  13.8k|      if (body.empty()) [[unlikely]] {
  ------------------
  |  Branch (576:11): [True: 0, False: 13.8k]
  ------------------
  577|      0|         ctx.error = error_code::no_read_input;
  578|      0|      }
  579|  13.8k|      else {
  580|  13.8k|         glz::parse<Opts.format>::template op<is_padded_off<Opts>()>(std::forward<Value>(value), ctx, b, e);
  581|       |         // See the note in the message overload above for why glz::read's bookkeeping is repeated.
  582|  13.8k|         finalize_top_level_read<Opts>(ctx, start, b, e);
  583|  13.8k|      }
  584|       |
  585|  13.8k|      if (bool(ctx.error)) {
  ------------------
  |  Branch (585:11): [True: 13.3k, False: 501]
  ------------------
  586|       |         // A notification is a request the sender has said it will not read a reply to, so a failed
  587|       |         // read of one is reported by not answering, exactly as a successful read of one is.
  588|  13.3k|         if (state.notify()) {
  ------------------
  |  Branch (588:14): [True: 5.46k, False: 7.84k]
  ------------------
  589|  5.46k|            return false;
  590|  5.46k|         }
  591|       |
  592|  7.84k|         error_ctx ec{size_t(b - start), ctx.error, ctx.custom_error_message};
  593|  7.84k|         std::string error_message = format_error(ec, body);
  594|  7.84k|         state.out.reset(state.in);
  595|  7.84k|         state.out.set_error(ctx.error, error_message);
  596|  7.84k|         return false;
  597|  13.3k|      }
  598|       |
  599|    501|      return true;
  600|  13.8k|   }
_ZN3glz4repe14write_responseITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__17variantIJNS3_12basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEN9repe_fuzz6amountEEEEEEvOT0_RNS0_10state_viewE:
  605|     58|   {
  606|     58|      state.out.reset(state.in);
  607|     58|      auto ec = state.out.template set_body<Opts>(std::forward<Value>(value));
  608|     58|      if (bool(ec)) [[unlikely]] {
  ------------------
  |  Branch (608:11): [True: 0, False: 58]
  ------------------
  609|      0|         state.out.set_error(ec, "Failed to serialize response");
  610|      0|      }
  611|     58|   }
_ZN3glz4repe16response_builder8set_bodyITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__17variantIJNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN9repe_fuzz6amountEEEEEENS_10error_codeEOT0_:
  413|     58|      {
  414|     58|         if (msg_) {
  ------------------
  |  Branch (414:14): [True: 0, False: 58]
  ------------------
  415|       |            // Write directly to message body
  416|      0|            auto ec = glz::write<Opts>(std::forward<T>(value), msg_->body);
  417|      0|            if (ec) {
  ------------------
  |  Branch (417:17): [True: 0, False: 0]
  ------------------
  418|      0|               return ec.ec;
  419|      0|            }
  420|       |
  421|      0|            msg_->header.ec = error_code::none;
  422|      0|            if constexpr (Opts.format == JSON) {
  423|      0|               msg_->header.body_format = body_format::JSON;
  424|       |            }
  425|       |            else if constexpr (Opts.format == BEVE) {
  426|       |               msg_->header.body_format = body_format::BEVE;
  427|       |            }
  428|       |            else {
  429|       |               msg_->header.body_format = body_format::JSON;
  430|       |            }
  431|      0|            msg_->header.query_length = 0;
  432|      0|            msg_->header.body_length = msg_->body.size();
  433|      0|            msg_->header.length = sizeof(header) + msg_->body.size();
  434|      0|            return error_code::none;
  435|      0|         }
  436|     58|         else {
  437|       |            // Serialize body to temporary buffer first (glz::write clears the buffer)
  438|     58|            std::string body_buffer;
  439|     58|            auto ec = glz::write<Opts>(std::forward<T>(value), body_buffer);
  440|     58|            if (ec) {
  ------------------
  |  Branch (440:17): [True: 0, False: 58]
  ------------------
  441|      0|               return ec.ec;
  442|      0|            }
  443|       |
  444|     58|            hdr_.ec = error_code::none;
  445|     58|            if constexpr (Opts.format == JSON) {
  446|     58|               hdr_.body_format = body_format::JSON;
  447|       |            }
  448|       |            else if constexpr (Opts.format == BEVE) {
  449|       |               hdr_.body_format = body_format::BEVE;
  450|       |            }
  451|       |            else {
  452|       |               hdr_.body_format = body_format::JSON;
  453|       |            }
  454|     58|            hdr_.query_length = 0;
  455|     58|            hdr_.body_length = body_buffer.size();
  456|     58|            hdr_.length = sizeof(header) + body_buffer.size();
  457|       |
  458|       |            // Write header then body
  459|     58|            buffer_->resize(hdr_.length);
  460|     58|            std::memcpy(buffer_->data(), &hdr_, sizeof(header));
  461|     58|            if (!body_buffer.empty()) {
  ------------------
  |  Branch (461:17): [True: 58, False: 0]
  ------------------
  462|     58|               std::memcpy(buffer_->data() + sizeof(header), body_buffer.data(), body_buffer.size());
  463|     58|            }
  464|     58|            return error_code::none;
  465|     58|         }
  466|     58|      }
_ZN3glz4repe11read_paramsITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERNSt3__16vectorIdNS3_9allocatorIdEEEEEEbOT0_RNS0_10state_viewE:
  568|  13.9k|   {
  569|  13.9k|      glz::context ctx{};
  570|  13.9k|      auto body = state.in.body;
  571|  13.9k|      auto b = body.data();
  572|  13.9k|      auto e = b + body.size();
  573|  13.9k|      auto start = b;
  574|       |
  575|       |      // An empty body answers like any other failure; see the note in the message overload above.
  576|  13.9k|      if (body.empty()) [[unlikely]] {
  ------------------
  |  Branch (576:11): [True: 109, False: 13.8k]
  ------------------
  577|    109|         ctx.error = error_code::no_read_input;
  578|    109|      }
  579|  13.8k|      else {
  580|  13.8k|         glz::parse<Opts.format>::template op<is_padded_off<Opts>()>(std::forward<Value>(value), ctx, b, e);
  581|       |         // See the note in the message overload above for why glz::read's bookkeeping is repeated.
  582|  13.8k|         finalize_top_level_read<Opts>(ctx, start, b, e);
  583|  13.8k|      }
  584|       |
  585|  13.9k|      if (bool(ctx.error)) {
  ------------------
  |  Branch (585:11): [True: 13.4k, False: 485]
  ------------------
  586|       |         // A notification is a request the sender has said it will not read a reply to, so a failed
  587|       |         // read of one is reported by not answering, exactly as a successful read of one is.
  588|  13.4k|         if (state.notify()) {
  ------------------
  |  Branch (588:14): [True: 5.70k, False: 7.72k]
  ------------------
  589|  5.70k|            return false;
  590|  5.70k|         }
  591|       |
  592|  7.72k|         error_ctx ec{size_t(b - start), ctx.error, ctx.custom_error_message};
  593|  7.72k|         std::string error_message = format_error(ec, body);
  594|  7.72k|         state.out.reset(state.in);
  595|  7.72k|         state.out.set_error(ctx.error, error_message);
  596|  7.72k|         return false;
  597|  13.4k|      }
  598|       |
  599|    485|      return true;
  600|  13.9k|   }
_ZN3glz4repe16response_builderC2ERNSt3__112basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEE:
  347|   335k|      explicit response_builder(std::string& buffer) noexcept : buffer_(&buffer) {}
_ZNK3glz4repe12parse_resultcvbEv:
  268|   335k|      [[nodiscard]] explicit operator bool() const noexcept { return ec == error_code::none; }
_ZN3glz4repe13parse_requestENSt3__14spanIKcLm18446744073709551615EEE:
  277|   530k|   {
  278|   530k|      parse_result result{};
  279|       |
  280|   530k|      if (buffer.size() < sizeof(header)) {
  ------------------
  |  Branch (280:11): [True: 19.9k, False: 510k]
  ------------------
  281|  19.9k|         result.ec = error_code::invalid_header;
  282|  19.9k|         return result;
  283|  19.9k|      }
  284|       |
  285|       |      // Copy header via memcpy for alignment safety (48 bytes, ~2-5ns)
  286|   510k|      std::memcpy(&result.request.hdr, buffer.data(), sizeof(header));
  287|       |
  288|   510k|      if (result.request.hdr.spec != repe_magic) {
  ------------------
  |  Branch (288:11): [True: 7.18k, False: 503k]
  ------------------
  289|  7.18k|         result.ec = error_code::invalid_header;
  290|  7.18k|         return result;
  291|  7.18k|      }
  292|       |
  293|   503k|      if (result.request.hdr.version != 1) {
  ------------------
  |  Branch (293:11): [True: 28, False: 503k]
  ------------------
  294|     28|         result.ec = error_code::version_mismatch;
  295|     28|         return result;
  296|     28|      }
  297|       |
  298|   503k|      const auto& hdr = result.request.hdr;
  299|   503k|      uint64_t expected_length{};
  300|   503k|      if (!checked_message_length(hdr, expected_length)) {
  ------------------
  |  Branch (300:11): [True: 158, False: 503k]
  ------------------
  301|    158|         result.ec = error_code::invalid_header;
  302|    158|         return result;
  303|    158|      }
  304|       |
  305|       |      // Validate header.length field matches expected value
  306|   503k|      if (hdr.length != expected_length) {
  ------------------
  |  Branch (306:11): [True: 498, False: 502k]
  ------------------
  307|    498|         result.ec = error_code::invalid_header;
  308|    498|         return result;
  309|    498|      }
  310|       |
  311|   502k|      if (uint64_t(buffer.size()) < expected_length) {
  ------------------
  |  Branch (311:11): [True: 56, False: 502k]
  ------------------
  312|     56|         result.ec = error_code::invalid_body;
  313|     56|         return result;
  314|     56|      }
  315|       |
  316|       |      // Set up views into the original buffer
  317|   502k|      result.request.query = {buffer.data() + sizeof(header), static_cast<size_t>(hdr.query_length)};
  318|   502k|      result.request.body = {buffer.data() + sizeof(header) + hdr.query_length, static_cast<size_t>(hdr.body_length)};
  319|   502k|      result.ec = error_code::none;
  320|       |
  321|   502k|      return result;
  322|   502k|   }

_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE17register_endpointIN9repe_fuzz10member_apiENS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNSt3__117basic_string_viewIcNS8_11char_traitsIcEEEERT_RT0_:
   27|   321k|      {
   28|   321k|         reg.endpoints[path] = [&value](repe::state_view& state) mutable {
   29|   321k|            if (state.has_body()) {
   30|   321k|               if (!read_params<Opts>(value, state)) {
   31|   321k|                  return;
   32|   321k|               }
   33|   321k|            }
   34|       |
   35|   321k|            if (state.notify()) {
   36|   321k|               return;
   37|   321k|            }
   38|       |
   39|   321k|            if (not state.has_body()) {
   40|   321k|               write_response<Opts>(value, state);
   41|   321k|            }
   42|   321k|            else {
   43|   321k|               write_response<Opts>(state);
   44|   321k|            }
   45|   321k|         };
   46|   321k|      }
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE26register_variable_endpointIiNS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNSt3__117basic_string_viewIcNS6_11char_traitsIcEEEERT_RT0_:
  151|   993k|      {
  152|   993k|         reg.endpoints[path] = [&var](repe::state_view& state) mutable {
  153|   993k|            if (state.has_body()) {
  154|   993k|               if (!read_params<Opts>(var, state)) {
  155|   993k|                  return;
  156|   993k|               }
  157|   993k|            }
  158|       |
  159|   993k|            if (state.notify()) {
  160|   993k|               return;
  161|   993k|            }
  162|       |
  163|   993k|            if (not state.has_body()) {
  164|   993k|               write_response<Opts>(var, state);
  165|   993k|            }
  166|   993k|            else {
  167|   993k|               write_response<Opts>(state);
  168|   993k|            }
  169|   993k|         };
  170|   993k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE26register_variable_endpointIiNS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNSt3__117basic_string_viewIcNS6_11char_traitsIcEEEERT_RT0_ENUlRNS_4repe10state_viewEE_clESH_:
  152|  27.7k|         reg.endpoints[path] = [&var](repe::state_view& state) mutable {
  153|  27.7k|            if (state.has_body()) {
  ------------------
  |  Branch (153:17): [True: 27.5k, False: 216]
  ------------------
  154|  27.5k|               if (!read_params<Opts>(var, state)) {
  ------------------
  |  Branch (154:20): [True: 26.7k, False: 777]
  ------------------
  155|  26.7k|                  return;
  156|  26.7k|               }
  157|  27.5k|            }
  158|       |
  159|    993|            if (state.notify()) {
  ------------------
  |  Branch (159:17): [True: 244, False: 749]
  ------------------
  160|    244|               return;
  161|    244|            }
  162|       |
  163|    749|            if (not state.has_body()) {
  ------------------
  |  Branch (163:17): [True: 115, False: 634]
  ------------------
  164|    115|               write_response<Opts>(var, state);
  165|    115|            }
  166|    634|            else {
  167|    634|               write_response<Opts>(state);
  168|    634|            }
  169|    749|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE45register_member_function_with_params_endpointIN9repe_fuzz10member_apiEMS5_FiiEiiNS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNSt3__117basic_string_viewIcNSA_11char_traitsIcEEEERT_T0_RT3_:
  198|   321k|      {
  199|   321k|         reg.endpoints[path] = [&value, func](repe::state_view& state) mutable {
  200|   321k|            static thread_local Input input{};
  201|   321k|            input = {}; // reset to avoid stale optional/variant fields across calls
  202|   321k|            if (state.has_body()) {
  203|   321k|               if (!read_params<Opts>(input, state)) {
  204|   321k|                  return;
  205|   321k|               }
  206|   321k|            }
  207|       |
  208|   321k|            if constexpr (std::same_as<Ret, void>) {
  209|   321k|               (value.*func)(input);
  210|       |
  211|   321k|               if (state.notify()) {
  212|   321k|                  return;
  213|   321k|               }
  214|       |
  215|   321k|               write_response<Opts>(state);
  216|   321k|            }
  217|   321k|            else {
  218|   321k|               if (state.notify()) {
  219|   321k|                  std::ignore = (value.*func)(input);
  220|   321k|                  return;
  221|   321k|               }
  222|       |
  223|   321k|               write_response<Opts>((value.*func)(input), state);
  224|   321k|            }
  225|   321k|         };
  226|   321k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE45register_member_function_with_params_endpointIN9repe_fuzz10member_apiEMS5_FiiEiiNS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNSt3__117basic_string_viewIcNSA_11char_traitsIcEEEERT_T0_RT3_ENUlRNS_4repe10state_viewEE_clESM_:
  199|  13.8k|         reg.endpoints[path] = [&value, func](repe::state_view& state) mutable {
  200|  13.8k|            static thread_local Input input{};
  201|  13.8k|            input = {}; // reset to avoid stale optional/variant fields across calls
  202|  13.8k|            if (state.has_body()) {
  ------------------
  |  Branch (202:17): [True: 13.7k, False: 109]
  ------------------
  203|  13.7k|               if (!read_params<Opts>(input, state)) {
  ------------------
  |  Branch (203:20): [True: 13.3k, False: 388]
  ------------------
  204|  13.3k|                  return;
  205|  13.3k|               }
  206|  13.7k|            }
  207|       |
  208|       |            if constexpr (std::same_as<Ret, void>) {
  209|       |               (value.*func)(input);
  210|       |
  211|       |               if (state.notify()) {
  212|       |                  return;
  213|       |               }
  214|       |
  215|       |               write_response<Opts>(state);
  216|       |            }
  217|    497|            else {
  218|    497|               if (state.notify()) {
  ------------------
  |  Branch (218:20): [True: 122, False: 375]
  ------------------
  219|    122|                  std::ignore = (value.*func)(input);
  220|    122|                  return;
  221|    122|               }
  222|       |
  223|    375|               write_response<Opts>((value.*func)(input), state);
  224|    375|            }
  225|    497|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE33register_member_function_endpointIN9repe_fuzz10member_apiEMS5_FvvEvNS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNSt3__117basic_string_viewIcNSA_11char_traitsIcEEEERT_T0_RT2_:
  174|   321k|      {
  175|   321k|         reg.endpoints[path] = [&value, func](repe::state_view& state) mutable {
  176|   321k|            if constexpr (std::same_as<Ret, void>) {
  177|   321k|               (value.*func)();
  178|       |
  179|   321k|               if (state.notify()) {
  180|   321k|                  return;
  181|   321k|               }
  182|       |
  183|   321k|               write_response<Opts>(state);
  184|   321k|            }
  185|   321k|            else {
  186|   321k|               if (state.notify()) {
  187|   321k|                  std::ignore = (value.*func)();
  188|   321k|                  return;
  189|   321k|               }
  190|       |
  191|   321k|               write_response<Opts>((value.*func)(), state);
  192|   321k|            }
  193|   321k|         };
  194|   321k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE33register_member_function_endpointIN9repe_fuzz10member_apiEMS5_FvvEvNS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNSt3__117basic_string_viewIcNSA_11char_traitsIcEEEERT_T0_RT2_ENUlRNS_4repe10state_viewEE_clESM_:
  175|  13.8k|         reg.endpoints[path] = [&value, func](repe::state_view& state) mutable {
  176|  13.8k|            if constexpr (std::same_as<Ret, void>) {
  177|  13.8k|               (value.*func)();
  178|       |
  179|  13.8k|               if (state.notify()) {
  ------------------
  |  Branch (179:20): [True: 5.70k, False: 8.18k]
  ------------------
  180|  5.70k|                  return;
  181|  5.70k|               }
  182|       |
  183|  8.18k|               write_response<Opts>(state);
  184|       |            }
  185|       |            else {
  186|       |               if (state.notify()) {
  187|       |                  std::ignore = (value.*func)();
  188|       |                  return;
  189|       |               }
  190|       |
  191|       |               write_response<Opts>((value.*func)(), state);
  192|       |            }
  193|  13.8k|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE45register_member_function_with_params_endpointIN9repe_fuzz10member_apiEMS5_FNS4_5pointERKS6_ES6_S6_NS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNSt3__117basic_string_viewIcNSD_11char_traitsIcEEEERT_T0_RT3_:
  198|   321k|      {
  199|   321k|         reg.endpoints[path] = [&value, func](repe::state_view& state) mutable {
  200|   321k|            static thread_local Input input{};
  201|   321k|            input = {}; // reset to avoid stale optional/variant fields across calls
  202|   321k|            if (state.has_body()) {
  203|   321k|               if (!read_params<Opts>(input, state)) {
  204|   321k|                  return;
  205|   321k|               }
  206|   321k|            }
  207|       |
  208|   321k|            if constexpr (std::same_as<Ret, void>) {
  209|   321k|               (value.*func)(input);
  210|       |
  211|   321k|               if (state.notify()) {
  212|   321k|                  return;
  213|   321k|               }
  214|       |
  215|   321k|               write_response<Opts>(state);
  216|   321k|            }
  217|   321k|            else {
  218|   321k|               if (state.notify()) {
  219|   321k|                  std::ignore = (value.*func)(input);
  220|   321k|                  return;
  221|   321k|               }
  222|       |
  223|   321k|               write_response<Opts>((value.*func)(input), state);
  224|   321k|            }
  225|   321k|         };
  226|   321k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE45register_member_function_with_params_endpointIN9repe_fuzz10member_apiEMS5_FNS4_5pointERKS6_ES6_S6_NS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNSt3__117basic_string_viewIcNSD_11char_traitsIcEEEERT_T0_RT3_ENUlRNS_4repe10state_viewEE_clESP_:
  199|  13.9k|         reg.endpoints[path] = [&value, func](repe::state_view& state) mutable {
  200|  13.9k|            static thread_local Input input{};
  201|  13.9k|            input = {}; // reset to avoid stale optional/variant fields across calls
  202|  13.9k|            if (state.has_body()) {
  ------------------
  |  Branch (202:17): [True: 13.8k, False: 109]
  ------------------
  203|  13.8k|               if (!read_params<Opts>(input, state)) {
  ------------------
  |  Branch (203:20): [True: 13.7k, False: 68]
  ------------------
  204|  13.7k|                  return;
  205|  13.7k|               }
  206|  13.8k|            }
  207|       |
  208|       |            if constexpr (std::same_as<Ret, void>) {
  209|       |               (value.*func)(input);
  210|       |
  211|       |               if (state.notify()) {
  212|       |                  return;
  213|       |               }
  214|       |
  215|       |               write_response<Opts>(state);
  216|       |            }
  217|    177|            else {
  218|    177|               if (state.notify()) {
  ------------------
  |  Branch (218:20): [True: 57, False: 120]
  ------------------
  219|     57|                  std::ignore = (value.*func)(input);
  220|     57|                  return;
  221|     57|               }
  222|       |
  223|    120|               write_response<Opts>((value.*func)(input), state);
  224|    120|            }
  225|    177|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE45register_member_function_with_params_endpointIN9repe_fuzz10member_apiEMS5_FNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEERKNS4_6nestedEESD_SC_NS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS6_17basic_string_viewIcS9_EERT_T0_RT3_:
  198|   321k|      {
  199|   321k|         reg.endpoints[path] = [&value, func](repe::state_view& state) mutable {
  200|   321k|            static thread_local Input input{};
  201|   321k|            input = {}; // reset to avoid stale optional/variant fields across calls
  202|   321k|            if (state.has_body()) {
  203|   321k|               if (!read_params<Opts>(input, state)) {
  204|   321k|                  return;
  205|   321k|               }
  206|   321k|            }
  207|       |
  208|   321k|            if constexpr (std::same_as<Ret, void>) {
  209|   321k|               (value.*func)(input);
  210|       |
  211|   321k|               if (state.notify()) {
  212|   321k|                  return;
  213|   321k|               }
  214|       |
  215|   321k|               write_response<Opts>(state);
  216|   321k|            }
  217|   321k|            else {
  218|   321k|               if (state.notify()) {
  219|   321k|                  std::ignore = (value.*func)(input);
  220|   321k|                  return;
  221|   321k|               }
  222|       |
  223|   321k|               write_response<Opts>((value.*func)(input), state);
  224|   321k|            }
  225|   321k|         };
  226|   321k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE45register_member_function_with_params_endpointIN9repe_fuzz10member_apiEMS5_FNSt3__112basic_stringIcNS6_11char_traitsIcEENS6_9allocatorIcEEEERKNS4_6nestedEESD_SC_NS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS6_17basic_string_viewIcS9_EERT_T0_RT3_ENUlRNS_4repe10state_viewEE_clEST_:
  199|  14.1k|         reg.endpoints[path] = [&value, func](repe::state_view& state) mutable {
  200|  14.1k|            static thread_local Input input{};
  201|  14.1k|            input = {}; // reset to avoid stale optional/variant fields across calls
  202|  14.1k|            if (state.has_body()) {
  ------------------
  |  Branch (202:17): [True: 14.0k, False: 109]
  ------------------
  203|  14.0k|               if (!read_params<Opts>(input, state)) {
  ------------------
  |  Branch (203:20): [True: 13.8k, False: 222]
  ------------------
  204|  13.8k|                  return;
  205|  13.8k|               }
  206|  14.0k|            }
  207|       |
  208|       |            if constexpr (std::same_as<Ret, void>) {
  209|       |               (value.*func)(input);
  210|       |
  211|       |               if (state.notify()) {
  212|       |                  return;
  213|       |               }
  214|       |
  215|       |               write_response<Opts>(state);
  216|       |            }
  217|    331|            else {
  218|    331|               if (state.notify()) {
  ------------------
  |  Branch (218:20): [True: 62, False: 269]
  ------------------
  219|     62|                  std::ignore = (value.*func)(input);
  220|     62|                  return;
  221|     62|               }
  222|       |
  223|    269|               write_response<Opts>((value.*func)(input), state);
  224|    269|            }
  225|    331|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE17register_endpointIN9repe_fuzz8fuzz_apiENS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNSt3__117basic_string_viewIcNS8_11char_traitsIcEEEERT_RT0_:
   27|   335k|      {
   28|   335k|         reg.endpoints[path] = [&value](repe::state_view& state) mutable {
   29|   335k|            if (state.has_body()) {
   30|   335k|               if (!read_params<Opts>(value, state)) {
   31|   335k|                  return;
   32|   335k|               }
   33|   335k|            }
   34|       |
   35|   335k|            if (state.notify()) {
   36|   335k|               return;
   37|   335k|            }
   38|       |
   39|   335k|            if (not state.has_body()) {
   40|   335k|               write_response<Opts>(value, state);
   41|   335k|            }
   42|   335k|            else {
   43|   335k|               write_response<Opts>(state);
   44|   335k|            }
   45|   335k|         };
   46|   335k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE17register_endpointIN9repe_fuzz8fuzz_apiENS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNSt3__117basic_string_viewIcNS8_11char_traitsIcEEEERT_RT0_ENUlRNS_4repe10state_viewEE_clESJ_:
   28|  24.2k|         reg.endpoints[path] = [&value](repe::state_view& state) mutable {
   29|  24.2k|            if (state.has_body()) {
  ------------------
  |  Branch (29:17): [True: 24.1k, False: 115]
  ------------------
   30|  24.1k|               if (!read_params<Opts>(value, state)) {
  ------------------
  |  Branch (30:20): [True: 24.0k, False: 53]
  ------------------
   31|  24.0k|                  return;
   32|  24.0k|               }
   33|  24.1k|            }
   34|       |
   35|    168|            if (state.notify()) {
  ------------------
  |  Branch (35:17): [True: 61, False: 107]
  ------------------
   36|     61|               return;
   37|     61|            }
   38|       |
   39|    107|            if (not state.has_body()) {
  ------------------
  |  Branch (39:17): [True: 62, False: 45]
  ------------------
   40|     62|               write_response<Opts>(value, state);
   41|     62|            }
   42|     45|            else {
   43|     45|               write_response<Opts>(state);
   44|     45|            }
   45|    107|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE26register_variable_endpointINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcS7_EERT_RT0_:
  151|   671k|      {
  152|   671k|         reg.endpoints[path] = [&var](repe::state_view& state) mutable {
  153|   671k|            if (state.has_body()) {
  154|   671k|               if (!read_params<Opts>(var, state)) {
  155|   671k|                  return;
  156|   671k|               }
  157|   671k|            }
  158|       |
  159|   671k|            if (state.notify()) {
  160|   671k|               return;
  161|   671k|            }
  162|       |
  163|   671k|            if (not state.has_body()) {
  164|   671k|               write_response<Opts>(var, state);
  165|   671k|            }
  166|   671k|            else {
  167|   671k|               write_response<Opts>(state);
  168|   671k|            }
  169|   671k|         };
  170|   671k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE26register_variable_endpointINSt3__112basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcS7_EERT_RT0_ENUlRNS_4repe10state_viewEE_clESL_:
  152|  27.9k|         reg.endpoints[path] = [&var](repe::state_view& state) mutable {
  153|  27.9k|            if (state.has_body()) {
  ------------------
  |  Branch (153:17): [True: 27.6k, False: 216]
  ------------------
  154|  27.6k|               if (!read_params<Opts>(var, state)) {
  ------------------
  |  Branch (154:20): [True: 26.7k, False: 975]
  ------------------
  155|  26.7k|                  return;
  156|  26.7k|               }
  157|  27.6k|            }
  158|       |
  159|  1.19k|            if (state.notify()) {
  ------------------
  |  Branch (159:17): [True: 548, False: 643]
  ------------------
  160|    548|               return;
  161|    548|            }
  162|       |
  163|    643|            if (not state.has_body()) {
  ------------------
  |  Branch (163:17): [True: 115, False: 528]
  ------------------
  164|    115|               write_response<Opts>(var, state);
  165|    115|            }
  166|    528|            else {
  167|    528|               write_response<Opts>(state);
  168|    528|            }
  169|    643|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE26register_variable_endpointIdNS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNSt3__117basic_string_viewIcNS6_11char_traitsIcEEEERT_RT0_:
  151|   671k|      {
  152|   671k|         reg.endpoints[path] = [&var](repe::state_view& state) mutable {
  153|   671k|            if (state.has_body()) {
  154|   671k|               if (!read_params<Opts>(var, state)) {
  155|   671k|                  return;
  156|   671k|               }
  157|   671k|            }
  158|       |
  159|   671k|            if (state.notify()) {
  160|   671k|               return;
  161|   671k|            }
  162|       |
  163|   671k|            if (not state.has_body()) {
  164|   671k|               write_response<Opts>(var, state);
  165|   671k|            }
  166|   671k|            else {
  167|   671k|               write_response<Opts>(state);
  168|   671k|            }
  169|   671k|         };
  170|   671k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE26register_variable_endpointIdNS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNSt3__117basic_string_viewIcNS6_11char_traitsIcEEEERT_RT0_ENUlRNS_4repe10state_viewEE_clESH_:
  152|  13.8k|         reg.endpoints[path] = [&var](repe::state_view& state) mutable {
  153|  13.8k|            if (state.has_body()) {
  ------------------
  |  Branch (153:17): [True: 13.7k, False: 109]
  ------------------
  154|  13.7k|               if (!read_params<Opts>(var, state)) {
  ------------------
  |  Branch (154:20): [True: 11.9k, False: 1.86k]
  ------------------
  155|  11.9k|                  return;
  156|  11.9k|               }
  157|  13.7k|            }
  158|       |
  159|  1.97k|            if (state.notify()) {
  ------------------
  |  Branch (159:17): [True: 748, False: 1.22k]
  ------------------
  160|    748|               return;
  161|    748|            }
  162|       |
  163|  1.22k|            if (not state.has_body()) {
  ------------------
  |  Branch (163:17): [True: 58, False: 1.17k]
  ------------------
  164|     58|               write_response<Opts>(var, state);
  165|     58|            }
  166|  1.17k|            else {
  167|  1.17k|               write_response<Opts>(state);
  168|  1.17k|            }
  169|  1.22k|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE24register_object_endpointIN9repe_fuzz5pointENS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNSt3__117basic_string_viewIcNS8_11char_traitsIcEEEERT_RT0_:
  105|   335k|      {
  106|   335k|         reg.endpoints[path] = [&obj](repe::state_view& state) mutable {
  107|   335k|            if (state.has_body()) {
  108|   335k|               if (!read_params<Opts>(obj, state)) {
  109|   335k|                  return;
  110|   335k|               }
  111|   335k|            }
  112|       |
  113|   335k|            if (state.notify()) {
  114|   335k|               return;
  115|   335k|            }
  116|       |
  117|   335k|            if (not state.has_body()) {
  118|   335k|               write_response<Opts>(obj, state);
  119|   335k|            }
  120|   335k|            else {
  121|   335k|               write_response<Opts>(state);
  122|   335k|            }
  123|   335k|         };
  124|   335k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE24register_object_endpointIN9repe_fuzz5pointENS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNSt3__117basic_string_viewIcNS8_11char_traitsIcEEEERT_RT0_ENUlRNS_4repe10state_viewEE_clESJ_:
  106|  13.9k|         reg.endpoints[path] = [&obj](repe::state_view& state) mutable {
  107|  13.9k|            if (state.has_body()) {
  ------------------
  |  Branch (107:17): [True: 13.8k, False: 109]
  ------------------
  108|  13.8k|               if (!read_params<Opts>(obj, state)) {
  ------------------
  |  Branch (108:20): [True: 13.7k, False: 67]
  ------------------
  109|  13.7k|                  return;
  110|  13.7k|               }
  111|  13.8k|            }
  112|       |
  113|    176|            if (state.notify()) {
  ------------------
  |  Branch (113:17): [True: 57, False: 119]
  ------------------
  114|     57|               return;
  115|     57|            }
  116|       |
  117|    119|            if (not state.has_body()) {
  ------------------
  |  Branch (117:17): [True: 58, False: 61]
  ------------------
  118|     58|               write_response<Opts>(obj, state);
  119|     58|            }
  120|     61|            else {
  121|     61|               write_response<Opts>(state);
  122|     61|            }
  123|    119|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE24register_object_endpointIN9repe_fuzz6nestedENS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNSt3__117basic_string_viewIcNS8_11char_traitsIcEEEERT_RT0_:
  105|   335k|      {
  106|   335k|         reg.endpoints[path] = [&obj](repe::state_view& state) mutable {
  107|   335k|            if (state.has_body()) {
  108|   335k|               if (!read_params<Opts>(obj, state)) {
  109|   335k|                  return;
  110|   335k|               }
  111|   335k|            }
  112|       |
  113|   335k|            if (state.notify()) {
  114|   335k|               return;
  115|   335k|            }
  116|       |
  117|   335k|            if (not state.has_body()) {
  118|   335k|               write_response<Opts>(obj, state);
  119|   335k|            }
  120|   335k|            else {
  121|   335k|               write_response<Opts>(state);
  122|   335k|            }
  123|   335k|         };
  124|   335k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE24register_object_endpointIN9repe_fuzz6nestedENS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNSt3__117basic_string_viewIcNS8_11char_traitsIcEEEERT_RT0_ENUlRNS_4repe10state_viewEE_clESJ_:
  106|  13.8k|         reg.endpoints[path] = [&obj](repe::state_view& state) mutable {
  107|  13.8k|            if (state.has_body()) {
  ------------------
  |  Branch (107:17): [True: 13.7k, False: 109]
  ------------------
  108|  13.7k|               if (!read_params<Opts>(obj, state)) {
  ------------------
  |  Branch (108:20): [True: 13.6k, False: 176]
  ------------------
  109|  13.6k|                  return;
  110|  13.6k|               }
  111|  13.7k|            }
  112|       |
  113|    285|            if (state.notify()) {
  ------------------
  |  Branch (113:17): [True: 60, False: 225]
  ------------------
  114|     60|               return;
  115|     60|            }
  116|       |
  117|    225|            if (not state.has_body()) {
  ------------------
  |  Branch (117:17): [True: 58, False: 167]
  ------------------
  118|     58|               write_response<Opts>(obj, state);
  119|     58|            }
  120|    167|            else {
  121|    167|               write_response<Opts>(state);
  122|    167|            }
  123|    225|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE26register_variable_endpointINSt3__16vectorIiNS4_9allocatorIiEEEENS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcNS4_11char_traitsIcEEEERT_RT0_:
  151|   335k|      {
  152|   335k|         reg.endpoints[path] = [&var](repe::state_view& state) mutable {
  153|   335k|            if (state.has_body()) {
  154|   335k|               if (!read_params<Opts>(var, state)) {
  155|   335k|                  return;
  156|   335k|               }
  157|   335k|            }
  158|       |
  159|   335k|            if (state.notify()) {
  160|   335k|               return;
  161|   335k|            }
  162|       |
  163|   335k|            if (not state.has_body()) {
  164|   335k|               write_response<Opts>(var, state);
  165|   335k|            }
  166|   335k|            else {
  167|   335k|               write_response<Opts>(state);
  168|   335k|            }
  169|   335k|         };
  170|   335k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE26register_variable_endpointINSt3__16vectorIiNS4_9allocatorIiEEEENS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcNS4_11char_traitsIcEEEERT_RT0_ENUlRNS_4repe10state_viewEE_clESL_:
  152|  13.9k|         reg.endpoints[path] = [&var](repe::state_view& state) mutable {
  153|  13.9k|            if (state.has_body()) {
  ------------------
  |  Branch (153:17): [True: 13.8k, False: 109]
  ------------------
  154|  13.8k|               if (!read_params<Opts>(var, state)) {
  ------------------
  |  Branch (154:20): [True: 13.7k, False: 80]
  ------------------
  155|  13.7k|                  return;
  156|  13.7k|               }
  157|  13.8k|            }
  158|       |
  159|    189|            if (state.notify()) {
  ------------------
  |  Branch (159:17): [True: 55, False: 134]
  ------------------
  160|     55|               return;
  161|     55|            }
  162|       |
  163|    134|            if (not state.has_body()) {
  ------------------
  |  Branch (163:17): [True: 58, False: 76]
  ------------------
  164|     58|               write_response<Opts>(var, state);
  165|     58|            }
  166|     76|            else {
  167|     76|               write_response<Opts>(state);
  168|     76|            }
  169|    134|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE26register_variable_endpointINSt3__13mapINS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEiNS4_4lessISB_EENS9_INS4_4pairIKSB_iEEEEEENS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcS8_EERT_RT0_:
  151|   335k|      {
  152|   335k|         reg.endpoints[path] = [&var](repe::state_view& state) mutable {
  153|   335k|            if (state.has_body()) {
  154|   335k|               if (!read_params<Opts>(var, state)) {
  155|   335k|                  return;
  156|   335k|               }
  157|   335k|            }
  158|       |
  159|   335k|            if (state.notify()) {
  160|   335k|               return;
  161|   335k|            }
  162|       |
  163|   335k|            if (not state.has_body()) {
  164|   335k|               write_response<Opts>(var, state);
  165|   335k|            }
  166|   335k|            else {
  167|   335k|               write_response<Opts>(state);
  168|   335k|            }
  169|   335k|         };
  170|   335k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE26register_variable_endpointINSt3__13mapINS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEiNS4_4lessISB_EENS9_INS4_4pairIKSB_iEEEEEENS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcS8_EERT_RT0_ENUlRNS_4repe10state_viewEE_clEST_:
  152|  14.1k|         reg.endpoints[path] = [&var](repe::state_view& state) mutable {
  153|  14.1k|            if (state.has_body()) {
  ------------------
  |  Branch (153:17): [True: 14.0k, False: 109]
  ------------------
  154|  14.0k|               if (!read_params<Opts>(var, state)) {
  ------------------
  |  Branch (154:20): [True: 14.0k, False: 52]
  ------------------
  155|  14.0k|                  return;
  156|  14.0k|               }
  157|  14.0k|            }
  158|       |
  159|    161|            if (state.notify()) {
  ------------------
  |  Branch (159:17): [True: 63, False: 98]
  ------------------
  160|     63|               return;
  161|     63|            }
  162|       |
  163|     98|            if (not state.has_body()) {
  ------------------
  |  Branch (163:17): [True: 58, False: 40]
  ------------------
  164|     58|               write_response<Opts>(var, state);
  165|     58|            }
  166|     40|            else {
  167|     40|               write_response<Opts>(state);
  168|     40|            }
  169|     98|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE26register_variable_endpointINSt3__18optionalIdEENS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcNS4_11char_traitsIcEEEERT_RT0_:
  151|   335k|      {
  152|   335k|         reg.endpoints[path] = [&var](repe::state_view& state) mutable {
  153|   335k|            if (state.has_body()) {
  154|   335k|               if (!read_params<Opts>(var, state)) {
  155|   335k|                  return;
  156|   335k|               }
  157|   335k|            }
  158|       |
  159|   335k|            if (state.notify()) {
  160|   335k|               return;
  161|   335k|            }
  162|       |
  163|   335k|            if (not state.has_body()) {
  164|   335k|               write_response<Opts>(var, state);
  165|   335k|            }
  166|   335k|            else {
  167|   335k|               write_response<Opts>(state);
  168|   335k|            }
  169|   335k|         };
  170|   335k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE26register_variable_endpointINSt3__18optionalIdEENS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcNS4_11char_traitsIcEEEERT_RT0_ENUlRNS_4repe10state_viewEE_clESJ_:
  152|  13.9k|         reg.endpoints[path] = [&var](repe::state_view& state) mutable {
  153|  13.9k|            if (state.has_body()) {
  ------------------
  |  Branch (153:17): [True: 13.7k, False: 109]
  ------------------
  154|  13.7k|               if (!read_params<Opts>(var, state)) {
  ------------------
  |  Branch (154:20): [True: 11.9k, False: 1.87k]
  ------------------
  155|  11.9k|                  return;
  156|  11.9k|               }
  157|  13.7k|            }
  158|       |
  159|  1.98k|            if (state.notify()) {
  ------------------
  |  Branch (159:17): [True: 748, False: 1.23k]
  ------------------
  160|    748|               return;
  161|    748|            }
  162|       |
  163|  1.23k|            if (not state.has_body()) {
  ------------------
  |  Branch (163:17): [True: 58, False: 1.17k]
  ------------------
  164|     58|               write_response<Opts>(var, state);
  165|     58|            }
  166|  1.17k|            else {
  167|  1.17k|               write_response<Opts>(state);
  168|  1.17k|            }
  169|  1.23k|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE26register_variable_endpointINSt3__17variantIJNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN9repe_fuzz6amountEEEENS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcS8_EERT_RT0_:
  151|   335k|      {
  152|   335k|         reg.endpoints[path] = [&var](repe::state_view& state) mutable {
  153|   335k|            if (state.has_body()) {
  154|   335k|               if (!read_params<Opts>(var, state)) {
  155|   335k|                  return;
  156|   335k|               }
  157|   335k|            }
  158|       |
  159|   335k|            if (state.notify()) {
  160|   335k|               return;
  161|   335k|            }
  162|       |
  163|   335k|            if (not state.has_body()) {
  164|   335k|               write_response<Opts>(var, state);
  165|   335k|            }
  166|   335k|            else {
  167|   335k|               write_response<Opts>(state);
  168|   335k|            }
  169|   335k|         };
  170|   335k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE26register_variable_endpointINSt3__17variantIJNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEEN9repe_fuzz6amountEEEENS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcS8_EERT_RT0_ENUlRNS_4repe10state_viewEE_clESP_:
  152|  13.9k|         reg.endpoints[path] = [&var](repe::state_view& state) mutable {
  153|  13.9k|            if (state.has_body()) {
  ------------------
  |  Branch (153:17): [True: 13.8k, False: 108]
  ------------------
  154|  13.8k|               if (!read_params<Opts>(var, state)) {
  ------------------
  |  Branch (154:20): [True: 13.3k, False: 501]
  ------------------
  155|  13.3k|                  return;
  156|  13.3k|               }
  157|  13.8k|            }
  158|       |
  159|    609|            if (state.notify()) {
  ------------------
  |  Branch (159:17): [True: 266, False: 343]
  ------------------
  160|    266|               return;
  161|    266|            }
  162|       |
  163|    343|            if (not state.has_body()) {
  ------------------
  |  Branch (163:17): [True: 58, False: 285]
  ------------------
  164|     58|               write_response<Opts>(var, state);
  165|     58|            }
  166|    285|            else {
  167|    285|               write_response<Opts>(state);
  168|    285|            }
  169|    343|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE32register_param_function_endpointIRNSt3__18functionIFiiEEEiNS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcNS4_11char_traitsIcEEEERT_RT1_:
   73|   335k|      {
   74|   335k|         reg.endpoints[path] = [&func](repe::state_view& state) mutable {
   75|   335k|            static thread_local std::decay_t<Params> params{};
   76|   335k|            params = {}; // reset to avoid stale optional/variant fields across calls
   77|   335k|            if (!read_params<Opts>(params, state)) {
   78|   335k|               return;
   79|   335k|            }
   80|       |
   81|   335k|            using Result = std::invoke_result_t<decltype(func), Params>;
   82|       |
   83|   335k|            if (state.notify()) {
   84|   335k|               if constexpr (std::same_as<Result, void>) {
   85|   335k|                  func(params);
   86|   335k|               }
   87|   335k|               else {
   88|   335k|                  std::ignore = func(params);
   89|   335k|               }
   90|   335k|               return;
   91|   335k|            }
   92|   335k|            if constexpr (std::same_as<Result, void>) {
   93|   335k|               func(params);
   94|   335k|               write_response<Opts>(state);
   95|   335k|            }
   96|   335k|            else {
   97|   335k|               auto ret = func(params);
   98|   335k|               write_response<Opts>(ret, state);
   99|   335k|            }
  100|   335k|         };
  101|   335k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE32register_param_function_endpointIRNSt3__18functionIFiiEEEiNS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcNS4_11char_traitsIcEEEERT_RT1_ENUlRNS_4repe10state_viewEE_clESL_:
   74|  13.8k|         reg.endpoints[path] = [&func](repe::state_view& state) mutable {
   75|  13.8k|            static thread_local std::decay_t<Params> params{};
   76|  13.8k|            params = {}; // reset to avoid stale optional/variant fields across calls
   77|  13.8k|            if (!read_params<Opts>(params, state)) {
  ------------------
  |  Branch (77:17): [True: 13.5k, False: 393]
  ------------------
   78|  13.5k|               return;
   79|  13.5k|            }
   80|       |
   81|    393|            using Result = std::invoke_result_t<decltype(func), Params>;
   82|       |
   83|    393|            if (state.notify()) {
  ------------------
  |  Branch (83:17): [True: 72, False: 321]
  ------------------
   84|       |               if constexpr (std::same_as<Result, void>) {
   85|       |                  func(params);
   86|       |               }
   87|     72|               else {
   88|     72|                  std::ignore = func(params);
   89|     72|               }
   90|     72|               return;
   91|     72|            }
   92|       |            if constexpr (std::same_as<Result, void>) {
   93|       |               func(params);
   94|       |               write_response<Opts>(state);
   95|       |            }
   96|    321|            else {
   97|    321|               auto ret = func(params);
   98|    321|               write_response<Opts>(ret, state);
   99|    321|            }
  100|    321|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE32register_param_function_endpointIRNSt3__18functionIFNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERKSB_EEESD_NS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcS8_EERT_RT1_:
   73|   335k|      {
   74|   335k|         reg.endpoints[path] = [&func](repe::state_view& state) mutable {
   75|   335k|            static thread_local std::decay_t<Params> params{};
   76|   335k|            params = {}; // reset to avoid stale optional/variant fields across calls
   77|   335k|            if (!read_params<Opts>(params, state)) {
   78|   335k|               return;
   79|   335k|            }
   80|       |
   81|   335k|            using Result = std::invoke_result_t<decltype(func), Params>;
   82|       |
   83|   335k|            if (state.notify()) {
   84|   335k|               if constexpr (std::same_as<Result, void>) {
   85|   335k|                  func(params);
   86|   335k|               }
   87|   335k|               else {
   88|   335k|                  std::ignore = func(params);
   89|   335k|               }
   90|   335k|               return;
   91|   335k|            }
   92|   335k|            if constexpr (std::same_as<Result, void>) {
   93|   335k|               func(params);
   94|   335k|               write_response<Opts>(state);
   95|   335k|            }
   96|   335k|            else {
   97|   335k|               auto ret = func(params);
   98|   335k|               write_response<Opts>(ret, state);
   99|   335k|            }
  100|   335k|         };
  101|   335k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE32register_param_function_endpointIRNSt3__18functionIFNS4_12basic_stringIcNS4_11char_traitsIcEENS4_9allocatorIcEEEERKSB_EEESD_NS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcS8_EERT_RT1_ENUlRNS_4repe10state_viewEE_clESR_:
   74|  13.9k|         reg.endpoints[path] = [&func](repe::state_view& state) mutable {
   75|  13.9k|            static thread_local std::decay_t<Params> params{};
   76|  13.9k|            params = {}; // reset to avoid stale optional/variant fields across calls
   77|  13.9k|            if (!read_params<Opts>(params, state)) {
  ------------------
  |  Branch (77:17): [True: 13.4k, False: 489]
  ------------------
   78|  13.4k|               return;
   79|  13.4k|            }
   80|       |
   81|    489|            using Result = std::invoke_result_t<decltype(func), Params>;
   82|       |
   83|    489|            if (state.notify()) {
  ------------------
  |  Branch (83:17): [True: 209, False: 280]
  ------------------
   84|       |               if constexpr (std::same_as<Result, void>) {
   85|       |                  func(params);
   86|       |               }
   87|    209|               else {
   88|    209|                  std::ignore = func(params);
   89|    209|               }
   90|    209|               return;
   91|    209|            }
   92|       |            if constexpr (std::same_as<Result, void>) {
   93|       |               func(params);
   94|       |               write_response<Opts>(state);
   95|       |            }
   96|    280|            else {
   97|    280|               auto ret = func(params);
   98|    280|               write_response<Opts>(ret, state);
   99|    280|            }
  100|    280|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE32register_param_function_endpointIRNSt3__18functionIFN9repe_fuzz5pointERKS7_EEES9_NS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcNS4_11char_traitsIcEEEERT_RT1_:
   73|   335k|      {
   74|   335k|         reg.endpoints[path] = [&func](repe::state_view& state) mutable {
   75|   335k|            static thread_local std::decay_t<Params> params{};
   76|   335k|            params = {}; // reset to avoid stale optional/variant fields across calls
   77|   335k|            if (!read_params<Opts>(params, state)) {
   78|   335k|               return;
   79|   335k|            }
   80|       |
   81|   335k|            using Result = std::invoke_result_t<decltype(func), Params>;
   82|       |
   83|   335k|            if (state.notify()) {
   84|   335k|               if constexpr (std::same_as<Result, void>) {
   85|   335k|                  func(params);
   86|   335k|               }
   87|   335k|               else {
   88|   335k|                  std::ignore = func(params);
   89|   335k|               }
   90|   335k|               return;
   91|   335k|            }
   92|   335k|            if constexpr (std::same_as<Result, void>) {
   93|   335k|               func(params);
   94|   335k|               write_response<Opts>(state);
   95|   335k|            }
   96|   335k|            else {
   97|   335k|               auto ret = func(params);
   98|   335k|               write_response<Opts>(ret, state);
   99|   335k|            }
  100|   335k|         };
  101|   335k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE32register_param_function_endpointIRNSt3__18functionIFN9repe_fuzz5pointERKS7_EEES9_NS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcNS4_11char_traitsIcEEEERT_RT1_ENUlRNS_4repe10state_viewEE_clESP_:
   74|  13.8k|         reg.endpoints[path] = [&func](repe::state_view& state) mutable {
   75|  13.8k|            static thread_local std::decay_t<Params> params{};
   76|  13.8k|            params = {}; // reset to avoid stale optional/variant fields across calls
   77|  13.8k|            if (!read_params<Opts>(params, state)) {
  ------------------
  |  Branch (77:17): [True: 13.8k, False: 68]
  ------------------
   78|  13.8k|               return;
   79|  13.8k|            }
   80|       |
   81|     68|            using Result = std::invoke_result_t<decltype(func), Params>;
   82|       |
   83|     68|            if (state.notify()) {
  ------------------
  |  Branch (83:17): [True: 7, False: 61]
  ------------------
   84|       |               if constexpr (std::same_as<Result, void>) {
   85|       |                  func(params);
   86|       |               }
   87|      7|               else {
   88|      7|                  std::ignore = func(params);
   89|      7|               }
   90|      7|               return;
   91|      7|            }
   92|       |            if constexpr (std::same_as<Result, void>) {
   93|       |               func(params);
   94|       |               write_response<Opts>(state);
   95|       |            }
   96|     61|            else {
   97|     61|               auto ret = func(params);
   98|     61|               write_response<Opts>(ret, state);
   99|     61|            }
  100|     61|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE32register_param_function_endpointIRNSt3__18functionIFdRNS4_6vectorIdNS4_9allocatorIdEEEEEEESA_NS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcNS4_11char_traitsIcEEEERT_RT1_:
   73|   335k|      {
   74|   335k|         reg.endpoints[path] = [&func](repe::state_view& state) mutable {
   75|   335k|            static thread_local std::decay_t<Params> params{};
   76|   335k|            params = {}; // reset to avoid stale optional/variant fields across calls
   77|   335k|            if (!read_params<Opts>(params, state)) {
   78|   335k|               return;
   79|   335k|            }
   80|       |
   81|   335k|            using Result = std::invoke_result_t<decltype(func), Params>;
   82|       |
   83|   335k|            if (state.notify()) {
   84|   335k|               if constexpr (std::same_as<Result, void>) {
   85|   335k|                  func(params);
   86|   335k|               }
   87|   335k|               else {
   88|   335k|                  std::ignore = func(params);
   89|   335k|               }
   90|   335k|               return;
   91|   335k|            }
   92|   335k|            if constexpr (std::same_as<Result, void>) {
   93|   335k|               func(params);
   94|   335k|               write_response<Opts>(state);
   95|   335k|            }
   96|   335k|            else {
   97|   335k|               auto ret = func(params);
   98|   335k|               write_response<Opts>(ret, state);
   99|   335k|            }
  100|   335k|         };
  101|   335k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE32register_param_function_endpointIRNSt3__18functionIFdRNS4_6vectorIdNS4_9allocatorIdEEEEEEESA_NS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcNS4_11char_traitsIcEEEERT_RT1_ENUlRNS_4repe10state_viewEE_clESQ_:
   74|  13.9k|         reg.endpoints[path] = [&func](repe::state_view& state) mutable {
   75|  13.9k|            static thread_local std::decay_t<Params> params{};
   76|  13.9k|            params = {}; // reset to avoid stale optional/variant fields across calls
   77|  13.9k|            if (!read_params<Opts>(params, state)) {
  ------------------
  |  Branch (77:17): [True: 13.4k, False: 485]
  ------------------
   78|  13.4k|               return;
   79|  13.4k|            }
   80|       |
   81|    485|            using Result = std::invoke_result_t<decltype(func), Params>;
   82|       |
   83|    485|            if (state.notify()) {
  ------------------
  |  Branch (83:17): [True: 8, False: 477]
  ------------------
   84|       |               if constexpr (std::same_as<Result, void>) {
   85|       |                  func(params);
   86|       |               }
   87|      8|               else {
   88|      8|                  std::ignore = func(params);
   89|      8|               }
   90|      8|               return;
   91|      8|            }
   92|       |            if constexpr (std::same_as<Result, void>) {
   93|       |               func(params);
   94|       |               write_response<Opts>(state);
   95|       |            }
   96|    477|            else {
   97|    477|               auto ret = func(params);
   98|    477|               write_response<Opts>(ret, state);
   99|    477|            }
  100|    477|         };
_ZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE26register_function_endpointIRNSt3__18functionIFvvEEEvNS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcNS4_11char_traitsIcEEEERT_RT1_:
   50|   335k|      {
   51|   335k|         if constexpr (std::same_as<Result, void>) {
   52|   335k|            reg.endpoints[path] = [&func](repe::state_view& state) mutable {
   53|   335k|               func();
   54|   335k|               if (state.notify()) {
   55|   335k|                  return;
   56|   335k|               }
   57|   335k|               write_response<Opts>(state);
   58|   335k|            };
   59|       |         }
   60|       |         else {
   61|       |            reg.endpoints[path] = [&func](repe::state_view& state) mutable {
   62|       |               if (state.notify()) {
   63|       |                  std::ignore = func();
   64|       |                  return;
   65|       |               }
   66|       |               write_response<Opts>(func(), state);
   67|       |            };
   68|       |         }
   69|   335k|      }
_ZZN3glz13registry_implIXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEELj30000EE26register_function_endpointIRNSt3__18functionIFvvEEEvNS_8registryIXtlS1_Lj10ELb1ELb0ELb1ELb1EEELj30000EEEEEvNS4_17basic_string_viewIcNS4_11char_traitsIcEEEERT_RT1_ENUlRNS_4repe10state_viewEE_clESL_:
   52|  13.8k|            reg.endpoints[path] = [&func](repe::state_view& state) mutable {
   53|  13.8k|               func();
   54|  13.8k|               if (state.notify()) {
  ------------------
  |  Branch (54:20): [True: 5.70k, False: 8.18k]
  ------------------
   55|  5.70k|                  return;
   56|  5.70k|               }
   57|  8.18k|               write_response<Opts>(state);
   58|  8.18k|            };

_ZN3glz6detail18sse2_string_escapeIcRZNS_2toILj10ENSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS9_S9_TkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_EUlvE0_EEvRPKcSR_RPT_mSL_:
   17|    269|   {
   18|       |      // SSE2: 16 bytes at a time with direct comparison instructions
   19|    269|      if (n > 15) {
  ------------------
  |  Branch (19:11): [True: 135, False: 134]
  ------------------
   20|    135|         const __m128i quote_vec = _mm_set1_epi8('"');
   21|    135|         const __m128i bs_vec = _mm_set1_epi8('\\');
   22|    135|         const __m128i ctrl_mask = _mm_set1_epi8(static_cast<int8_t>(0xE0));
   23|    135|         const __m128i zero = _mm_setzero_si128();
   24|       |
   25|   563k|         for (const char* end_m15 = e - 15; c < end_m15;) {
  ------------------
  |  Branch (25:45): [True: 563k, False: 135]
  ------------------
   26|   563k|            __m128i v = _mm_loadu_si128(reinterpret_cast<const __m128i*>(c));
   27|   563k|            _mm_storeu_si128(reinterpret_cast<__m128i*>(data), v);
   28|       |
   29|   563k|            const uint32_t mask = static_cast<uint32_t>(
   30|   563k|               _mm_movemask_epi8(_mm_or_si128(_mm_or_si128(_mm_cmpeq_epi8(v, quote_vec), _mm_cmpeq_epi8(v, bs_vec)),
   31|   563k|                                              _mm_cmpeq_epi8(_mm_and_si128(v, ctrl_mask), zero))));
   32|       |
   33|   563k|            if (mask == 0) {
  ------------------
  |  Branch (33:17): [True: 538k, False: 25.6k]
  ------------------
   34|   538k|               data += 16;
   35|   538k|               c += 16;
   36|   538k|               continue;
   37|   538k|            }
   38|       |
   39|  25.6k|            const uint32_t length = countr_zero(mask);
   40|  25.6k|            c += length;
   41|  25.6k|            data += length;
   42|  25.6k|            write_escape();
   43|  25.6k|         }
   44|    135|      }
   45|    269|   }
_ZN3glz6detail18sse2_string_escapeIcRZNS_2toILj10ENSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS9_SD_TkNS_10is_contextERNS_7contextEmEEvOT1_OT2_OT0_RT3_EUlvE0_EEvRPKcSR_RPT_mSL_:
   17|    697|   {
   18|       |      // SSE2: 16 bytes at a time with direct comparison instructions
   19|    697|      if (n > 15) {
  ------------------
  |  Branch (19:11): [True: 137, False: 560]
  ------------------
   20|    137|         const __m128i quote_vec = _mm_set1_epi8('"');
   21|    137|         const __m128i bs_vec = _mm_set1_epi8('\\');
   22|    137|         const __m128i ctrl_mask = _mm_set1_epi8(static_cast<int8_t>(0xE0));
   23|    137|         const __m128i zero = _mm_setzero_si128();
   24|       |
   25|   703k|         for (const char* end_m15 = e - 15; c < end_m15;) {
  ------------------
  |  Branch (25:45): [True: 703k, False: 137]
  ------------------
   26|   703k|            __m128i v = _mm_loadu_si128(reinterpret_cast<const __m128i*>(c));
   27|   703k|            _mm_storeu_si128(reinterpret_cast<__m128i*>(data), v);
   28|       |
   29|   703k|            const uint32_t mask = static_cast<uint32_t>(
   30|   703k|               _mm_movemask_epi8(_mm_or_si128(_mm_or_si128(_mm_cmpeq_epi8(v, quote_vec), _mm_cmpeq_epi8(v, bs_vec)),
   31|   703k|                                              _mm_cmpeq_epi8(_mm_and_si128(v, ctrl_mask), zero))));
   32|       |
   33|   703k|            if (mask == 0) {
  ------------------
  |  Branch (33:17): [True: 694k, False: 8.87k]
  ------------------
   34|   694k|               data += 16;
   35|   694k|               c += 16;
   36|   694k|               continue;
   37|   694k|            }
   38|       |
   39|  8.87k|            const uint32_t length = countr_zero(mask);
   40|  8.87k|            c += length;
   41|  8.87k|            data += length;
   42|  8.87k|            write_escape();
   43|  8.87k|         }
   44|    137|      }
   45|    697|   }

_ZN3glz4atoiITkNSt3__18integralEicEEbRT_RPKT0_S6_:
  803|   782k|   {
  804|       |      // The number of characters needed at most for each type, rounded to nearest 8 bytes
  805|   782k|      constexpr auto buffer_length = int_buffer_lengths[std::bit_width(sizeof(T)) - 1];
  806|       |      // We copy the rest of the buffer, or buffer_length bytes, into a null terminated buffer. The
  807|       |      // trailing byte is never written by the copy, so the null-terminated atoi below always halts
  808|       |      // inside the array even when the input fills it: the exponent scan stops at a non-digit rather
  809|       |      // than after a fixed digit count, and a value-initialized array alone would not terminate a
  810|       |      // copy that covers every byte.
  811|   782k|      std::array<char, buffer_length + 1> data{};
  812|   782k|      const auto n = size_t(end - it);
  813|   782k|      if (n > 0) [[likely]] {
  ------------------
  |  Branch (813:11): [True: 782k, False: 0]
  ------------------
  814|   782k|         const auto truncated = n > buffer_length;
  815|   782k|         std::memcpy(data.data(), it, truncated ? buffer_length : n);
  ------------------
  |  Branch (815:39): [True: 734k, False: 47.8k]
  ------------------
  816|       |
  817|   782k|         const auto start = data.data();
  818|   782k|         const auto* c = start;
  819|   782k|         const auto valid = glz::atoi(v, c);
  820|   782k|         const auto consumed = size_t(c - start);
  821|   782k|         it += consumed;
  822|       |         // Reaching the end of a truncated copy means the number was cut off: parsing halted on the
  823|       |         // terminator this buffer supplies rather than on a character of the input, so what parsed is
  824|       |         // a prefix and its value is not the number's. Only zero padding can stretch a number this
  825|       |         // far -- no in-range integer needs buffer_length characters -- but a caller that ignores
  826|       |         // trailing content would otherwise take the prefix's value as the answer.
  827|   782k|         return valid && not(truncated && consumed == buffer_length);
  ------------------
  |  Branch (827:17): [True: 719k, False: 63.1k]
  |  Branch (827:30): [True: 705k, False: 13.6k]
  |  Branch (827:43): [True: 10, False: 705k]
  ------------------
  828|   782k|      }
  829|      0|      else [[unlikely]] {
  830|      0|         return false;
  831|      0|      }
  832|   782k|   }
_ZN3glz4atoiITkNSt3__18integralEiKcQsr3stdE11is_signed_vIT_EEEbRS3_RPT0_:
  715|   782k|   {
  716|   782k|      using X = std::decay_t<T>;
  717|   782k|      using utype = std::make_unsigned_t<X>;
  718|       |
  719|   782k|      const uint8_t sign = *c == '-';
  720|   782k|      if (auto ptr = parse_int(v, reinterpret_cast<const uint8_t*>(c))) [[likely]] {
  ------------------
  |  Branch (720:16): [True: 724k, False: 57.9k]
  ------------------
  721|   724k|         c = reinterpret_cast<const Char*>(ptr);
  722|   724k|         if (*c == 'e' || *c == 'E') {
  ------------------
  |  Branch (722:14): [True: 33.1k, False: 691k]
  |  Branch (722:27): [True: 38.8k, False: 652k]
  ------------------
  723|  72.0k|            ++c;
  724|  72.0k|         }
  725|   652k|         else {
  726|   652k|            if (*c == '.') [[unlikely]] {
  ------------------
  |  Branch (726:17): [True: 1.54k, False: 650k]
  ------------------
  727|  1.54k|               return false;
  728|  1.54k|            }
  729|   650k|            return true;
  730|   652k|         }
  731|       |
  732|  72.0k|         c += (*c == '+');
  733|       |
  734|  72.0k|         if (not is_digit(*c)) [[unlikely]] {
  ------------------
  |  Branch (734:14): [True: 1.23k, False: 70.7k]
  ------------------
  735|  1.23k|            return false;
  736|  1.23k|         }
  737|  70.7k|         const uint32_t exp = parse_exponent(c);
  738|       |         // As in the unsigned overload: only a non-zero magnitude can overflow, so "0e19" and
  739|       |         // "-0e19" are in range for every width. `v` is already the signed mantissa, and negative
  740|       |         // zero compares equal to zero, so both spellings land here with the value they should keep.
  741|       |         if constexpr (sizeof(T) == 1) {
  742|       |            if (exp > 2) [[unlikely]] {
  743|       |               return v == 0;
  744|       |            }
  745|       |         }
  746|       |         else if constexpr (sizeof(T) == 2) {
  747|       |            if (exp > 4) [[unlikely]] {
  748|       |               return v == 0;
  749|       |            }
  750|       |         }
  751|  70.7k|         else if constexpr (sizeof(T) == 4) {
  752|  70.7k|            if (exp > 9) [[unlikely]] {
  ------------------
  |  Branch (752:17): [True: 3.69k, False: 67.1k]
  ------------------
  753|  3.69k|               return v == 0;
  754|  3.69k|            }
  755|       |         }
  756|       |         else {
  757|       |            if (exp > 18) [[unlikely]] {
  758|       |               return v == 0;
  759|       |            }
  760|       |         }
  761|       |
  762|  67.1k|         utype i = utype((utype(v) ^ -sign) + sign);
  763|  70.7k|         if constexpr (sizeof(T) < 8) {
  764|       |            // Scale in a width the product cannot wrap, then range check before narrowing. Scaling
  765|       |            // inside `utype` truncated first and checked afterwards, so an out-of-range magnitude
  766|       |            // aliased onto an accepted one: "13e2" read as 20 for int8_t and "5e9" as 705032704 for
  767|       |            // int32_t. The widest case here is a 4-byte magnitude scaled by 10^9, which stays well
  768|       |            // inside uint64_t. The unsigned path already widens the same way.
  769|  70.7k|            const uint64_t scaled = uint64_t(i) * powers_of_ten_int[exp];
  770|  70.7k|            v = T((utype(scaled) ^ -sign) + sign);
  771|       |            // Bound the magnitude directly rather than subtracting the sign from it: a negative
  772|       |            // zero makes `scaled - sign` underflow, and the old narrow expression only survived
  773|       |            // that because it promoted to int. A negative value may reach one past the positive
  774|       |            // limit, which is exactly INT_MIN's magnitude.
  775|  70.7k|            return scaled <= uint64_t((std::numeric_limits<T>::max)()) + sign;
  776|       |         }
  777|       |         else {
  778|       |            // Scale the sign-stripped magnitude `i`, not the two's-complement bit pattern of `v`:
  779|       |            // for a negative value that pattern is a huge unsigned number, so every negative
  780|       |            // 64-bit integer written with an exponent ("-1e2") overflowed and was rejected. The
  781|       |            // narrower branches above already scale `i`.
  782|       |#if defined(__SIZEOF_INT128__)
  783|       |            const __uint128_t res = __uint128_t(i) * powers_of_ten_int[exp];
  784|       |            v = T((uint64_t(res) ^ -sign) + sign);
  785|       |            // Compare the full 128-bit product. Narrowing it to 64 bits first would let an
  786|       |            // out-of-range magnitude alias onto an accepted one, e.g. 9e36 truncating into range.
  787|       |            return res <= __uint128_t(9223372036854775807ull + sign);
  788|       |#else
  789|       |            const auto res = full_multiplication(i, powers_of_ten_int[exp]);
  790|       |            v = T((uint64_t(res.low) ^ -sign) + sign);
  791|       |            return res.high == 0 && (uint64_t(res.low) <= (9223372036854775807ull + sign));
  792|       |#endif
  793|       |         }
  794|  70.7k|      }
  795|   128k|      return false;
  796|   782k|   }
_ZN3glz9parse_intITkNSt3__18integralEiQaasr3stdE11is_signed_vIT_ElestS2_Li8EEEPKhRS2_S4_:
  476|   782k|   {
  477|   782k|      const uint8_t sign = *c == '-';
  478|   782k|      c += sign;
  479|       |
  480|   782k|      if (is_digit(*c)) [[likely]] {
  ------------------
  |  Branch (480:11): [True: 729k, False: 53.1k]
  ------------------
  481|   729k|         v = *c - '0';
  482|   729k|         ++c;
  483|   729k|      }
  484|  53.1k|      else [[unlikely]] {
  485|  53.1k|         return {};
  486|  53.1k|      }
  487|       |
  488|   729k|      if (is_digit(*c)) {
  ------------------
  |  Branch (488:11): [True: 514k, False: 214k]
  ------------------
  489|   514k|         v = v * 10 + (*c - '0');
  490|   514k|         ++c;
  491|   514k|      }
  492|   214k|      else {
  493|   214k|         if (sign) {
  ------------------
  |  Branch (493:14): [True: 6.04k, False: 208k]
  ------------------
  494|  6.04k|            v = -v;
  495|  6.04k|         }
  496|   214k|         return c;
  497|   214k|      }
  498|       |
  499|   514k|      if (c[-2] == '0') [[unlikely]] {
  ------------------
  |  Branch (499:11): [True: 108, False: 514k]
  ------------------
  500|    108|         return {};
  501|    108|      }
  502|       |
  503|   514k|      if constexpr (sizeof(T) > 1) {
  504|   514k|         if (is_digit(*c)) {
  ------------------
  |  Branch (504:14): [True: 394k, False: 120k]
  ------------------
  505|   394k|            v = v * 10 + (*c - '0');
  506|   394k|            ++c;
  507|   394k|         }
  508|   120k|         else {
  509|   120k|            if (sign) {
  ------------------
  |  Branch (509:17): [True: 8.20k, False: 112k]
  ------------------
  510|  8.20k|               v = -v;
  511|  8.20k|            }
  512|   120k|            return c;
  513|   120k|         }
  514|       |
  515|   394k|         if (is_digit(*c)) {
  ------------------
  |  Branch (515:14): [True: 299k, False: 95.0k]
  ------------------
  516|   299k|            v = v * 10 + (*c - '0');
  517|   299k|            ++c;
  518|   299k|         }
  519|  95.0k|         else {
  520|  95.0k|            if (sign) {
  ------------------
  |  Branch (520:17): [True: 4.29k, False: 90.7k]
  ------------------
  521|  4.29k|               v = -v;
  522|  4.29k|            }
  523|  95.0k|            return c;
  524|  95.0k|         }
  525|       |
  526|   299k|         if constexpr (sizeof(T) > 2) {
  527|   299k|            if (is_digit(*c)) {
  ------------------
  |  Branch (527:17): [True: 237k, False: 62.1k]
  ------------------
  528|   237k|               v = v * 10 + (*c - '0');
  529|   237k|               ++c;
  530|   237k|            }
  531|  62.1k|            else {
  532|  62.1k|               if (sign) {
  ------------------
  |  Branch (532:20): [True: 6.35k, False: 55.8k]
  ------------------
  533|  6.35k|                  v = -v;
  534|  6.35k|               }
  535|  62.1k|               return c;
  536|  62.1k|            }
  537|       |
  538|   237k|            if (is_digit(*c)) {
  ------------------
  |  Branch (538:17): [True: 159k, False: 77.8k]
  ------------------
  539|   159k|               v = v * 10 + (*c - '0');
  540|   159k|               ++c;
  541|   159k|            }
  542|  77.8k|            else {
  543|  77.8k|               if (sign) {
  ------------------
  |  Branch (543:20): [True: 5.20k, False: 72.6k]
  ------------------
  544|  5.20k|                  v = -v;
  545|  5.20k|               }
  546|  77.8k|               return c;
  547|  77.8k|            }
  548|       |
  549|   159k|            if (is_digit(*c)) {
  ------------------
  |  Branch (549:17): [True: 88.8k, False: 70.6k]
  ------------------
  550|  88.8k|               v = v * 10 + (*c - '0');
  551|  88.8k|               ++c;
  552|  88.8k|            }
  553|  70.6k|            else {
  554|  70.6k|               if (sign) {
  ------------------
  |  Branch (554:20): [True: 12.4k, False: 58.2k]
  ------------------
  555|  12.4k|                  v = -v;
  556|  12.4k|               }
  557|  70.6k|               return c;
  558|  70.6k|            }
  559|       |
  560|  88.8k|            if (is_digit(*c)) {
  ------------------
  |  Branch (560:17): [True: 59.4k, False: 29.4k]
  ------------------
  561|  59.4k|               v = v * 10 + (*c - '0');
  562|  59.4k|               ++c;
  563|  59.4k|            }
  564|  29.4k|            else {
  565|  29.4k|               if (sign) {
  ------------------
  |  Branch (565:20): [True: 7.25k, False: 22.2k]
  ------------------
  566|  7.25k|                  v = -v;
  567|  7.25k|               }
  568|  29.4k|               return c;
  569|  29.4k|            }
  570|       |
  571|  59.4k|            if (is_digit(*c)) {
  ------------------
  |  Branch (571:17): [True: 49.5k, False: 9.91k]
  ------------------
  572|  49.5k|               v = v * 10 + (*c - '0');
  573|  49.5k|               ++c;
  574|  49.5k|            }
  575|  9.91k|            else {
  576|  9.91k|               if (sign) {
  ------------------
  |  Branch (576:20): [True: 2.47k, False: 7.44k]
  ------------------
  577|  2.47k|                  v = -v;
  578|  2.47k|               }
  579|  9.91k|               return c;
  580|  9.91k|            }
  581|       |
  582|       |            if constexpr (sizeof(T) > 4) {
  583|       |               if (is_digit(*c)) {
  584|       |                  v = v * 10 + (*c - '0');
  585|       |                  ++c;
  586|       |               }
  587|       |               else {
  588|       |                  if (sign) {
  589|       |                     v = -v;
  590|       |                  }
  591|       |                  return c;
  592|       |               }
  593|       |
  594|       |               if (is_digit(*c)) {
  595|       |                  v = v * 10 + (*c - '0');
  596|       |                  ++c;
  597|       |               }
  598|       |               else {
  599|       |                  if (sign) {
  600|       |                     v = -v;
  601|       |                  }
  602|       |                  return c;
  603|       |               }
  604|       |
  605|       |               if (is_digit(*c)) {
  606|       |                  v = v * 10 + (*c - '0');
  607|       |                  ++c;
  608|       |               }
  609|       |               else {
  610|       |                  if (sign) {
  611|       |                     v = -v;
  612|       |                  }
  613|       |                  return c;
  614|       |               }
  615|       |
  616|       |               if (is_digit(*c)) {
  617|       |                  v = v * 10 + (*c - '0');
  618|       |                  ++c;
  619|       |               }
  620|       |               else {
  621|       |                  if (sign) {
  622|       |                     v = -v;
  623|       |                  }
  624|       |                  return c;
  625|       |               }
  626|       |
  627|       |               if (is_digit(*c)) {
  628|       |                  v = v * 10 + (*c - '0');
  629|       |                  ++c;
  630|       |               }
  631|       |               else {
  632|       |                  if (sign) {
  633|       |                     v = -v;
  634|       |                  }
  635|       |                  return c;
  636|       |               }
  637|       |
  638|       |               if (is_digit(*c)) {
  639|       |                  v = v * 10 + (*c - '0');
  640|       |                  ++c;
  641|       |               }
  642|       |               else {
  643|       |                  if (sign) {
  644|       |                     v = -v;
  645|       |                  }
  646|       |                  return c;
  647|       |               }
  648|       |
  649|       |               if (is_digit(*c)) {
  650|       |                  v = v * 10 + (*c - '0');
  651|       |                  ++c;
  652|       |               }
  653|       |               else {
  654|       |                  if (sign) {
  655|       |                     v = -v;
  656|       |                  }
  657|       |                  return c;
  658|       |               }
  659|       |
  660|       |               if (is_digit(*c)) {
  661|       |                  v = v * 10 + (*c - '0');
  662|       |                  ++c;
  663|       |               }
  664|       |               else {
  665|       |                  if (sign) {
  666|       |                     v = -v;
  667|       |                  }
  668|       |                  return c;
  669|       |               }
  670|       |
  671|       |               if (is_digit(*c)) {
  672|       |                  v = v * 10 + (*c - '0');
  673|       |                  ++c;
  674|       |               }
  675|       |               else {
  676|       |                  if (sign) {
  677|       |                     v = -v;
  678|       |                  }
  679|       |                  return c;
  680|       |               }
  681|       |            }
  682|  49.5k|         }
  683|   299k|      }
  684|       |
  685|   514k|      if (is_digit(*c)) {
  ------------------
  |  Branch (685:11): [True: 11.6k, False: 503k]
  ------------------
  686|  11.6k|         if (sign) {
  ------------------
  |  Branch (686:14): [True: 3.02k, False: 8.61k]
  ------------------
  687|  3.02k|            if (would_overflow_negative<T>(v, *c)) [[unlikely]] {
  ------------------
  |  Branch (687:17): [True: 186, False: 2.83k]
  ------------------
  688|    186|               return {};
  689|    186|            }
  690|  2.83k|            v = -1 * v;
  691|  2.83k|            v = v * 10 - (*c - '0');
  692|  2.83k|         }
  693|  8.61k|         else {
  694|  8.61k|            if (would_overflow_positive<T>(v, *c)) [[unlikely]] {
  ------------------
  |  Branch (694:17): [True: 2.88k, False: 5.72k]
  ------------------
  695|  2.88k|               return {};
  696|  2.88k|            }
  697|  5.72k|            v = v * 10 + (*c - '0');
  698|  5.72k|         }
  699|  8.56k|         ++c;
  700|  8.56k|         if (is_digit(*c)) [[unlikely]] {
  ------------------
  |  Branch (700:14): [True: 1.62k, False: 6.93k]
  ------------------
  701|  1.62k|            return {};
  702|  1.62k|         }
  703|  6.93k|         return c;
  704|  8.56k|      }
  705|       |
  706|   503k|      if (sign) {
  ------------------
  |  Branch (706:11): [True: 3.27k, False: 499k]
  ------------------
  707|  3.27k|         v = -v;
  708|  3.27k|      }
  709|   503k|      return c;
  710|   514k|   }
_ZN3glz23would_overflow_negativeIiEEbu17__remove_volatileIT_Eh:
  151|  3.02k|   {
  152|       |      // For negative: max magnitude is max + 1 (e.g., -2147483648 for int32)
  153|  3.02k|      using U = std::remove_volatile_t<T>;
  154|  3.02k|      constexpr auto max_val = static_cast<uint64_t>((std::numeric_limits<U>::max)()) + 1;
  155|  3.02k|      constexpr auto threshold = max_val / 10;
  156|  3.02k|      constexpr auto last_digit = max_val % 10;
  157|  3.02k|      const auto uv = static_cast<uint64_t>(v);
  158|  3.02k|      const auto digit = static_cast<uint64_t>(next_digit - '0');
  159|       |      // When digit > last_digit, effective threshold is one less
  160|  3.02k|      return uv > (threshold - uint64_t(digit > last_digit));
  161|  3.02k|   }
_ZN3glz23would_overflow_positiveIiEEbu17__remove_volatileIT_Eh:
  137|  8.61k|   {
  138|  8.61k|      using U = std::remove_volatile_t<T>;
  139|  8.61k|      constexpr auto max_val = static_cast<uint64_t>((std::numeric_limits<U>::max)());
  140|  8.61k|      constexpr auto threshold = max_val / 10;
  141|  8.61k|      constexpr auto last_digit = max_val % 10;
  142|  8.61k|      const auto uv = static_cast<uint64_t>(v);
  143|  8.61k|      const auto digit = static_cast<uint64_t>(next_digit - '0');
  144|       |      // When digit > last_digit, effective threshold is one less
  145|       |      // This is branch-free and faster than bitwise OR/AND approach
  146|  8.61k|      return uv > (threshold - uint64_t(digit > last_digit));
  147|  8.61k|   }
_ZN3glz8is_digitEh:
  103|  3.53M|   GLZ_ALWAYS_INLINE constexpr bool is_digit(const uint8_t c) noexcept { return c <= '9' && c >= '0'; }
  ------------------
  |  Branch (103:81): [True: 3.40M, False: 123k]
  |  Branch (103:93): [True: 2.68M, False: 725k]
  ------------------
_ZN3glz14parse_exponentIKcEEjRPT_:
  121|  70.7k|   {
  122|  70.7k|      uint32_t exp = uint32_t(*c - '0');
  123|  70.7k|      ++c;
  124|   137k|      while (is_digit(*c)) {
  ------------------
  |  Branch (124:14): [True: 66.5k, False: 70.7k]
  ------------------
  125|       |         // Written as a select rather than a branch: the clamp only ever engages on absurdly long
  126|       |         // exponents, so a branch here would be a mispredict risk on the path that matters.
  127|  66.5k|         exp = exp < exponent_clamp ? exp * 10 + uint32_t(*c - '0') : exp;
  ------------------
  |  Branch (127:16): [True: 60.9k, False: 5.61k]
  ------------------
  128|  66.5k|         ++c;
  129|  66.5k|      }
  130|  70.7k|      return exp;
  131|  70.7k|   }

_ZN3glz11countr_zeroEm:
   29|   206k|   {
   30|       |#ifdef _MSC_VER
   31|       |      return std::countr_zero(x);
   32|       |#else
   33|   206k|#if __has_builtin(__builtin_ctzll)
   34|   206k|      return __builtin_ctzll(x);
   35|       |#else
   36|       |      return std::countr_zero(x);
   37|       |#endif
   38|   206k|#endif
   39|   206k|   }
_ZN3glz11countr_zeroEj:
   16|  34.5k|   {
   17|       |#ifdef _MSC_VER
   18|       |      return std::countr_zero(x);
   19|       |#else
   20|  34.5k|#if __has_builtin(__builtin_ctzl)
   21|  34.5k|      return __builtin_ctzl(x);
   22|       |#else
   23|       |      return std::countr_zero(x);
   24|       |#endif
   25|  34.5k|#endif
   26|  34.5k|   }

_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz5pointELm0ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm2EcEEbPKT1_:
  245|  20.3k|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|       |      if constexpr (N == 8) {
  250|       |         static constexpr auto packed = pack<Str, 8>();
  251|       |         uint64_t in;
  252|       |         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|       |         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|       |      else if constexpr (N == 6) {
  268|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  269|       |         uint64_t in{};
  270|       |         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|       |         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|  20.3k|      else if constexpr (N == 2) {
  304|  20.3k|         static constexpr auto packed = pack<Str, 2>();
  305|  20.3k|         uint16_t in;
  306|  20.3k|         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|  20.3k|         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|       |      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|       |         return 0 == std::memcmp(Str.data(), other, N);
  323|       |      }
  324|  20.3k|   }
_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz5pointELm1ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm2EcEEbPKT1_:
  245|  38.2k|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|       |      if constexpr (N == 8) {
  250|       |         static constexpr auto packed = pack<Str, 8>();
  251|       |         uint64_t in;
  252|       |         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|       |         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|       |      else if constexpr (N == 6) {
  268|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  269|       |         uint64_t in{};
  270|       |         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|       |         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|  38.2k|      else if constexpr (N == 2) {
  304|  38.2k|         static constexpr auto packed = pack<Str, 2>();
  305|  38.2k|         uint16_t in;
  306|  38.2k|         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|  38.2k|         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|       |      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|       |         return 0 == std::memcmp(Str.data(), other, N);
  323|       |      }
  324|  38.2k|   }
_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz6nestedELm0ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm6EcEEbPKT1_:
  245|    190|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|       |      if constexpr (N == 8) {
  250|       |         static constexpr auto packed = pack<Str, 8>();
  251|       |         uint64_t in;
  252|       |         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|       |         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|    190|      else if constexpr (N == 6) {
  268|    190|         static constexpr auto packed = pack_buffered<Str, 8>();
  269|    190|         uint64_t in{};
  270|    190|         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|    190|         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|       |      else if constexpr (N == 2) {
  304|       |         static constexpr auto packed = pack<Str, 2>();
  305|       |         uint16_t in;
  306|       |         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|       |         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|       |      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|       |         return 0 == std::memcmp(Str.data(), other, N);
  323|       |      }
  324|    190|   }
_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz6nestedELm1ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm6EcEEbPKT1_:
  245|  22.8k|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|       |      if constexpr (N == 8) {
  250|       |         static constexpr auto packed = pack<Str, 8>();
  251|       |         uint64_t in;
  252|       |         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|       |         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|  22.8k|      else if constexpr (N == 6) {
  268|  22.8k|         static constexpr auto packed = pack_buffered<Str, 8>();
  269|  22.8k|         uint64_t in{};
  270|  22.8k|         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|  22.8k|         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|       |      else if constexpr (N == 2) {
  304|       |         static constexpr auto packed = pack<Str, 2>();
  305|       |         uint16_t in;
  306|       |         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|       |         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|       |      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|       |         return 0 == std::memcmp(Str.data(), other, N);
  323|       |      }
  324|  22.8k|   }
_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm0ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm6EcEEbPKT1_:
  245|  40.1k|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|       |      if constexpr (N == 8) {
  250|       |         static constexpr auto packed = pack<Str, 8>();
  251|       |         uint64_t in;
  252|       |         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|       |         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|  40.1k|      else if constexpr (N == 6) {
  268|  40.1k|         static constexpr auto packed = pack_buffered<Str, 8>();
  269|  40.1k|         uint64_t in{};
  270|  40.1k|         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|  40.1k|         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|       |      else if constexpr (N == 2) {
  304|       |         static constexpr auto packed = pack<Str, 2>();
  305|       |         uint16_t in;
  306|       |         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|       |         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|       |      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|       |         return 0 == std::memcmp(Str.data(), other, N);
  323|       |      }
  324|  40.1k|   }
_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm1ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm5EcEEbPKT1_:
  245|    266|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|       |      if constexpr (N == 8) {
  250|       |         static constexpr auto packed = pack<Str, 8>();
  251|       |         uint64_t in;
  252|       |         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|       |         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|       |      else if constexpr (N == 6) {
  268|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  269|       |         uint64_t in{};
  270|       |         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|       |         return (in == packed);
  275|       |      }
  276|    266|      else if constexpr (N == 5) {
  277|    266|         static constexpr auto packed = pack<Str, 4>();
  278|    266|         uint32_t in;
  279|    266|         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|    266|         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|       |      else if constexpr (N == 2) {
  304|       |         static constexpr auto packed = pack<Str, 2>();
  305|       |         uint16_t in;
  306|       |         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|       |         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|       |      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|       |         return 0 == std::memcmp(Str.data(), other, N);
  323|       |      }
  324|    266|   }
_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm2ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm9EcEEbPKT1_:
  245|  1.03k|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|       |      if constexpr (N == 8) {
  250|       |         static constexpr auto packed = pack<Str, 8>();
  251|       |         uint64_t in;
  252|       |         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|       |         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|       |      else if constexpr (N == 6) {
  268|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  269|       |         uint64_t in{};
  270|       |         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|       |         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|       |      else if constexpr (N == 2) {
  304|       |         static constexpr auto packed = pack<Str, 2>();
  305|       |         uint16_t in;
  306|       |         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|       |         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|  1.03k|      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|  1.03k|         return 0 == std::memcmp(Str.data(), other, N);
  323|  1.03k|      }
  324|  1.03k|   }
_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm3ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm6EcEEbPKT1_:
  245|    745|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|       |      if constexpr (N == 8) {
  250|       |         static constexpr auto packed = pack<Str, 8>();
  251|       |         uint64_t in;
  252|       |         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|       |         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|    745|      else if constexpr (N == 6) {
  268|    745|         static constexpr auto packed = pack_buffered<Str, 8>();
  269|    745|         uint64_t in{};
  270|    745|         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|    745|         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|       |      else if constexpr (N == 2) {
  304|       |         static constexpr auto packed = pack<Str, 2>();
  305|       |         uint16_t in;
  306|       |         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|       |         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|       |      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|       |         return 0 == std::memcmp(Str.data(), other, N);
  323|       |      }
  324|    745|   }
_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm4ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm7EcEEbPKT1_:
  245|  11.7k|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|       |      if constexpr (N == 8) {
  250|       |         static constexpr auto packed = pack<Str, 8>();
  251|       |         uint64_t in;
  252|       |         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|       |         return (in == packed);
  257|       |      }
  258|  11.7k|      else if constexpr (N == 7) {
  259|  11.7k|         static constexpr auto packed = pack_buffered<Str, 8>();
  260|  11.7k|         uint64_t in{};
  261|  11.7k|         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|  11.7k|         return (in == packed);
  266|       |      }
  267|       |      else if constexpr (N == 6) {
  268|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  269|       |         uint64_t in{};
  270|       |         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|       |         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|       |      else if constexpr (N == 2) {
  304|       |         static constexpr auto packed = pack<Str, 2>();
  305|       |         uint16_t in;
  306|       |         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|       |         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|       |      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|       |         return 0 == std::memcmp(Str.data(), other, N);
  323|       |      }
  324|  11.7k|   }
_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm5ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm6EcEEbPKT1_:
  245|  1.57k|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|       |      if constexpr (N == 8) {
  250|       |         static constexpr auto packed = pack<Str, 8>();
  251|       |         uint64_t in;
  252|       |         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|       |         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|  1.57k|      else if constexpr (N == 6) {
  268|  1.57k|         static constexpr auto packed = pack_buffered<Str, 8>();
  269|  1.57k|         uint64_t in{};
  270|  1.57k|         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|  1.57k|         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|       |      else if constexpr (N == 2) {
  304|       |         static constexpr auto packed = pack<Str, 2>();
  305|       |         uint16_t in;
  306|       |         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|       |         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|       |      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|       |         return 0 == std::memcmp(Str.data(), other, N);
  323|       |      }
  324|  1.57k|   }
_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm6ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm6EcEEbPKT1_:
  245|  1.70k|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|       |      if constexpr (N == 8) {
  250|       |         static constexpr auto packed = pack<Str, 8>();
  251|       |         uint64_t in;
  252|       |         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|       |         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|  1.70k|      else if constexpr (N == 6) {
  268|  1.70k|         static constexpr auto packed = pack_buffered<Str, 8>();
  269|  1.70k|         uint64_t in{};
  270|  1.70k|         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|  1.70k|         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|       |      else if constexpr (N == 2) {
  304|       |         static constexpr auto packed = pack<Str, 2>();
  305|       |         uint16_t in;
  306|       |         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|       |         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|       |      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|       |         return 0 == std::memcmp(Str.data(), other, N);
  323|       |      }
  324|  1.70k|   }
_ZN3glz10comparitorIL_ZZNS_5matchITnNS_14string_literalEXtlNS2_ILm4EEEtlA4_cLc117ELc108ELc108EEEETnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETkNS_10is_contextERNS_7contextERPKcS9_Qntcl15check_is_paddedT0_EEEvOT1_OT2_T3_E1SELm3EcEEbPKSB_:
  245|    777|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|       |      if constexpr (N == 8) {
  250|       |         static constexpr auto packed = pack<Str, 8>();
  251|       |         uint64_t in;
  252|       |         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|       |         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|       |      else if constexpr (N == 6) {
  268|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  269|       |         uint64_t in{};
  270|       |         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|       |         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|    777|      else if constexpr (N == 3) {
  295|    777|         static constexpr auto packed = pack<Str, 2>();
  296|    777|         uint16_t in;
  297|    777|         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|    777|         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|       |      else if constexpr (N == 2) {
  304|       |         static constexpr auto packed = pack<Str, 2>();
  305|       |         uint16_t in;
  306|       |         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|       |         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|       |      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|       |         return 0 == std::memcmp(Str.data(), other, N);
  323|       |      }
  324|    777|   }
_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm7ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm8EcEEbPKT1_:
  245|  3.63k|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|  3.63k|      if constexpr (N == 8) {
  250|  3.63k|         static constexpr auto packed = pack<Str, 8>();
  251|  3.63k|         uint64_t in;
  252|  3.63k|         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|  3.63k|         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|       |      else if constexpr (N == 6) {
  268|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  269|       |         uint64_t in{};
  270|       |         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|       |         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|       |      else if constexpr (N == 2) {
  304|       |         static constexpr auto packed = pack<Str, 2>();
  305|       |         uint16_t in;
  306|       |         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|       |         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|       |      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|       |         return 0 == std::memcmp(Str.data(), other, N);
  323|       |      }
  324|  3.63k|   }
_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz6amountELm0ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm6EcEEbPKT1_:
  245|  27.2k|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|       |      if constexpr (N == 8) {
  250|       |         static constexpr auto packed = pack<Str, 8>();
  251|       |         uint64_t in;
  252|       |         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|       |         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|  27.2k|      else if constexpr (N == 6) {
  268|  27.2k|         static constexpr auto packed = pack_buffered<Str, 8>();
  269|  27.2k|         uint64_t in{};
  270|  27.2k|         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|  27.2k|         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|       |      else if constexpr (N == 2) {
  304|       |         static constexpr auto packed = pack<Str, 2>();
  305|       |         uint16_t in;
  306|       |         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|       |         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|       |      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|       |         return 0 == std::memcmp(Str.data(), other, N);
  323|       |      }
  324|  27.2k|   }
_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm8ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm8EcEEbPKT1_:
  245|    323|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|    323|      if constexpr (N == 8) {
  250|    323|         static constexpr auto packed = pack<Str, 8>();
  251|    323|         uint64_t in;
  252|    323|         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|    323|         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|       |      else if constexpr (N == 6) {
  268|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  269|       |         uint64_t in{};
  270|       |         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|       |         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|       |      else if constexpr (N == 2) {
  304|       |         static constexpr auto packed = pack<Str, 2>();
  305|       |         uint16_t in;
  306|       |         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|       |         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|       |      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|       |         return 0 == std::memcmp(Str.data(), other, N);
  323|       |      }
  324|    323|   }
_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm9ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm6EcEEbPKT1_:
  245|    202|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|       |      if constexpr (N == 8) {
  250|       |         static constexpr auto packed = pack<Str, 8>();
  251|       |         uint64_t in;
  252|       |         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|       |         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|    202|      else if constexpr (N == 6) {
  268|    202|         static constexpr auto packed = pack_buffered<Str, 8>();
  269|    202|         uint64_t in{};
  270|    202|         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|    202|         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|       |      else if constexpr (N == 2) {
  304|       |         static constexpr auto packed = pack<Str, 2>();
  305|       |         uint16_t in;
  306|       |         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|       |         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|       |      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|       |         return 0 == std::memcmp(Str.data(), other, N);
  323|       |      }
  324|    202|   }
_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm10ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm9EcEEbPKT1_:
  245|    385|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|       |      if constexpr (N == 8) {
  250|       |         static constexpr auto packed = pack<Str, 8>();
  251|       |         uint64_t in;
  252|       |         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|       |         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|       |      else if constexpr (N == 6) {
  268|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  269|       |         uint64_t in{};
  270|       |         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|       |         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|       |      else if constexpr (N == 2) {
  304|       |         static constexpr auto packed = pack<Str, 2>();
  305|       |         uint16_t in;
  306|       |         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|       |         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|    385|      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|    385|         return 0 == std::memcmp(Str.data(), other, N);
  323|    385|      }
  324|    385|   }
_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm11ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm6EcEEbPKT1_:
  245|    102|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|       |      if constexpr (N == 8) {
  250|       |         static constexpr auto packed = pack<Str, 8>();
  251|       |         uint64_t in;
  252|       |         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|       |         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|    102|      else if constexpr (N == 6) {
  268|    102|         static constexpr auto packed = pack_buffered<Str, 8>();
  269|    102|         uint64_t in{};
  270|    102|         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|    102|         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|       |      else if constexpr (N == 2) {
  304|       |         static constexpr auto packed = pack<Str, 2>();
  305|       |         uint16_t in;
  306|       |         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|       |         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|       |      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|       |         return 0 == std::memcmp(Str.data(), other, N);
  323|       |      }
  324|    102|   }
_ZN3glz10comparitorIL_ZZNS_12decode_indexITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiELm12ERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT2_OT4_OT5_OT6_DpOT3_E15KeyWithEndQuoteELm6EcEEbPKT1_:
  245|    108|   {
  246|       |      // pack() builds values in little-endian order (byte 0 in LSB position).
  247|       |      // On big-endian systems, memcpy produces native (big-endian) values,
  248|       |      // so we need to byteswap to match the packed representation.
  249|       |      if constexpr (N == 8) {
  250|       |         static constexpr auto packed = pack<Str, 8>();
  251|       |         uint64_t in;
  252|       |         std::memcpy(&in, other, 8);
  253|       |         if constexpr (std::endian::native == std::endian::big) {
  254|       |            in = std::byteswap(in);
  255|       |         }
  256|       |         return (in == packed);
  257|       |      }
  258|       |      else if constexpr (N == 7) {
  259|       |         static constexpr auto packed = pack_buffered<Str, 8>();
  260|       |         uint64_t in{};
  261|       |         std::memcpy(&in, other, 7);
  262|       |         if constexpr (std::endian::native == std::endian::big) {
  263|       |            in = std::byteswap(in);
  264|       |         }
  265|       |         return (in == packed);
  266|       |      }
  267|    108|      else if constexpr (N == 6) {
  268|    108|         static constexpr auto packed = pack_buffered<Str, 8>();
  269|    108|         uint64_t in{};
  270|    108|         std::memcpy(&in, other, 6);
  271|       |         if constexpr (std::endian::native == std::endian::big) {
  272|       |            in = std::byteswap(in);
  273|       |         }
  274|    108|         return (in == packed);
  275|       |      }
  276|       |      else if constexpr (N == 5) {
  277|       |         static constexpr auto packed = pack<Str, 4>();
  278|       |         uint32_t in;
  279|       |         std::memcpy(&in, other, 4);
  280|       |         if constexpr (std::endian::native == std::endian::big) {
  281|       |            in = std::byteswap(in);
  282|       |         }
  283|       |         return (in == packed) & (Str[4] == other[4]);
  284|       |      }
  285|       |      else if constexpr (N == 4) {
  286|       |         static constexpr auto packed = pack<Str, 4>();
  287|       |         uint32_t in;
  288|       |         std::memcpy(&in, other, 4);
  289|       |         if constexpr (std::endian::native == std::endian::big) {
  290|       |            in = std::byteswap(in);
  291|       |         }
  292|       |         return (in == packed);
  293|       |      }
  294|       |      else if constexpr (N == 3) {
  295|       |         static constexpr auto packed = pack<Str, 2>();
  296|       |         uint16_t in;
  297|       |         std::memcpy(&in, other, 2);
  298|       |         if constexpr (std::endian::native == std::endian::big) {
  299|       |            in = std::byteswap(in);
  300|       |         }
  301|       |         return (in == packed) & (Str[2] == other[2]);
  302|       |      }
  303|       |      else if constexpr (N == 2) {
  304|       |         static constexpr auto packed = pack<Str, 2>();
  305|       |         uint16_t in;
  306|       |         std::memcpy(&in, other, 2);
  307|       |         if constexpr (std::endian::native == std::endian::big) {
  308|       |            in = std::byteswap(in);
  309|       |         }
  310|       |         return (in == packed);
  311|       |      }
  312|       |      else if constexpr (N == 1) {
  313|       |         return Str[0] == other[0];
  314|       |      }
  315|       |      else if constexpr (N == 0) {
  316|       |         return true;
  317|       |      }
  318|       |      else {
  319|       |         // Clang and GCC optimize this extremely well for constexpr std::string_view
  320|       |         // Packing data can create more binary on GCC
  321|       |         // The other cases probably aren't needed as compiler explorer shows them optimized equally well as memcmp
  322|       |         return 0 == std::memcmp(Str.data(), other, N);
  323|       |      }
  324|    108|   }

_ZN3glz4dumpILb1ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEETkNS_10byte_sizedEcEEvT1_RT0_Rm:
  112|   448k|   {
  113|   448k|      if constexpr (Checked && vector_like<B>) {
  114|   448k|         if (ix == b.size()) [[unlikely]] {
  ------------------
  |  Branch (114:14): [True: 0, False: 448k]
  ------------------
  115|      0|            grow_buffer(b, b.size() == 0 ? 64 : ix + 1);
  ------------------
  |  Branch (115:28): [True: 0, False: 0]
  ------------------
  116|      0|         }
  117|   448k|      }
  118|   448k|      assign_maybe_cast(c, b, ix);
  119|   448k|      ++ix;
  120|   448k|   }
_ZN3glz17assign_maybe_castITkNS_10byte_sizedEcNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEEvT_RT0_Rm:
   57|   448k|   {
   58|   448k|      using V = std::decay_t<decltype(b[0])>;
   59|   448k|      using C = std::decay_t<decltype(c)>;
   60|   448k|      if constexpr (std::same_as<V, C>) {
   61|   448k|         b[ix] = c;
   62|       |      }
   63|       |      else {
   64|       |         b[ix] = static_cast<V>(c);
   65|       |      }
   66|   448k|   }
_ZN3glz4dumpILb1ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEEvNS1_17basic_string_viewIcS4_EERT0_Rm:
  154|   460k|   {
  155|   460k|      const auto n = str.size();
  156|   460k|      if constexpr (vector_like<B>) {
  157|   460k|         if constexpr (Checked) {
  158|   460k|            const auto k = ix + n;
  159|   460k|            if (ix + n > b.size()) [[unlikely]] {
  ------------------
  |  Branch (159:17): [True: 0, False: 460k]
  ------------------
  160|      0|               grow_buffer(b, k);
  161|      0|            }
  162|   460k|         }
  163|   460k|      }
  164|   460k|      std::memcpy(&b[ix], str.data(), n);
  165|   460k|      ix += n;
  166|   460k|   }
_ZN3glz16dump_maybe_emptyILb1ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEEvNS1_17basic_string_viewIcS4_EERT0_Rm:
  281|   304k|   {
  282|   304k|      const auto n = str.size();
  283|   304k|      if (n) {
  ------------------
  |  Branch (283:11): [True: 304k, False: 0]
  ------------------
  284|   304k|         if constexpr (vector_like<B>) {
  285|   304k|            if constexpr (Checked) {
  286|   304k|               const auto k = ix + n;
  287|   304k|               if (k > b.size()) [[unlikely]] {
  ------------------
  |  Branch (287:20): [True: 0, False: 304k]
  ------------------
  288|      0|                  grow_buffer(b, k);
  289|      0|               }
  290|   304k|            }
  291|   304k|         }
  292|   304k|         std::memcpy(&b[ix], str.data(), n);
  293|   304k|         ix += n;
  294|   304k|      }
  295|   304k|   }
_ZN3glz5dumpnINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEETkNS_10byte_sizedEcEEvT0_mRT_Rm:
  184|   149k|   {
  185|   149k|      if constexpr (vector_like<B>) {
  186|   149k|         const auto k = ix + n;
  187|   149k|         if (k > b.size()) [[unlikely]] {
  ------------------
  |  Branch (187:14): [True: 0, False: 149k]
  ------------------
  188|      0|            grow_buffer(b, k);
  189|      0|         }
  190|   149k|      }
  191|   149k|      std::memset(data_at(b, ix), c, n);
  192|   149k|      ix += n;
  193|   149k|   }
_ZN3glz7data_atINSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEEDaRT_m:
   79|   149k|   {
   80|       |      if constexpr (std::is_pointer_v<std::remove_cvref_t<B>>) {
   81|       |         return b + ix;
   82|       |      }
   83|   149k|      else {
   84|   149k|         static_assert(has_data<std::remove_cvref_t<B>>,
   85|   149k|                       "an output buffer must be contiguous: dump writes through memset and memcpy");
   86|       |         if constexpr (has_data_offset<std::remove_cvref_t<B>>) {
   87|       |            assert(ix >= b.data_offset() && "Index before flush offset");
   88|       |            return b.data() + (ix - b.data_offset());
   89|       |         }
   90|   149k|         else {
   91|   149k|            return b.data() + ix;
   92|   149k|         }
   93|   149k|      }
   94|   149k|   }
_ZN3glz4dumpILb0ENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEETkNS_10byte_sizedEcEEvT1_RT0_Rm:
  112|    301|   {
  113|       |      if constexpr (Checked && vector_like<B>) {
  114|       |         if (ix == b.size()) [[unlikely]] {
  115|       |            grow_buffer(b, b.size() == 0 ? 64 : ix + 1);
  116|       |         }
  117|       |      }
  118|    301|      assign_maybe_cast(c, b, ix);
  119|    301|      ++ix;
  120|    301|   }

_ZN3glz10fast_float4spanIKcEC2Ev:
  438|   605k|  constexpr span() : ptr(nullptr), length(0) {}
_ZN3glz10fast_float10is_integerIcEEbT_:
 1481|  15.1k|fastfloat_really_inline constexpr bool is_integer(UC c) noexcept {
 1482|  15.1k|  return !(c > UC('9') || c < UC('0'));
  ------------------
  |  Branch (1482:12): [True: 13, False: 15.1k]
  |  Branch (1482:27): [True: 33, False: 15.1k]
  ------------------
 1483|  15.1k|}
_ZN3glz10fast_float11digit_valueIcEEmT_:
 1489|  9.62M|fastfloat_really_inline constexpr uint64_t digit_value(UC c) noexcept {
 1490|  9.62M|  return uint64_t(uint8_t(c) - uint8_t('0'));
 1491|  9.62M|}
_ZN3glz10fast_float4spanIKcEC2EPS2_m:
  436|   319k|  constexpr span(T const *_ptr, size_t _length) : ptr(_ptr), length(_length) {}
_ZN3glz10fast_float26loop_parse_if_eight_digitsERPKcS2_Rm:
 1679|  16.4k|                           uint64_t &i) {
 1680|       |  // optimizes better than parse_if_eight_digits_unrolled() for UC = char.
 1681|   961k|  while ((std::distance(p, pend) >= 8) &&
  ------------------
  |  Branch (1681:10): [True: 959k, False: 1.85k]
  ------------------
 1682|   959k|         is_made_of_eight_digits_fast(read8_to_u64(p))) {
  ------------------
  |  Branch (1682:10): [True: 944k, False: 14.6k]
  ------------------
 1683|   944k|    i = i * 100000000 +
 1684|   944k|        parse_eight_digits_unrolled(read8_to_u64(
 1685|   944k|            p)); // in rare cases, this will overflow, but that's ok
 1686|   944k|    p += 8;
 1687|   944k|  }
 1688|  16.4k|}
_ZN3glz10fast_float28is_made_of_eight_digits_fastEm:
 1597|   959k|is_made_of_eight_digits_fast(uint64_t val) noexcept {
 1598|   959k|  return !((((val + 0x4646464646464646) | (val - 0x3030303030303030)) &
 1599|   959k|            0x8080808080808080));
 1600|   959k|}
_ZN3glz10fast_float12read8_to_u64IcEEmPKT_:
 1503|  2.16M|read8_to_u64(UC const *chars) {
 1504|  2.16M|  if (cpp20_and_in_constexpr() || !std::is_same<UC, char>::value) {
  ------------------
  |  Branch (1504:7): [Folded, False: 0]
  |  Branch (1504:35): [Folded, False: 0]
  ------------------
 1505|      0|    uint64_t val = 0;
 1506|      0|    for (int i = 0; i < 8; ++i) {
  ------------------
  |  Branch (1506:21): [True: 0, False: 0]
  ------------------
 1507|      0|      val |= uint64_t(uint8_t(*chars)) << (i * 8);
 1508|      0|      ++chars;
 1509|      0|    }
 1510|      0|    return val;
 1511|      0|  }
 1512|  2.16M|  uint64_t val;
 1513|  2.16M|  ::memcpy(&val, chars, sizeof(uint64_t));
 1514|       |#if GLZ_FASTFLOAT_IS_BIG_ENDIAN == 1
 1515|       |  // Need to read as-if the number was in little-endian order.
 1516|       |  val = byteswap(val);
 1517|       |#endif
 1518|  2.16M|  return val;
 1519|  2.16M|}
_ZN3glz10fast_float27parse_eight_digits_unrolledEm:
 1575|  1.21M|parse_eight_digits_unrolled(uint64_t val) {
 1576|  1.21M|  uint64_t const mask = 0x000000FF000000FF;
 1577|  1.21M|  uint64_t const mul1 = 0x000F424000000064; // 100 + (1000000ULL << 32)
 1578|  1.21M|  uint64_t const mul2 = 0x0000271000000001; // 1 + (10000ULL << 32)
 1579|  1.21M|  val -= 0x3030303030303030;
 1580|  1.21M|  val = (val * 10) + (val >> 8); // val = (val * 2561) >> 8;
 1581|  1.21M|  val = (((val & mask) * mul1) + (((val >> 16) & mask) * mul2)) >> 32;
 1582|  1.21M|  return uint32_t(val);
 1583|  1.21M|}
_ZNK3glz10fast_float4spanIKcE3lenEv:
  440|  49.2k|  constexpr size_t len() const noexcept { return length; }
_ZN3glz10fast_float19from_chars_advancedIdcEENS0_19from_chars_result_tIT0_EERNS0_22parsed_number_string_tIS3_EERT_:
 4249|   278k|from_chars_advanced(parsed_number_string_t<UC> &pns, T &value) noexcept {
 4250|       |
 4251|   278k|  static_assert(is_supported_float_type<T>::value,
 4252|   278k|                "only some floating-point types are supported");
 4253|   278k|  static_assert(is_supported_char_type<UC>::value,
 4254|   278k|                "only char, wchar_t, char16_t and char32_t are supported");
 4255|       |
 4256|   278k|  from_chars_result_t<UC> answer;
 4257|       |
 4258|   278k|  answer.ec = std::errc(); // be optimistic
 4259|   278k|  answer.ptr = pns.lastmatch;
 4260|       |  // The implementation of the Clinger's fast path is convoluted because
 4261|       |  // we want round-to-nearest in all cases, irrespective of the rounding mode
 4262|       |  // selected on the thread.
 4263|       |  // We proceed optimistically, assuming that detail::rounds_to_nearest()
 4264|       |  // returns true.
 4265|   278k|  if (binary_format<T>::min_exponent_fast_path() <= pns.exponent &&
  ------------------
  |  Branch (4265:7): [True: 275k, False: 3.24k]
  ------------------
 4266|   275k|      pns.exponent <= binary_format<T>::max_exponent_fast_path() &&
  ------------------
  |  Branch (4266:7): [True: 269k, False: 6.03k]
  ------------------
 4267|   269k|      !pns.too_many_digits) {
  ------------------
  |  Branch (4267:7): [True: 256k, False: 13.0k]
  ------------------
 4268|       |    // Unfortunately, the conventional Clinger's fast path is only possible
 4269|       |    // when the system rounds to the nearest float.
 4270|       |    //
 4271|       |    // We expect the next branch to almost always be selected.
 4272|       |    // We could check it first (before the previous branch), but
 4273|       |    // there might be performance advantages at having the check
 4274|       |    // be last.
 4275|   256k|    if (!cpp20_and_in_constexpr() && detail::rounds_to_nearest()) {
  ------------------
  |  Branch (4275:9): [True: 256k, Folded]
  |  Branch (4275:38): [True: 256k, False: 0]
  ------------------
 4276|       |      // We have that fegetround() == FE_TONEAREST.
 4277|       |      // Next is Clinger's fast path.
 4278|   256k|      if (pns.mantissa <= binary_format<T>::max_mantissa_fast_path()) {
  ------------------
  |  Branch (4278:11): [True: 255k, False: 1.56k]
  ------------------
 4279|   255k|        value = T(pns.mantissa);
 4280|   255k|        if (pns.exponent < 0) {
  ------------------
  |  Branch (4280:13): [True: 2.22k, False: 252k]
  ------------------
 4281|  2.22k|          value = value / binary_format<T>::exact_power_of_ten(-pns.exponent);
 4282|   252k|        } else {
 4283|   252k|          value = value * binary_format<T>::exact_power_of_ten(pns.exponent);
 4284|   252k|        }
 4285|   255k|        if (pns.negative) {
  ------------------
  |  Branch (4285:13): [True: 14.8k, False: 240k]
  ------------------
 4286|  14.8k|          value = -value;
 4287|  14.8k|        }
 4288|   255k|        return answer;
 4289|   255k|      }
 4290|   256k|    } else {
 4291|       |      // We do not have that fegetround() == FE_TONEAREST.
 4292|       |      // Next is a modified Clinger's fast path, inspired by Jakub Jelínek's
 4293|       |      // proposal
 4294|      0|      if (pns.exponent >= 0 &&
  ------------------
  |  Branch (4294:11): [True: 0, False: 0]
  ------------------
 4295|      0|          pns.mantissa <=
  ------------------
  |  Branch (4295:11): [True: 0, False: 0]
  ------------------
 4296|      0|              binary_format<T>::max_mantissa_fast_path(pns.exponent)) {
 4297|      0|#if defined(__clang__) || defined(GLZ_FASTFLOAT_32BIT)
 4298|       |        // Clang may map 0 to -0.0 when fegetround() == FE_DOWNWARD
 4299|      0|        if (pns.mantissa == 0) {
  ------------------
  |  Branch (4299:13): [True: 0, False: 0]
  ------------------
 4300|      0|          value = pns.negative ? T(-0.) : T(0.);
  ------------------
  |  Branch (4300:19): [True: 0, False: 0]
  ------------------
 4301|      0|          return answer;
 4302|      0|        }
 4303|      0|#endif
 4304|      0|        value = T(pns.mantissa) *
 4305|      0|                binary_format<T>::exact_power_of_ten(pns.exponent);
 4306|      0|        if (pns.negative) {
  ------------------
  |  Branch (4306:13): [True: 0, False: 0]
  ------------------
 4307|      0|          value = -value;
 4308|      0|        }
 4309|      0|        return answer;
 4310|      0|      }
 4311|      0|    }
 4312|   256k|  }
 4313|  23.8k|  adjusted_mantissa am =
 4314|  23.8k|      compute_float<binary_format<T>>(pns.exponent, pns.mantissa);
 4315|  23.8k|  if (pns.too_many_digits && am.power2 >= 0) {
  ------------------
  |  Branch (4315:7): [True: 19.1k, False: 4.74k]
  |  Branch (4315:30): [True: 19.1k, False: 0]
  ------------------
 4316|  19.1k|    if (am != compute_float<binary_format<T>>(pns.exponent, pns.mantissa + 1)) {
  ------------------
  |  Branch (4316:9): [True: 12.3k, False: 6.79k]
  ------------------
 4317|  12.3k|      am = compute_error<binary_format<T>>(pns.exponent, pns.mantissa);
 4318|  12.3k|    }
 4319|  19.1k|  }
 4320|       |  // If we called compute_float<binary_format<T>>(pns.exponent, pns.mantissa)
 4321|       |  // and we have an invalid power (am.power2 < 0), then we need to go the long
 4322|       |  // way around again. This is very uncommon.
 4323|  23.8k|  if (am.power2 < 0) {
  ------------------
  |  Branch (4323:7): [True: 12.3k, False: 11.5k]
  ------------------
 4324|  12.3k|    am = digit_comp<T>(pns, am);
 4325|  12.3k|  }
 4326|  23.8k|  to_float(pns.negative, am, value);
 4327|       |  // Test for over/underflow.
 4328|  23.8k|  if ((pns.mantissa != 0 && am.mantissa == 0 && am.power2 == 0) ||
  ------------------
  |  Branch (4328:8): [True: 22.9k, False: 894]
  |  Branch (4328:29): [True: 1.37k, False: 21.5k]
  |  Branch (4328:49): [True: 123, False: 1.25k]
  ------------------
 4329|  23.7k|      am.power2 == binary_format<T>::infinite_power()) {
  ------------------
  |  Branch (4329:7): [True: 273, False: 23.4k]
  ------------------
 4330|    396|    answer.ec = std::errc::result_out_of_range;
 4331|    396|  }
 4332|  23.8k|  return answer;
 4333|   278k|}
_ZN3glz10fast_float13binary_formatIdE22min_exponent_fast_pathEv:
  695|   278k|inline constexpr int binary_format<double>::min_exponent_fast_path() {
  696|       |#if (FLT_EVAL_METHOD != 1) && (FLT_EVAL_METHOD != 0)
  697|       |  return 0;
  698|       |#else
  699|   278k|  return -22;
  700|   278k|#endif
  701|   278k|}
_ZN3glz10fast_float13binary_formatIdE22max_exponent_fast_pathEv:
  767|   275k|inline constexpr int binary_format<double>::max_exponent_fast_path() {
  768|   275k|  return 22;
  769|   275k|}
_ZN3glz10fast_float6detail17rounds_to_nearestEv:
 4129|   256k|fastfloat_really_inline bool rounds_to_nearest() noexcept {
 4130|       |  // https://lemire.me/blog/2020/06/26/gcc-not-nearest/
 4131|       |#if (FLT_EVAL_METHOD != 1) && (FLT_EVAL_METHOD != 0)
 4132|       |  return false;
 4133|       |#endif
 4134|       |  // See
 4135|       |  // A fast function to check your floating-point rounding mode
 4136|       |  // https://lemire.me/blog/2022/11/16/a-fast-function-to-check-your-floating-point-rounding-mode/
 4137|       |  //
 4138|       |  // This function is meant to be equivalent to :
 4139|       |  // prior: #include <cfenv>
 4140|       |  //  return fegetround() == FE_TONEAREST;
 4141|       |  // However, it is expected to be much faster than the fegetround()
 4142|       |  // function call.
 4143|       |  //
 4144|       |  // The volatile keyword prevents the compiler from computing the function
 4145|       |  // at compile-time.
 4146|       |  // There might be other ways to prevent compile-time optimizations (e.g.,
 4147|       |  // asm). The value does not need to be std::numeric_limits<float>::min(), any
 4148|       |  // small value so that 1 + x should round to 1 would do (after accounting for
 4149|       |  // excess precision, as in 387 instructions).
 4150|   256k|  static float volatile fmin = (std::numeric_limits<float>::min)();
 4151|   256k|  float fmini = fmin; // we copy it so that it gets loaded at most once.
 4152|       |//
 4153|       |// Explanation:
 4154|       |// Only when fegetround() == FE_TONEAREST do we have that
 4155|       |// fmin + 1.0f == 1.0f - fmin.
 4156|       |//
 4157|       |// FE_UPWARD:
 4158|       |//  fmin + 1.0f > 1
 4159|       |//  1.0f - fmin == 1
 4160|       |//
 4161|       |// FE_DOWNWARD or  FE_TOWARDZERO:
 4162|       |//  fmin + 1.0f == 1
 4163|       |//  1.0f - fmin < 1
 4164|       |//
 4165|       |// Note: This may fail to be accurate if fast-math has been
 4166|       |// enabled, as rounding conventions may not apply.
 4167|       |#ifdef GLZ_FASTFLOAT_VISUAL_STUDIO
 4168|       |#pragma warning(push)
 4169|       |//  todo: is there a VS warning?
 4170|       |//  see
 4171|       |//  https://stackoverflow.com/questions/46079446/is-there-a-warning-for-floating-point-equality-checking-in-visual-studio-2013
 4172|       |#elif defined(__clang__)
 4173|       |#pragma clang diagnostic push
 4174|   256k|#pragma clang diagnostic ignored "-Wfloat-equal"
 4175|       |#elif defined(__GNUC__)
 4176|       |#pragma GCC diagnostic push
 4177|       |#pragma GCC diagnostic ignored "-Wfloat-equal"
 4178|       |#endif
 4179|   256k|  return (fmini + 1.0f == 1.0f - fmini);
 4180|       |#ifdef GLZ_FASTFLOAT_VISUAL_STUDIO
 4181|       |#pragma warning(pop)
 4182|       |#elif defined(__clang__)
 4183|       |#pragma clang diagnostic pop
 4184|       |#elif defined(__GNUC__)
 4185|       |#pragma GCC diagnostic pop
 4186|       |#endif
 4187|   256k|}
_ZN3glz10fast_float13binary_formatIdE22max_mantissa_fast_pathEv:
  777|   256k|inline constexpr uint64_t binary_format<double>::max_mantissa_fast_path() {
  778|   256k|  return uint64_t(2) << mantissa_explicit_bits();
  779|   256k|}
_ZN3glz10fast_float13binary_formatIdE22mantissa_explicit_bitsEv:
  713|   512k|inline constexpr int binary_format<double>::mantissa_explicit_bits() {
  714|   512k|  return 52;
  715|   512k|}
_ZN3glz10fast_float13binary_formatIdE18exact_power_of_tenEl:
 1057|   255k|binary_format<double>::exact_power_of_ten(int64_t power) {
 1058|       |  // Work around clang bug https://godbolt.org/z/zedh7rrhc
 1059|   255k|  return (void)powers_of_ten[0], powers_of_ten[power];
 1060|   255k|}
_ZN3glz10fast_float13compute_floatINS0_13binary_formatIdEEEENS0_17adjusted_mantissaElm:
 2852|  42.9k|compute_float(int64_t q, uint64_t w) noexcept {
 2853|  42.9k|  adjusted_mantissa answer;
 2854|  42.9k|  if ((w == 0) || (q < binary::smallest_power_of_ten())) {
  ------------------
  |  Branch (2854:7): [True: 894, False: 42.0k]
  |  Branch (2854:19): [True: 125, False: 41.9k]
  ------------------
 2855|  1.01k|    answer.power2 = 0;
 2856|  1.01k|    answer.mantissa = 0;
 2857|       |    // result should be zero
 2858|  1.01k|    return answer;
 2859|  1.01k|  }
 2860|  41.9k|  if (q > binary::largest_power_of_ten()) {
  ------------------
  |  Branch (2860:7): [True: 297, False: 41.6k]
  ------------------
 2861|       |    // we want to get infinity:
 2862|    297|    answer.power2 = binary::infinite_power();
 2863|    297|    answer.mantissa = 0;
 2864|    297|    return answer;
 2865|    297|  }
 2866|       |  // At this point in time q is in [powers::smallest_power_of_five,
 2867|       |  // powers::largest_power_of_five].
 2868|       |
 2869|       |  // We want the most significant bit of i to be 1. Shift if needed.
 2870|  41.6k|  int lz = leading_zeroes(w);
 2871|  41.6k|  w <<= lz;
 2872|       |
 2873|       |  // The required precision is binary::mantissa_explicit_bits() + 3 because
 2874|       |  // 1. We need the implicit bit
 2875|       |  // 2. We need an extra bit for rounding purposes
 2876|       |  // 3. We might lose a bit due to the "upperbit" routine (result too small,
 2877|       |  // requiring a shift)
 2878|       |
 2879|  41.6k|  value128 product =
 2880|  41.6k|      compute_product_approximation<binary::mantissa_explicit_bits() + 3>(q, w);
 2881|       |  // The computed 'product' is always sufficient.
 2882|       |  // Mathematical proof:
 2883|       |  // Noble Mushtak and Daniel Lemire, Fast Number Parsing Without Fallback (to
 2884|       |  // appear) See script/mushtak_lemire.py
 2885|       |
 2886|       |  // The "compute_product_approximation" function can be slightly slower than a
 2887|       |  // branchless approach: value128 product = compute_product(q, w); but in
 2888|       |  // practice, we can win big with the compute_product_approximation if its
 2889|       |  // additional branch is easily predicted. Which is best is data specific.
 2890|  41.6k|  int upperbit = int(product.high >> 63);
 2891|  41.6k|  int shift = upperbit + 64 - binary::mantissa_explicit_bits() - 3;
 2892|       |
 2893|  41.6k|  answer.mantissa = product.high >> shift;
 2894|       |
 2895|  41.6k|  answer.power2 = int32_t(detail::power(int32_t(q)) + upperbit - lz -
 2896|  41.6k|                          binary::minimum_exponent());
 2897|  41.6k|  if (answer.power2 <= 0) { // we have a subnormal?
  ------------------
  |  Branch (2897:7): [True: 1.05k, False: 40.6k]
  ------------------
 2898|       |    // Here have that answer.power2 <= 0 so -answer.power2 >= 0
 2899|  1.05k|    if (-answer.power2 + 1 >=
  ------------------
  |  Branch (2899:9): [True: 12, False: 1.04k]
  ------------------
 2900|  1.05k|        64) { // if we have more than 64 bits below the minimum exponent, you
 2901|       |              // have a zero for sure.
 2902|     12|      answer.power2 = 0;
 2903|     12|      answer.mantissa = 0;
 2904|       |      // result should be zero
 2905|     12|      return answer;
 2906|     12|    }
 2907|       |    // next line is safe because -answer.power2 + 1 < 64
 2908|  1.04k|    answer.mantissa >>= -answer.power2 + 1;
 2909|       |    // Thankfully, we can't have both "round-to-even" and subnormals because
 2910|       |    // "round-to-even" only occurs for powers close to 0 in the 32-bit and
 2911|       |    // and 64-bit case (with no more than 19 digits).
 2912|  1.04k|    answer.mantissa += (answer.mantissa & 1); // round up
 2913|  1.04k|    answer.mantissa >>= 1;
 2914|       |    // There is a weird scenario where we don't have a subnormal but just.
 2915|       |    // Suppose we start with 2.2250738585072013e-308, we end up
 2916|       |    // with 0x3fffffffffffff x 2^-1023-53 which is technically subnormal
 2917|       |    // whereas 0x40000000000000 x 2^-1023-53  is normal. Now, we need to round
 2918|       |    // up 0x3fffffffffffff x 2^-1023-53  and once we do, we are no longer
 2919|       |    // subnormal, but we can only know this after rounding.
 2920|       |    // So we only declare a subnormal if we are smaller than the threshold.
 2921|  1.04k|    answer.power2 =
 2922|  1.04k|        (answer.mantissa < (uint64_t(1) << binary::mantissa_explicit_bits()))
  ------------------
  |  Branch (2922:9): [True: 1.04k, False: 0]
  ------------------
 2923|  1.04k|            ? 0
 2924|  1.04k|            : 1;
 2925|  1.04k|    return answer;
 2926|  1.05k|  }
 2927|       |
 2928|       |  // usually, we round *up*, but if we fall right in between and and we have an
 2929|       |  // even basis, we need to round down
 2930|       |  // We are only concerned with the cases where 5**q fits in single 64-bit word.
 2931|  40.6k|  if ((product.low <= 1) && (q >= binary::min_exponent_round_to_even()) &&
  ------------------
  |  Branch (2931:7): [True: 11.8k, False: 28.7k]
  |  Branch (2931:29): [True: 10.9k, False: 840]
  ------------------
 2932|  10.9k|      (q <= binary::max_exponent_round_to_even()) &&
  ------------------
  |  Branch (2932:7): [True: 10.4k, False: 514]
  ------------------
 2933|  10.4k|      ((answer.mantissa & 3) == 1)) { // we may fall between two floats!
  ------------------
  |  Branch (2933:7): [True: 3.67k, False: 6.80k]
  ------------------
 2934|       |    // To be in-between two floats we need that in doing
 2935|       |    //   answer.mantissa = product.high >> (upperbit + 64 -
 2936|       |    //   binary::mantissa_explicit_bits() - 3);
 2937|       |    // ... we dropped out only zeroes. But if this happened, then we can go
 2938|       |    // back!!!
 2939|  3.67k|    if ((answer.mantissa << shift) == product.high) {
  ------------------
  |  Branch (2939:9): [True: 1.69k, False: 1.97k]
  ------------------
 2940|  1.69k|      answer.mantissa &= ~uint64_t(1); // flip it so that we do not round up
 2941|  1.69k|    }
 2942|  3.67k|  }
 2943|       |
 2944|  40.6k|  answer.mantissa += (answer.mantissa & 1); // round up
 2945|  40.6k|  answer.mantissa >>= 1;
 2946|  40.6k|  if (answer.mantissa >= (uint64_t(2) << binary::mantissa_explicit_bits())) {
  ------------------
  |  Branch (2946:7): [True: 914, False: 39.6k]
  ------------------
 2947|    914|    answer.mantissa = (uint64_t(1) << binary::mantissa_explicit_bits());
 2948|    914|    answer.power2++; // undo previous addition
 2949|    914|  }
 2950|       |
 2951|  40.6k|  answer.mantissa &= ~(uint64_t(1) << binary::mantissa_explicit_bits());
 2952|  40.6k|  if (answer.power2 >= binary::infinite_power()) { // infinity
  ------------------
  |  Branch (2952:7): [True: 40, False: 40.5k]
  ------------------
 2953|     40|    answer.power2 = binary::infinite_power();
 2954|     40|    answer.mantissa = 0;
 2955|     40|  }
 2956|  40.6k|  return answer;
 2957|  41.6k|}
_ZN3glz10fast_float17adjusted_mantissaC2Ev:
  568|  67.6k|  adjusted_mantissa() = default;
_ZN3glz10fast_float13binary_formatIdE21smallest_power_of_tenEv:
 1077|  42.0k|inline constexpr int binary_format<double>::smallest_power_of_ten() {
 1078|  42.0k|  return -342;
 1079|  42.0k|}
_ZN3glz10fast_float13binary_formatIdE20largest_power_of_tenEv:
 1068|  41.9k|template <> inline constexpr int binary_format<double>::largest_power_of_ten() {
 1069|  41.9k|  return 308;
 1070|  41.9k|}
_ZN3glz10fast_float14leading_zeroesEm:
  488|  60.7k|leading_zeroes(uint64_t input_num) {
  489|  60.7k|  assert(input_num > 0);
  ------------------
  |  Branch (489:3): [True: 60.7k, False: 0]
  ------------------
  490|  60.7k|  if (cpp20_and_in_constexpr()) {
  ------------------
  |  Branch (490:7): [Folded, False: 60.7k]
  ------------------
  491|      0|    return leading_zeroes_generic(input_num);
  492|      0|  }
  493|       |#ifdef GLZ_FASTFLOAT_VISUAL_STUDIO
  494|       |#if defined(_M_X64) || defined(_M_ARM64)
  495|       |  unsigned long leading_zero = 0;
  496|       |  // Search the mask data from most significant bit (MSB)
  497|       |  // to least significant bit (LSB) for a set bit (1).
  498|       |  _BitScanReverse64(&leading_zero, input_num);
  499|       |  return (int)(63 - leading_zero);
  500|       |#else
  501|       |  return leading_zeroes_generic(input_num);
  502|       |#endif
  503|       |#else
  504|  60.7k|  return __builtin_clzll(input_num);
  505|  60.7k|#endif
  506|  60.7k|}
_ZN3glz10fast_float29compute_product_approximationILi55EEENS0_8value128Elm:
 2771|  53.9k|compute_product_approximation(int64_t q, uint64_t w) {
 2772|  53.9k|  int const index = 2 * int(q - powers::smallest_power_of_five);
 2773|       |  // For small values of q, e.g., q in [0,27], the answer is always exact
 2774|       |  // because The line value128 firstproduct = full_multiplication(w,
 2775|       |  // power_of_five_128[index]); gives the exact answer.
 2776|  53.9k|  value128 firstproduct =
 2777|  53.9k|      full_multiplication(w, powers::power_of_five_128[index]);
 2778|  53.9k|  static_assert((bit_precision >= 0) && (bit_precision <= 64),
 2779|  53.9k|                " precision should  be in (0,64]");
 2780|  53.9k|  constexpr uint64_t precision_mask =
 2781|  53.9k|      (bit_precision < 64) ? (uint64_t(0xFFFFFFFFFFFFFFFF) >> bit_precision)
  ------------------
  |  Branch (2781:7): [True: 0, Folded]
  ------------------
 2782|  53.9k|                           : uint64_t(0xFFFFFFFFFFFFFFFF);
 2783|  53.9k|  if ((firstproduct.high & precision_mask) ==
  ------------------
  |  Branch (2783:7): [True: 7.93k, False: 46.0k]
  ------------------
 2784|  53.9k|      precision_mask) { // could further guard with  (lower + w < lower)
 2785|       |    // regarding the second product, we only need secondproduct.high, but our
 2786|       |    // expectation is that the compiler will optimize this extra work away if
 2787|       |    // needed.
 2788|  7.93k|    value128 secondproduct =
 2789|  7.93k|        full_multiplication(w, powers::power_of_five_128[index + 1]);
 2790|  7.93k|    firstproduct.low += secondproduct.high;
 2791|  7.93k|    if (secondproduct.high > firstproduct.low) {
  ------------------
  |  Branch (2791:9): [True: 3.65k, False: 4.28k]
  ------------------
 2792|  3.65k|      firstproduct.high++;
 2793|  3.65k|    }
 2794|  7.93k|  }
 2795|  53.9k|  return firstproduct;
 2796|  53.9k|}
_ZN3glz10fast_float19full_multiplicationEmm:
  540|  61.9k|full_multiplication(uint64_t a, uint64_t b) {
  541|  61.9k|  if (cpp20_and_in_constexpr()) {
  ------------------
  |  Branch (541:7): [Folded, False: 61.9k]
  ------------------
  542|      0|    value128 answer;
  543|      0|    answer.low = umul128_generic(a, b, &answer.high);
  544|      0|    return answer;
  545|      0|  }
  546|  61.9k|  value128 answer;
  547|       |#if defined(_M_ARM64) && !defined(__MINGW32__)
  548|       |  // ARM64 has native support for 64-bit multiplications, no need to emulate
  549|       |  // But MinGW on ARM64 doesn't have native support for 64-bit multiplications
  550|       |  answer.high = __umulh(a, b);
  551|       |  answer.low = a * b;
  552|       |#elif defined(GLZ_FASTFLOAT_32BIT) ||                                              \
  553|       |    (defined(_WIN64) && !defined(__clang__) && !defined(_M_ARM64))
  554|       |  answer.low = _umul128(a, b, &answer.high); // _umul128 not available on ARM64
  555|       |#elif defined(GLZ_FASTFLOAT_64BIT) && defined(__SIZEOF_INT128__)
  556|       |  __uint128_t r = ((__uint128_t)a) * b;
  557|  61.9k|  answer.low = uint64_t(r);
  558|  61.9k|  answer.high = uint64_t(r >> 64);
  559|       |#else
  560|       |  answer.low = umul128_generic(a, b, &answer.high);
  561|       |#endif
  562|  61.9k|  return answer;
  563|  61.9k|}
_ZN3glz10fast_float8value128C2Ev:
  454|  61.9k|  constexpr value128() : low(0), high(0) {}
_ZN3glz10fast_float6detail5powerEi:
 2814|  53.9k|constexpr fastfloat_really_inline int32_t power(int32_t q) noexcept {
 2815|  53.9k|  return (((152170 + 65536) * q) >> 16) + 63;
 2816|  53.9k|}
_ZN3glz10fast_float13binary_formatIdE16minimum_exponentEv:
  742|  66.3k|template <> inline constexpr int binary_format<double>::minimum_exponent() {
  743|  66.3k|  return -1023;
  744|  66.3k|}
_ZN3glz10fast_float13binary_formatIdE26min_exponent_round_to_evenEv:
  733|  11.8k|inline constexpr int binary_format<double>::min_exponent_round_to_even() {
  734|  11.8k|  return -4;
  735|  11.8k|}
_ZN3glz10fast_float13binary_formatIdE26max_exponent_round_to_evenEv:
  723|  10.9k|inline constexpr int binary_format<double>::max_exponent_round_to_even() {
  724|  10.9k|  return 23;
  725|  10.9k|}
_ZNK3glz10fast_float17adjusted_mantissaneERKS1_:
  574|  19.1k|  constexpr bool operator!=(adjusted_mantissa const &o) const {
  575|  19.1k|    return mantissa != o.mantissa || power2 != o.power2;
  ------------------
  |  Branch (575:12): [True: 12.3k, False: 6.79k]
  |  Branch (575:38): [True: 0, False: 6.79k]
  ------------------
  576|  19.1k|  }
_ZN3glz10fast_float13compute_errorINS0_13binary_formatIdEEEENS0_17adjusted_mantissaElm:
 2837|  12.3k|compute_error(int64_t q, uint64_t w) noexcept {
 2838|  12.3k|  int lz = leading_zeroes(w);
 2839|  12.3k|  w <<= lz;
 2840|  12.3k|  value128 product =
 2841|  12.3k|      compute_product_approximation<binary::mantissa_explicit_bits() + 3>(q, w);
 2842|  12.3k|  return compute_error_scaled<binary>(q, product.high, lz);
 2843|  12.3k|}
_ZN3glz10fast_float20compute_error_scaledINS0_13binary_formatIdEEEENS0_17adjusted_mantissaElmi:
 2823|  12.3k|compute_error_scaled(int64_t q, uint64_t w, int lz) noexcept {
 2824|  12.3k|  int hilz = int(w >> 63) ^ 1;
 2825|  12.3k|  adjusted_mantissa answer;
 2826|  12.3k|  answer.mantissa = w << hilz;
 2827|  12.3k|  int bias = binary::mantissa_explicit_bits() - binary::minimum_exponent();
 2828|  12.3k|  answer.power2 = int32_t(detail::power(int32_t(q)) + bias - hilz - lz - 62 +
 2829|  12.3k|                          invalid_am_bias);
 2830|  12.3k|  return answer;
 2831|  12.3k|}
_ZN3glz10fast_float10digit_compIdcEENS0_17adjusted_mantissaERNS0_22parsed_number_string_tIT0_EES2_:
 4034|  12.3k|digit_comp(parsed_number_string_t<UC> &num, adjusted_mantissa am) noexcept {
 4035|       |  // remove the invalid exponent bias
 4036|  12.3k|  am.power2 -= invalid_am_bias;
 4037|       |
 4038|  12.3k|  int32_t sci_exp = scientific_exponent(num);
 4039|  12.3k|  size_t max_digits = binary_format<T>::max_digits();
 4040|  12.3k|  size_t digits = 0;
 4041|  12.3k|  bigint bigmant;
 4042|  12.3k|  parse_mantissa(bigmant, num, max_digits, digits);
 4043|       |  // can't underflow, since digits is at most max_digits.
 4044|  12.3k|  int32_t exponent = sci_exp + 1 - int32_t(digits);
 4045|  12.3k|  if (exponent >= 0) {
  ------------------
  |  Branch (4045:7): [True: 3.38k, False: 8.94k]
  ------------------
 4046|  3.38k|    return positive_digit_comp<T>(bigmant, exponent);
 4047|  8.94k|  } else {
 4048|  8.94k|    return negative_digit_comp<T>(bigmant, am, exponent);
 4049|  8.94k|  }
 4050|  12.3k|}
_ZN3glz10fast_float19scientific_exponentIcEEiRNS0_22parsed_number_string_tIT_EE:
 3640|  12.3k|scientific_exponent(parsed_number_string_t<UC> &num) noexcept {
 3641|  12.3k|  uint64_t mantissa = num.mantissa;
 3642|  12.3k|  int32_t exponent = int32_t(num.exponent);
 3643|  61.6k|  while (mantissa >= 10000) {
  ------------------
  |  Branch (3643:10): [True: 49.2k, False: 12.3k]
  ------------------
 3644|  49.2k|    mantissa /= 10000;
 3645|  49.2k|    exponent += 4;
 3646|  49.2k|  }
 3647|  24.6k|  while (mantissa >= 100) {
  ------------------
  |  Branch (3647:10): [True: 12.3k, False: 12.3k]
  ------------------
 3648|  12.3k|    mantissa /= 100;
 3649|  12.3k|    exponent += 2;
 3650|  12.3k|  }
 3651|  12.3k|  while (mantissa >= 10) {
  ------------------
  |  Branch (3651:10): [True: 0, False: 12.3k]
  ------------------
 3652|      0|    mantissa /= 10;
 3653|      0|    exponent += 1;
 3654|      0|  }
 3655|  12.3k|  return exponent;
 3656|  12.3k|}
_ZN3glz10fast_float13binary_formatIdE10max_digitsEv:
 1085|  12.3k|template <> inline constexpr size_t binary_format<double>::max_digits() {
 1086|  12.3k|  return 769;
 1087|  12.3k|}
_ZN3glz10fast_float6bigintC2Ev:
 3399|  12.3k|  GLZ_FASTFLOAT_CONSTEXPR20 bigint() : vec() {}
_ZN3glz10fast_float8stackvecILt62EEC2Ev:
 3006|  73.1k|  stackvec() = default;
_ZN3glz10fast_float14parse_mantissaIcEEvRNS0_6bigintERNS0_22parsed_number_string_tIT_EEmRm:
 3859|  12.3k|               size_t max_digits, size_t &digits) noexcept {
 3860|       |  // try to minimize the number of big integer and scalar multiplication.
 3861|       |  // therefore, try to parse 8 digits at a time, and multiply by the largest
 3862|       |  // scalar value (9 or 19 digits) for each step.
 3863|  12.3k|  size_t counter = 0;
 3864|  12.3k|  digits = 0;
 3865|  12.3k|  limb value = 0;
 3866|  12.3k|#ifdef GLZ_FASTFLOAT_64BIT_LIMB
 3867|  12.3k|  size_t step = 19;
 3868|       |#else
 3869|       |  size_t step = 9;
 3870|       |#endif
 3871|       |
 3872|       |  // process all integer digits.
 3873|  12.3k|  UC const *p = num.integer.ptr;
 3874|  12.3k|  UC const *pend = p + num.integer.len();
 3875|  12.3k|  skip_zeros(p, pend);
 3876|       |  // process all digits, in increments of step per loop
 3877|  51.0k|  while (p != pend) {
  ------------------
  |  Branch (3877:10): [True: 38.8k, False: 12.1k]
  ------------------
 3878|  99.5k|    while ((std::distance(p, pend) >= 8) && (step - counter >= 8) &&
  ------------------
  |  Branch (3878:12): [True: 84.1k, False: 15.3k]
  |  Branch (3878:45): [True: 60.7k, False: 23.3k]
  ------------------
 3879|  60.7k|           (max_digits - digits >= 8)) {
  ------------------
  |  Branch (3879:12): [True: 60.6k, False: 158]
  ------------------
 3880|  60.6k|      parse_eight_digits(p, value, counter, digits);
 3881|  60.6k|    }
 3882|   155k|    while (counter < step && p != pend && digits < max_digits) {
  ------------------
  |  Branch (3882:12): [True: 127k, False: 28.0k]
  |  Branch (3882:30): [True: 116k, False: 10.7k]
  |  Branch (3882:43): [True: 116k, False: 158]
  ------------------
 3883|   116k|      parse_one_digit(p, value, counter, digits);
 3884|   116k|    }
 3885|  38.8k|    if (digits == max_digits) {
  ------------------
  |  Branch (3885:9): [True: 158, False: 38.7k]
  ------------------
 3886|       |      // add the temporary value, then check if we've truncated any digits
 3887|    158|      add_native(result, limb(powers_of_ten_uint64[counter]), value);
 3888|    158|      bool truncated = is_truncated(p, pend);
 3889|    158|      if (num.fraction.ptr != nullptr) {
  ------------------
  |  Branch (3889:11): [True: 86, False: 72]
  ------------------
 3890|     86|        truncated |= is_truncated(num.fraction);
 3891|     86|      }
 3892|    158|      if (truncated) {
  ------------------
  |  Branch (3892:11): [True: 146, False: 12]
  ------------------
 3893|    146|        round_up_bigint(result, digits);
 3894|    146|      }
 3895|    158|      return;
 3896|  38.7k|    } else {
 3897|  38.7k|      add_native(result, limb(powers_of_ten_uint64[counter]), value);
 3898|  38.7k|      counter = 0;
 3899|  38.7k|      value = 0;
 3900|  38.7k|    }
 3901|  38.8k|  }
 3902|       |
 3903|       |  // add our fraction digits, if they're available.
 3904|  12.1k|  if (num.fraction.ptr != nullptr) {
  ------------------
  |  Branch (3904:7): [True: 8.90k, False: 3.25k]
  ------------------
 3905|  8.90k|    p = num.fraction.ptr;
 3906|  8.90k|    pend = p + num.fraction.len();
 3907|  8.90k|    if (digits == 0) {
  ------------------
  |  Branch (3907:9): [True: 1.37k, False: 7.53k]
  ------------------
 3908|  1.37k|      skip_zeros(p, pend);
 3909|  1.37k|    }
 3910|       |    // process all digits, in increments of step per loop
 3911|   114k|    while (p != pend) {
  ------------------
  |  Branch (3911:12): [True: 107k, False: 6.72k]
  ------------------
 3912|   312k|      while ((std::distance(p, pend) >= 8) && (step - counter >= 8) &&
  ------------------
  |  Branch (3912:14): [True: 304k, False: 8.46k]
  |  Branch (3912:47): [True: 205k, False: 98.2k]
  ------------------
 3913|   205k|             (max_digits - digits >= 8)) {
  ------------------
  |  Branch (3913:14): [True: 204k, False: 892]
  ------------------
 3914|   204k|        parse_eight_digits(p, value, counter, digits);
 3915|   204k|      }
 3916|   426k|      while (counter < step && p != pend && digits < max_digits) {
  ------------------
  |  Branch (3916:14): [True: 327k, False: 99.0k]
  |  Branch (3916:32): [True: 320k, False: 6.67k]
  |  Branch (3916:45): [True: 318k, False: 1.95k]
  ------------------
 3917|   318k|        parse_one_digit(p, value, counter, digits);
 3918|   318k|      }
 3919|   107k|      if (digits == max_digits) {
  ------------------
  |  Branch (3919:11): [True: 2.18k, False: 105k]
  ------------------
 3920|       |        // add the temporary value, then check if we've truncated any digits
 3921|  2.18k|        add_native(result, limb(powers_of_ten_uint64[counter]), value);
 3922|  2.18k|        bool truncated = is_truncated(p, pend);
 3923|  2.18k|        if (truncated) {
  ------------------
  |  Branch (3923:13): [True: 1.65k, False: 528]
  ------------------
 3924|  1.65k|          round_up_bigint(result, digits);
 3925|  1.65k|        }
 3926|  2.18k|        return;
 3927|   105k|      } else {
 3928|   105k|        add_native(result, limb(powers_of_ten_uint64[counter]), value);
 3929|   105k|        counter = 0;
 3930|   105k|        value = 0;
 3931|   105k|      }
 3932|   107k|    }
 3933|  8.90k|  }
 3934|       |
 3935|  9.97k|  if (counter != 0) {
  ------------------
  |  Branch (3935:7): [True: 0, False: 9.97k]
  ------------------
 3936|      0|    add_native(result, limb(powers_of_ten_uint64[counter]), value);
 3937|      0|  }
 3938|  9.97k|}
_ZN3glz10fast_float10skip_zerosIcEEvRPKT_S4_:
 3773|  13.6k|skip_zeros(UC const *&first, UC const *last) noexcept {
 3774|  13.6k|  uint64_t val;
 3775|  17.1k|  while (!cpp20_and_in_constexpr() &&
  ------------------
  |  Branch (3775:10): [True: 17.1k, Folded]
  ------------------
 3776|  17.1k|         std::distance(first, last) >= int_cmp_len<UC>()) {
  ------------------
  |  Branch (3776:10): [True: 12.8k, False: 4.28k]
  ------------------
 3777|  12.8k|    ::memcpy(&val, first, sizeof(uint64_t));
 3778|  12.8k|    if (val != int_cmp_zeros<UC>()) {
  ------------------
  |  Branch (3778:9): [True: 9.41k, False: 3.47k]
  ------------------
 3779|  9.41k|      break;
 3780|  9.41k|    }
 3781|  3.47k|    first += int_cmp_len<UC>();
 3782|  3.47k|  }
 3783|  18.2k|  while (first != last) {
  ------------------
  |  Branch (3783:10): [True: 16.8k, False: 1.37k]
  ------------------
 3784|  16.8k|    if (*first != UC('0')) {
  ------------------
  |  Branch (3784:9): [True: 12.3k, False: 4.51k]
  ------------------
 3785|  12.3k|      break;
 3786|  12.3k|    }
 3787|  4.51k|    first++;
 3788|  4.51k|  }
 3789|  13.6k|}
_ZN3glz10fast_float11int_cmp_lenIcEEiv:
 1180|  77.7k|template <typename UC> constexpr int int_cmp_len() {
 1181|  77.7k|  return sizeof(uint64_t) / sizeof(UC);
 1182|  77.7k|}
_ZN3glz10fast_float13int_cmp_zerosIcEEmv:
 1170|  41.6k|template <typename UC> constexpr uint64_t int_cmp_zeros() {
 1171|  41.6k|  static_assert((sizeof(UC) == 1) || (sizeof(UC) == 2) || (sizeof(UC) == 4),
 1172|  41.6k|                "Unsupported character size");
 1173|  41.6k|  return (sizeof(UC) == 1) ? 0x3030303030303030
  ------------------
  |  Branch (1173:10): [True: 41.6k, Folded]
  ------------------
 1174|  41.6k|         : (sizeof(UC) == 2)
  ------------------
  |  Branch (1174:12): [Folded, False: 0]
  ------------------
 1175|      0|             ? (uint64_t(UC('0')) << 48 | uint64_t(UC('0')) << 32 |
 1176|      0|                uint64_t(UC('0')) << 16 | UC('0'))
 1177|      0|             : (uint64_t(UC('0')) << 32 | UC('0'));
 1178|  41.6k|}
_ZN3glz10fast_float18parse_eight_digitsIcEEvRPKT_RmS6_S6_:
 3824|   265k|                   size_t &count) noexcept {
 3825|   265k|  value = value * 100000000 + parse_eight_digits_unrolled(p);
 3826|   265k|  p += 8;
 3827|   265k|  counter += 8;
 3828|   265k|  count += 8;
 3829|   265k|}
_ZN3glz10fast_float27parse_eight_digits_unrolledIcEEjPKT_:
 1588|   265k|parse_eight_digits_unrolled(UC const *chars) noexcept {
 1589|   265k|  if (cpp20_and_in_constexpr() || !has_simd_opt<UC>()) {
  ------------------
  |  Branch (1589:7): [Folded, False: 0]
  |  Branch (1589:35): [True: 0, Folded]
  ------------------
 1590|   265k|    return parse_eight_digits_unrolled(read8_to_u64(chars)); // truncation okay
 1591|   265k|  }
 1592|      0|  return parse_eight_digits_unrolled(simd_read8_to_u64(chars));
 1593|   265k|}
_ZN3glz10fast_float15parse_one_digitIcEEvRPKT_RmS6_S6_:
 3834|   435k|                size_t &count) noexcept {
 3835|   435k|  value = value * 10 + limb(*p - UC('0'));
 3836|   435k|  p++;
 3837|   435k|  counter++;
 3838|   435k|  count++;
 3839|   435k|}
_ZN3glz10fast_float10add_nativeERNS0_6bigintEmm:
 3842|   148k|add_native(bigint &big, limb power, limb value) noexcept {
 3843|   148k|  big.mul(power);
 3844|   148k|  big.add(value);
 3845|   148k|}
_ZN3glz10fast_float6bigint3mulEm:
 3552|   148k|  GLZ_FASTFLOAT_CONSTEXPR20 bool mul(limb y) noexcept { return small_mul(vec, y); }
_ZN3glz10fast_float9small_mulILt62EEEbRNS0_8stackvecIXT_EEEm:
 3249|   239k|                                            limb y) noexcept {
 3250|   239k|  limb carry = 0;
 3251|  3.39M|  for (size_t index = 0; index < vec.len(); index++) {
  ------------------
  |  Branch (3251:26): [True: 3.15M, False: 239k]
  ------------------
 3252|  3.15M|    vec[index] = scalar_mul(vec[index], y, carry);
 3253|  3.15M|  }
 3254|   239k|  if (carry != 0) {
  ------------------
  |  Branch (3254:7): [True: 210k, False: 29.0k]
  ------------------
 3255|   210k|    GLZ_FASTFLOAT_TRY(vec.try_push(carry));
  ------------------
  |  |  354|   210k|  {                                                                            \
  |  |  355|   210k|    if (!(x))                                                                  \
  |  |  ------------------
  |  |  |  Branch (355:9): [True: 0, False: 210k]
  |  |  ------------------
  |  |  356|   210k|      return false;                                                            \
  |  |  357|   210k|  }
  ------------------
 3256|   210k|  }
 3257|   239k|  return true;
 3258|   239k|}
_ZNK3glz10fast_float8stackvecILt62EE3lenEv:
 3039|  4.44M|  constexpr size_t len() const noexcept { return length; }
_ZN3glz10fast_float10scalar_mulEmmRm:
 3196|  3.15M|scalar_mul(limb x, limb y, limb &carry) noexcept {
 3197|  3.15M|#ifdef GLZ_FASTFLOAT_64BIT_LIMB
 3198|  3.15M|#if defined(__SIZEOF_INT128__)
 3199|       |  // GCC and clang both define it as an extension.
 3200|  3.15M|  __uint128_t z = __uint128_t(x) * __uint128_t(y) + __uint128_t(carry);
 3201|  3.15M|  carry = limb(z >> limb_bits);
 3202|  3.15M|  return limb(z);
 3203|       |#else
 3204|       |  // fallback, no native 128-bit integer multiplication with carry.
 3205|       |  // on msvc, this optimizes identically, somehow.
 3206|       |  value128 z = full_multiplication(x, y);
 3207|       |  bool overflow;
 3208|       |  z.low = scalar_add(z.low, carry, overflow);
 3209|       |  z.high += uint64_t(overflow); // cannot overflow
 3210|       |  carry = z.high;
 3211|       |  return z.low;
 3212|       |#endif
 3213|       |#else
 3214|       |  uint64_t z = uint64_t(x) * uint64_t(y) + uint64_t(carry);
 3215|       |  carry = limb(z >> limb_bits);
 3216|       |  return limb(z);
 3217|       |#endif
 3218|  3.15M|}
_ZN3glz10fast_float8stackvecILt62EEixEm:
 3017|  7.73M|  GLZ_FASTFLOAT_CONSTEXPR14 limb &operator[](size_t index) noexcept {
 3018|  7.73M|    GLZ_FASTFLOAT_DEBUG_ASSERT(index < length);
  ------------------
  |  |  349|  7.73M|  { ((void)(x)); }
  ------------------
 3019|  7.73M|    return data[index];
 3020|  7.73M|  }
_ZN3glz10fast_float8stackvecILt62EE8try_pushEm:
 3052|   226k|  GLZ_FASTFLOAT_CONSTEXPR14 bool try_push(limb value) noexcept {
 3053|   226k|    if (len() < capacity()) {
  ------------------
  |  Branch (3053:9): [True: 226k, False: 0]
  ------------------
 3054|   226k|      push_unchecked(value);
 3055|   226k|      return true;
 3056|   226k|    } else {
 3057|      0|      return false;
 3058|      0|    }
 3059|   226k|  }
_ZNK3glz10fast_float8stackvecILt62EE8capacityEv:
 3043|   348k|  constexpr size_t capacity() const noexcept { return size; }
_ZN3glz10fast_float8stackvecILt62EE14push_uncheckedEm:
 3046|   235k|  GLZ_FASTFLOAT_CONSTEXPR14 void push_unchecked(limb value) noexcept {
 3047|   235k|    data[length] = value;
 3048|   235k|    length++;
 3049|   235k|  }
_ZN3glz10fast_float6bigint3addEm:
 3554|   148k|  GLZ_FASTFLOAT_CONSTEXPR20 bool add(limb y) noexcept { return small_add(vec, y); }
_ZN3glz10fast_float9small_addILt62EEEbRNS0_8stackvecIXT_EEEm:
 3242|   148k|small_add(stackvec<size> &vec, limb y) noexcept {
 3243|   148k|  return small_add_from(vec, y, 0);
 3244|   148k|}
_ZN3glz10fast_float14small_add_fromILt62EEEbRNS0_8stackvecIXT_EEEmm:
 3224|   148k|                                                 size_t start) noexcept {
 3225|   148k|  size_t index = start;
 3226|   148k|  limb carry = y;
 3227|   148k|  bool overflow;
 3228|   290k|  while (carry != 0 && index < vec.len()) {
  ------------------
  |  Branch (3228:10): [True: 154k, False: 135k]
  |  Branch (3228:24): [True: 141k, False: 12.3k]
  ------------------
 3229|   141k|    vec[index] = scalar_add(vec[index], carry, overflow);
 3230|   141k|    carry = limb(overflow);
 3231|   141k|    index += 1;
 3232|   141k|  }
 3233|   148k|  if (carry != 0) {
  ------------------
  |  Branch (3233:7): [True: 12.3k, False: 135k]
  ------------------
 3234|  12.3k|    GLZ_FASTFLOAT_TRY(vec.try_push(carry));
  ------------------
  |  |  354|  12.3k|  {                                                                            \
  |  |  355|  12.3k|    if (!(x))                                                                  \
  |  |  ------------------
  |  |  |  Branch (355:9): [True: 0, False: 12.3k]
  |  |  ------------------
  |  |  356|  12.3k|      return false;                                                            \
  |  |  357|  12.3k|  }
  ------------------
 3235|  12.3k|  }
 3236|   148k|  return true;
 3237|   148k|}
_ZN3glz10fast_float10scalar_addEmmRb:
 3176|   806k|scalar_add(limb x, limb y, bool &overflow) noexcept {
 3177|   806k|  limb z;
 3178|       |// gcc and clang
 3179|   806k|#if defined(__has_builtin)
 3180|   806k|#if __has_builtin(__builtin_add_overflow)
 3181|   806k|  if (!cpp20_and_in_constexpr()) {
  ------------------
  |  Branch (3181:7): [True: 806k, Folded]
  ------------------
 3182|   806k|    overflow = __builtin_add_overflow(x, y, &z);
 3183|   806k|    return z;
 3184|   806k|  }
 3185|      0|#endif
 3186|      0|#endif
 3187|       |
 3188|       |  // generic, this still optimizes correctly on MSVC.
 3189|      0|  z = x + y;
 3190|      0|  overflow = z < x;
 3191|      0|  return z;
 3192|   806k|}
_ZN3glz10fast_float12is_truncatedIcEEbPKT_S4_:
 3795|  2.43k|is_truncated(UC const *first, UC const *last) noexcept {
 3796|       |  // do 8-bit optimizations, can just compare to 8 literal 0s.
 3797|  2.43k|  uint64_t val;
 3798|  29.7k|  while (!cpp20_and_in_constexpr() &&
  ------------------
  |  Branch (3798:10): [True: 29.7k, Folded]
  ------------------
 3799|  29.7k|         std::distance(first, last) >= int_cmp_len<UC>()) {
  ------------------
  |  Branch (3799:10): [True: 28.7k, False: 1.01k]
  ------------------
 3800|  28.7k|    ::memcpy(&val, first, sizeof(uint64_t));
 3801|  28.7k|    if (val != int_cmp_zeros<UC>()) {
  ------------------
  |  Branch (3801:9): [True: 1.41k, False: 27.3k]
  ------------------
 3802|  1.41k|      return true;
 3803|  1.41k|    }
 3804|  27.3k|    first += int_cmp_len<UC>();
 3805|  27.3k|  }
 3806|  2.89k|  while (first != last) {
  ------------------
  |  Branch (3806:10): [True: 2.29k, False: 600]
  ------------------
 3807|  2.29k|    if (*first != UC('0')) {
  ------------------
  |  Branch (3807:9): [True: 413, False: 1.88k]
  ------------------
 3808|    413|      return true;
 3809|    413|    }
 3810|  1.88k|    ++first;
 3811|  1.88k|  }
 3812|    600|  return false;
 3813|  1.01k|}
_ZN3glz10fast_float12is_truncatedIcEEbNS0_4spanIKT_EE:
 3817|     86|is_truncated(span<UC const> s) noexcept {
 3818|     86|  return is_truncated(s.ptr, s.ptr + s.len());
 3819|     86|}
_ZN3glz10fast_float15round_up_bigintERNS0_6bigintERm:
 3848|  1.80k|round_up_bigint(bigint &big, size_t &count) noexcept {
 3849|       |  // need to round-up the digits, but need to avoid rounding
 3850|       |  // ....9999 to ...10000, which could cause a false halfway point.
 3851|  1.80k|  add_native(big, 10, 1);
 3852|  1.80k|  count++;
 3853|  1.80k|}
_ZN3glz10fast_float19positive_digit_compIdEENS0_17adjusted_mantissaERNS0_6bigintEi:
 3942|  3.38k|positive_digit_comp(bigint &bigmant, int32_t exponent) noexcept {
 3943|  3.38k|  GLZ_FASTFLOAT_ASSERT(bigmant.pow10(uint32_t(exponent)));
  ------------------
  |  |  344|  3.38k|  { ((void)(x)); }
  ------------------
 3944|  3.38k|  adjusted_mantissa answer;
 3945|  3.38k|  bool truncated;
 3946|  3.38k|  answer.mantissa = bigmant.hi64(truncated);
 3947|  3.38k|  int bias = binary_format<T>::mantissa_explicit_bits() -
 3948|  3.38k|             binary_format<T>::minimum_exponent();
 3949|  3.38k|  answer.power2 = bigmant.bit_length() - 64 + bias;
 3950|       |
 3951|  3.38k|  round<T>(answer, [truncated](adjusted_mantissa &a, int32_t shift) {
 3952|  3.38k|    round_nearest_tie_even(
 3953|  3.38k|        a, shift,
 3954|  3.38k|        [truncated](bool is_odd, bool is_halfway, bool is_above) -> bool {
 3955|  3.38k|          return is_above || (is_halfway && truncated) ||
 3956|  3.38k|                 (is_odd && is_halfway);
 3957|  3.38k|        });
 3958|  3.38k|  });
 3959|       |
 3960|  3.38k|  return answer;
 3961|  3.38k|}
_ZN3glz10fast_float6bigint5pow10Ej:
 3591|  3.38k|  GLZ_FASTFLOAT_CONSTEXPR20 bool pow10(uint32_t exp) noexcept {
 3592|  3.38k|    GLZ_FASTFLOAT_TRY(pow5(exp));
  ------------------
  |  |  354|  3.38k|  {                                                                            \
  |  |  355|  3.38k|    if (!(x))                                                                  \
  |  |  ------------------
  |  |  |  Branch (355:9): [True: 0, False: 3.38k]
  |  |  ------------------
  |  |  356|  3.38k|      return false;                                                            \
  |  |  357|  3.38k|  }
  ------------------
 3593|  3.38k|    return pow2(exp);
 3594|  3.38k|  }
_ZN3glz10fast_float6bigint4pow5Ej:
 3560|  12.3k|  GLZ_FASTFLOAT_CONSTEXPR20 bool pow5(uint32_t exp) noexcept {
 3561|       |    // multiply by a power of 5
 3562|  12.3k|    size_t large_length = sizeof(large_power_of_5) / sizeof(limb);
 3563|  12.3k|    limb_span large = limb_span(large_power_of_5, large_length);
 3564|  25.2k|    while (exp >= large_step) {
  ------------------
  |  Branch (3564:12): [True: 12.9k, False: 12.3k]
  ------------------
 3565|  12.9k|      GLZ_FASTFLOAT_TRY(large_mul(vec, large));
  ------------------
  |  |  354|  12.9k|  {                                                                            \
  |  |  355|  12.9k|    if (!(x))                                                                  \
  |  |  ------------------
  |  |  |  Branch (355:9): [True: 0, False: 12.9k]
  |  |  ------------------
  |  |  356|  12.9k|      return false;                                                            \
  |  |  357|  12.9k|  }
  ------------------
 3566|  12.9k|      exp -= large_step;
 3567|  12.9k|    }
 3568|  12.3k|#ifdef GLZ_FASTFLOAT_64BIT_LIMB
 3569|  12.3k|    uint32_t small_step = 27;
 3570|  12.3k|    limb max_native = 7450580596923828125UL;
 3571|       |#else
 3572|       |    uint32_t small_step = 13;
 3573|       |    limb max_native = 1220703125U;
 3574|       |#endif
 3575|  30.1k|    while (exp >= small_step) {
  ------------------
  |  Branch (3575:12): [True: 17.8k, False: 12.3k]
  ------------------
 3576|  17.8k|      GLZ_FASTFLOAT_TRY(small_mul(vec, max_native));
  ------------------
  |  |  354|  17.8k|  {                                                                            \
  |  |  355|  17.8k|    if (!(x))                                                                  \
  |  |  ------------------
  |  |  |  Branch (355:9): [True: 0, False: 17.8k]
  |  |  ------------------
  |  |  356|  17.8k|      return false;                                                            \
  |  |  357|  17.8k|  }
  ------------------
 3577|  17.8k|      exp -= small_step;
 3578|  17.8k|    }
 3579|  12.3k|    if (exp != 0) {
  ------------------
  |  Branch (3579:9): [True: 8.77k, False: 3.55k]
  ------------------
 3580|       |      // Work around clang bug https://godbolt.org/z/zedh7rrhc
 3581|       |      // This is similar to https://github.com/llvm/llvm-project/issues/47746,
 3582|       |      // except the workaround described there don't work here
 3583|  8.77k|      GLZ_FASTFLOAT_TRY(small_mul(
  ------------------
  |  |  354|  8.77k|  {                                                                            \
  |  |  355|  8.77k|    if (!(x))                                                                  \
  |  |  ------------------
  |  |  |  Branch (355:9): [True: 0, False: 8.77k]
  |  |  ------------------
  |  |  356|  8.77k|      return false;                                                            \
  |  |  357|  8.77k|  }
  ------------------
 3584|  8.77k|          vec, limb(((void)small_power_of_5[0], small_power_of_5[exp]))));
 3585|  8.77k|    }
 3586|       |
 3587|  12.3k|    return true;
 3588|  12.3k|  }
_ZN3glz10fast_float4spanImEC2EPKmm:
  436|  90.1k|  constexpr span(T const *_ptr, size_t _length) : ptr(_ptr), length(_length) {}
_ZN3glz10fast_float9large_mulILt62EEEbRNS0_8stackvecIXT_EEENS0_4spanImEE:
 3329|  12.9k|GLZ_FASTFLOAT_CONSTEXPR20 bool large_mul(stackvec<size> &x, limb_span y) noexcept {
 3330|  12.9k|  if (y.len() == 1) {
  ------------------
  |  Branch (3330:7): [True: 0, False: 12.9k]
  ------------------
 3331|      0|    GLZ_FASTFLOAT_TRY(small_mul(x, y[0]));
  ------------------
  |  |  354|      0|  {                                                                            \
  |  |  355|      0|    if (!(x))                                                                  \
  |  |  ------------------
  |  |  |  Branch (355:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  356|      0|      return false;                                                            \
  |  |  357|      0|  }
  ------------------
 3332|  12.9k|  } else {
 3333|  12.9k|    GLZ_FASTFLOAT_TRY(long_mul(x, y));
  ------------------
  |  |  354|  12.9k|  {                                                                            \
  |  |  355|  12.9k|    if (!(x))                                                                  \
  |  |  ------------------
  |  |  |  Branch (355:9): [True: 0, False: 12.9k]
  |  |  ------------------
  |  |  356|  12.9k|      return false;                                                            \
  |  |  357|  12.9k|  }
  ------------------
 3334|  12.9k|  }
 3335|  12.9k|  return true;
 3336|  12.9k|}
_ZNK3glz10fast_float4spanImE3lenEv:
  440|   914k|  constexpr size_t len() const noexcept { return length; }
_ZNK3glz10fast_float4spanImEixEm:
  442|   539k|  GLZ_FASTFLOAT_CONSTEXPR14 const T &operator[](size_t index) const noexcept {
  443|   539k|    GLZ_FASTFLOAT_DEBUG_ASSERT(index < length);
  ------------------
  |  |  349|   539k|  { ((void)(x)); }
  ------------------
  444|   539k|    return ptr[index];
  445|   539k|  }
_ZN3glz10fast_float8long_mulILt62EEEbRNS0_8stackvecIXT_EEENS0_4spanImEE:
 3301|  12.9k|GLZ_FASTFLOAT_CONSTEXPR20 bool long_mul(stackvec<size> &x, limb_span y) noexcept {
 3302|  12.9k|  limb_span xs = limb_span(x.data, x.len());
 3303|  12.9k|  stackvec<size> z(xs);
 3304|  12.9k|  limb_span zs = limb_span(z.data, z.len());
 3305|       |
 3306|  12.9k|  if (y.len() != 0) {
  ------------------
  |  Branch (3306:7): [True: 12.9k, False: 0]
  ------------------
 3307|  12.9k|    limb y0 = y[0];
 3308|  12.9k|    GLZ_FASTFLOAT_TRY(small_mul(x, y0));
  ------------------
  |  |  354|  12.9k|  {                                                                            \
  |  |  355|  12.9k|    if (!(x))                                                                  \
  |  |  ------------------
  |  |  |  Branch (355:9): [True: 0, False: 12.9k]
  |  |  ------------------
  |  |  356|  12.9k|      return false;                                                            \
  |  |  357|  12.9k|  }
  ------------------
 3309|  64.8k|    for (size_t index = 1; index < y.len(); index++) {
  ------------------
  |  Branch (3309:28): [True: 51.8k, False: 12.9k]
  ------------------
 3310|  51.8k|      limb yi = y[index];
 3311|  51.8k|      stackvec<size> zi;
 3312|  51.8k|      if (yi != 0) {
  ------------------
  |  Branch (3312:11): [True: 51.8k, False: 0]
  ------------------
 3313|       |        // re-use the same buffer throughout
 3314|  51.8k|        zi.set_len(0);
 3315|  51.8k|        GLZ_FASTFLOAT_TRY(zi.try_extend(zs));
  ------------------
  |  |  354|  51.8k|  {                                                                            \
  |  |  355|  51.8k|    if (!(x))                                                                  \
  |  |  ------------------
  |  |  |  Branch (355:9): [True: 0, False: 51.8k]
  |  |  ------------------
  |  |  356|  51.8k|      return false;                                                            \
  |  |  357|  51.8k|  }
  ------------------
 3316|  51.8k|        GLZ_FASTFLOAT_TRY(small_mul(zi, yi));
  ------------------
  |  |  354|  51.8k|  {                                                                            \
  |  |  355|  51.8k|    if (!(x))                                                                  \
  |  |  ------------------
  |  |  |  Branch (355:9): [True: 0, False: 51.8k]
  |  |  ------------------
  |  |  356|  51.8k|      return false;                                                            \
  |  |  357|  51.8k|  }
  ------------------
 3317|  51.8k|        limb_span zis = limb_span(zi.data, zi.len());
 3318|  51.8k|        GLZ_FASTFLOAT_TRY(large_add_from(x, zis, index));
  ------------------
  |  |  354|  51.8k|  {                                                                            \
  |  |  355|  51.8k|    if (!(x))                                                                  \
  |  |  ------------------
  |  |  |  Branch (355:9): [True: 0, False: 51.8k]
  |  |  ------------------
  |  |  356|  51.8k|      return false;                                                            \
  |  |  357|  51.8k|  }
  ------------------
 3319|  51.8k|      }
 3320|  51.8k|    }
 3321|  12.9k|  }
 3322|       |
 3323|  12.9k|  x.normalize();
 3324|  12.9k|  return true;
 3325|  12.9k|}
_ZN3glz10fast_float8stackvecILt62EEC2ENS0_4spanImEE:
 3013|  12.9k|  GLZ_FASTFLOAT_CONSTEXPR20 stackvec(limb_span s) {
 3014|  12.9k|    GLZ_FASTFLOAT_ASSERT(try_extend(s));
  ------------------
  |  |  344|  12.9k|  { ((void)(x)); }
  ------------------
 3015|  12.9k|  }
_ZN3glz10fast_float8stackvecILt62EE7set_lenEm:
 3035|   173k|  GLZ_FASTFLOAT_CONSTEXPR14 void set_len(size_t len) noexcept {
 3036|   173k|    length = uint16_t(len);
 3037|   173k|  }
_ZN3glz10fast_float8stackvecILt62EE10try_extendENS0_4spanImEE:
 3069|  64.8k|  GLZ_FASTFLOAT_CONSTEXPR20 bool try_extend(limb_span s) noexcept {
 3070|  64.8k|    if (len() + s.len() <= capacity()) {
  ------------------
  |  Branch (3070:9): [True: 64.8k, False: 0]
  ------------------
 3071|  64.8k|      extend_unchecked(s);
 3072|  64.8k|      return true;
 3073|  64.8k|    } else {
 3074|      0|      return false;
 3075|      0|    }
 3076|  64.8k|  }
_ZN3glz10fast_float8stackvecILt62EE16extend_uncheckedENS0_4spanImEE:
 3062|  64.8k|  GLZ_FASTFLOAT_CONSTEXPR20 void extend_unchecked(limb_span s) noexcept {
 3063|  64.8k|    limb *ptr = data + length;
 3064|  64.8k|    std::copy_n(s.ptr, s.len(), ptr);
 3065|  64.8k|    set_len(len() + s.len());
 3066|  64.8k|  }
_ZN3glz10fast_float14large_add_fromILt62EEEbRNS0_8stackvecIXT_EEENS0_4spanImEEm:
 3264|  51.8k|                                          size_t start) noexcept {
 3265|       |  // the effective x buffer is from `xstart..x.len()`, so exit early
 3266|       |  // if we can't get that current range.
 3267|  51.8k|  if (x.len() < start || y.len() > x.len() - start) {
  ------------------
  |  Branch (3267:7): [True: 0, False: 51.8k]
  |  Branch (3267:26): [True: 50.8k, False: 1.03k]
  ------------------
 3268|  50.8k|    GLZ_FASTFLOAT_TRY(x.try_resize(y.len() + start, 0));
  ------------------
  |  |  354|  50.8k|  {                                                                            \
  |  |  355|  50.8k|    if (!(x))                                                                  \
  |  |  ------------------
  |  |  |  Branch (355:9): [True: 0, False: 50.8k]
  |  |  ------------------
  |  |  356|  50.8k|      return false;                                                            \
  |  |  357|  50.8k|  }
  ------------------
 3269|  50.8k|  }
 3270|       |
 3271|  51.8k|  bool carry = false;
 3272|   526k|  for (size_t index = 0; index < y.len(); index++) {
  ------------------
  |  Branch (3272:26): [True: 474k, False: 51.8k]
  ------------------
 3273|   474k|    limb xi = x[index + start];
 3274|   474k|    limb yi = y[index];
 3275|   474k|    bool c1 = false;
 3276|   474k|    bool c2 = false;
 3277|   474k|    xi = scalar_add(xi, yi, c1);
 3278|   474k|    if (carry) {
  ------------------
  |  Branch (3278:9): [True: 189k, False: 284k]
  ------------------
 3279|   189k|      xi = scalar_add(xi, 1, c2);
 3280|   189k|    }
 3281|   474k|    x[index + start] = xi;
 3282|   474k|    carry = c1 | c2;
 3283|   474k|  }
 3284|       |
 3285|       |  // handle overflow
 3286|  51.8k|  if (carry) {
  ------------------
  |  Branch (3286:7): [True: 0, False: 51.8k]
  ------------------
 3287|      0|    GLZ_FASTFLOAT_TRY(small_add_from(x, 1, y.len() + start));
  ------------------
  |  |  354|      0|  {                                                                            \
  |  |  355|      0|    if (!(x))                                                                  \
  |  |  ------------------
  |  |  |  Branch (355:9): [True: 0, False: 0]
  |  |  ------------------
  |  |  356|      0|      return false;                                                            \
  |  |  357|      0|  }
  ------------------
 3288|      0|  }
 3289|  51.8k|  return true;
 3290|  51.8k|}
_ZN3glz10fast_float8stackvecILt62EE10try_resizeEmm:
 3095|  50.8k|  GLZ_FASTFLOAT_CONSTEXPR20 bool try_resize(size_t new_len, limb value) noexcept {
 3096|  50.8k|    if (new_len > capacity()) {
  ------------------
  |  Branch (3096:9): [True: 0, False: 50.8k]
  ------------------
 3097|      0|      return false;
 3098|  50.8k|    } else {
 3099|  50.8k|      resize_unchecked(new_len, value);
 3100|  50.8k|      return true;
 3101|  50.8k|    }
 3102|  50.8k|  }
_ZN3glz10fast_float8stackvecILt62EE16resize_uncheckedEmm:
 3082|  50.8k|  void resize_unchecked(size_t new_len, limb value) noexcept {
 3083|  50.8k|    if (new_len > len()) {
  ------------------
  |  Branch (3083:9): [True: 50.8k, False: 0]
  ------------------
 3084|  50.8k|      size_t count = new_len - len();
 3085|  50.8k|      limb *first = data + len();
 3086|  50.8k|      limb *last = first + count;
 3087|  50.8k|      ::std::fill(first, last, value);
 3088|  50.8k|      set_len(new_len);
 3089|  50.8k|    } else {
 3090|      0|      set_len(new_len);
 3091|      0|    }
 3092|  50.8k|  }
_ZN3glz10fast_float8stackvecILt62EE9normalizeEv:
 3118|  21.9k|  GLZ_FASTFLOAT_CONSTEXPR14 void normalize() noexcept {
 3119|  21.9k|    while (len() > 0 && rindex(0) == 0) {
  ------------------
  |  Branch (3119:12): [True: 21.9k, False: 0]
  |  Branch (3119:25): [True: 0, False: 21.9k]
  ------------------
 3120|      0|      length--;
 3121|      0|    }
 3122|  21.9k|  }
_ZNK3glz10fast_float8stackvecILt62EE6rindexEm:
 3028|  33.0k|  GLZ_FASTFLOAT_CONSTEXPR14 const limb &rindex(size_t index) const noexcept {
 3029|  33.0k|    GLZ_FASTFLOAT_DEBUG_ASSERT(index < length);
  ------------------
  |  |  349|  33.0k|  { ((void)(x)); }
  ------------------
 3030|  33.0k|    size_t rindex = length - index - 1;
 3031|  33.0k|    return data[rindex];
 3032|  33.0k|  }
_ZN3glz10fast_float6bigint4pow2Ej:
 3557|  12.0k|  GLZ_FASTFLOAT_CONSTEXPR20 bool pow2(uint32_t exp) noexcept { return shl(exp); }
_ZN3glz10fast_float6bigint3shlEm:
 3519|  12.0k|  GLZ_FASTFLOAT_CONSTEXPR20 bool shl(size_t n) noexcept {
 3520|  12.0k|    size_t rem = n % limb_bits;
 3521|  12.0k|    size_t div = n / limb_bits;
 3522|  12.0k|    if (rem != 0) {
  ------------------
  |  Branch (3522:9): [True: 9.62k, False: 2.44k]
  ------------------
 3523|  9.62k|      GLZ_FASTFLOAT_TRY(shl_bits(rem));
  ------------------
  |  |  354|  9.62k|  {                                                                            \
  |  |  355|  9.62k|    if (!(x))                                                                  \
  |  |  ------------------
  |  |  |  Branch (355:9): [True: 0, False: 9.62k]
  |  |  ------------------
  |  |  356|  9.62k|      return false;                                                            \
  |  |  357|  9.62k|  }
  ------------------
 3524|  9.62k|    }
 3525|  12.0k|    if (div != 0) {
  ------------------
  |  Branch (3525:9): [True: 5.95k, False: 6.11k]
  ------------------
 3526|  5.95k|      GLZ_FASTFLOAT_TRY(shl_limbs(div));
  ------------------
  |  |  354|  5.95k|  {                                                                            \
  |  |  355|  5.95k|    if (!(x))                                                                  \
  |  |  ------------------
  |  |  |  Branch (355:9): [True: 0, False: 5.95k]
  |  |  ------------------
  |  |  356|  5.95k|      return false;                                                            \
  |  |  357|  5.95k|  }
  ------------------
 3527|  5.95k|    }
 3528|  12.0k|    return true;
 3529|  12.0k|  }
_ZN3glz10fast_float6bigint8shl_bitsEm:
 3472|  9.62k|  GLZ_FASTFLOAT_CONSTEXPR20 bool shl_bits(size_t n) noexcept {
 3473|       |    // Internally, for each item, we shift left by n, and add the previous
 3474|       |    // right shifted limb-bits.
 3475|       |    // For example, we transform (for u8) shifted left 2, to:
 3476|       |    //      b10100100 b01000010
 3477|       |    //      b10 b10010001 b00001000
 3478|  9.62k|    GLZ_FASTFLOAT_DEBUG_ASSERT(n != 0);
  ------------------
  |  |  349|  9.62k|  { ((void)(x)); }
  ------------------
 3479|  9.62k|    GLZ_FASTFLOAT_DEBUG_ASSERT(n < sizeof(limb) * 8);
  ------------------
  |  |  349|  9.62k|  { ((void)(x)); }
  ------------------
 3480|       |
 3481|  9.62k|    size_t shl = n;
 3482|  9.62k|    size_t shr = limb_bits - shl;
 3483|  9.62k|    limb prev = 0;
 3484|   104k|    for (size_t index = 0; index < vec.len(); index++) {
  ------------------
  |  Branch (3484:28): [True: 94.4k, False: 9.62k]
  ------------------
 3485|  94.4k|      limb xi = vec[index];
 3486|  94.4k|      vec[index] = (xi << shl) | (prev >> shr);
 3487|  94.4k|      prev = xi;
 3488|  94.4k|    }
 3489|       |
 3490|  9.62k|    limb carry = prev >> shr;
 3491|  9.62k|    if (carry != 0) {
  ------------------
  |  Branch (3491:9): [True: 3.74k, False: 5.87k]
  ------------------
 3492|  3.74k|      return vec.try_push(carry);
 3493|  3.74k|    }
 3494|  5.87k|    return true;
 3495|  9.62k|  }
_ZN3glz10fast_float6bigint9shl_limbsEm:
 3498|  5.95k|  GLZ_FASTFLOAT_CONSTEXPR20 bool shl_limbs(size_t n) noexcept {
 3499|  5.95k|    GLZ_FASTFLOAT_DEBUG_ASSERT(n != 0);
  ------------------
  |  |  349|  5.95k|  { ((void)(x)); }
  ------------------
 3500|  5.95k|    if (n + vec.len() > vec.capacity()) {
  ------------------
  |  Branch (3500:9): [True: 0, False: 5.95k]
  ------------------
 3501|      0|      return false;
 3502|  5.95k|    } else if (!vec.is_empty()) {
  ------------------
  |  Branch (3502:16): [True: 5.95k, False: 0]
  ------------------
 3503|       |      // move limbs
 3504|  5.95k|      limb *dst = vec.data + n;
 3505|  5.95k|      limb const *src = vec.data;
 3506|  5.95k|      std::copy_backward(src, src + vec.len(), dst + vec.len());
 3507|       |      // fill in empty limbs
 3508|  5.95k|      limb *first = vec.data;
 3509|  5.95k|      limb *last = first + n;
 3510|  5.95k|      ::std::fill(first, last, 0);
 3511|  5.95k|      vec.set_len(n + vec.len());
 3512|  5.95k|      return true;
 3513|  5.95k|    } else {
 3514|      0|      return true;
 3515|      0|    }
 3516|  5.95k|  }
_ZNK3glz10fast_float8stackvecILt62EE8is_emptyEv:
 3041|  9.33k|  constexpr bool is_empty() const noexcept { return length == 0; }
_ZNK3glz10fast_float6bigint4hi64ERb:
 3418|  3.38k|  GLZ_FASTFLOAT_CONSTEXPR20 uint64_t hi64(bool &truncated) const noexcept {
 3419|  3.38k|#ifdef GLZ_FASTFLOAT_64BIT_LIMB
 3420|  3.38k|    if (vec.len() == 0) {
  ------------------
  |  Branch (3420:9): [True: 0, False: 3.38k]
  ------------------
 3421|      0|      return empty_hi64(truncated);
 3422|  3.38k|    } else if (vec.len() == 1) {
  ------------------
  |  Branch (3422:16): [True: 711, False: 2.67k]
  ------------------
 3423|    711|      return uint64_hi64(vec.rindex(0), truncated);
 3424|  2.67k|    } else {
 3425|  2.67k|      uint64_t result = uint64_hi64(vec.rindex(0), vec.rindex(1), truncated);
 3426|  2.67k|      truncated |= vec.nonzero(2);
 3427|  2.67k|      return result;
 3428|  2.67k|    }
 3429|       |#else
 3430|       |    if (vec.len() == 0) {
 3431|       |      return empty_hi64(truncated);
 3432|       |    } else if (vec.len() == 1) {
 3433|       |      return uint32_hi64(vec.rindex(0), truncated);
 3434|       |    } else if (vec.len() == 2) {
 3435|       |      return uint32_hi64(vec.rindex(0), vec.rindex(1), truncated);
 3436|       |    } else {
 3437|       |      uint64_t result =
 3438|       |          uint32_hi64(vec.rindex(0), vec.rindex(1), vec.rindex(2), truncated);
 3439|       |      truncated |= vec.nonzero(3);
 3440|       |      return result;
 3441|       |    }
 3442|       |#endif
 3443|  3.38k|  }
_ZN3glz10fast_float11uint64_hi64EmRb:
 3132|    711|uint64_hi64(uint64_t r0, bool &truncated) noexcept {
 3133|    711|  truncated = false;
 3134|    711|  int shl = leading_zeroes(r0);
 3135|    711|  return r0 << shl;
 3136|    711|}
_ZN3glz10fast_float11uint64_hi64EmmRb:
 3139|  2.67k|uint64_hi64(uint64_t r0, uint64_t r1, bool &truncated) noexcept {
 3140|  2.67k|  int shl = leading_zeroes(r0);
 3141|  2.67k|  if (shl == 0) {
  ------------------
  |  Branch (3141:7): [True: 337, False: 2.33k]
  ------------------
 3142|    337|    truncated = r1 != 0;
 3143|    337|    return r0;
 3144|  2.33k|  } else {
 3145|  2.33k|    int shr = 64 - shl;
 3146|  2.33k|    truncated = (r1 << shl) != 0;
 3147|  2.33k|    return (r0 << shl) | (r1 >> shr);
 3148|  2.33k|  }
 3149|  2.67k|}
_ZNK3glz10fast_float8stackvecILt62EE7nonzeroEm:
 3107|  2.67k|  GLZ_FASTFLOAT_CONSTEXPR14 bool nonzero(size_t index) const noexcept {
 3108|  2.68k|    while (index < len()) {
  ------------------
  |  Branch (3108:12): [True: 1.66k, False: 1.01k]
  ------------------
 3109|  1.66k|      if (rindex(index) != 0) {
  ------------------
  |  Branch (3109:11): [True: 1.65k, False: 12]
  ------------------
 3110|  1.65k|        return true;
 3111|  1.65k|      }
 3112|     12|      index++;
 3113|     12|    }
 3114|  1.01k|    return false;
 3115|  2.67k|  }
_ZNK3glz10fast_float6bigint10bit_lengthEv:
 3547|  3.38k|  GLZ_FASTFLOAT_CONSTEXPR20 int bit_length() const noexcept {
 3548|  3.38k|    int lz = ctlz();
 3549|  3.38k|    return int(limb_bits * vec.len()) - lz;
 3550|  3.38k|  }
_ZNK3glz10fast_float6bigint4ctlzEv:
 3532|  3.38k|  GLZ_FASTFLOAT_CONSTEXPR20 int ctlz() const noexcept {
 3533|  3.38k|    if (vec.is_empty()) {
  ------------------
  |  Branch (3533:9): [True: 0, False: 3.38k]
  ------------------
 3534|      0|      return 0;
 3535|  3.38k|    } else {
 3536|  3.38k|#ifdef GLZ_FASTFLOAT_64BIT_LIMB
 3537|  3.38k|      return leading_zeroes(vec.rindex(0));
 3538|       |#else
 3539|       |      // no use defining a specialized leading_zeroes for a 32-bit type.
 3540|       |      uint64_t r0 = vec.rindex(0);
 3541|       |      return leading_zeroes(r0 << 32);
 3542|       |#endif
 3543|  3.38k|    }
 3544|  3.38k|  }
_ZN3glz10fast_float5roundIdZNS0_19positive_digit_compIdEENS0_17adjusted_mantissaERNS0_6bigintEiEUlRS3_iE_EEvS6_T0_:
 3707|  3.38k|                                                         callback cb) noexcept {
 3708|  3.38k|  int32_t mantissa_shift = 64 - binary_format<T>::mantissa_explicit_bits() - 1;
 3709|  3.38k|  if (-am.power2 >= mantissa_shift) {
  ------------------
  |  Branch (3709:7): [True: 0, False: 3.38k]
  ------------------
 3710|       |    // have a denormal float
 3711|      0|    int32_t shift = -am.power2 + 1;
 3712|      0|    cb(am, (std::min<int32_t>)(shift, 64));
 3713|       |    // check for round-up: if rounding-nearest carried us to the hidden bit.
 3714|      0|    am.power2 = (am.mantissa <
  ------------------
  |  Branch (3714:17): [True: 0, False: 0]
  ------------------
 3715|      0|                 (uint64_t(1) << binary_format<T>::mantissa_explicit_bits()))
 3716|      0|                    ? 0
 3717|      0|                    : 1;
 3718|      0|    return;
 3719|      0|  }
 3720|       |
 3721|       |  // have a normal float, use the default shift.
 3722|  3.38k|  cb(am, mantissa_shift);
 3723|       |
 3724|       |  // check for carry
 3725|  3.38k|  if (am.mantissa >=
  ------------------
  |  Branch (3725:7): [True: 318, False: 3.06k]
  ------------------
 3726|  3.38k|      (uint64_t(2) << binary_format<T>::mantissa_explicit_bits())) {
 3727|    318|    am.mantissa = (uint64_t(1) << binary_format<T>::mantissa_explicit_bits());
 3728|    318|    am.power2++;
 3729|    318|  }
 3730|       |
 3731|       |  // check for infinite: we could have carried to an infinite power
 3732|  3.38k|  am.mantissa &= ~(uint64_t(1) << binary_format<T>::mantissa_explicit_bits());
 3733|  3.38k|  if (am.power2 >= binary_format<T>::infinite_power()) {
  ------------------
  |  Branch (3733:7): [True: 0, False: 3.38k]
  ------------------
 3734|      0|    am.power2 = binary_format<T>::infinite_power();
 3735|      0|    am.mantissa = 0;
 3736|      0|  }
 3737|  3.38k|}
_ZZN3glz10fast_float19positive_digit_compIdEENS0_17adjusted_mantissaERNS0_6bigintEiENKUlRS2_iE_clES5_i:
 3951|  3.38k|  round<T>(answer, [truncated](adjusted_mantissa &a, int32_t shift) {
 3952|  3.38k|    round_nearest_tie_even(
 3953|  3.38k|        a, shift,
 3954|  3.38k|        [truncated](bool is_odd, bool is_halfway, bool is_above) -> bool {
 3955|  3.38k|          return is_above || (is_halfway && truncated) ||
 3956|  3.38k|                 (is_odd && is_halfway);
 3957|  3.38k|        });
 3958|  3.38k|  });
_ZN3glz10fast_float22round_nearest_tie_evenIZZNS0_19positive_digit_compIdEENS0_17adjusted_mantissaERNS0_6bigintEiENKUlRS3_iE_clES6_iEUlbbbE_EEvS6_iT_:
 3742|  3.38k|                       callback cb) noexcept {
 3743|  3.38k|  uint64_t const mask = (shift == 64) ? UINT64_MAX : (uint64_t(1) << shift) - 1;
  ------------------
  |  Branch (3743:25): [True: 0, False: 3.38k]
  ------------------
 3744|  3.38k|  uint64_t const halfway = (shift == 0) ? 0 : uint64_t(1) << (shift - 1);
  ------------------
  |  Branch (3744:28): [True: 0, False: 3.38k]
  ------------------
 3745|  3.38k|  uint64_t truncated_bits = am.mantissa & mask;
 3746|  3.38k|  bool is_above = truncated_bits > halfway;
 3747|  3.38k|  bool is_halfway = truncated_bits == halfway;
 3748|       |
 3749|       |  // shift digits into position
 3750|  3.38k|  if (shift == 64) {
  ------------------
  |  Branch (3750:7): [True: 0, False: 3.38k]
  ------------------
 3751|      0|    am.mantissa = 0;
 3752|  3.38k|  } else {
 3753|  3.38k|    am.mantissa >>= shift;
 3754|  3.38k|  }
 3755|  3.38k|  am.power2 += shift;
 3756|       |
 3757|  3.38k|  bool is_odd = (am.mantissa & 1) == 1;
 3758|  3.38k|  am.mantissa += uint64_t(cb(is_odd, is_halfway, is_above));
 3759|  3.38k|}
_ZZZN3glz10fast_float19positive_digit_compIdEENS0_17adjusted_mantissaERNS0_6bigintEiENKUlRS2_iE_clES5_iENKUlbbbE_clEbbb:
 3954|  3.38k|        [truncated](bool is_odd, bool is_halfway, bool is_above) -> bool {
 3955|  3.38k|          return is_above || (is_halfway && truncated) ||
  ------------------
  |  Branch (3955:18): [True: 1.03k, False: 2.34k]
  |  Branch (3955:31): [True: 1.29k, False: 1.05k]
  |  Branch (3955:45): [True: 949, False: 342]
  ------------------
 3956|  1.39k|                 (is_odd && is_halfway);
  ------------------
  |  Branch (3956:19): [True: 793, False: 604]
  |  Branch (3956:29): [True: 118, False: 675]
  ------------------
 3957|  3.38k|        });
_ZN3glz10fast_float19negative_digit_compIdEENS0_17adjusted_mantissaERNS0_6bigintES2_i:
 3970|  8.94k|    bigint &bigmant, adjusted_mantissa am, int32_t exponent) noexcept {
 3971|  8.94k|  bigint &real_digits = bigmant;
 3972|  8.94k|  int32_t real_exp = exponent;
 3973|       |
 3974|       |  // get the value of `b`, rounded down, and get a bigint representation of b+h
 3975|  8.94k|  adjusted_mantissa am_b = am;
 3976|       |  // gcc7 buf: use a lambda to remove the noexcept qualifier bug with
 3977|       |  // -Wnoexcept-type.
 3978|  8.94k|  round<T>(am_b,
 3979|  8.94k|           [](adjusted_mantissa &a, int32_t shift) { round_down(a, shift); });
 3980|  8.94k|  T b;
 3981|  8.94k|  to_float(false, am_b, b);
 3982|  8.94k|  adjusted_mantissa theor = to_extended_halfway(b);
 3983|  8.94k|  bigint theor_digits(theor.mantissa);
 3984|  8.94k|  int32_t theor_exp = theor.power2;
 3985|       |
 3986|       |  // scale real digits and theor digits to be same power.
 3987|  8.94k|  int32_t pow2_exp = theor_exp - real_exp;
 3988|  8.94k|  uint32_t pow5_exp = uint32_t(-real_exp);
 3989|  8.94k|  if (pow5_exp != 0) {
  ------------------
  |  Branch (3989:7): [True: 8.94k, False: 0]
  ------------------
 3990|  8.94k|    GLZ_FASTFLOAT_ASSERT(theor_digits.pow5(pow5_exp));
  ------------------
  |  |  344|  8.94k|  { ((void)(x)); }
  ------------------
 3991|  8.94k|  }
 3992|  8.94k|  if (pow2_exp > 0) {
  ------------------
  |  Branch (3992:7): [True: 6.52k, False: 2.41k]
  ------------------
 3993|  6.52k|    GLZ_FASTFLOAT_ASSERT(theor_digits.pow2(uint32_t(pow2_exp)));
  ------------------
  |  |  344|  6.52k|  { ((void)(x)); }
  ------------------
 3994|  6.52k|  } else if (pow2_exp < 0) {
  ------------------
  |  Branch (3994:14): [True: 2.15k, False: 262]
  ------------------
 3995|  2.15k|    GLZ_FASTFLOAT_ASSERT(real_digits.pow2(uint32_t(-pow2_exp)));
  ------------------
  |  |  344|  2.15k|  { ((void)(x)); }
  ------------------
 3996|  2.15k|  }
 3997|       |
 3998|       |  // compare digits, and use it to director rounding
 3999|  8.94k|  int ord = real_digits.compare(theor_digits);
 4000|  8.94k|  adjusted_mantissa answer = am;
 4001|  8.94k|  round<T>(answer, [ord](adjusted_mantissa &a, int32_t shift) {
 4002|  8.94k|    round_nearest_tie_even(
 4003|  8.94k|        a, shift, [ord](bool is_odd, bool _, bool __) -> bool {
 4004|  8.94k|          (void)_;  // not needed, since we've done our comparison
 4005|  8.94k|          (void)__; // not needed, since we've done our comparison
 4006|  8.94k|          if (ord > 0) {
 4007|  8.94k|            return true;
 4008|  8.94k|          } else if (ord < 0) {
 4009|  8.94k|            return false;
 4010|  8.94k|          } else {
 4011|  8.94k|            return is_odd;
 4012|  8.94k|          }
 4013|  8.94k|        });
 4014|  8.94k|  });
 4015|       |
 4016|  8.94k|  return answer;
 4017|  8.94k|}
_ZN3glz10fast_float5roundIdZNS0_19negative_digit_compIdEENS0_17adjusted_mantissaERNS0_6bigintES3_iEUlRS3_iE_EEvS6_T0_:
 3707|  8.94k|                                                         callback cb) noexcept {
 3708|  8.94k|  int32_t mantissa_shift = 64 - binary_format<T>::mantissa_explicit_bits() - 1;
 3709|  8.94k|  if (-am.power2 >= mantissa_shift) {
  ------------------
  |  Branch (3709:7): [True: 38, False: 8.90k]
  ------------------
 3710|       |    // have a denormal float
 3711|     38|    int32_t shift = -am.power2 + 1;
 3712|     38|    cb(am, (std::min<int32_t>)(shift, 64));
 3713|       |    // check for round-up: if rounding-nearest carried us to the hidden bit.
 3714|     38|    am.power2 = (am.mantissa <
  ------------------
  |  Branch (3714:17): [True: 38, False: 0]
  ------------------
 3715|     38|                 (uint64_t(1) << binary_format<T>::mantissa_explicit_bits()))
 3716|     38|                    ? 0
 3717|     38|                    : 1;
 3718|     38|    return;
 3719|     38|  }
 3720|       |
 3721|       |  // have a normal float, use the default shift.
 3722|  8.90k|  cb(am, mantissa_shift);
 3723|       |
 3724|       |  // check for carry
 3725|  8.90k|  if (am.mantissa >=
  ------------------
  |  Branch (3725:7): [True: 0, False: 8.90k]
  ------------------
 3726|  8.90k|      (uint64_t(2) << binary_format<T>::mantissa_explicit_bits())) {
 3727|      0|    am.mantissa = (uint64_t(1) << binary_format<T>::mantissa_explicit_bits());
 3728|      0|    am.power2++;
 3729|      0|  }
 3730|       |
 3731|       |  // check for infinite: we could have carried to an infinite power
 3732|  8.90k|  am.mantissa &= ~(uint64_t(1) << binary_format<T>::mantissa_explicit_bits());
 3733|  8.90k|  if (am.power2 >= binary_format<T>::infinite_power()) {
  ------------------
  |  Branch (3733:7): [True: 0, False: 8.90k]
  ------------------
 3734|      0|    am.power2 = binary_format<T>::infinite_power();
 3735|      0|    am.mantissa = 0;
 3736|      0|  }
 3737|  8.90k|}
_ZZN3glz10fast_float19negative_digit_compIdEENS0_17adjusted_mantissaERNS0_6bigintES2_iENKUlRS2_iE_clES5_i:
 3979|  8.94k|           [](adjusted_mantissa &a, int32_t shift) { round_down(a, shift); });
_ZN3glz10fast_float10round_downERNS0_17adjusted_mantissaEi:
 3762|  8.94k|round_down(adjusted_mantissa &am, int32_t shift) noexcept {
 3763|  8.94k|  if (shift == 64) {
  ------------------
  |  Branch (3763:7): [True: 0, False: 8.94k]
  ------------------
 3764|      0|    am.mantissa = 0;
 3765|  8.94k|  } else {
 3766|  8.94k|    am.mantissa >>= shift;
 3767|  8.94k|  }
 3768|  8.94k|  am.power2 += shift;
 3769|  8.94k|}
_ZN3glz10fast_float19to_extended_halfwayIdEENS0_17adjusted_mantissaET_:
 3696|  8.94k|to_extended_halfway(T value) noexcept {
 3697|  8.94k|  adjusted_mantissa am = to_extended(value);
 3698|  8.94k|  am.mantissa <<= 1;
 3699|  8.94k|  am.mantissa += 1;
 3700|  8.94k|  am.power2 -= 1;
 3701|  8.94k|  return am;
 3702|  8.94k|}
_ZN3glz10fast_float11to_extendedIdEENS0_17adjusted_mantissaET_:
 3661|  8.94k|to_extended(T value) noexcept {
 3662|  8.94k|  using equiv_uint = equiv_uint_t<T>;
 3663|  8.94k|  constexpr equiv_uint exponent_mask = binary_format<T>::exponent_mask();
 3664|  8.94k|  constexpr equiv_uint mantissa_mask = binary_format<T>::mantissa_mask();
 3665|  8.94k|  constexpr equiv_uint hidden_bit_mask = binary_format<T>::hidden_bit_mask();
 3666|       |
 3667|  8.94k|  adjusted_mantissa am;
 3668|  8.94k|  int32_t bias = binary_format<T>::mantissa_explicit_bits() -
 3669|  8.94k|                 binary_format<T>::minimum_exponent();
 3670|  8.94k|  equiv_uint bits;
 3671|  8.94k|#if GLZ_FASTFLOAT_HAS_BIT_CAST
 3672|  8.94k|  bits = std::bit_cast<equiv_uint>(value);
 3673|       |#else
 3674|       |  ::memcpy(&bits, &value, sizeof(T));
 3675|       |#endif
 3676|  8.94k|  if ((bits & exponent_mask) == 0) {
  ------------------
  |  Branch (3676:7): [True: 38, False: 8.90k]
  ------------------
 3677|       |    // denormal
 3678|     38|    am.power2 = 1 - bias;
 3679|     38|    am.mantissa = bits & mantissa_mask;
 3680|  8.90k|  } else {
 3681|       |    // normal
 3682|  8.90k|    am.power2 = int32_t((bits & exponent_mask) >>
 3683|  8.90k|                        binary_format<T>::mantissa_explicit_bits());
 3684|  8.90k|    am.power2 -= bias;
 3685|  8.90k|    am.mantissa = (bits & mantissa_mask) | hidden_bit_mask;
 3686|  8.90k|  }
 3687|       |
 3688|  8.94k|  return am;
 3689|  8.94k|}
_ZN3glz10fast_float6bigintC2Em:
 3406|  8.94k|  GLZ_FASTFLOAT_CONSTEXPR20 bigint(uint64_t value) : vec() {
 3407|  8.94k|#ifdef GLZ_FASTFLOAT_64BIT_LIMB
 3408|  8.94k|    vec.push_unchecked(value);
 3409|       |#else
 3410|       |    vec.push_unchecked(uint32_t(value));
 3411|       |    vec.push_unchecked(uint32_t(value >> 32));
 3412|       |#endif
 3413|  8.94k|    vec.normalize();
 3414|  8.94k|  }
_ZNK3glz10fast_float6bigint7compareERKS1_:
 3451|  8.94k|  GLZ_FASTFLOAT_CONSTEXPR20 int compare(bigint const &other) const noexcept {
 3452|  8.94k|    if (vec.len() > other.vec.len()) {
  ------------------
  |  Branch (3452:9): [True: 0, False: 8.94k]
  ------------------
 3453|      0|      return 1;
 3454|  8.94k|    } else if (vec.len() < other.vec.len()) {
  ------------------
  |  Branch (3454:16): [True: 0, False: 8.94k]
  ------------------
 3455|      0|      return -1;
 3456|  8.94k|    } else {
 3457|  18.3k|      for (size_t index = vec.len(); index > 0; index--) {
  ------------------
  |  Branch (3457:38): [True: 17.5k, False: 755]
  ------------------
 3458|  17.5k|        limb xi = vec[index - 1];
 3459|  17.5k|        limb yi = other.vec[index - 1];
 3460|  17.5k|        if (xi > yi) {
  ------------------
  |  Branch (3460:13): [True: 5.36k, False: 12.2k]
  ------------------
 3461|  5.36k|          return 1;
 3462|  12.2k|        } else if (xi < yi) {
  ------------------
  |  Branch (3462:20): [True: 2.81k, False: 9.41k]
  ------------------
 3463|  2.81k|          return -1;
 3464|  2.81k|        }
 3465|  17.5k|      }
 3466|    755|      return 0;
 3467|  8.94k|    }
 3468|  8.94k|  }
_ZNK3glz10fast_float8stackvecILt62EEixEm:
 3022|  35.1k|  GLZ_FASTFLOAT_CONSTEXPR14 const limb &operator[](size_t index) const noexcept {
 3023|  35.1k|    GLZ_FASTFLOAT_DEBUG_ASSERT(index < length);
  ------------------
  |  |  349|  35.1k|  { ((void)(x)); }
  ------------------
 3024|  35.1k|    return data[index];
 3025|  35.1k|  }
_ZN3glz10fast_float5roundIdZNS0_19negative_digit_compIdEENS0_17adjusted_mantissaERNS0_6bigintES3_iEUlRS3_iE0_EEvS6_T0_:
 3707|  8.94k|                                                         callback cb) noexcept {
 3708|  8.94k|  int32_t mantissa_shift = 64 - binary_format<T>::mantissa_explicit_bits() - 1;
 3709|  8.94k|  if (-am.power2 >= mantissa_shift) {
  ------------------
  |  Branch (3709:7): [True: 38, False: 8.90k]
  ------------------
 3710|       |    // have a denormal float
 3711|     38|    int32_t shift = -am.power2 + 1;
 3712|     38|    cb(am, (std::min<int32_t>)(shift, 64));
 3713|       |    // check for round-up: if rounding-nearest carried us to the hidden bit.
 3714|     38|    am.power2 = (am.mantissa <
  ------------------
  |  Branch (3714:17): [True: 38, False: 0]
  ------------------
 3715|     38|                 (uint64_t(1) << binary_format<T>::mantissa_explicit_bits()))
 3716|     38|                    ? 0
 3717|     38|                    : 1;
 3718|     38|    return;
 3719|     38|  }
 3720|       |
 3721|       |  // have a normal float, use the default shift.
 3722|  8.90k|  cb(am, mantissa_shift);
 3723|       |
 3724|       |  // check for carry
 3725|  8.90k|  if (am.mantissa >=
  ------------------
  |  Branch (3725:7): [True: 202, False: 8.70k]
  ------------------
 3726|  8.90k|      (uint64_t(2) << binary_format<T>::mantissa_explicit_bits())) {
 3727|    202|    am.mantissa = (uint64_t(1) << binary_format<T>::mantissa_explicit_bits());
 3728|    202|    am.power2++;
 3729|    202|  }
 3730|       |
 3731|       |  // check for infinite: we could have carried to an infinite power
 3732|  8.90k|  am.mantissa &= ~(uint64_t(1) << binary_format<T>::mantissa_explicit_bits());
 3733|  8.90k|  if (am.power2 >= binary_format<T>::infinite_power()) {
  ------------------
  |  Branch (3733:7): [True: 0, False: 8.90k]
  ------------------
 3734|      0|    am.power2 = binary_format<T>::infinite_power();
 3735|      0|    am.mantissa = 0;
 3736|      0|  }
 3737|  8.90k|}
_ZZN3glz10fast_float19negative_digit_compIdEENS0_17adjusted_mantissaERNS0_6bigintES2_iENKUlRS2_iE0_clES5_i:
 4001|  8.94k|  round<T>(answer, [ord](adjusted_mantissa &a, int32_t shift) {
 4002|  8.94k|    round_nearest_tie_even(
 4003|  8.94k|        a, shift, [ord](bool is_odd, bool _, bool __) -> bool {
 4004|  8.94k|          (void)_;  // not needed, since we've done our comparison
 4005|  8.94k|          (void)__; // not needed, since we've done our comparison
 4006|  8.94k|          if (ord > 0) {
 4007|  8.94k|            return true;
 4008|  8.94k|          } else if (ord < 0) {
 4009|  8.94k|            return false;
 4010|  8.94k|          } else {
 4011|  8.94k|            return is_odd;
 4012|  8.94k|          }
 4013|  8.94k|        });
 4014|  8.94k|  });
_ZN3glz10fast_float22round_nearest_tie_evenIZZNS0_19negative_digit_compIdEENS0_17adjusted_mantissaERNS0_6bigintES3_iENKUlRS3_iE0_clES6_iEUlbbbE_EEvS6_iT_:
 3742|  8.94k|                       callback cb) noexcept {
 3743|  8.94k|  uint64_t const mask = (shift == 64) ? UINT64_MAX : (uint64_t(1) << shift) - 1;
  ------------------
  |  Branch (3743:25): [True: 0, False: 8.94k]
  ------------------
 3744|  8.94k|  uint64_t const halfway = (shift == 0) ? 0 : uint64_t(1) << (shift - 1);
  ------------------
  |  Branch (3744:28): [True: 0, False: 8.94k]
  ------------------
 3745|  8.94k|  uint64_t truncated_bits = am.mantissa & mask;
 3746|  8.94k|  bool is_above = truncated_bits > halfway;
 3747|  8.94k|  bool is_halfway = truncated_bits == halfway;
 3748|       |
 3749|       |  // shift digits into position
 3750|  8.94k|  if (shift == 64) {
  ------------------
  |  Branch (3750:7): [True: 0, False: 8.94k]
  ------------------
 3751|      0|    am.mantissa = 0;
 3752|  8.94k|  } else {
 3753|  8.94k|    am.mantissa >>= shift;
 3754|  8.94k|  }
 3755|  8.94k|  am.power2 += shift;
 3756|       |
 3757|  8.94k|  bool is_odd = (am.mantissa & 1) == 1;
 3758|  8.94k|  am.mantissa += uint64_t(cb(is_odd, is_halfway, is_above));
 3759|  8.94k|}
_ZZZN3glz10fast_float19negative_digit_compIdEENS0_17adjusted_mantissaERNS0_6bigintES2_iENKUlRS2_iE0_clES5_iENKUlbbbE_clEbbb:
 4003|  8.94k|        a, shift, [ord](bool is_odd, bool _, bool __) -> bool {
 4004|  8.94k|          (void)_;  // not needed, since we've done our comparison
 4005|  8.94k|          (void)__; // not needed, since we've done our comparison
 4006|  8.94k|          if (ord > 0) {
  ------------------
  |  Branch (4006:15): [True: 5.36k, False: 3.57k]
  ------------------
 4007|  5.36k|            return true;
 4008|  5.36k|          } else if (ord < 0) {
  ------------------
  |  Branch (4008:22): [True: 2.81k, False: 755]
  ------------------
 4009|  2.81k|            return false;
 4010|  2.81k|          } else {
 4011|    755|            return is_odd;
 4012|    755|          }
 4013|  8.94k|        });
_ZN3glz10fast_float8to_floatIdEEvbNS0_17adjusted_mantissaERT_:
 1131|  32.8k|to_float(bool negative, adjusted_mantissa am, T &value) {
 1132|  32.8k|  using equiv_uint = equiv_uint_t<T>;
 1133|  32.8k|  equiv_uint word = equiv_uint(am.mantissa);
 1134|  32.8k|  word = equiv_uint(word | equiv_uint(am.power2)
 1135|  32.8k|                               << binary_format<T>::mantissa_explicit_bits());
 1136|  32.8k|  word =
 1137|  32.8k|      equiv_uint(word | equiv_uint(negative) << binary_format<T>::sign_index());
 1138|  32.8k|#if GLZ_FASTFLOAT_HAS_BIT_CAST
 1139|  32.8k|  value = std::bit_cast<T>(word);
 1140|       |#else
 1141|       |  ::memcpy(&value, &word, sizeof(T));
 1142|       |#endif
 1143|  32.8k|}
_ZN3glz10fast_float13binary_formatIdE10sign_indexEv:
  758|  32.8k|template <> inline constexpr int binary_format<double>::sign_index() {
  759|  32.8k|  return 63;
  760|  32.8k|}
_ZN3glz10fast_float13binary_formatIdE14infinite_powerEv:
  750|  85.8k|template <> inline constexpr int binary_format<double>::infinite_power() {
  751|  85.8k|  return 0x7FF;
  752|  85.8k|}

repe_registry.cpp:_ZN3glz8for_eachILm5EZNS_8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz10member_apiEL_ZNS5_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS8_EEEvRT0_EUlTnDavE_EEvOS9_:
   24|   321k|   {
   25|   321k|      if constexpr (N > 0) {
   26|       |         // Explicit sizes for small N to help the compiler and make debugging easier
   27|       |         // These generate less assembly with O0, but make no difference for higher optimization
   28|       |         if constexpr (N == 1) {
   29|       |            lambda.template operator()<0>();
   30|       |         }
   31|       |         else if constexpr (N == 2) {
   32|       |            lambda.template operator()<0>();
   33|       |            lambda.template operator()<1>();
   34|       |         }
   35|       |         else if constexpr (N == 3) {
   36|       |            lambda.template operator()<0>();
   37|       |            lambda.template operator()<1>();
   38|       |            lambda.template operator()<2>();
   39|       |         }
   40|       |         else if constexpr (N == 4) {
   41|       |            lambda.template operator()<0>();
   42|       |            lambda.template operator()<1>();
   43|       |            lambda.template operator()<2>();
   44|       |            lambda.template operator()<3>();
   45|       |         }
   46|   321k|         else {
   47|   321k|            [&]<size_t... I>(std::index_sequence<I...>) {
   48|   321k|               (void)(lambda.template operator()<I>(), ...);
   49|   321k|            }(std::make_index_sequence<N>{});
   50|   321k|         }
   51|   321k|      }
   52|   321k|   }
repe_registry.cpp:_ZZN3glz8for_eachILm5EZNS_8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz10member_apiEL_ZNS5_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS8_EEEvRT0_EUlTnDavE_EEvOS9_ENKUlTpTnmNSt3__116integer_sequenceImJXspT_EEEEE_clIJLm0ELm1ELm2ELm3ELm4EEEEDaSF_:
   47|   321k|            [&]<size_t... I>(std::index_sequence<I...>) {
   48|   321k|               (void)(lambda.template operator()<I>(), ...);
   49|   321k|            }(std::make_index_sequence<N>{});
_ZN3glz8for_eachILm2EZNS_2toILj10EN9repe_fuzz5pointEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEES3_RNSt3__112basic_stringIcNS7_11char_traitsIcEENS7_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_EUlTnmvE_EEvSK_:
   24|    120|   {
   25|    120|      if constexpr (N > 0) {
   26|       |         // Explicit sizes for small N to help the compiler and make debugging easier
   27|       |         // These generate less assembly with O0, but make no difference for higher optimization
   28|       |         if constexpr (N == 1) {
   29|       |            lambda.template operator()<0>();
   30|       |         }
   31|    120|         else if constexpr (N == 2) {
   32|    120|            lambda.template operator()<0>();
   33|    120|            lambda.template operator()<1>();
   34|       |         }
   35|       |         else if constexpr (N == 3) {
   36|       |            lambda.template operator()<0>();
   37|       |            lambda.template operator()<1>();
   38|       |            lambda.template operator()<2>();
   39|       |         }
   40|       |         else if constexpr (N == 4) {
   41|       |            lambda.template operator()<0>();
   42|       |            lambda.template operator()<1>();
   43|       |            lambda.template operator()<2>();
   44|       |            lambda.template operator()<3>();
   45|       |         }
   46|       |         else {
   47|       |            [&]<size_t... I>(std::index_sequence<I...>) {
   48|       |               (void)(lambda.template operator()<I>(), ...);
   49|       |            }(std::make_index_sequence<N>{});
   50|       |         }
   51|    120|      }
   52|    120|   }
_ZN3glz5visitILm13EZNS_16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT1_OT3_OT4_OT5_DpOT2_EUlTnmvE_EEvOSB_m:
   81|  62.0k|   {
   82|  62.0k|      if constexpr (N > 0) {
   83|       |         // Explicit sizes for small N to help the compiler and make debugging easier
   84|       |         if constexpr (N == 1) {
   85|       |            (void)index;
   86|       |            (void)(lambda.template operator()<0>());
   87|       |         }
   88|       |         else if constexpr (N == 2) {
   89|       |            switch (index) {
   90|       |            case 0:
   91|       |               lambda.template operator()<0>();
   92|       |               break;
   93|       |            case 1:
   94|       |               lambda.template operator()<1>();
   95|       |               break;
   96|       |            default:
   97|       |               std::unreachable();
   98|       |            }
   99|       |         }
  100|       |         else if constexpr (N == 3) {
  101|       |            switch (index) {
  102|       |            case 0:
  103|       |               lambda.template operator()<0>();
  104|       |               break;
  105|       |            case 1:
  106|       |               lambda.template operator()<1>();
  107|       |               break;
  108|       |            case 2:
  109|       |               lambda.template operator()<2>();
  110|       |               break;
  111|       |            default:
  112|       |               std::unreachable();
  113|       |            }
  114|       |         }
  115|       |         else if constexpr (N == 4) {
  116|       |            switch (index) {
  117|       |            case 0:
  118|       |               lambda.template operator()<0>();
  119|       |               break;
  120|       |            case 1:
  121|       |               lambda.template operator()<1>();
  122|       |               break;
  123|       |            case 2:
  124|       |               lambda.template operator()<2>();
  125|       |               break;
  126|       |            case 3:
  127|       |               lambda.template operator()<3>();
  128|       |               break;
  129|       |            default:
  130|       |               std::unreachable();
  131|       |            }
  132|       |         }
  133|       |         else if constexpr (N == 5) {
  134|       |            switch (index) {
  135|       |            case 0:
  136|       |               lambda.template operator()<0>();
  137|       |               break;
  138|       |            case 1:
  139|       |               lambda.template operator()<1>();
  140|       |               break;
  141|       |            case 2:
  142|       |               lambda.template operator()<2>();
  143|       |               break;
  144|       |            case 3:
  145|       |               lambda.template operator()<3>();
  146|       |               break;
  147|       |            case 4:
  148|       |               lambda.template operator()<4>();
  149|       |               break;
  150|       |            default:
  151|       |               std::unreachable();
  152|       |            }
  153|       |         }
  154|       |         else if constexpr (N == 6) {
  155|       |            switch (index) {
  156|       |            case 0:
  157|       |               lambda.template operator()<0>();
  158|       |               break;
  159|       |            case 1:
  160|       |               lambda.template operator()<1>();
  161|       |               break;
  162|       |            case 2:
  163|       |               lambda.template operator()<2>();
  164|       |               break;
  165|       |            case 3:
  166|       |               lambda.template operator()<3>();
  167|       |               break;
  168|       |            case 4:
  169|       |               lambda.template operator()<4>();
  170|       |               break;
  171|       |            case 5:
  172|       |               lambda.template operator()<5>();
  173|       |               break;
  174|       |            default:
  175|       |               std::unreachable();
  176|       |            }
  177|       |         }
  178|       |         else if constexpr (N == 7) {
  179|       |            switch (index) {
  180|       |            case 0:
  181|       |               lambda.template operator()<0>();
  182|       |               break;
  183|       |            case 1:
  184|       |               lambda.template operator()<1>();
  185|       |               break;
  186|       |            case 2:
  187|       |               lambda.template operator()<2>();
  188|       |               break;
  189|       |            case 3:
  190|       |               lambda.template operator()<3>();
  191|       |               break;
  192|       |            case 4:
  193|       |               lambda.template operator()<4>();
  194|       |               break;
  195|       |            case 5:
  196|       |               lambda.template operator()<5>();
  197|       |               break;
  198|       |            case 6:
  199|       |               lambda.template operator()<6>();
  200|       |               break;
  201|       |            default:
  202|       |               std::unreachable();
  203|       |            }
  204|       |         }
  205|       |         else if constexpr (N == 8) {
  206|       |            switch (index) {
  207|       |            case 0:
  208|       |               lambda.template operator()<0>();
  209|       |               break;
  210|       |            case 1:
  211|       |               lambda.template operator()<1>();
  212|       |               break;
  213|       |            case 2:
  214|       |               lambda.template operator()<2>();
  215|       |               break;
  216|       |            case 3:
  217|       |               lambda.template operator()<3>();
  218|       |               break;
  219|       |            case 4:
  220|       |               lambda.template operator()<4>();
  221|       |               break;
  222|       |            case 5:
  223|       |               lambda.template operator()<5>();
  224|       |               break;
  225|       |            case 6:
  226|       |               lambda.template operator()<6>();
  227|       |               break;
  228|       |            case 7:
  229|       |               lambda.template operator()<7>();
  230|       |               break;
  231|       |            default:
  232|       |               std::unreachable();
  233|       |            }
  234|       |         }
  235|       |         else if constexpr (N == 9) {
  236|       |            switch (index) {
  237|       |            case 0:
  238|       |               lambda.template operator()<0>();
  239|       |               break;
  240|       |            case 1:
  241|       |               lambda.template operator()<1>();
  242|       |               break;
  243|       |            case 2:
  244|       |               lambda.template operator()<2>();
  245|       |               break;
  246|       |            case 3:
  247|       |               lambda.template operator()<3>();
  248|       |               break;
  249|       |            case 4:
  250|       |               lambda.template operator()<4>();
  251|       |               break;
  252|       |            case 5:
  253|       |               lambda.template operator()<5>();
  254|       |               break;
  255|       |            case 6:
  256|       |               lambda.template operator()<6>();
  257|       |               break;
  258|       |            case 7:
  259|       |               lambda.template operator()<7>();
  260|       |               break;
  261|       |            case 8:
  262|       |               lambda.template operator()<8>();
  263|       |               break;
  264|       |            default:
  265|       |               std::unreachable();
  266|       |            }
  267|       |         }
  268|       |         else if constexpr (N == 10) {
  269|       |            switch (index) {
  270|       |            case 0:
  271|       |               lambda.template operator()<0>();
  272|       |               break;
  273|       |            case 1:
  274|       |               lambda.template operator()<1>();
  275|       |               break;
  276|       |            case 2:
  277|       |               lambda.template operator()<2>();
  278|       |               break;
  279|       |            case 3:
  280|       |               lambda.template operator()<3>();
  281|       |               break;
  282|       |            case 4:
  283|       |               lambda.template operator()<4>();
  284|       |               break;
  285|       |            case 5:
  286|       |               lambda.template operator()<5>();
  287|       |               break;
  288|       |            case 6:
  289|       |               lambda.template operator()<6>();
  290|       |               break;
  291|       |            case 7:
  292|       |               lambda.template operator()<7>();
  293|       |               break;
  294|       |            case 8:
  295|       |               lambda.template operator()<8>();
  296|       |               break;
  297|       |            case 9:
  298|       |               lambda.template operator()<9>();
  299|       |               break;
  300|       |            default:
  301|       |               std::unreachable();
  302|       |            }
  303|       |         }
  304|  62.0k|         else {
  305|       |#ifdef _MSC_VER
  306|       |            using Lambda = std::decay_t<decltype(lambda)>;
  307|       |            static const auto jump_table = []<size_t... I>(std::index_sequence<I...>) {
  308|       |               return std::array{make_jump_function<I, Lambda>()...};
  309|       |            }(std::make_index_sequence<N>{});
  310|       |#else
  311|  62.0k|            static constexpr auto jump_table = []<size_t... I>(std::index_sequence<I...>) {
  312|  62.0k|               return std::array{+[](std::decay_t<decltype(lambda)>& l) { l.template operator()<I>(); }...};
  313|  62.0k|            }(std::make_index_sequence<N>{});
  314|  62.0k|#endif
  315|       |
  316|  62.0k|#if defined(__clang_major__) && (__clang_major__ >= 19)
  317|  62.0k|            [[assume(index < N)]];
  318|  62.0k|#endif
  319|  62.0k|            jump_table[index](lambda);
  320|       |
  321|       |            // This code runs significantly slower on Clang
  322|       |            // Simple tests with assembly show that this should be faster,
  323|       |            // but full Glaze assembly need to be looked into
  324|       |            /*[&, index]<size_t... I>(std::index_sequence<I...>) {
  325|       |               (void)((index == I ? lambda.template operator()<I>() : void()), ...);
  326|       |            }(std::make_index_sequence<N>{});*/
  327|  62.0k|         }
  328|  62.0k|      }
  329|  62.0k|   }
_ZZZN3glz5visitILm13EZNS_16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT1_OT3_OT4_OT5_DpOT2_EUlTnmvE_EEvOSB_mENKUlTpTnmNSt3__116integer_sequenceImJXspT_EEEEE_clIJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7ELm8ELm9ELm10ELm11ELm12EEEEDaSR_ENKUlRSN_E_clESU_:
  312|  40.1k|               return std::array{+[](std::decay_t<decltype(lambda)>& l) { l.template operator()<I>(); }...};
_ZZZN3glz5visitILm13EZNS_16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT1_OT3_OT4_OT5_DpOT2_EUlTnmvE_EEvOSB_mENKUlTpTnmNSt3__116integer_sequenceImJXspT_EEEEE_clIJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7ELm8ELm9ELm10ELm11ELm12EEEEDaSR_ENKUlRSN_E0_clESU_:
  312|    272|               return std::array{+[](std::decay_t<decltype(lambda)>& l) { l.template operator()<I>(); }...};
_ZZZN3glz5visitILm13EZNS_16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT1_OT3_OT4_OT5_DpOT2_EUlTnmvE_EEvOSB_mENKUlTpTnmNSt3__116integer_sequenceImJXspT_EEEEE_clIJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7ELm8ELm9ELm10ELm11ELm12EEEEDaSR_ENKUlRSN_E1_clESU_:
  312|  1.04k|               return std::array{+[](std::decay_t<decltype(lambda)>& l) { l.template operator()<I>(); }...};
_ZZZN3glz5visitILm13EZNS_16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT1_OT3_OT4_OT5_DpOT2_EUlTnmvE_EEvOSB_mENKUlTpTnmNSt3__116integer_sequenceImJXspT_EEEEE_clIJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7ELm8ELm9ELm10ELm11ELm12EEEEDaSR_ENKUlRSN_E2_clESU_:
  312|    752|               return std::array{+[](std::decay_t<decltype(lambda)>& l) { l.template operator()<I>(); }...};
_ZZZN3glz5visitILm13EZNS_16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT1_OT3_OT4_OT5_DpOT2_EUlTnmvE_EEvOSB_mENKUlTpTnmNSt3__116integer_sequenceImJXspT_EEEEE_clIJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7ELm8ELm9ELm10ELm11ELm12EEEEDaSR_ENKUlRSN_E3_clESU_:
  312|  11.7k|               return std::array{+[](std::decay_t<decltype(lambda)>& l) { l.template operator()<I>(); }...};
_ZZZN3glz5visitILm13EZNS_16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT1_OT3_OT4_OT5_DpOT2_EUlTnmvE_EEvOSB_mENKUlTpTnmNSt3__116integer_sequenceImJXspT_EEEEE_clIJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7ELm8ELm9ELm10ELm11ELm12EEEEDaSR_ENKUlRSN_E4_clESU_:
  312|  1.58k|               return std::array{+[](std::decay_t<decltype(lambda)>& l) { l.template operator()<I>(); }...};
_ZZZN3glz5visitILm13EZNS_16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT1_OT3_OT4_OT5_DpOT2_EUlTnmvE_EEvOSB_mENKUlTpTnmNSt3__116integer_sequenceImJXspT_EEEEE_clIJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7ELm8ELm9ELm10ELm11ELm12EEEEDaSR_ENKUlRSN_E5_clESU_:
  312|  1.71k|               return std::array{+[](std::decay_t<decltype(lambda)>& l) { l.template operator()<I>(); }...};
_ZZZN3glz5visitILm13EZNS_16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT1_OT3_OT4_OT5_DpOT2_EUlTnmvE_EEvOSB_mENKUlTpTnmNSt3__116integer_sequenceImJXspT_EEEEE_clIJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7ELm8ELm9ELm10ELm11ELm12EEEEDaSR_ENKUlRSN_E6_clESU_:
  312|  3.65k|               return std::array{+[](std::decay_t<decltype(lambda)>& l) { l.template operator()<I>(); }...};
_ZN3glz8for_eachILm2EZNS_28process_variant_alternativesINSt3__17variantIJNS2_12basic_stringIcNS2_11char_traitsIcEENS2_9allocatorIcEEEEN9repe_fuzz6amountEEEENS_14is_variant_strEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERSC_TkNS_10is_contextERNS_7contextERPKcSL_EEvOT0_OT1_OT2_T3_EUlTnmvE_EEvSO_:
   24|  2.21k|   {
   25|  2.21k|      if constexpr (N > 0) {
   26|       |         // Explicit sizes for small N to help the compiler and make debugging easier
   27|       |         // These generate less assembly with O0, but make no difference for higher optimization
   28|       |         if constexpr (N == 1) {
   29|       |            lambda.template operator()<0>();
   30|       |         }
   31|  2.21k|         else if constexpr (N == 2) {
   32|  2.21k|            lambda.template operator()<0>();
   33|  2.21k|            lambda.template operator()<1>();
   34|       |         }
   35|       |         else if constexpr (N == 3) {
   36|       |            lambda.template operator()<0>();
   37|       |            lambda.template operator()<1>();
   38|       |            lambda.template operator()<2>();
   39|       |         }
   40|       |         else if constexpr (N == 4) {
   41|       |            lambda.template operator()<0>();
   42|       |            lambda.template operator()<1>();
   43|       |            lambda.template operator()<2>();
   44|       |            lambda.template operator()<3>();
   45|       |         }
   46|       |         else {
   47|       |            [&]<size_t... I>(std::index_sequence<I...>) {
   48|       |               (void)(lambda.template operator()<I>(), ...);
   49|       |            }(std::make_index_sequence<N>{});
   50|       |         }
   51|  2.21k|      }
   52|  2.21k|   }
_ZZZN3glz5visitILm13EZNS_16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT1_OT3_OT4_OT5_DpOT2_EUlTnmvE_EEvOSB_mENKUlTpTnmNSt3__116integer_sequenceImJXspT_EEEEE_clIJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7ELm8ELm9ELm10ELm11ELm12EEEEDaSR_ENKUlRSN_E7_clESU_:
  312|    333|               return std::array{+[](std::decay_t<decltype(lambda)>& l) { l.template operator()<I>(); }...};
_ZZZN3glz5visitILm13EZNS_16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT1_OT3_OT4_OT5_DpOT2_EUlTnmvE_EEvOSB_mENKUlTpTnmNSt3__116integer_sequenceImJXspT_EEEEE_clIJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7ELm8ELm9ELm10ELm11ELm12EEEEDaSR_ENKUlRSN_E8_clESU_:
  312|    210|               return std::array{+[](std::decay_t<decltype(lambda)>& l) { l.template operator()<I>(); }...};
_ZZZN3glz5visitILm13EZNS_16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT1_OT3_OT4_OT5_DpOT2_EUlTnmvE_EEvOSB_mENKUlTpTnmNSt3__116integer_sequenceImJXspT_EEEEE_clIJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7ELm8ELm9ELm10ELm11ELm12EEEEDaSR_ENKUlRSN_E9_clESU_:
  312|    400|               return std::array{+[](std::decay_t<decltype(lambda)>& l) { l.template operator()<I>(); }...};
_ZZZN3glz5visitILm13EZNS_16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT1_OT3_OT4_OT5_DpOT2_EUlTnmvE_EEvOSB_mENKUlTpTnmNSt3__116integer_sequenceImJXspT_EEEEE_clIJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7ELm8ELm9ELm10ELm11ELm12EEEEDaSR_ENKUlRSN_E10_clESU_:
  312|    107|               return std::array{+[](std::decay_t<decltype(lambda)>& l) { l.template operator()<I>(); }...};
_ZZZN3glz5visitILm13EZNS_16parse_and_invokeITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEEN9repe_fuzz8fuzz_apiERS4_JETkNS_10is_contextERNS_7contextERPKcSA_Qoo14glaze_object_tIT0_E11reflectableISB_EEEvOT1_OT3_OT4_OT5_DpOT2_EUlTnmvE_EEvOSB_mENKUlTpTnmNSt3__116integer_sequenceImJXspT_EEEEE_clIJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7ELm8ELm9ELm10ELm11ELm12EEEEDaSR_ENKUlRSN_E11_clESU_:
  312|    117|               return std::array{+[](std::decay_t<decltype(lambda)>& l) { l.template operator()<I>(); }...};
_ZN3glz8for_eachILm13EZNS_2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS3_RNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_EUlTnmvE_EEvSL_:
   24|     62|   {
   25|     62|      if constexpr (N > 0) {
   26|       |         // Explicit sizes for small N to help the compiler and make debugging easier
   27|       |         // These generate less assembly with O0, but make no difference for higher optimization
   28|       |         if constexpr (N == 1) {
   29|       |            lambda.template operator()<0>();
   30|       |         }
   31|       |         else if constexpr (N == 2) {
   32|       |            lambda.template operator()<0>();
   33|       |            lambda.template operator()<1>();
   34|       |         }
   35|       |         else if constexpr (N == 3) {
   36|       |            lambda.template operator()<0>();
   37|       |            lambda.template operator()<1>();
   38|       |            lambda.template operator()<2>();
   39|       |         }
   40|       |         else if constexpr (N == 4) {
   41|       |            lambda.template operator()<0>();
   42|       |            lambda.template operator()<1>();
   43|       |            lambda.template operator()<2>();
   44|       |            lambda.template operator()<3>();
   45|       |         }
   46|     62|         else {
   47|     62|            [&]<size_t... I>(std::index_sequence<I...>) {
   48|     62|               (void)(lambda.template operator()<I>(), ...);
   49|     62|            }(std::make_index_sequence<N>{});
   50|     62|         }
   51|     62|      }
   52|     62|   }
_ZZN3glz8for_eachILm13EZNS_2toILj10EN9repe_fuzz8fuzz_apiEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS3_RNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_EUlTnmvE_EEvSL_ENKUlTpTnmNS8_16integer_sequenceImJXspT_EEEEE_clIJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7ELm8ELm9ELm10ELm11ELm12EEEEDaSU_:
   47|     62|            [&]<size_t... I>(std::index_sequence<I...>) {
   48|     62|               (void)(lambda.template operator()<I>(), ...);
   49|     62|            }(std::make_index_sequence<N>{});
_ZN3glz8for_eachILm2EZNS_2toILj10EN9repe_fuzz5pointEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS3_RNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_EUlTnmvE_EEvSL_:
   24|    181|   {
   25|    181|      if constexpr (N > 0) {
   26|       |         // Explicit sizes for small N to help the compiler and make debugging easier
   27|       |         // These generate less assembly with O0, but make no difference for higher optimization
   28|       |         if constexpr (N == 1) {
   29|       |            lambda.template operator()<0>();
   30|       |         }
   31|    181|         else if constexpr (N == 2) {
   32|    181|            lambda.template operator()<0>();
   33|    181|            lambda.template operator()<1>();
   34|       |         }
   35|       |         else if constexpr (N == 3) {
   36|       |            lambda.template operator()<0>();
   37|       |            lambda.template operator()<1>();
   38|       |            lambda.template operator()<2>();
   39|       |         }
   40|       |         else if constexpr (N == 4) {
   41|       |            lambda.template operator()<0>();
   42|       |            lambda.template operator()<1>();
   43|       |            lambda.template operator()<2>();
   44|       |            lambda.template operator()<3>();
   45|       |         }
   46|       |         else {
   47|       |            [&]<size_t... I>(std::index_sequence<I...>) {
   48|       |               (void)(lambda.template operator()<I>(), ...);
   49|       |            }(std::make_index_sequence<N>{});
   50|       |         }
   51|    181|      }
   52|    181|   }
_ZN3glz8for_eachILm2EZNS_2toILj10EN9repe_fuzz6nestedEE2opITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEERS3_RNSt3__112basic_stringIcNS8_11char_traitsIcEENS8_9allocatorIcEEEETkNS_10is_contextERNS_7contextEmQntsr3stdE12is_pointer_vIu14__remove_cvrefITL0_0_EEEEvOT0_OT2_OT1_RT3_EUlTnmvE_EEvSL_:
   24|    120|   {
   25|    120|      if constexpr (N > 0) {
   26|       |         // Explicit sizes for small N to help the compiler and make debugging easier
   27|       |         // These generate less assembly with O0, but make no difference for higher optimization
   28|       |         if constexpr (N == 1) {
   29|       |            lambda.template operator()<0>();
   30|       |         }
   31|    120|         else if constexpr (N == 2) {
   32|    120|            lambda.template operator()<0>();
   33|    120|            lambda.template operator()<1>();
   34|       |         }
   35|       |         else if constexpr (N == 3) {
   36|       |            lambda.template operator()<0>();
   37|       |            lambda.template operator()<1>();
   38|       |            lambda.template operator()<2>();
   39|       |         }
   40|       |         else if constexpr (N == 4) {
   41|       |            lambda.template operator()<0>();
   42|       |            lambda.template operator()<1>();
   43|       |            lambda.template operator()<2>();
   44|       |            lambda.template operator()<3>();
   45|       |         }
   46|       |         else {
   47|       |            [&]<size_t... I>(std::index_sequence<I...>) {
   48|       |               (void)(lambda.template operator()<I>(), ...);
   49|       |            }(std::make_index_sequence<N>{});
   50|       |         }
   51|    120|      }
   52|    120|   }
repe_registry.cpp:_ZN3glz8for_eachILm13EZNS_8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS5_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS8_EEEvRT0_EUlTnDavE_EEvOS9_:
   24|   335k|   {
   25|   335k|      if constexpr (N > 0) {
   26|       |         // Explicit sizes for small N to help the compiler and make debugging easier
   27|       |         // These generate less assembly with O0, but make no difference for higher optimization
   28|       |         if constexpr (N == 1) {
   29|       |            lambda.template operator()<0>();
   30|       |         }
   31|       |         else if constexpr (N == 2) {
   32|       |            lambda.template operator()<0>();
   33|       |            lambda.template operator()<1>();
   34|       |         }
   35|       |         else if constexpr (N == 3) {
   36|       |            lambda.template operator()<0>();
   37|       |            lambda.template operator()<1>();
   38|       |            lambda.template operator()<2>();
   39|       |         }
   40|       |         else if constexpr (N == 4) {
   41|       |            lambda.template operator()<0>();
   42|       |            lambda.template operator()<1>();
   43|       |            lambda.template operator()<2>();
   44|       |            lambda.template operator()<3>();
   45|       |         }
   46|   335k|         else {
   47|   335k|            [&]<size_t... I>(std::index_sequence<I...>) {
   48|   335k|               (void)(lambda.template operator()<I>(), ...);
   49|   335k|            }(std::make_index_sequence<N>{});
   50|   335k|         }
   51|   335k|      }
   52|   335k|   }
repe_registry.cpp:_ZZN3glz8for_eachILm13EZNS_8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz8fuzz_apiEL_ZNS5_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS8_EEEvRT0_EUlTnDavE_EEvOS9_ENKUlTpTnmNSt3__116integer_sequenceImJXspT_EEEEE_clIJLm0ELm1ELm2ELm3ELm4ELm5ELm6ELm7ELm8ELm9ELm10ELm11ELm12EEEEDaSF_:
   47|   335k|            [&]<size_t... I>(std::index_sequence<I...>) {
   48|   335k|               (void)(lambda.template operator()<I>(), ...);
   49|   335k|            }(std::make_index_sequence<N>{});
repe_registry.cpp:_ZN3glz8for_eachILm2EZNS_8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz5pointEL_ZZZNS4_IL_ZNS5_L10empty_pathEENS6_8fuzz_apiEL_ZNS5_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS9_EEEvRT0_ENKUlTnDavE_clILm2EEEDavE8full_keyEQoo14glaze_object_tIS9_E11reflectableIS9_EEEvSB_EUlTnDavE_EEvOSA_:
   24|   335k|   {
   25|   335k|      if constexpr (N > 0) {
   26|       |         // Explicit sizes for small N to help the compiler and make debugging easier
   27|       |         // These generate less assembly with O0, but make no difference for higher optimization
   28|       |         if constexpr (N == 1) {
   29|       |            lambda.template operator()<0>();
   30|       |         }
   31|   335k|         else if constexpr (N == 2) {
   32|   335k|            lambda.template operator()<0>();
   33|   335k|            lambda.template operator()<1>();
   34|       |         }
   35|       |         else if constexpr (N == 3) {
   36|       |            lambda.template operator()<0>();
   37|       |            lambda.template operator()<1>();
   38|       |            lambda.template operator()<2>();
   39|       |         }
   40|       |         else if constexpr (N == 4) {
   41|       |            lambda.template operator()<0>();
   42|       |            lambda.template operator()<1>();
   43|       |            lambda.template operator()<2>();
   44|       |            lambda.template operator()<3>();
   45|       |         }
   46|       |         else {
   47|       |            [&]<size_t... I>(std::index_sequence<I...>) {
   48|       |               (void)(lambda.template operator()<I>(), ...);
   49|       |            }(std::make_index_sequence<N>{});
   50|       |         }
   51|   335k|      }
   52|   335k|   }
repe_registry.cpp:_ZN3glz8for_eachILm2EZNS_8registryIXtlNS_4optsELj10ELb1ELb0ELb1ELb1EEELj30000EE16register_membersIL_ZNS_6detailL10empty_pathEEN9repe_fuzz6nestedEL_ZZZNS4_IL_ZNS5_L10empty_pathEENS6_8fuzz_apiEL_ZNS5_L10empty_pathEEQoo14glaze_object_tITL0_0_E11reflectableIS9_EEEvRT0_ENKUlTnDavE_clILm3EEEDavE8full_keyEQoo14glaze_object_tIS9_E11reflectableIS9_EEEvSB_EUlTnDavE_EEvOSA_:
   24|   335k|   {
   25|   335k|      if constexpr (N > 0) {
   26|       |         // Explicit sizes for small N to help the compiler and make debugging easier
   27|       |         // These generate less assembly with O0, but make no difference for higher optimization
   28|       |         if constexpr (N == 1) {
   29|       |            lambda.template operator()<0>();
   30|       |         }
   31|   335k|         else if constexpr (N == 2) {
   32|   335k|            lambda.template operator()<0>();
   33|   335k|            lambda.template operator()<1>();
   34|       |         }
   35|       |         else if constexpr (N == 3) {
   36|       |            lambda.template operator()<0>();
   37|       |            lambda.template operator()<1>();
   38|       |            lambda.template operator()<2>();
   39|       |         }
   40|       |         else if constexpr (N == 4) {
   41|       |            lambda.template operator()<0>();
   42|       |            lambda.template operator()<1>();
   43|       |            lambda.template operator()<2>();
   44|       |            lambda.template operator()<3>();
   45|       |         }
   46|       |         else {
   47|       |            [&]<size_t... I>(std::index_sequence<I...>) {
   48|       |               (void)(lambda.template operator()<I>(), ...);
   49|       |            }(std::make_index_sequence<N>{});
   50|       |         }
   51|   335k|      }
   52|   335k|   }

_ZN3glz10from_charsILb0EdcEENS_10fast_float19from_chars_result_tIT1_EEPKS3_S6_RT0_:
  236|   302k|   {
  237|   302k|      using namespace glz::fast_float;
  238|   302k|      static_assert(is_supported_float_type<T>(), "only some floating-point types are supported");
  239|   302k|      static_assert(is_supported_char_type<UC>(), "only char, wchar_t, char16_t and char32_t are supported");
  240|       |
  241|   302k|      parsed_number_string_t<UC> pns = glz::parse_number_string<null_terminated, UC>(first, last);
  242|   302k|      if (!pns.valid) [[unlikely]] {
  ------------------
  |  Branch (242:11): [True: 23.9k, False: 278k]
  ------------------
  243|  23.9k|         return {.ptr = first, .ec = std::errc::invalid_argument};
  244|  23.9k|      }
  245|       |
  246|   278k|      return from_chars_advanced(pns, value);
  247|   302k|   }
_ZN3glz19parse_number_stringILb0EcEENS_10fast_float22parsed_number_string_tIT0_EEPKS3_S6_:
   18|   302k|   {
   19|   302k|      using namespace glz::fast_float;
   20|   302k|      static constexpr UC decimal_point = '.';
   21|       |
   22|   302k|      parsed_number_string_t<UC> answer;
   23|   302k|      answer.valid = false;
   24|   302k|      answer.too_many_digits = false;
   25|   302k|      answer.negative = (*p == UC('-'));
   26|   302k|      if (*p == UC('-')) { // C++17 20.19.3.(7.1) explicitly forbids '+' sign here
  ------------------
  |  Branch (26:11): [True: 15.1k, False: 287k]
  ------------------
   27|  15.1k|         ++p;
   28|       |
   29|  15.1k|         if constexpr (not null_terminated) {
   30|  15.1k|            if (p == pend) [[unlikely]] {
  ------------------
  |  Branch (30:17): [True: 22, False: 15.1k]
  ------------------
   31|     22|               return answer;
   32|     22|            }
   33|  15.1k|         }
   34|       |
   35|  15.1k|         if (!glz::fast_float::is_integer(*p)) [[unlikely]] { // a sign must be followed by an integer
  ------------------
  |  Branch (35:14): [True: 46, False: 15.1k]
  ------------------
   36|     46|            return answer;
   37|     46|         }
   38|  15.1k|      }
   39|   302k|      UC const* const start_digits = p;
   40|       |
   41|   302k|      uint64_t i = 0; // an unsigned int avoids signed overflows (which are bad)
   42|       |
   43|   302k|      uint64_t digit;
   44|       |      if constexpr (null_terminated) {
   45|       |         while ((digit = glz::fast_float::digit_value(*p)) <= 9) {
   46|       |            // a multiplication by 10 is cheaper than an arbitrary integer
   47|       |            // multiplication
   48|       |            i = 10 * i + digit; // might overflow, we will handle the overflow later
   49|       |            ++p;
   50|       |         }
   51|       |      }
   52|   302k|      else {
   53|  9.48M|         while ((p != pend) && (digit = glz::fast_float::digit_value(*p)) <= 9) {
  ------------------
  |  Branch (53:17): [True: 9.47M, False: 1.93k]
  |  Branch (53:32): [True: 9.17M, False: 300k]
  ------------------
   54|       |            // a multiplication by 10 is cheaper than an arbitrary integer
   55|       |            // multiplication
   56|  9.17M|            i = 10 * i + digit; // might overflow, we will handle the overflow later
   57|  9.17M|            ++p;
   58|  9.17M|         }
   59|   302k|      }
   60|       |
   61|   302k|      UC const* const end_of_integer_part = p;
   62|   302k|      int64_t digit_count = int64_t(end_of_integer_part - start_digits);
   63|   302k|      answer.integer = glz::fast_float::span<const UC>(start_digits, size_t(digit_count));
   64|       |
   65|       |      // at least 1 digit in integer part, without leading zeros
   66|   302k|      if (digit_count == 0 || (start_digits[0] == UC('0') && digit_count > 1)) {
  ------------------
  |  Branch (66:11): [True: 23.8k, False: 279k]
  |  Branch (66:32): [True: 13.4k, False: 265k]
  |  Branch (66:62): [True: 57, False: 13.3k]
  ------------------
   67|  23.8k|         return answer;
   68|  23.8k|      }
   69|       |
   70|   279k|      int64_t exponent = 0;
   71|   279k|      const bool has_decimal_point = [&] {
   72|   279k|         if constexpr (null_terminated) {
   73|   279k|            return (*p == decimal_point);
   74|   279k|         }
   75|   279k|         else {
   76|   279k|            return (p != pend) && (*p == decimal_point);
   77|   279k|         }
   78|   279k|      }();
   79|   279k|      if (has_decimal_point) {
  ------------------
  |  Branch (79:11): [True: 16.4k, False: 262k]
  ------------------
   80|  16.4k|         ++p;
   81|  16.4k|         UC const* before = p;
   82|       |         // can occur at most twice without overflowing, but let it occur more, since
   83|       |         // for integers with many digits, digit parsing is the primary bottleneck.
   84|  16.4k|         loop_parse_if_eight_digits(p, pend, i);
   85|       |
   86|       |         if constexpr (null_terminated) {
   87|       |            while ((digit = glz::fast_float::digit_value(*p)) <= 9) {
   88|       |               ++p;
   89|       |               i = i * 10 + digit; // in rare cases, this will overflow, but that's ok
   90|       |            }
   91|       |         }
   92|  16.4k|         else {
   93|  71.3k|            while ((p != pend) && (digit = glz::fast_float::digit_value(*p)) <= 9) {
  ------------------
  |  Branch (93:20): [True: 69.9k, False: 1.37k]
  |  Branch (93:35): [True: 54.8k, False: 15.1k]
  ------------------
   94|  54.8k|               ++p;
   95|  54.8k|               i = i * 10 + digit; // in rare cases, this will overflow, but that's ok
   96|  54.8k|            }
   97|  16.4k|         }
   98|  16.4k|         exponent = before - p;
   99|  16.4k|         answer.fraction = glz::fast_float::span<const UC>(before, size_t(p - before));
  100|  16.4k|         digit_count -= exponent;
  101|  16.4k|      }
  102|       |      // at least 1 digit in fractional part
  103|   279k|      if (has_decimal_point && exponent == 0) {
  ------------------
  |  Branch (103:11): [True: 16.4k, False: 262k]
  |  Branch (103:32): [True: 47, False: 16.4k]
  ------------------
  104|     47|         return answer;
  105|     47|      }
  106|       |
  107|   278k|      int64_t exp_number = 0; // explicit exponential part
  108|       |
  109|       |      if constexpr (null_terminated) {
  110|       |         if ((UC('e') == *p) || (UC('E') == *p)) {
  111|       |            UC const* location_of_e = p;
  112|       |            ++p;
  113|       |            bool neg_exp = false;
  114|       |            if (UC('-') == *p) {
  115|       |               neg_exp = true;
  116|       |               ++p;
  117|       |            }
  118|       |            else if (UC('+') == *p) { // '+' on exponent is allowed by C++17 20.19.3.(7.1)
  119|       |               ++p;
  120|       |            }
  121|       |            if ((digit = glz::fast_float::digit_value(*p)) > 9) {
  122|       |               // Otherwise, we will be ignoring the 'e'.
  123|       |               p = location_of_e;
  124|       |            }
  125|       |            else {
  126|       |               do {
  127|       |                  if (exp_number < 0x10000000) {
  128|       |                     exp_number = 10 * exp_number + digit;
  129|       |                  }
  130|       |                  ++p;
  131|       |               } while ((digit = glz::fast_float::digit_value(*p)) <= 9);
  132|       |               if (neg_exp) {
  133|       |                  exp_number = -exp_number;
  134|       |               }
  135|       |               exponent += exp_number;
  136|       |            }
  137|       |         }
  138|       |      }
  139|   278k|      else {
  140|   278k|         if ((p != pend) && ((UC('e') == *p) || (UC('E') == *p))) {
  ------------------
  |  Branch (140:14): [True: 275k, False: 3.25k]
  |  Branch (140:30): [True: 11.4k, False: 264k]
  |  Branch (140:49): [True: 12.7k, False: 251k]
  ------------------
  141|  24.2k|            UC const* location_of_e = p;
  142|  24.2k|            ++p;
  143|  24.2k|            bool neg_exp = false;
  144|  24.2k|            if ((p != pend) && (UC('-') == *p)) {
  ------------------
  |  Branch (144:17): [True: 24.1k, False: 86]
  |  Branch (144:32): [True: 1.08k, False: 23.1k]
  ------------------
  145|  1.08k|               neg_exp = true;
  146|  1.08k|               ++p;
  147|  1.08k|            }
  148|  23.1k|            else if ((p != pend) && (UC('+') == *p)) { // '+' on exponent is allowed by C++17 20.19.3.(7.1)
  ------------------
  |  Branch (148:22): [True: 23.1k, False: 86]
  |  Branch (148:37): [True: 430, False: 22.6k]
  ------------------
  149|    430|               ++p;
  150|    430|            }
  151|  24.2k|            if ((p == pend) || (digit = glz::fast_float::digit_value(*p)) > 9) {
  ------------------
  |  Branch (151:17): [True: 102, False: 24.1k]
  |  Branch (151:32): [True: 85, False: 24.0k]
  ------------------
  152|       |               // Otherwise, we will be ignoring the 'e'.
  153|    187|               p = location_of_e;
  154|    187|            }
  155|  24.0k|            else {
  156|  51.5k|               do {
  157|  51.5k|                  if (exp_number < 0x10000000) {
  ------------------
  |  Branch (157:23): [True: 50.2k, False: 1.26k]
  ------------------
  158|  50.2k|                     exp_number = 10 * exp_number + digit;
  159|  50.2k|                  }
  160|  51.5k|                  ++p;
  161|  51.5k|               } while ((p != pend) && (digit = glz::fast_float::digit_value(*p)) <= 9);
  ------------------
  |  Branch (161:25): [True: 49.9k, False: 1.53k]
  |  Branch (161:40): [True: 27.4k, False: 22.5k]
  ------------------
  162|  24.0k|               if (neg_exp) {
  ------------------
  |  Branch (162:20): [True: 1.07k, False: 23.0k]
  ------------------
  163|  1.07k|                  exp_number = -exp_number;
  164|  1.07k|               }
  165|  24.0k|               exponent += exp_number;
  166|  24.0k|            }
  167|  24.2k|         }
  168|   278k|      }
  169|       |
  170|   278k|      answer.lastmatch = p;
  171|   278k|      answer.valid = true;
  172|       |
  173|       |      // If we frequently had to deal with long strings of digits,
  174|       |      // we could extend our code by using a 128-bit integer instead
  175|       |      // of a 64-bit integer. However, this is uncommon.
  176|       |      //
  177|       |      // We can deal with up to 19 digits.
  178|   278k|      if (digit_count > 19) { // this is uncommon
  ------------------
  |  Branch (178:11): [True: 20.0k, False: 258k]
  ------------------
  179|       |         // It is possible that the integer had an overflow.
  180|       |         // We have to handle the case where we have 0.0000somenumber.
  181|       |         // We need to be mindful of the case where we only have zeroes...
  182|       |         // E.g., 0.000000000...000.
  183|  20.0k|         UC const* start = start_digits;
  184|       |         if constexpr (null_terminated) {
  185|       |            while ((*start == UC('0') || *start == decimal_point)) {
  186|       |               if (*start == UC('0')) {
  187|       |                  --digit_count;
  188|       |               }
  189|       |               ++start;
  190|       |            }
  191|       |         }
  192|  20.0k|         else {
  193|  2.65M|            while ((start != pend) && (*start == UC('0') || *start == decimal_point)) {
  ------------------
  |  Branch (193:20): [True: 2.65M, False: 34]
  |  Branch (193:40): [True: 2.62M, False: 24.1k]
  |  Branch (193:61): [True: 4.15k, False: 20.0k]
  ------------------
  194|  2.63M|               if (*start == UC('0')) {
  ------------------
  |  Branch (194:20): [True: 2.62M, False: 4.15k]
  ------------------
  195|  2.62M|                  --digit_count;
  196|  2.62M|               }
  197|  2.63M|               ++start;
  198|  2.63M|            }
  199|  20.0k|         }
  200|       |
  201|  20.0k|         if (digit_count > 19) {
  ------------------
  |  Branch (201:14): [True: 19.1k, False: 918]
  ------------------
  202|  19.1k|            answer.too_many_digits = true;
  203|       |            // Let us start again, this time, avoiding overflows.
  204|       |            // We don't need to check if is_integer, since we use the
  205|       |            // pre-tokenized spans from above.
  206|  19.1k|            i = 0;
  207|  19.1k|            p = answer.integer.ptr;
  208|  19.1k|            UC const* int_end = p + answer.integer.len();
  209|  19.1k|            const uint64_t minimal_nineteen_digit_integer{1000000000000000000};
  210|   270k|            while ((i < minimal_nineteen_digit_integer) && (p != int_end)) {
  ------------------
  |  Branch (210:20): [True: 260k, False: 10.3k]
  |  Branch (210:60): [True: 251k, False: 8.78k]
  ------------------
  211|   251k|               i = i * 10 + uint64_t(*p - UC('0'));
  212|   251k|               ++p;
  213|   251k|            }
  214|  19.1k|            if (i >= minimal_nineteen_digit_integer) { // We have a big integers
  ------------------
  |  Branch (214:17): [True: 10.3k, False: 8.78k]
  ------------------
  215|  10.3k|               exponent = end_of_integer_part - p + exp_number;
  216|  10.3k|            }
  217|  8.78k|            else { // We have a value with a fractional component.
  218|  8.78k|               p = answer.fraction.ptr;
  219|  8.78k|               UC const* frac_end = p + answer.fraction.len();
  220|   245k|               while ((i < minimal_nineteen_digit_integer) && (p != frac_end)) {
  ------------------
  |  Branch (220:23): [True: 236k, False: 8.78k]
  |  Branch (220:63): [True: 236k, False: 0]
  ------------------
  221|   236k|                  i = i * 10 + uint64_t(*p - UC('0'));
  222|   236k|                  ++p;
  223|   236k|               }
  224|  8.78k|               exponent = answer.fraction.ptr - p + exp_number;
  225|  8.78k|            }
  226|       |            // We have now corrected both exponent and i, to a truncated value
  227|  19.1k|         }
  228|  20.0k|      }
  229|   278k|      answer.exponent = exponent;
  230|   278k|      answer.mantissa = i;
  231|   278k|      return answer;
  232|   279k|   }
_ZZN3glz19parse_number_stringILb0EcEENS_10fast_float22parsed_number_string_tIT0_EEPKS3_S6_ENKUlvE_clEv:
   71|   279k|      const bool has_decimal_point = [&] {
   72|       |         if constexpr (null_terminated) {
   73|       |            return (*p == decimal_point);
   74|       |         }
   75|   279k|         else {
   76|   279k|            return (p != pend) && (*p == decimal_point);
  ------------------
  |  Branch (76:20): [True: 277k, False: 1.88k]
  |  Branch (76:35): [True: 16.4k, False: 260k]
  ------------------
   77|   279k|         }
   78|   279k|      }();

_ZN3glz8to_charsImQsr3stdE7same_asIu14__remove_cvrefIT_EmEEEPcS3_S1_:
  221|   305k|   {
  222|   305k|      using namespace itoa_impl;
  223|   305k|      if (val < 100000000) {
  ------------------
  |  Branch (223:11): [True: 304k, False: 1.01k]
  ------------------
  224|   304k|         return u64_len_1_8(buf, uint32_t(val));
  225|   304k|      }
  226|  1.01k|      else if (val < 10000000000000000ull) {
  ------------------
  |  Branch (226:16): [True: 332, False: 678]
  ------------------
  227|    332|         const uint64_t hgh = div_1e8(val);
  228|    332|         const uint32_t low = uint32_t(val - hgh * 100000000);
  229|    332|         buf = u64_len_1_8(buf, uint32_t(hgh));
  230|    332|         return u64_len_8(buf, low);
  231|    332|      }
  232|    678|      else {
  233|    678|         const uint64_t tmp = div_1e8(val);
  234|    678|         const uint32_t low = uint32_t(val - tmp * 100000000);
  235|    678|         const uint32_t hgh = uint32_t(tmp / 10000);
  236|    678|         const uint32_t mid = uint32_t(tmp - uint64_t(hgh) * 10000);
  237|    678|         buf = u64_len_5_8(buf, hgh);
  238|    678|         buf = u64_len_4(buf, mid);
  239|    678|         return u64_len_8(buf, low);
  240|    678|      }
  241|   305k|   }
_ZN3glz9itoa_impl11u64_len_1_8EPcj:
  157|   305k|      {
  158|   305k|         if (val < 100) {
  ------------------
  |  Branch (158:14): [True: 301k, False: 3.74k]
  ------------------
  159|   301k|            return u32_2(buf, val);
  160|   301k|         }
  161|  3.74k|         else if (val < 10000) {
  ------------------
  |  Branch (161:19): [True: 2.83k, False: 911]
  ------------------
  162|  2.83k|            return u32_4(buf, val);
  163|  2.83k|         }
  164|    911|         else if (val < 1000000) {
  ------------------
  |  Branch (164:19): [True: 557, False: 354]
  ------------------
  165|    557|            return u32_6(buf, val);
  166|    557|         }
  167|    354|         else {
  168|    354|            return u32_8(buf, val);
  169|    354|         }
  170|   305k|      }
_ZN3glz9itoa_impl5u32_2EPcj:
   74|   301k|      {
   75|   301k|         const uint32_t lz = val < 10;
   76|   301k|         std::memcpy(buf, char_table + ((val * 2) | lz), 2);
   77|   301k|         return buf + 2 - lz;
   78|   301k|      }
_ZN3glz9itoa_impl5u32_4EPcj:
   81|  2.84k|      {
   82|  2.84k|         const uint32_t aa = (val * 5243) >> 19; // val / 100
   83|  2.84k|         const uint32_t lz = aa < 10;
   84|  2.84k|         std::memcpy(buf, char_table + ((aa * 2) | lz), 2);
   85|  2.84k|         std::memcpy(buf + 2 - lz, &digit_pairs[val - aa * 100], 2);
   86|  2.84k|         return buf + 4 - lz;
   87|  2.84k|      }
_ZN3glz9itoa_impl5u32_6EPcj:
   90|    721|      {
   91|    721|         const uint32_t aa = uint32_t((uint64_t(val) * 429497) >> 32); // val / 10000
   92|    721|         const uint32_t bbcc = val - aa * 10000;
   93|    721|         const uint32_t bb = (bbcc * 5243) >> 19; // bbcc / 100
   94|    721|         const uint32_t lz = aa < 10;
   95|    721|         std::memcpy(buf, char_table + ((aa * 2) | lz), 2);
   96|    721|         std::memcpy(buf + 2 - lz, &digit_pairs[bb], 2);
   97|    721|         std::memcpy(buf + 4 - lz, &digit_pairs[bbcc - bb * 100], 2);
   98|    721|         return buf + 6 - lz;
   99|    721|      }
_ZN3glz9itoa_impl5u32_8EPcj:
  102|    868|      {
  103|    868|         const uint32_t aabb = uint32_t((uint64_t(val) * 109951163) >> 40); // val / 10000
  104|    868|         const uint32_t ccdd = val - aabb * 10000;
  105|    868|         const uint32_t aa = (aabb * 5243) >> 19; // aabb / 100
  106|    868|         const uint32_t cc = (ccdd * 5243) >> 19; // ccdd / 100
  107|    868|         const uint32_t lz = aa < 10;
  108|    868|         std::memcpy(buf, char_table + ((aa * 2) | lz), 2);
  109|    868|         std::memcpy(buf + 2 - lz, &digit_pairs[aabb - aa * 100], 2);
  110|    868|         std::memcpy(buf + 4 - lz, &digit_pairs[cc], 2);
  111|    868|         std::memcpy(buf + 6 - lz, &digit_pairs[ccdd - cc * 100], 2);
  112|    868|         return buf + 8 - lz;
  113|    868|      }
_ZN3glz9itoa_impl7div_1e8Em:
   56|  1.01k|      {
   57|  1.01k|         constexpr __uint128_t multiplier = 0xabcc77118461cefdULL;
   58|  1.01k|         constexpr uint64_t shift = 90;
   59|  1.01k|         return static_cast<uint64_t>((static_cast<__uint128_t>(value) * multiplier) >> shift);
   60|  1.01k|      }
_ZN3glz9itoa_impl9u64_len_8EPcj:
  134|  1.01k|      {
  135|  1.01k|         const uint32_t aabb = uint32_t((uint64_t(val) * 109951163) >> 40);
  136|  1.01k|         const uint32_t ccdd = val - aabb * 10000;
  137|  1.01k|         const uint32_t aa = (aabb * 5243) >> 19;
  138|  1.01k|         const uint32_t cc = (ccdd * 5243) >> 19;
  139|  1.01k|         std::memcpy(buf, &digit_pairs[aa], 2);
  140|  1.01k|         std::memcpy(buf + 2, &digit_pairs[aabb - aa * 100], 2);
  141|  1.01k|         std::memcpy(buf + 4, &digit_pairs[cc], 2);
  142|  1.01k|         std::memcpy(buf + 6, &digit_pairs[ccdd - cc * 100], 2);
  143|  1.01k|         return buf + 8;
  144|  1.01k|      }
_ZN3glz9itoa_impl11u64_len_5_8EPcj:
  174|    678|      {
  175|    678|         if (val < 1000000) {
  ------------------
  |  Branch (175:14): [True: 164, False: 514]
  ------------------
  176|    164|            return u32_6(buf, val);
  177|    164|         }
  178|    514|         else {
  179|    514|            return u32_8(buf, val);
  180|    514|         }
  181|    678|      }
_ZN3glz9itoa_impl9u64_len_4EPcj:
  148|    678|      {
  149|    678|         const uint32_t aa = (val * 5243) >> 19;
  150|    678|         std::memcpy(buf, &digit_pairs[aa], 2);
  151|    678|         std::memcpy(buf + 2, &digit_pairs[val - aa * 100], 2);
  152|    678|         return buf + 4;
  153|    678|      }
_ZN3glz8to_charsIjQsr3stdE7same_asIu14__remove_cvrefIT_EjEEEPcS3_S1_:
  191|     28|   {
  192|     28|      using namespace itoa_impl;
  193|     28|      if (val < 100) {
  ------------------
  |  Branch (193:11): [True: 14, False: 14]
  ------------------
  194|     14|         return u32_2(buf, val);
  195|     14|      }
  196|     14|      else if (val < 10000) {
  ------------------
  |  Branch (196:16): [True: 14, False: 0]
  ------------------
  197|     14|         return u32_4(buf, val);
  198|     14|      }
  199|      0|      else if (val < 1000000) {
  ------------------
  |  Branch (199:16): [True: 0, False: 0]
  ------------------
  200|      0|         return u32_6(buf, val);
  201|      0|      }
  202|      0|      else if (val < 100000000) {
  ------------------
  |  Branch (202:16): [True: 0, False: 0]
  ------------------
  203|      0|         return u32_8(buf, val);
  204|      0|      }
  205|      0|      else {
  206|      0|         return u32_10(buf, val);
  207|      0|      }
  208|     28|   }

_ZN3glz13to_chars_40kbIiQsr3stdE7same_asIu14__remove_cvrefIT_EiEEEPcS3_S1_:
  282|    993|   {
  283|    993|      *buf = '-';
  284|    993|      return to_chars_40kb(buf + (val < 0),
  285|    993|                           static_cast<uint32_t>((static_cast<uint32_t>(val) ^ (val >> 31)) - (val >> 31)));
  286|    993|   }
_ZN3glz13to_chars_40kbIjQsr3stdE7same_asIu14__remove_cvrefIT_EjEEEPcS3_S1_:
  260|    993|   {
  261|    993|      using namespace itoa_40kb_impl;
  262|    993|      if (val < 10000) {
  ------------------
  |  Branch (262:11): [True: 578, False: 415]
  ------------------
  263|    578|         if (val < 100)
  ------------------
  |  Branch (263:14): [True: 472, False: 106]
  ------------------
  264|    472|            return u32_2(buf, val);
  265|    106|         else
  266|    106|            return u32_4(buf, val);
  267|    578|      }
  268|    415|      else if (val < 100000000) {
  ------------------
  |  Branch (268:16): [True: 306, False: 109]
  ------------------
  269|    306|         if (val < 1000000)
  ------------------
  |  Branch (269:14): [True: 137, False: 169]
  ------------------
  270|    137|            return u32_6(buf, val);
  271|    169|         else
  272|    169|            return u32_8(buf, val);
  273|    306|      }
  274|    109|      else {
  275|    109|         return u32_10(buf, val);
  276|    109|      }
  277|    993|   }
_ZN3glz14itoa_40kb_impl5u32_2EPcj:
   62|    472|      {
   63|    472|         const uint64_t lz = val < 10;
   64|       |         // Use OR since val*2 is always even (bit 0 is 0)
   65|    472|         std::memcpy(buf, char_table + ((val * 2) | lz), 2);
   66|    472|         return buf + 2 - lz;
   67|    472|      }
_ZN3glz14itoa_40kb_impl5u32_4EPcj:
   70|    106|      {
   71|    106|         const uint32_t aa = (val * 5243) >> 19;
   72|    106|         const uint64_t lz = val < 1000;
   73|    106|         std::memcpy(buf, char_table + ((aa * 2) | lz), 2);
   74|    106|         std::memcpy(buf + 2 - lz, &digit_pairs[val - aa * 100], 2);
   75|    106|         return buf + 4 - lz;
   76|    106|      }
_ZN3glz14itoa_40kb_impl5u32_6EPcj:
   79|    137|      {
   80|    137|         const uint32_t aa = static_cast<uint32_t>((static_cast<uint64_t>(val) * 429497ULL) >> 32);
   81|    137|         const uint64_t lz = val < 100000;
   82|    137|         std::memcpy(buf, char_table + ((aa * 2) | lz), 2);
   83|    137|         std::memcpy(buf + 2 - lz, &digit_quads[val - aa * 10000], 4);
   84|    137|         return buf + 6 - lz;
   85|    137|      }
_ZN3glz14itoa_40kb_impl5u32_8EPcj:
   88|    169|      {
   89|    169|         const uint64_t aabb = (static_cast<uint64_t>(val) * 109951163ULL) >> 40;
   90|    169|         const uint64_t aa = (aabb * 5243ULL) >> 19;
   91|    169|         const uint64_t lz = val < 10000000;
   92|    169|         std::memcpy(buf, char_table + ((aa * 2) | lz), 2);
   93|    169|         std::memcpy(buf + 2 - lz, &digit_pairs[aabb - aa * 100], 2);
   94|    169|         std::memcpy(buf + 4 - lz, &digit_quads[val - aabb * 10000], 4);
   95|    169|         return buf + 8 - lz;
   96|    169|      }
_ZN3glz14itoa_40kb_impl6u32_10EPcj:
   99|    109|      {
  100|    109|         const uint64_t high = div_1e8(val);
  101|    109|         const uint64_t low = val - high * 100000000;
  102|    109|         const uint64_t lz = high < 10;
  103|    109|         std::memcpy(buf, char_table + ((high * 2) | lz), 2);
  104|    109|         const uint64_t aabb = (low * 109951163ULL) >> 40;
  105|    109|         const uint64_t ccdd = low - aabb * 10000;
  106|    109|         std::memcpy(buf + 2 - lz, &digit_quads[aabb], 4);
  107|    109|         std::memcpy(buf + 6 - lz, &digit_quads[ccdd], 4);
  108|    109|         return buf + 10 - lz;
  109|    109|      }
_ZN3glz14itoa_40kb_impl7div_1e8Em:
   50|    109|      {
   51|    109|         constexpr __uint128_t multiplier = 0xabcc77118461cefdULL;
   52|    109|         constexpr uint64_t shift = 90;
   53|    109|         return static_cast<uint64_t>((static_cast<__uint128_t>(value) * multiplier) >> shift);
   54|    109|      }

_ZN3glz7skip_wsIXtlNS_7ws_optsEEETkNS_10is_contextERNS_7contextERPKcS5_EEbOT0_OT1_T2_:
  622|  2.85M|   {
  623|  2.85M|      using namespace glz::detail;
  624|       |
  625|  2.85M|      if constexpr (not Opts.minified) {
  626|       |         if constexpr (Opts.null_terminated) {
  627|       |            if constexpr (Opts.comments) {
  628|       |               while (whitespace_comment_table[uint8_t(*it)]) {
  629|       |                  if (*it == '/') [[unlikely]] {
  630|       |                     skip_comment(ctx, it, end);
  631|       |                     if (bool(ctx.error)) [[unlikely]] {
  632|       |                        return true;
  633|       |                     }
  634|       |                  }
  635|       |                  else [[likely]] {
  636|       |                     ++it;
  637|       |                  }
  638|       |               }
  639|       |            }
  640|       |            else {
  641|       |               while (whitespace_table[uint8_t(*it)]) {
  642|       |                  ++it;
  643|       |               }
  644|       |            }
  645|       |         }
  646|  2.85M|         else {
  647|       |            if constexpr (Opts.comments) {
  648|       |               while (it < end && whitespace_comment_table[uint8_t(*it)]) {
  649|       |                  if (*it == '/') [[unlikely]] {
  650|       |                     skip_comment(ctx, it, end);
  651|       |                     if (bool(ctx.error)) [[unlikely]] {
  652|       |                        return true;
  653|       |                     }
  654|       |                  }
  655|       |                  else [[likely]] {
  656|       |                     ++it;
  657|       |                  }
  658|       |               }
  659|       |               if (it == end) [[unlikely]] {
  660|       |                  ctx.error = error_code::end_reached;
  661|       |                  return true;
  662|       |               }
  663|       |            }
  664|  2.85M|            else {
  665|   124M|               while (it < end && whitespace_table[uint8_t(*it)]) {
  ------------------
  |  Branch (665:23): [True: 124M, False: 4.10k]
  |  Branch (665:35): [True: 121M, False: 2.85M]
  ------------------
  666|   121M|                  ++it;
  667|   121M|               }
  668|  2.85M|               if (it == end) [[unlikely]] {
  ------------------
  |  Branch (668:20): [True: 4.10k, False: 2.85M]
  ------------------
  669|  4.10k|                  ctx.error = error_code::end_reached;
  670|  4.10k|                  return true;
  671|  4.10k|               }
  672|  2.85M|            }
  673|  2.85M|         }
  674|       |      }
  675|       |      else if constexpr (not Opts.null_terminated) {
  676|       |         // Minified input has no whitespace to skip, but a non-null-terminated buffer can still
  677|       |         // be exhausted at this point. The non-minified branch above performs the same check; a
  678|       |         // null-terminated buffer relies on the trailing sentinel and keeps this a pure no-op.
  679|       |         if (it == end) [[unlikely]] {
  680|       |            ctx.error = error_code::end_reached;
  681|       |            return true;
  682|       |         }
  683|       |      }
  684|       |
  685|  2.85M|      return false;
  686|  2.85M|   }
_ZN3glz17match_invalid_endILc123EXtlNS_22match_invalid_end_optsEEETkNS_10is_contextENS_7contextERPKcS4_EEbRT1_OT2_T3_:
  411|   110k|   {
  412|   110k|      if (*it != C) [[unlikely]] {
  ------------------
  |  Branch (412:11): [True: 41.6k, False: 68.7k]
  ------------------
  413|       |         if constexpr (C == '"') {
  414|       |            ctx.error = error_code::expected_quote;
  415|       |         }
  416|       |         else if constexpr (C == ',') {
  417|       |            ctx.error = error_code::expected_comma;
  418|       |         }
  419|       |         else if constexpr (C == ':') {
  420|       |            ctx.error = error_code::expected_colon;
  421|       |         }
  422|       |         else if constexpr (C == '[' || C == ']') {
  423|       |            ctx.error = error_code::expected_bracket;
  424|       |         }
  425|  41.6k|         else if constexpr (C == '{' || C == '}') {
  426|  41.6k|            ctx.error = error_code::expected_brace;
  427|       |         }
  428|       |         else {
  429|       |            ctx.error = error_code::syntax_error;
  430|       |         }
  431|  41.6k|         return true;
  432|  41.6k|      }
  433|  68.7k|      else [[likely]] {
  434|  68.7k|         ++it;
  435|  68.7k|      }
  436|  68.7k|      if constexpr (not Opts.null_terminated) {
  437|  68.7k|         if (it == end) [[unlikely]] {
  ------------------
  |  Branch (437:14): [True: 72, False: 68.6k]
  ------------------
  438|     72|            ctx.error = error_code::unexpected_end;
  439|     72|            return true;
  440|     72|         }
  441|  68.7k|      }
  442|  68.6k|      return false;
  443|   110k|   }
_ZN3glz17match_invalid_endILc44EXtlNS_22match_invalid_end_optsEEETkNS_10is_contextENS_7contextERPKcS4_EEbRT1_OT2_T3_:
  411|   176k|   {
  412|   176k|      if (*it != C) [[unlikely]] {
  ------------------
  |  Branch (412:11): [True: 1.93k, False: 174k]
  ------------------
  413|       |         if constexpr (C == '"') {
  414|       |            ctx.error = error_code::expected_quote;
  415|       |         }
  416|  1.93k|         else if constexpr (C == ',') {
  417|  1.93k|            ctx.error = error_code::expected_comma;
  418|       |         }
  419|       |         else if constexpr (C == ':') {
  420|       |            ctx.error = error_code::expected_colon;
  421|       |         }
  422|       |         else if constexpr (C == '[' || C == ']') {
  423|       |            ctx.error = error_code::expected_bracket;
  424|       |         }
  425|       |         else if constexpr (C == '{' || C == '}') {
  426|       |            ctx.error = error_code::expected_brace;
  427|       |         }
  428|       |         else {
  429|       |            ctx.error = error_code::syntax_error;
  430|       |         }
  431|  1.93k|         return true;
  432|  1.93k|      }
  433|   174k|      else [[likely]] {
  434|   174k|         ++it;
  435|   174k|      }
  436|   174k|      if constexpr (not Opts.null_terminated) {
  437|   174k|         if (it == end) [[unlikely]] {
  ------------------
  |  Branch (437:14): [True: 160, False: 174k]
  ------------------
  438|    160|            ctx.error = error_code::unexpected_end;
  439|    160|            return true;
  440|    160|         }
  441|   174k|      }
  442|   174k|      return false;
  443|   176k|   }
_ZN3glz16skip_matching_wsIcRPKcEEvPKT_OT0_m:
  689|   676k|   {
  690|   676k|      if (length > 7) {
  ------------------
  |  Branch (690:11): [True: 341k, False: 334k]
  ------------------
  691|   341k|         uint64_t v[2];
  692|   348k|         while (length > 8) {
  ------------------
  |  Branch (692:17): [True: 336k, False: 12.3k]
  ------------------
  693|   336k|            std::memcpy(v, ws, 8);
  694|   336k|            std::memcpy(v + 1, it, 8);
  695|   336k|            if (v[0] != v[1]) {
  ------------------
  |  Branch (695:17): [True: 329k, False: 7.17k]
  ------------------
  696|   329k|               return;
  697|   329k|            }
  698|  7.17k|            length -= 8;
  699|  7.17k|            ws += 8;
  700|  7.17k|            it += 8;
  701|  7.17k|         }
  702|       |
  703|  12.3k|         const auto shift = 8 - length;
  704|  12.3k|         ws -= shift;
  705|  12.3k|         it -= shift;
  706|       |
  707|  12.3k|         std::memcpy(v, ws, 8);
  708|  12.3k|         std::memcpy(v + 1, it, 8);
  709|  12.3k|         if (v[0] != v[1]) {
  ------------------
  |  Branch (709:14): [True: 7.34k, False: 5.02k]
  ------------------
  710|  7.34k|            return;
  711|  7.34k|         }
  712|  5.02k|         it += 8;
  713|  5.02k|         return;
  714|  12.3k|      }
  715|   334k|      {
  716|   334k|         constexpr uint64_t n{sizeof(uint32_t)};
  717|   334k|         if (length >= n) {
  ------------------
  |  Branch (717:14): [True: 226k, False: 108k]
  ------------------
  718|   226k|            uint32_t v[2];
  719|   226k|            std::memcpy(v, ws, n);
  720|   226k|            std::memcpy(v + 1, it, n);
  721|   226k|            if (v[0] != v[1]) {
  ------------------
  |  Branch (721:17): [True: 222k, False: 4.21k]
  ------------------
  722|   222k|               return;
  723|   222k|            }
  724|  4.21k|            length -= n;
  725|  4.21k|            ws += n;
  726|  4.21k|            it += n;
  727|  4.21k|         }
  728|   334k|      }
  729|   112k|      {
  730|   112k|         constexpr uint64_t n{sizeof(uint16_t)};
  731|   112k|         if (length >= n) {
  ------------------
  |  Branch (731:14): [True: 50.0k, False: 62.4k]
  ------------------
  732|  50.0k|            uint16_t v[2];
  733|  50.0k|            std::memcpy(v, ws, n);
  734|  50.0k|            std::memcpy(v + 1, it, n);
  735|  50.0k|            if (v[0] != v[1]) {
  ------------------
  |  Branch (735:17): [True: 37.6k, False: 12.3k]
  ------------------
  736|  37.6k|               return;
  737|  37.6k|            }
  738|       |            // length -= n;
  739|       |            // ws += n;
  740|  12.3k|            it += n;
  741|  12.3k|         }
  742|   112k|      }
  743|       |      // We have to call a whitespace check after this function
  744|       |      // in case the whitespace is mismatching.
  745|       |      // So, we forgo this check as to not duplicate.
  746|       |      /*if (length && *ws == *it) {
  747|       |         ++it;
  748|       |      }*/
  749|   112k|   }
_ZN3glz17match_invalid_endILc58EXtlNS_22match_invalid_end_optsEEETkNS_10is_contextENS_7contextERPKcS4_EEbRT1_OT2_T3_:
  411|   195k|   {
  412|   195k|      if (*it != C) [[unlikely]] {
  ------------------
  |  Branch (412:11): [True: 667, False: 194k]
  ------------------
  413|       |         if constexpr (C == '"') {
  414|       |            ctx.error = error_code::expected_quote;
  415|       |         }
  416|       |         else if constexpr (C == ',') {
  417|       |            ctx.error = error_code::expected_comma;
  418|       |         }
  419|    667|         else if constexpr (C == ':') {
  420|    667|            ctx.error = error_code::expected_colon;
  421|       |         }
  422|       |         else if constexpr (C == '[' || C == ']') {
  423|       |            ctx.error = error_code::expected_bracket;
  424|       |         }
  425|       |         else if constexpr (C == '{' || C == '}') {
  426|       |            ctx.error = error_code::expected_brace;
  427|       |         }
  428|       |         else {
  429|       |            ctx.error = error_code::syntax_error;
  430|       |         }
  431|    667|         return true;
  432|    667|      }
  433|   194k|      else [[likely]] {
  434|   194k|         ++it;
  435|   194k|      }
  436|   194k|      if constexpr (not Opts.null_terminated) {
  437|   194k|         if (it == end) [[unlikely]] {
  ------------------
  |  Branch (437:14): [True: 151, False: 194k]
  ------------------
  438|    151|            ctx.error = error_code::unexpected_end;
  439|    151|            return true;
  440|    151|         }
  441|   194k|      }
  442|   194k|      return false;
  443|   195k|   }
_ZN3glz9has_quoteEm:
  534|  14.7M|   {
  535|  14.7M|      return has_zero(chunk ^ repeat_byte8('"'));
  536|  14.7M|   }
_ZN3glz8has_zeroEm:
  529|  14.7M|   {
  530|  14.7M|      return (((chunk - 0x0101010101010101u) & ~chunk) & 0x8080808080808080u);
  531|  14.7M|   }
_ZN3glz16skip_string_viewITkNS_10is_contextERNS_7contextERPKcS4_EEvOT_OT0_T1_:
  863|    613|   {
  864|  1.60k|      while (it < end) [[likely]] {
  ------------------
  |  Branch (864:14): [True: 1.53k, False: 67]
  ------------------
  865|  1.53k|         const auto* pc = std::memchr(it, '"', size_t(end - it));
  866|  1.53k|         if (pc) [[likely]] {
  ------------------
  |  Branch (866:14): [True: 1.50k, False: 28]
  ------------------
  867|  1.50k|            it = reinterpret_cast<std::decay_t<decltype(it)>>(pc);
  868|  1.50k|            auto* prev = it - 1;
  869|  3.12k|            while (*prev == '\\') {
  ------------------
  |  Branch (869:20): [True: 1.61k, False: 1.50k]
  ------------------
  870|  1.61k|               --prev;
  871|  1.61k|            }
  872|  1.50k|            if (size_t(it - prev) % 2) {
  ------------------
  |  Branch (872:17): [True: 518, False: 989]
  ------------------
  873|    518|               return;
  874|    518|            }
  875|    989|            ++it; // skip the escaped quote
  876|    989|         }
  877|     28|         else [[unlikely]] {
  878|     28|            break;
  879|     28|         }
  880|  1.53k|      }
  881|       |
  882|     95|      ctx.error = error_code::expected_quote;
  883|     95|   }
_ZN3glz13validate_utf8IcEEbPKT_m:
  801|  5.17k|   {
  802|  5.17k|      const uint8_t* it = reinterpret_cast<const uint8_t*>(str);
  803|  5.17k|      const uint8_t* const end = it + size;
  804|       |#if defined(GLZ_UTF8_SIMD)
  805|       |      // 16 is a measured compromise, not a register-size coincidence. The scalar path skips ASCII 8
  806|       |      // bytes at a time, so on ASCII it stays ahead of the vector path's fixed setup cost until the
  807|       |      // input is long enough for the 64 byte ASCII step to engage; on non-ASCII the vector path
  808|       |      // wins from roughly 8 bytes. Raising the threshold buys a few percent on short ASCII and
  809|       |      // costs up to 2.3x on mid length non-ASCII strings, so it stays low.
  810|       |      if (size >= 16) {
  811|       |         return detail::utf8_simd::validate(it, end);
  812|       |      }
  813|       |#endif
  814|  5.17k|      return validate_utf8_scalar(it, end);
  815|  5.17k|   }
_ZN3glz20validate_utf8_scalarEPKhS1_:
  752|  5.17k|   {
  753|  5.22M|      while (it < end) {
  ------------------
  |  Branch (753:14): [True: 5.21M, False: 3.95k]
  ------------------
  754|       |         // Optimistic SWAR check for ASCII
  755|  5.21M|         if (it + 8 <= end) {
  ------------------
  |  Branch (755:14): [True: 5.20M, False: 10.2k]
  ------------------
  756|  5.20M|            uint64_t chunk;
  757|  5.20M|            std::memcpy(&chunk, it, 8);
  758|  5.20M|            if ((chunk & glz::repeat_byte8(0x80)) == 0) {
  ------------------
  |  Branch (758:17): [True: 5.19M, False: 18.0k]
  ------------------
  759|  5.19M|               it += 8;
  760|  5.19M|               continue;
  761|  5.19M|            }
  762|  5.20M|         }
  763|       |
  764|       |         // Byte-by-byte validation (standard conformant)
  765|  28.2k|         uint8_t byte = *it;
  766|       |
  767|  28.2k|         if (byte < 0x80) {
  ------------------
  |  Branch (767:14): [True: 17.7k, False: 10.5k]
  ------------------
  768|  17.7k|            it++;
  769|  17.7k|         }
  770|  10.5k|         else if ((byte & 0xE0) == 0xC0) {
  ------------------
  |  Branch (770:19): [True: 1.86k, False: 8.67k]
  ------------------
  771|       |            // 2-byte sequence
  772|  1.86k|            if (it + 2 > end || (it[1] & 0xC0) != 0x80) return false;
  ------------------
  |  Branch (772:17): [True: 55, False: 1.81k]
  |  Branch (772:33): [True: 121, False: 1.69k]
  ------------------
  773|  1.69k|            if (byte < 0xC2) return false; // Overlong
  ------------------
  |  Branch (773:17): [True: 39, False: 1.65k]
  ------------------
  774|  1.65k|            it += 2;
  775|  1.65k|         }
  776|  8.67k|         else if ((byte & 0xF0) == 0xE0) {
  ------------------
  |  Branch (776:19): [True: 2.89k, False: 5.78k]
  ------------------
  777|       |            // 3-byte sequence
  778|  2.89k|            if (it + 3 > end || (it[1] & 0xC0) != 0x80 || (it[2] & 0xC0) != 0x80) return false;
  ------------------
  |  Branch (778:17): [True: 50, False: 2.84k]
  |  Branch (778:33): [True: 72, False: 2.77k]
  |  Branch (778:59): [True: 53, False: 2.72k]
  ------------------
  779|  2.72k|            if (byte == 0xE0 && it[1] < 0xA0) return false; // Overlong
  ------------------
  |  Branch (779:17): [True: 1.03k, False: 1.68k]
  |  Branch (779:33): [True: 74, False: 965]
  ------------------
  780|  2.64k|            if (byte == 0xED && it[1] >= 0xA0) return false; // Surrogate
  ------------------
  |  Branch (780:17): [True: 677, False: 1.97k]
  |  Branch (780:33): [True: 54, False: 623]
  ------------------
  781|  2.59k|            it += 3;
  782|  2.59k|         }
  783|  5.78k|         else if ((byte & 0xF8) == 0xF0) {
  ------------------
  |  Branch (783:19): [True: 5.48k, False: 300]
  ------------------
  784|       |            // 4-byte sequence
  785|  5.48k|            if (it + 4 > end || (it[1] & 0xC0) != 0x80 || (it[2] & 0xC0) != 0x80 || (it[3] & 0xC0) != 0x80)
  ------------------
  |  Branch (785:17): [True: 45, False: 5.43k]
  |  Branch (785:33): [True: 77, False: 5.35k]
  |  Branch (785:59): [True: 58, False: 5.30k]
  |  Branch (785:85): [True: 67, False: 5.23k]
  ------------------
  786|    247|               return false;
  787|  5.23k|            if (byte == 0xF0 && it[1] < 0x90) return false; // Overlong
  ------------------
  |  Branch (787:17): [True: 1.24k, False: 3.99k]
  |  Branch (787:33): [True: 58, False: 1.18k]
  ------------------
  788|  5.17k|            if (byte == 0xF4 && it[1] >= 0x90) return false; // > U+10FFFF
  ------------------
  |  Branch (788:17): [True: 1.34k, False: 3.83k]
  |  Branch (788:33): [True: 58, False: 1.28k]
  ------------------
  789|  5.11k|            if (byte > 0xF4) return false; // > U+10FFFF
  ------------------
  |  Branch (789:17): [True: 46, False: 5.07k]
  ------------------
  790|  5.07k|            it += 4;
  791|  5.07k|         }
  792|    300|         else {
  793|    300|            return false;
  794|    300|         }
  795|  28.2k|      }
  796|       |
  797|  3.95k|      return true;
  798|  5.17k|   }
_ZN3glz17match_invalid_endILc34EXtlNS_22match_invalid_end_optsEEETkNS_10is_contextENS_7contextERPKcS4_EEbRT1_OT2_T3_:
  411|   122k|   {
  412|   122k|      if (*it != C) [[unlikely]] {
  ------------------
  |  Branch (412:11): [True: 39.0k, False: 83.9k]
  ------------------
  413|  39.0k|         if constexpr (C == '"') {
  414|  39.0k|            ctx.error = error_code::expected_quote;
  415|       |         }
  416|       |         else if constexpr (C == ',') {
  417|       |            ctx.error = error_code::expected_comma;
  418|       |         }
  419|       |         else if constexpr (C == ':') {
  420|       |            ctx.error = error_code::expected_colon;
  421|       |         }
  422|       |         else if constexpr (C == '[' || C == ']') {
  423|       |            ctx.error = error_code::expected_bracket;
  424|       |         }
  425|       |         else if constexpr (C == '{' || C == '}') {
  426|       |            ctx.error = error_code::expected_brace;
  427|       |         }
  428|       |         else {
  429|       |            ctx.error = error_code::syntax_error;
  430|       |         }
  431|  39.0k|         return true;
  432|  39.0k|      }
  433|  83.9k|      else [[likely]] {
  434|  83.9k|         ++it;
  435|  83.9k|      }
  436|  83.9k|      if constexpr (not Opts.null_terminated) {
  437|  83.9k|         if (it == end) [[unlikely]] {
  ------------------
  |  Branch (437:14): [True: 94, False: 83.8k]
  ------------------
  438|     94|            ctx.error = error_code::unexpected_end;
  439|     94|            return true;
  440|     94|         }
  441|  83.9k|      }
  442|  83.8k|      return false;
  443|   122k|   }
_ZN3glz18validate_utf8_spanITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1ELb0ELb0ELb0ELb0ELj4EEETkNS_10is_contextERNS_7contextEccEEbOT0_PKT1_PKT2_m:
  832|  10.9k|   {
  833|       |      if constexpr (not check_validate_utf8(Opts)) {
  834|       |         // Everything the caller computed for us is dead, which lets its scan loop drop the
  835|       |         // accumulator entirely.
  836|       |         (void)ctx, (void)start, (void)fin, (void)ascii_acc;
  837|       |         return false;
  838|       |      }
  839|  10.9k|      else {
  840|  10.9k|         if ((ascii_acc & repeat_byte8(0b10000000)) == 0) {
  ------------------
  |  Branch (840:14): [True: 8.98k, False: 1.98k]
  ------------------
  841|  8.98k|            return false; // pure ASCII is trivially well formed UTF-8
  842|  8.98k|         }
  843|  1.98k|         if (!validate_utf8(start, size_t(fin - start))) [[unlikely]] {
  ------------------
  |  Branch (843:14): [True: 405, False: 1.57k]
  ------------------
  844|    405|            ctx.error = error_code::invalid_utf8;
  845|    405|            return true;
  846|    405|         }
  847|  1.57k|         return false;
  848|  1.98k|      }
  849|  10.9k|   }
_ZN3glz25handle_unicode_code_pointIccEEjRPKT_RPT0_S3_:
  288|  30.1k|   {
  289|  30.1k|      using namespace unicode;
  290|       |
  291|  30.1k|      if (it + 4 >= end) [[unlikely]] {
  ------------------
  |  Branch (291:11): [True: 43, False: 30.1k]
  ------------------
  292|     43|         return false;
  293|     43|      }
  294|  30.1k|      const uint32_t high = hex_to_u32(it);
  295|  30.1k|      if (high == 0xFFFFFFFFu) [[unlikely]] {
  ------------------
  |  Branch (295:11): [True: 132, False: 30.0k]
  ------------------
  296|    132|         return false;
  297|    132|      }
  298|  30.0k|      it += 4; // skip the code point characters
  299|       |
  300|  30.0k|      uint32_t code_point;
  301|       |
  302|  30.0k|      if ((high & generic_surrogate_mask) == generic_surrogate_value) {
  ------------------
  |  Branch (302:11): [True: 1.98k, False: 28.0k]
  ------------------
  303|       |         // surrogate pair code points
  304|  1.98k|         if ((high & surrogate_mask) != high_surrogate_value) {
  ------------------
  |  Branch (304:14): [True: 58, False: 1.92k]
  ------------------
  305|     58|            return false;
  306|     58|         }
  307|       |
  308|  1.92k|         if (it + 6 >= end) [[unlikely]] {
  ------------------
  |  Branch (308:14): [True: 34, False: 1.89k]
  ------------------
  309|     34|            return false;
  310|     34|         }
  311|       |         // The next two characters must be `\u`
  312|  1.89k|         uint16_t u;
  313|  1.89k|         std::memcpy(&u, it, 2);
  314|  1.89k|         if (u != to_uint16_t(R"(\u)")) [[unlikely]] {
  ------------------
  |  Branch (314:14): [True: 187, False: 1.70k]
  ------------------
  315|    187|            return false;
  316|    187|         }
  317|  1.70k|         it += 2;
  318|       |         // verify that second unicode escape sequence is present
  319|  1.70k|         const uint32_t low = hex_to_u32(it);
  320|  1.70k|         if (low == 0xFFFFFFFFu) [[unlikely]] {
  ------------------
  |  Branch (320:14): [True: 75, False: 1.63k]
  ------------------
  321|     75|            return false;
  322|     75|         }
  323|  1.63k|         it += 4;
  324|       |
  325|  1.63k|         if ((low & surrogate_mask) != low_surrogate_value) [[unlikely]] {
  ------------------
  |  Branch (325:14): [True: 133, False: 1.49k]
  ------------------
  326|    133|            return false;
  327|    133|         }
  328|       |
  329|  1.49k|         code_point = (high & surrogate_codepoint_mask) << surrogate_codepoint_bits;
  330|  1.49k|         code_point |= (low & surrogate_codepoint_mask);
  331|  1.49k|         code_point += surrogate_codepoint_offset;
  332|  1.49k|      }
  333|  28.0k|      else {
  334|  28.0k|         code_point = high;
  335|  28.0k|      }
  336|  29.5k|      const uint32_t offset = code_point_to_utf8(code_point, dst);
  337|  29.5k|      dst += offset;
  338|  29.5k|      return offset;
  339|  30.0k|   }
_ZN3glz10hex_to_u32EPKc:
  203|  31.8k|   {
  204|  31.8k|      constexpr auto& t = digit_hex_table;
  205|  31.8k|      const uint8_t arr[4]{t[uint8_t(c[3])], t[uint8_t(c[2])], t[uint8_t(c[1])], t[uint8_t(c[0])]};
  206|  31.8k|      auto chunk = std::bit_cast<uint32_t>(arr);
  207|       |      // On big-endian, bit_cast produces bytes in opposite order than expected
  208|       |      // byteswap to get consistent little-endian representation
  209|       |      if constexpr (std::endian::native == std::endian::big) {
  210|       |         chunk = std::byteswap(chunk);
  211|       |      }
  212|       |      // check that all hex characters are valid
  213|  31.8k|      if (chunk & repeat_byte4(0b11110000u)) [[unlikely]] {
  ------------------
  |  Branch (213:11): [True: 207, False: 31.6k]
  ------------------
  214|    207|         return 0xFFFFFFFFu;
  215|    207|      }
  216|       |
  217|       |      // now pack into first four bytes of uint32_t
  218|  31.6k|      uint32_t packed{};
  219|  31.6k|      packed |= (chunk & 0x0000000F);
  220|  31.6k|      packed |= (chunk & 0x00000F00) >> 4;
  221|  31.6k|      packed |= (chunk & 0x000F0000) >> 8;
  222|  31.6k|      packed |= (chunk & 0x0F000000) >> 12;
  223|  31.6k|      return packed;
  224|  31.8k|   }
_ZN3glz18code_point_to_utf8IcEEjjPT_:
  228|  29.5k|   {
  229|  29.5k|      if (code_point <= 0x7F) {
  ------------------
  |  Branch (229:11): [True: 11.2k, False: 18.3k]
  ------------------
  230|  11.2k|         c[0] = Char(code_point);
  231|  11.2k|         return 1;
  232|  11.2k|      }
  233|  18.3k|      if (code_point <= 0x7FF) {
  ------------------
  |  Branch (233:11): [True: 2.49k, False: 15.8k]
  ------------------
  234|  2.49k|         c[0] = Char(0xC0 | ((code_point >> 6) & 0x1F));
  235|  2.49k|         c[1] = Char(0x80 | (code_point & 0x3F));
  236|  2.49k|         return 2;
  237|  2.49k|      }
  238|  15.8k|      if (code_point <= 0xFFFF) {
  ------------------
  |  Branch (238:11): [True: 14.3k, False: 1.49k]
  ------------------
  239|  14.3k|         c[0] = Char(0xE0 | ((code_point >> 12) & 0x0F));
  240|  14.3k|         c[1] = Char(0x80 | ((code_point >> 6) & 0x3F));
  241|  14.3k|         c[2] = Char(0x80 | (code_point & 0x3F));
  242|  14.3k|         return 3;
  243|  14.3k|      }
  244|  1.49k|      if (code_point <= 0x10FFFF) {
  ------------------
  |  Branch (244:11): [True: 1.49k, False: 0]
  ------------------
  245|  1.49k|         c[0] = Char(0xF0 | ((code_point >> 18) & 0x07));
  246|  1.49k|         c[1] = Char(0x80 | ((code_point >> 12) & 0x3F));
  247|  1.49k|         c[2] = Char(0x80 | ((code_point >> 6) & 0x3F));
  248|  1.49k|         c[3] = Char(0x80 | (code_point & 0x3F));
  249|  1.49k|         return 4;
  250|  1.49k|      }
  251|      0|      return 0;
  252|  1.49k|   }
_ZN3glz17match_invalid_endILc91EXtlNS_22match_invalid_end_optsEEETkNS_10is_contextENS_7contextERPKcS4_EEbRT1_OT2_T3_:
  411|  39.1k|   {
  412|  39.1k|      if (*it != C) [[unlikely]] {
  ------------------
  |  Branch (412:11): [True: 23.6k, False: 15.5k]
  ------------------
  413|       |         if constexpr (C == '"') {
  414|       |            ctx.error = error_code::expected_quote;
  415|       |         }
  416|       |         else if constexpr (C == ',') {
  417|       |            ctx.error = error_code::expected_comma;
  418|       |         }
  419|       |         else if constexpr (C == ':') {
  420|       |            ctx.error = error_code::expected_colon;
  421|       |         }
  422|  23.6k|         else if constexpr (C == '[' || C == ']') {
  423|  23.6k|            ctx.error = error_code::expected_bracket;
  424|       |         }
  425|       |         else if constexpr (C == '{' || C == '}') {
  426|       |            ctx.error = error_code::expected_brace;
  427|       |         }
  428|       |         else {
  429|       |            ctx.error = error_code::syntax_error;
  430|       |         }
  431|  23.6k|         return true;
  432|  23.6k|      }
  433|  15.5k|      else [[likely]] {
  434|  15.5k|         ++it;
  435|  15.5k|      }
  436|  15.5k|      if constexpr (not Opts.null_terminated) {
  437|  15.5k|         if (it == end) [[unlikely]] {
  ------------------
  |  Branch (437:14): [True: 25, False: 15.5k]
  ------------------
  438|     25|            ctx.error = error_code::unexpected_end;
  439|     25|            return true;
  440|     25|         }
  441|  15.5k|      }
  442|  15.5k|      return false;
  443|  39.1k|   }
_ZN3glz18validate_utf8_spanITnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETkNS_10is_contextERNS_7contextEccEEbOT0_PKT1_PKT2_m:
  832|  71.3k|   {
  833|       |      if constexpr (not check_validate_utf8(Opts)) {
  834|       |         // Everything the caller computed for us is dead, which lets its scan loop drop the
  835|       |         // accumulator entirely.
  836|       |         (void)ctx, (void)start, (void)fin, (void)ascii_acc;
  837|       |         return false;
  838|       |      }
  839|  71.3k|      else {
  840|  71.3k|         if ((ascii_acc & repeat_byte8(0b10000000)) == 0) {
  ------------------
  |  Branch (840:14): [True: 68.1k, False: 3.19k]
  ------------------
  841|  68.1k|            return false; // pure ASCII is trivially well formed UTF-8
  842|  68.1k|         }
  843|  3.19k|         if (!validate_utf8(start, size_t(fin - start))) [[unlikely]] {
  ------------------
  |  Branch (843:14): [True: 822, False: 2.37k]
  ------------------
  844|    822|            ctx.error = error_code::invalid_utf8;
  845|    822|            return true;
  846|    822|         }
  847|  2.37k|         return false;
  848|  3.19k|      }
  849|  71.3k|   }
_ZN3glz5matchITnNS_14string_literalEXtlNS1_ILm4EEEtlA4_cLc117ELc108ELc108EEEETnDaXtlNS_4optsELj10ELb0ELb0ELb1ELb1EEETkNS_10is_contextERNS_7contextERPKcS8_Qntcl15check_is_paddedT0_EEEvOT1_OT2_T3_:
  491|    786|   {
  492|    786|      const auto n = size_t(end - it);
  493|    786|      static constexpr auto S = str.sv();
  494|    786|      if ((n < str.size()) || not comparitor<S>(it)) [[unlikely]] {
  ------------------
  |  Branch (494:11): [True: 9, False: 777]
  |  Branch (494:31): [True: 62, False: 715]
  ------------------
  495|     71|         ctx.error = error_code::syntax_error;
  496|     71|      }
  497|    715|      else [[likely]] {
  498|    715|         it += str.size();
  499|    715|      }
  500|    786|   }
_ZN3glz5matchILc34ETkNS_10is_contextENS_7contextERPKcEEbRT0_OT1_:
  447|    518|   {
  448|    518|      if (*it != C) [[unlikely]] {
  ------------------
  |  Branch (448:11): [True: 0, False: 518]
  ------------------
  449|      0|         if constexpr (C == '"') {
  450|      0|            ctx.error = error_code::expected_quote;
  451|       |         }
  452|       |         else if constexpr (C == ',') {
  453|       |            ctx.error = error_code::expected_comma;
  454|       |         }
  455|       |         else if constexpr (C == ':') {
  456|       |            ctx.error = error_code::expected_colon;
  457|       |         }
  458|       |         else if constexpr (C == '[' || C == ']') {
  459|       |            ctx.error = error_code::expected_bracket;
  460|       |         }
  461|       |         else if constexpr (C == '{' || C == '}') {
  462|       |            ctx.error = error_code::expected_brace;
  463|       |         }
  464|       |         else {
  465|       |            ctx.error = error_code::syntax_error;
  466|       |         }
  467|      0|         return true;
  468|      0|      }
  469|    518|      else [[likely]] {
  470|    518|         ++it;
  471|    518|         return false;
  472|    518|      }
  473|    518|   }

_ZNK3glz14string_literalILm4EE4sizeEv:
   25|  1.50k|      [[nodiscard]] constexpr size_t size() const noexcept { return length; }

_ZN3glz6detail15get_source_infoITkNS_8has_sizeENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEEENS0_11source_infoERKT_m:
   39|   155k|      {
   40|   155k|         using V = std::decay_t<decltype(buffer[0])>;
   41|       |
   42|       |         if constexpr (std::same_as<V, std::byte>) {
   43|       |            return {.context = "", .index = index};
   44|       |         }
   45|   155k|         else {
   46|   155k|            if (index >= buffer.size()) {
  ------------------
  |  Branch (46:17): [True: 6.44k, False: 149k]
  ------------------
   47|  6.44k|               return {.context = "", .index = index};
   48|  6.44k|            }
   49|       |
   50|   149k|            const auto start = std::begin(buffer) + index;
   51|   149k|            const auto line = size_t(std::count(std::begin(buffer), start, static_cast<V>('\n')) + 1);
   52|   149k|            const auto rstart = std::rbegin(buffer) + buffer.size() - index - 1;
   53|   149k|            const auto prev_new_line =
   54|   149k|               std::find((std::min)(rstart + 1, std::rend(buffer)), std::rend(buffer), static_cast<V>('\n'));
   55|   149k|            const auto column = size_t(std::distance(rstart, prev_new_line));
   56|   149k|            const auto next_new_line =
   57|   149k|               std::find((std::min)(start + 1, std::end(buffer)), std::end(buffer), static_cast<V>('\n'));
   58|       |
   59|   149k|            const auto offset = (prev_new_line == std::rend(buffer) ? 0 : index - column + 1);
  ------------------
  |  Branch (59:34): [True: 147k, False: 1.89k]
  ------------------
   60|   149k|            auto context_begin = std::begin(buffer) + offset;
   61|   149k|            auto context_end = next_new_line;
   62|       |
   63|   149k|            size_t front_truncation = 0;
   64|   149k|            size_t rear_truncation = 0;
   65|       |
   66|   149k|            if (std::distance(context_begin, context_end) > 64) {
  ------------------
  |  Branch (66:17): [True: 30.9k, False: 118k]
  ------------------
   67|       |               // reduce the context length so that we can more easily see errors, especially for non-prettified buffers
   68|  30.9k|               if (column <= 32) {
  ------------------
  |  Branch (68:20): [True: 28.0k, False: 2.97k]
  ------------------
   69|  28.0k|                  rear_truncation = 64;
   70|  28.0k|                  context_end = context_begin + rear_truncation;
   71|  28.0k|               }
   72|  2.97k|               else {
   73|  2.97k|                  front_truncation = column - 32;
   74|  2.97k|                  context_begin += front_truncation;
   75|  2.97k|                  if (std::distance(context_begin, context_end) > 64) {
  ------------------
  |  Branch (75:23): [True: 1.05k, False: 1.92k]
  ------------------
   76|  1.05k|                     rear_truncation = front_truncation + 64;
   77|  1.05k|                     context_end = std::begin(buffer) + offset + rear_truncation;
   78|  1.05k|                  }
   79|  2.97k|               }
   80|  30.9k|            }
   81|       |
   82|   149k|            std::string context{context_begin, context_end};
   83|   149k|            convert_tabs_to_single_spaces(context);
   84|   149k|            return {line, column, context, index, front_truncation, rear_truncation};
   85|   155k|         }
   86|   155k|      }
_ZN3glz6detail29convert_tabs_to_single_spacesERNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEE:
   30|   149k|      {
   31|  4.15M|         for (auto& c : input) {
  ------------------
  |  Branch (31:23): [True: 4.15M, False: 149k]
  ------------------
   32|  4.15M|            if (c == '\t') {
  ------------------
  |  Branch (32:17): [True: 309k, False: 3.84M]
  ------------------
   33|   309k|               c = ' ';
   34|   309k|            }
   35|  4.15M|         }
   36|   149k|      }
_ZN3glz6detail21generate_error_stringENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEERKNS0_11source_infoES5_:
   97|   155k|      {
   98|   155k|         std::string b{};
   99|   155k|         b.resize(error.size() + info.context.size() + filename.size() + 128);
  100|   155k|         size_t ix{};
  101|       |
  102|   155k|         if (not filename.empty()) {
  ------------------
  |  Branch (102:14): [True: 0, False: 155k]
  ------------------
  103|      0|            dump_not_empty(filename, b, ix);
  104|      0|            dump(':', b, ix);
  105|      0|         }
  106|       |
  107|   155k|         glz::context ctx{};
  108|       |
  109|       |         // Diagnostic numbers (index/line/column) are always formatted with size-optimized
  110|       |         // integer conversion: error formatting is never a throughput path, and this keeps
  111|       |         // glz::format_error from pulling in the 40 KB integer table regardless of the
  112|       |         // optimization level used elsewhere in the program.
  113|   155k|         if (info.context.empty()) {
  ------------------
  |  Branch (113:14): [True: 6.44k, False: 149k]
  ------------------
  114|  6.44k|            dump("index ", b, ix);
  115|  6.44k|            write_chars::op<opts_size{}>(info.index, ctx, b, ix);
  116|  6.44k|            dump(": ", b, ix);
  117|  6.44k|            dump_maybe_empty(error, b, ix);
  118|  6.44k|         }
  119|   149k|         else {
  120|   149k|            write_chars::op<opts_size{}>(info.line, ctx, b, ix);
  121|   149k|            dump(':', b, ix);
  122|   149k|            write_chars::op<opts_size{}>(info.column, ctx, b, ix);
  123|   149k|            dump(": ", b, ix);
  124|   149k|            dump_maybe_empty(error, b, ix);
  125|   149k|            dump('\n', b, ix);
  126|   149k|            if (info.front_truncation) {
  ------------------
  |  Branch (126:17): [True: 2.97k, False: 146k]
  ------------------
  127|  2.97k|               if (info.rear_truncation) {
  ------------------
  |  Branch (127:20): [True: 1.05k, False: 1.92k]
  ------------------
  128|  1.05k|                  dump("...", b, ix);
  129|  1.05k|                  dump_maybe_empty(info.context, b, ix);
  130|  1.05k|                  dump("...\n   ", b, ix);
  131|  1.05k|               }
  132|  1.92k|               else {
  133|  1.92k|                  dump("...", b, ix);
  134|  1.92k|                  dump_maybe_empty(info.context, b, ix);
  135|  1.92k|                  dump("\n   ", b, ix);
  136|  1.92k|               }
  137|  2.97k|            }
  138|   146k|            else {
  139|   146k|               dump("   ", b, ix);
  140|   146k|               dump_maybe_empty(info.context, b, ix);
  141|   146k|               dump("\n   ", b, ix);
  142|   146k|            }
  143|   149k|            dumpn(' ', info.column - 1 - info.front_truncation, b, ix);
  144|   149k|            dump('^', b, ix);
  145|   149k|         }
  146|       |
  147|   155k|         b.resize(ix);
  148|   155k|         return b;
  149|   155k|      }

_ZN3glz8to_charsITkNSt3__114floating_pointEdLb0EEEPcS2_T_:
 1118|  1.13k|   {
 1119|  1.13k|      static_assert(std::is_same_v<T, float> || std::is_same_v<T, double>);
 1120|  1.13k|      return zmij::detail::write<T, OptSize>(val, buf);
 1121|  1.13k|   }
_ZN3glz4zmij6detail5writeIdLb0EEEPcT_S3_:
  975|  1.13k|      {
  976|  1.13k|         using namespace detail_impl;
  977|  1.13k|         using traits = float_traits<Float>;
  978|  1.13k|         auto bits = traits::to_bits(value);
  979|  1.13k|         auto bin_exp = traits::get_exp(bits);
  980|  1.13k|         auto bin_sig = traits::get_sig(bits);
  981|       |
  982|  1.13k|         *buffer = '-';
  983|  1.13k|         buffer += traits::is_negative(bits);
  984|       |
  985|  1.13k|         const auto* c = &consts_v<OptSize>;
  986|  1.13k|         ZMIJ_ASM(("" : "+r"(c)));
  ------------------
  |  |  126|  1.13k|#define ZMIJ_ASM(x) asm x
  ------------------
  987|  1.13k|         int64_t threshold = traits::num_bits == 64 ? static_cast<int64_t>(c->threshold) : 10'000'000;
  ------------------
  |  Branch (987:30): [True: 1.13k, Folded]
  ------------------
  988|       |
  989|  1.13k|         to_decimal_result dec;
  990|  1.13k|         bool is_normal = unsigned(bin_exp - 1) < unsigned(traits::exp_mask - 1);
  991|  1.13k|         if (!is_normal) [[unlikely]] {
  ------------------
  |  Branch (991:14): [True: 584, False: 553]
  ------------------
  992|    584|            if (bin_exp != 0) {
  ------------------
  |  Branch (992:17): [True: 0, False: 584]
  ------------------
  993|       |#if GLZ_ZMIJ_EMIT_INF_NAN
  994|       |               memcpy(buffer, bin_sig == 0 ? "inf" : "nan", 4);
  995|       |               return buffer + 3;
  996|       |#else
  997|       |               // Undo the speculative '-' for sign-bit-set NaN/Inf: JSON "null"
  998|       |               // never carries a sign.
  999|      0|               buffer -= traits::is_negative(bits);
 1000|      0|               memcpy(buffer, "null", 4);
 1001|      0|               return buffer + 4;
 1002|      0|#endif
 1003|      0|            }
 1004|    584|            if (bin_sig == 0) {
  ------------------
  |  Branch (1004:17): [True: 385, False: 199]
  ------------------
 1005|    385|               memcpy(buffer, "0", 2);
 1006|    385|               return buffer + 1;
 1007|    385|            }
 1008|    199|            dec = detail_impl::to_decimal<Float, typename traits::sig_type, OptSize>(bin_sig, 1, true, *c);
 1009|    199|            int64_t dec_sig = dec.sig * 10 + (dec.has_last_digit ? dec.last_digit : 0);
  ------------------
  |  Branch (1009:47): [True: 14, False: 185]
  ------------------
 1010|    199|            int32_t dec_exp = dec.exp;
 1011|  1.01k|            while (dec_sig < threshold) {
  ------------------
  |  Branch (1011:20): [True: 820, False: 199]
  ------------------
 1012|    820|               dec_sig *= 10;
 1013|    820|               --dec_exp;
 1014|    820|            }
 1015|    199|            int64_t d = static_cast<int64_t>(detail_impl::div10(static_cast<uint64_t>(dec_sig)));
 1016|    199|            int32_t last_digit = static_cast<int32_t>(dec_sig - d * 10);
 1017|    199|            dec = {d, dec_exp, last_digit, last_digit != 0};
 1018|    199|         }
 1019|    553|         else {
 1020|    553|            dec = detail_impl::to_decimal<Float, typename traits::sig_type, OptSize>(bin_sig | traits::implicit_bit,
 1021|    553|                                                                                     bin_exp, bin_sig != 0, *c);
 1022|    553|         }
 1023|    752|         bool extra_digit = dec.sig >= threshold;
 1024|    752|         int dec_exp = dec.exp + traits::max_digits10 - 2 + extra_digit;
 1025|    752|         if (traits::num_bits == 32 && dec.sig < 1'000'000) [[unlikely]] {
  ------------------
  |  Branch (1025:14): [Folded, False: 752]
  |  Branch (1025:40): [True: 0, False: 0]
  ------------------
 1026|      0|            dec.sig = 10 * dec.sig + (dec.has_last_digit ? dec.last_digit : 0);
  ------------------
  |  Branch (1026:39): [True: 0, False: 0]
  ------------------
 1027|      0|            dec.has_last_digit = false;
 1028|      0|            --dec_exp;
 1029|      0|         }
 1030|       |
 1031|    752|         char* start = buffer;
 1032|    752|         auto dig = to_digits<traits::num_bits, OptSize>(static_cast<uint64_t>(dec.sig), extra_digit, *c);
 1033|    752|         constexpr int bcd_size = traits::num_bits == 64 ? 16 : 8;
  ------------------
  |  Branch (1033:35): [True: 0, Folded]
  ------------------
 1034|    752|         if (dec_exp >= traits::min_fixed_dec_exp && dec_exp <= traits::max_fixed_dec_exp) {
  ------------------
  |  Branch (1034:14): [True: 514, False: 238]
  |  Branch (1034:54): [True: 368, False: 146]
  ------------------
 1035|    368|            memcpy(start, &zeros_v, 8);
 1036|    368|            const auto& fmt = dec_exp_formats.get<traits>(dec_exp);
 1037|    368|            buffer += fmt.start_pos;
 1038|    368|            memcpy(buffer, &dig.digits, bcd_size);
 1039|    368|            memmove(buffer, buffer + !extra_digit, bcd_size);
 1040|    368|            buffer[bcd_size + extra_digit - 1] = static_cast<char>('0' + (dec.has_last_digit ? dec.last_digit : 0));
  ------------------
  |  Branch (1040:75): [True: 20, False: 348]
  ------------------
 1041|    368|            memmove(start + fmt.shift_pos, start + fmt.point_pos, bcd_size);
 1042|    368|            start[fmt.point_pos] = '.';
 1043|    368|            int num_digits = dec.has_last_digit ? bcd_size : dig.num_digits - 1;
  ------------------
  |  Branch (1043:30): [True: 20, False: 348]
  ------------------
 1044|    368|            return buffer + fmt.exp_pos[num_digits + extra_digit - 1];
 1045|    368|         }
 1046|    384|         buffer += extra_digit;
 1047|    384|         memcpy(buffer, &dig.digits, bcd_size);
 1048|    384|         buffer[bcd_size] = static_cast<char>('0' + dec.last_digit);
 1049|    384|         buffer += dec.has_last_digit ? bcd_size + 1 : dig.num_digits;
  ------------------
  |  Branch (1049:20): [True: 50, False: 334]
  ------------------
 1050|    384|         start[0] = start[1];
 1051|    384|         start[1] = '.';
 1052|    384|         buffer -= (buffer - 1 == start + 1);
 1053|       |
 1054|    384|         if constexpr (exp_string_table<OptSize>::enable) {
 1055|    384|            uint64_t exp_data = exp_strings_v<OptSize>.data[dec_exp + exp_string_table<OptSize>::offset];
 1056|    384|            int len = int(exp_data >> 48);
 1057|    384|            if (is_big_endian) exp_data = bswap64(exp_data);
  ------------------
  |  Branch (1057:17): [Folded, False: 384]
  ------------------
 1058|    384|            memcpy(buffer, &exp_data, traits::max_exponent10 >= 100 ? 8 : 4);
  ------------------
  |  Branch (1058:39): [True: 384, Folded]
  ------------------
 1059|    384|            return buffer + len;
 1060|    384|         }
 1061|       |         // Glaze emits uppercase 'E', omits '+' on positive exponents, and
 1062|       |         // drops the leading zero on single-digit exponents (E7, not E07).
 1063|       |         // Branchless: write "E-" always, then advance past the '-' only when
 1064|       |         // the exponent is negative.
 1065|      0|         bool neg = dec_exp < 0;
 1066|    384|         buffer[0] = 'E';
 1067|    384|         buffer[1] = '-';
 1068|    384|         buffer += 1 + unsigned(neg);
 1069|    384|         dec_exp = neg ? -dec_exp : dec_exp;
  ------------------
  |  Branch (1069:20): [True: 0, False: 384]
  ------------------
 1070|    384|         unsigned hundreds_written = 0;
 1071|    384|         if constexpr (traits::max_exponent10 >= 100) {
 1072|    384|            int32_t digit = 0;
 1073|       |            if constexpr (use_umul128_hi64) {
 1074|       |               digit = static_cast<int32_t>(umul128_hi64(static_cast<uint64_t>(dec_exp), 0x290000000000000ull));
 1075|       |            }
 1076|    384|            else {
 1077|    384|               digit = static_cast<int32_t>((uint32_t(dec_exp) * div100_sig) >> div100_exp);
 1078|    384|            }
 1079|    384|            *buffer = static_cast<char>('0' + digit);
 1080|    384|            hundreds_written = unsigned(dec_exp >= 100);
 1081|    384|            buffer += hundreds_written;
 1082|    384|            dec_exp -= digit * 100;
 1083|    384|         }
 1084|       |         // dec_exp now in [0, 99]. Skip the tens digit only when no higher
 1085|       |         // digit has been written (i.e. true leading zero, not interior).
 1086|    384|         const char* d2 = digits2(dec_exp);
 1087|    384|         *buffer = d2[0];
 1088|    384|         buffer += hundreds_written | unsigned(dec_exp >= 10);
 1089|    384|         *buffer = d2[1];
 1090|    384|         return buffer + 1;
 1091|    752|      }
_ZN3glz4zmij11detail_impl12float_traitsIdE7to_bitsEd:
  358|  1.13k|         {
  359|  1.13k|            sig_type bits;
  360|  1.13k|            memcpy(&bits, &value, sizeof(value));
  361|  1.13k|            return bits;
  362|  1.13k|         }
_ZN3glz4zmij11detail_impl12float_traitsIdE7get_expEm:
  367|  1.13k|         {
  368|  1.13k|            return static_cast<int32_t>((bits << 1) >> (num_sig_bits + 1));
  369|  1.13k|         }
_ZN3glz4zmij11detail_impl12float_traitsIdE7get_sigEm:
  365|  1.13k|         static auto get_sig(sig_type bits) noexcept -> sig_type { return bits & (implicit_bit - 1); }
_ZN3glz4zmij11detail_impl12float_traitsIdE11is_negativeEm:
  364|  1.13k|         static auto is_negative(sig_type bits) noexcept -> bool { return bits >> (num_bits - 1); }
_ZN3glz4zmij11detail_impl10to_decimalIdmLb0EEENS1_17to_decimal_resultET0_lbRKNS1_9constantsIXT1_EEE:
  868|    752|      {
  869|    752|         using traits = float_traits<Float>;
  870|    752|         int64_t bin_exp = raw_exp - traits::exp_offset;
  871|    752|         constexpr int num_bits = std::numeric_limits<UInt>::digits;
  872|       |
  873|    752|         constexpr uint64_t log10_2_sig = 78'913;
  874|    752|         constexpr int32_t log10_2_exp = 18;
  875|    752|         int32_t dec_exp = 0;
  876|       |         if constexpr (use_umul128_hi64) {
  877|       |            dec_exp =
  878|       |               static_cast<int32_t>(umul128_hi64(static_cast<uint64_t>(bin_exp), log10_2_sig << (64 - log10_2_exp)));
  879|       |         }
  880|    752|         else {
  881|    752|            dec_exp = compute_dec_exp(bin_exp);
  882|    752|         }
  883|    752|         uint64_t even = 1 - (bin_sig & 1);
  884|    752|         constexpr int32_t extra_shift = exp_shift_table<OptSize>::extra_shift;
  885|       |
  886|    752|         if (!regular) [[unlikely]] {
  ------------------
  |  Branch (886:14): [True: 230, False: 522]
  ------------------
  887|    230|            int32_t irregular_dec_exp = compute_dec_exp(bin_exp, false);
  888|    230|            int32_t shift = compute_exp_shift(bin_exp, irregular_dec_exp + 1) + extra_shift;
  889|    230|            uint128 pow10 = c.pow10_significands[-irregular_dec_exp - 1];
  890|    230|            uint128 p = umul192_hi128(pow10.hi, pow10.lo, bin_sig << shift);
  891|       |
  892|    230|            int64_t integral = p.hi >> extra_shift;
  893|    230|            uint64_t fractional = p.hi << (64 - extra_shift) | p.lo >> extra_shift;
  894|       |
  895|    230|            uint64_t half_ulp = pow10.hi >> (extra_shift + 1 - shift);
  896|    230|            bool round_up = half_ulp > ~uint64_t(0) - fractional;
  897|    230|            bool round_down = (half_ulp >> 1) > fractional;
  898|    230|            integral += round_up;
  899|       |
  900|    230|            int32_t digit = static_cast<int32_t>(umul128_add_hi64(fractional, 10, (uint64_t(1) << 63) - 1));
  901|    230|            int32_t lo = static_cast<int32_t>(umul128_add_hi64(fractional - (half_ulp >> 1), 10, ~uint64_t(0)));
  902|    230|            if (digit < lo) digit = lo;
  ------------------
  |  Branch (902:17): [True: 218, False: 12]
  ------------------
  903|    230|            return {integral, irregular_dec_exp, digit, (round_up + round_down) == 0};
  904|    230|         }
  905|       |
  906|       |         if constexpr (num_bits == 32) {
  907|       |            constexpr int32_t float_extra_shift = 34;
  908|       |            int32_t shift = compute_exp_shift(bin_exp, dec_exp + 1) + float_extra_shift;
  909|       |            uint64_t pow10_hi = c.pow10_significands[-dec_exp - 1].hi;
  910|       |            uint64_t p = umul128_hi64(pow10_hi + 1, uint64_t(bin_sig) << shift);
  911|       |
  912|       |            int64_t integral = p >> float_extra_shift;
  913|       |            uint64_t fractional = p & ((1ull << float_extra_shift) - 1);
  914|       |
  915|       |            uint64_t half_ulp = (pow10_hi >> (65 - shift)) + even;
  916|       |            bool round_up = (fractional + half_ulp) >> float_extra_shift;
  917|       |            bool round_down = half_ulp > fractional;
  918|       |            integral += round_up;
  919|       |
  920|       |            uint64_t prod = fractional * 10;
  921|       |            int32_t digit = static_cast<int32_t>(prod >> float_extra_shift);
  922|       |            uint64_t rem = prod & ((1ull << float_extra_shift) - 1);
  923|       |            digit +=
  924|       |               rem > (1ull << (float_extra_shift - 1)) || (rem == (1ull << (float_extra_shift - 1)) && (digit & 1));
  925|       |            return {integral, dec_exp, digit, (round_up + round_down) == 0};
  926|       |         }
  927|    522|         else {
  928|    522|            int32_t shift = exp_shift_table<OptSize>::enable ? exp_shifts_v<OptSize>.data[bin_exp + traits::exp_offset]
  ------------------
  |  Branch (928:29): [True: 522, Folded]
  ------------------
  929|    522|                                                             : compute_exp_shift(bin_exp, dec_exp + 1) + extra_shift;
  930|    522|            ZMIJ_ASM(("" : "+r"(dec_exp)));
  ------------------
  |  |  126|    522|#define ZMIJ_ASM(x) asm x
  ------------------
  931|    522|            uint128 pow10 = c.pow10_significands[-dec_exp - 1];
  932|    522|            uint128 p = umul192_hi128(pow10.hi, pow10.lo, bin_sig << shift);
  933|    522|            int64_t integral = p.hi >> extra_shift;
  934|    522|            uint64_t fractional = p.hi << (64 - extra_shift) | p.lo >> extra_shift;
  935|    522|            uint64_t half_ulp = (pow10.hi >> (extra_shift + 1 - shift)) + even;
  936|    522|            bool round_up = fractional + half_ulp < fractional;
  937|    522|            bool round_down = half_ulp > fractional;
  938|    522|            integral += round_up;
  939|       |
  940|    522|            int32_t digit = static_cast<int32_t>(umul128_add_hi64(fractional, 10, c.biased_half));
  941|    522|            if (fractional == (1ull << 62)) [[unlikely]] {
  ------------------
  |  Branch (941:17): [True: 3, False: 519]
  ------------------
  942|      3|               digit = 2;
  943|      3|            }
  944|    522|            return {integral, dec_exp, digit, (round_up + round_down) == 0};
  945|    522|         }
  946|    522|      }
_ZN3glz4zmij11detail_impl15compute_dec_expElb:
  333|    982|      {
  334|    982|         assert(bin_exp >= -1334 && bin_exp <= 2620);
  ------------------
  |  Branch (334:10): [True: 982, False: 0]
  |  Branch (334:10): [True: 982, False: 0]
  |  Branch (334:10): [True: 982, False: 0]
  ------------------
  335|    982|         constexpr int log10_3_over_4_sig = 131'072;
  336|    982|         constexpr int log10_2_sig = 315'653, log10_2_exp = 20;
  337|    982|         return static_cast<int32_t>((bin_exp * log10_2_sig - !regular * log10_3_over_4_sig) >> log10_2_exp);
  338|    982|      }
_ZN3glz4zmij11detail_impl17compute_exp_shiftEli:
  457|    230|      {
  458|    230|         assert(dec_exp >= -350 && dec_exp <= 350);
  ------------------
  |  Branch (458:10): [True: 230, False: 0]
  |  Branch (458:10): [True: 230, False: 0]
  |  Branch (458:10): [True: 230, False: 0]
  ------------------
  459|    230|         constexpr int log2_pow10_sig = 217'707, log2_pow10_exp = 16;
  460|    230|         int pow10_bin_exp = -dec_exp * log2_pow10_sig >> log2_pow10_exp;
  461|    230|         return static_cast<int32_t>(bin_exp + pow10_bin_exp + 1);
  462|    230|      }
_ZNK3glz4zmij11detail_impl23pow10_significand_tableILb0EEixEi:
  440|    752|         {
  441|    752|            constexpr int dec_exp_min = -293;
  442|    752|            int i = dec_exp - dec_exp_min;
  443|    752|            if (compress) return compute(i);
  ------------------
  |  Branch (443:17): [Folded, False: 752]
  ------------------
  444|    752|            if (!split_tables) return {data[i * 2], data[i * 2 + 1]};
  ------------------
  |  Branch (444:17): [True: 752, Folded]
  ------------------
  445|       |
  446|      0|            const uint64_t* hi = data + num_pow10s + dec_exp_min - 1;
  447|      0|            const uint64_t* lo = hi + num_pow10s;
  448|       |
  449|      0|            if !consteval {
  450|      0|               ZMIJ_ASM(volatile("" : "+r"(hi), "+r"(lo)));
  ------------------
  |  |  126|      0|#define ZMIJ_ASM(x) asm x
  ------------------
  451|      0|            }
  452|      0|            return {hi[-dec_exp], lo[-dec_exp]};
  453|    752|         }
_ZN3glz4zmij11detail_impl13umul192_hi128Emmm:
  308|    752|      {
  309|    752|         uint128_t p = umul128(x_hi, y);
  310|    752|         uint64_t lo = uint64_t(p) + uint64_t(umul128(x_lo, y) >> 64);
  311|    752|         return {uint64_t(p >> 64) + (lo < uint64_t(p)), lo};
  312|    752|      }
_ZN3glz4zmij11detail_impl7umul128Emm:
  265|  1.70k|      {
  266|  1.70k|#if ZMIJ_USE_INT128
  267|  1.70k|         return uint128_t(x) * y;
  268|       |#else
  269|       |#if defined(_M_AMD64)
  270|       |         if !consteval {
  271|       |            uint64_t hi = 0;
  272|       |            uint64_t lo = _umul128(x, y, &hi);
  273|       |            return {hi, lo};
  274|       |         }
  275|       |#elif defined(_M_ARM64)
  276|       |         if !consteval {
  277|       |            return {__umulh(x, y), x * y};
  278|       |         }
  279|       |#endif
  280|       |         uint64_t a = x >> 32;
  281|       |         uint64_t b = uint32_t(x);
  282|       |         uint64_t c = y >> 32;
  283|       |         uint64_t d = uint32_t(y);
  284|       |
  285|       |         uint64_t ac = a * c;
  286|       |         uint64_t bc = b * c;
  287|       |         uint64_t ad = a * d;
  288|       |         uint64_t bd = b * d;
  289|       |
  290|       |         uint64_t cs = (bd >> 32) + uint32_t(ad) + uint32_t(bc);
  291|       |         return {ac + (ad >> 32) + (bc >> 32) + (cs >> 32), (cs << 32) + uint32_t(bd)};
  292|       |#endif
  293|  1.70k|      }
_ZN3glz4zmij11detail_impl16umul128_add_hi64Emmm:
  298|    982|      {
  299|    982|#if ZMIJ_USE_INT128
  300|    982|         return uint64_t((uint128_t(x) * y + c) >> 64);
  301|       |#else
  302|       |         auto p = umul128(x, y);
  303|       |         return p.hi + (p.lo + c < p.lo);
  304|       |#endif
  305|    982|      }
_ZN3glz4zmij11detail_impl5div10Em:
  326|    199|      {
  327|    199|         assert(x <= (1ull << 62));
  ------------------
  |  Branch (327:10): [True: 199, False: 0]
  ------------------
  328|    199|         constexpr uint64_t div10_sig64 = (1ull << 63) / 5 + 1;
  329|    199|         return ZMIJ_USE_INT128 ? umul128_hi64(x, div10_sig64) : x / 10;
  ------------------
  |  |  247|    199|#define ZMIJ_USE_INT128 1
  |  |  ------------------
  |  |  |  Branch (247:25): [True: 199, Folded]
  |  |  ------------------
  ------------------
  330|    199|      }
_ZN3glz4zmij11detail_impl12umul128_hi64Emm:
  295|    199|      constexpr auto umul128_hi64(uint64_t x, uint64_t y) noexcept -> uint64_t { return uint64_t(umul128(x, y) >> 64); }
_ZN3glz4zmij11detail_impl9to_digitsILi64ELb0EEENS1_10dec_digitsIXT_EEEmbRKNS1_9constantsIXT0_EEE:
  809|    752|      {
  810|       |         if constexpr (num_bits == 32) {
  811|       |            auto result = to_bcd8<OptSize>(value);
  812|       |            return {result.bcd + zeros_v, result.len};
  813|       |         }
  814|    752|         else {
  815|       |#if !ZMIJ_USE_NEON && !ZMIJ_USE_SSE
  816|       |            uint32_t bbccddee = uint32_t(value / 100'000'000);
  817|       |            uint32_t ffgghhii = uint32_t(value % 100'000'000);
  818|       |            auto hi = to_bcd8<OptSize>(bbccddee);
  819|       |            if (ffgghhii == 0) return {{hi.bcd + zeros_v, zeros_v}, hi.len};
  820|       |            auto lo = to_bcd8<OptSize>(ffgghhii);
  821|       |            return {{hi.bcd + zeros_v, lo.bcd + zeros_v}, 8 + lo.len};
  822|       |#elif ZMIJ_USE_NEON
  823|       |            auto unshuffled_digits = to_unshuffled_digits(value, c);
  824|       |            uint8x16_t digits = vrev64q_u8(unshuffled_digits);
  825|       |            uint16x8_t str = vaddq_u16(vreinterpretq_u16_u8(digits), vreinterpretq_u16_s8(vdupq_n_s8('0')));
  826|       |
  827|       |            // vcgtzq_s8 is AArch64-only; the portable spelling (ARMv7 NEON and
  828|       |            // up) is "compare greater-than against a zero vector".
  829|       |            uint16x8_t is_not_zero = vreinterpretq_u16_u8(vcgtq_s8(vreinterpretq_s8_u8(digits), vdupq_n_s8(0)));
  830|       |            uint64_t zeroes = vget_lane_u64(vreinterpret_u64_u8(vshrn_n_u16(is_not_zero, 4)), 0);
  831|       |            return {str, 16 - (clz(zeroes) >> 2)};
  832|       |#else
  833|    752|            uint32_t abbccddee = uint32_t(value / 100'000'000);
  834|    752|            uint32_t ffgghhii = uint32_t(value % 100'000'000);
  835|       |
  836|    752|            const __m128i zeros = _mm_load_si128(m128ptr(&c.zeros));
  837|    752|            auto unshuffled_bcd = to_unshuffled_digits(abbccddee, ffgghhii, c);
  838|       |#if ZMIJ_USE_SSE4_1
  839|       |            const __m128i bswap = _mm_load_si128(m128ptr(&c.bswap));
  840|       |            auto bcd = _mm_shuffle_epi8(unshuffled_bcd, bswap);
  841|       |#else
  842|    752|            auto bcd = _mm_shuffle_epi32(unshuffled_bcd, _MM_SHUFFLE(0, 1, 2, 3));
  843|    752|#endif
  844|       |
  845|    752|            __m128i mask128 = _mm_cmpgt_epi8(bcd, _mm_setzero_si128());
  846|    752|            uint64_t mask = _mm_movemask_epi8(mask128);
  847|       |#if defined(__LZCNT__) && !defined(ZMIJ_NO_BUILTINS)
  848|       |            int len = 32 - _lzcnt_u32(mask);
  849|       |#else
  850|    752|            int len = 63 - clz((mask << 1) | 1);
  851|    752|#endif
  852|    752|            return {_mm_or_si128(bcd, zeros), len};
  853|    752|#endif
  854|    752|         }
  855|    752|      }
_ZN3glz4zmij11detail_impl20to_unshuffled_digitsILb0EEEDv2_xjjRKNS1_9constantsIXT_EEE:
  735|    752|      {
  736|    752|         const __m128i div10k = _mm_load_si128(m128ptr(&c.div10k));
  737|    752|         const __m128i neg10k = _mm_load_si128(m128ptr(&c.neg10k));
  738|    752|         __m128i x = _mm_set_epi64x(bbccddee, ffgghhii);
  739|    752|         __m128i y = _mm_add_epi64(x, _mm_mul_epu32(neg10k, _mm_srli_epi64(_mm_mul_epu32(x, div10k), div10k_exp)));
  740|    752|         return to_bcd_4x4(y, c);
  741|    752|      }
_ZN3glz4zmij11detail_impl10to_bcd_4x4ILb0EEEDv2_xS3_RKNS1_9constantsIXT_EEE:
  712|    752|      {
  713|    752|         const __m128i div100 = _mm_load_si128(m128ptr(&c.div100));
  714|    752|         const __m128i div10 = _mm_load_si128(m128ptr(&c.div10));
  715|       |#if ZMIJ_USE_SSE4_1
  716|       |         const __m128i neg100 = _mm_load_si128(m128ptr(&c.neg100));
  717|       |         const __m128i neg10 = _mm_load_si128(m128ptr(&c.neg10));
  718|       |
  719|       |         __m128i z = _mm_add_epi64(y, _mm_mullo_epi32(neg100, _mm_srli_epi32(_mm_mulhi_epu16(y, div100), 3)));
  720|       |         return _mm_add_epi16(z, _mm_mullo_epi16(neg10, _mm_mulhi_epu16(z, div10)));
  721|       |#else
  722|    752|         const __m128i hundred = _mm_load_si128(m128ptr(&c.hundred));
  723|    752|         const __m128i moddiv10 = _mm_load_si128(m128ptr(&c.moddiv10));
  724|       |
  725|    752|         __m128i y_div_100 = _mm_srli_epi16(_mm_mulhi_epu16(y, div100), 3);
  726|    752|         __m128i y_mod_100 = _mm_sub_epi16(y, _mm_mullo_epi16(y_div_100, hundred));
  727|    752|         __m128i z = _mm_or_si128(_mm_slli_epi32(y_mod_100, 16), y_div_100);
  728|    752|         return _mm_sub_epi16(_mm_slli_epi16(z, 8), _mm_mullo_epi16(moddiv10, _mm_mulhi_epu16(z, div10)));
  729|    752|#endif
  730|    752|      }
_ZN3glz4zmij11detail_impl3clzEm:
  187|    752|      {
  188|    752|         assert(x != 0);
  ------------------
  |  Branch (188:10): [True: 752, False: 0]
  ------------------
  189|    752|#if ZMIJ_HAS_BUILTIN(__builtin_clzll)
  190|    752|         return __builtin_clzll(x);
  191|       |#elif defined(_M_AMD64) && defined(__AVX2__)
  192|       |         return __lzcnt64(x);
  193|       |#elif defined(_M_AMD64) || defined(_M_ARM64)
  194|       |         unsigned long idx;
  195|       |         _BitScanReverse64(&idx, x);
  196|       |         return 63 - idx;
  197|       |#elif ZMIJ_MSC_VER
  198|       |         unsigned long idx;
  199|       |         if (_BitScanReverse(&idx, uint32_t(x >> 32))) return 31 - idx;
  200|       |         _BitScanReverse(&idx, uint32_t(x));
  201|       |         return 63 - idx;
  202|       |#else
  203|       |         int n = 64;
  204|       |         for (; x > 0; x >>= 1) --n;
  205|       |         return n;
  206|       |#endif
  207|    752|      }
_ZNK3glz4zmij11detail_impl20dec_exp_format_table3getINS1_12float_traitsIdEEEERKNS2_5entryEi:
  559|    368|         {
  560|    368|            constexpr auto min = traits::min_fixed_dec_exp, max = Traits::max_fixed_dec_exp;
  561|    368|            unsigned i = unsigned(dec_exp - min);
  562|    368|            return data[i <= unsigned(max - min) ? i : num_entries - 1];
  ------------------
  |  Branch (562:25): [True: 368, False: 0]
  ------------------
  563|    368|         }

