Generated by Cython 0.29.26

Yellow lines hint at Python interaction.
Click on a line that starts with a "+" to see the C code that Cython generated for it.

Raw output: _c.c

+0001: # cython: language_level = 3
  __pyx_t_1 = __Pyx_PyDict_NewPresized(46); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_collapse_blocks_line_73, __pyx_kp_u_Collapses_a_generic_sequence_of) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_from_blocks_line_5590, __pyx_kp_u_Creates_a_virtual_memory_from_bl) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_from_bytes_line_5660, __pyx_kp_u_Creates_a_virtual_memory_from_a) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_from_memory_line_5722, __pyx_kp_u_Creates_a_virtual_memory_from_an) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory___str___line_5795, __pyx_kp_u_String_representation_If_attr_co) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory___eq___line_5854, __pyx_kp_u_Equality_comparison_Arguments_ot) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_count_line_6171, __pyx_kp_u_Counts_items_Arguments_item_item) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory___getitem___line_6208, __pyx_kp_u_Gets_data_Arguments_key_slice_or) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory___setitem___line_6259, __pyx_kp_u_Sets_data_Arguments_key_slice_or) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory___delitem___line_6336, __pyx_kp_u_Deletes_data_Arguments_key_slice) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_append_line_6392, __pyx_kp_u_Appends_a_single_item_Arguments) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_pop_line_6440, __pyx_kp_u_Takes_a_value_away_Arguments_add) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_start___get___line_6654, __pyx_kp_u_int_Inclusive_start_address_This) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_endex___get___line_6699, __pyx_kp_u_int_Exclusive_end_address_This_p) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_span___get___line_6744, __pyx_kp_u_tuple_of_int_Memory_address_span) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_endin___get___line_6773, __pyx_kp_u_int_Inclusive_end_address_This_p) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_content_start___get___lin, __pyx_kp_u_int_Inclusive_content_start_addr) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_content_endex___get___lin, __pyx_kp_u_int_Exclusive_content_end_addres) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_content_span___get___line, __pyx_kp_u_tuple_of_int_Memory_content_addr) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_content_endin___get___lin, __pyx_kp_u_int_Inclusive_content_end_addres) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_content_size___get___line, __pyx_kp_u_Actual_content_size_Returns_int) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_content_parts___get___lin, __pyx_kp_u_Number_of_blocks_Returns_int_The) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_bound_line_7095, __pyx_kp_u_Bounds_addresses_It_bounds_the_g) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory__block_index_at_line_7165, __pyx_kp_u_Locates_the_block_enclosing_an_a) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory__block_index_start_line_7, __pyx_kp_u_Locates_the_first_block_inside_o) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory__block_index_endex_line_7, __pyx_kp_u_Locates_the_first_block_after_an) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_peek_line_7267, __pyx_kp_u_Gets_the_item_at_an_address_Retu) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_poke_line_7300, __pyx_kp_u_Sets_the_item_at_an_address_Argu) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_extract_line_7338, __pyx_kp_u_Selects_items_from_a_range_Argum) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_shift_line_7402, __pyx_kp_u_Shifts_the_items_Arguments_offse) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_reserve_line_7454, __pyx_kp_u_Inserts_emptiness_Reserves_empti) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_insert_line_7512, __pyx_kp_u_Inserts_data_Inserts_data_moving) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_delete_line_7556, __pyx_kp_u_Deletes_an_address_range_Argumen) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_clear_line_7594, __pyx_kp_u_Clears_an_address_range_Argument) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_crop_line_7632, __pyx_kp_u_Keeps_data_within_an_address_ran) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_write_line_7670, __pyx_kp_u_Writes_data_Arguments_address_in) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_fill_line_7711, __pyx_kp_u_Overwrites_a_range_with_a_patter) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_flood_line_7768, __pyx_kp_u_Fills_emptiness_between_non_touc) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_keys_line_7825, __pyx_kp_u_Iterates_over_addresses_Iterates) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_values_line_7898, __pyx_kp_u_Iterates_over_values_Iterates_ov) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_rvalues_line_7995, __pyx_kp_u_Iterates_over_values_reversed_or) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_items_line_8093, __pyx_kp_u_Iterates_over_address_and_value) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_intervals_line_8151, __pyx_kp_u_Iterates_over_block_intervals_It) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_gaps_line_8215, __pyx_kp_u_Iterates_over_block_gaps_Iterate) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_equal_span_line_8305, __pyx_kp_u_Span_of_homogeneous_data_It_sear) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_kp_u_Memory_block_span_line_8421, __pyx_kp_u_Span_of_block_data_It_searches_f) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0002: # cython: embedsignature = True
 0003: # cython: binding = True
 0004: 
 0005: # Copyright (c) 2020-2022, Andrea Zoppi.
 0006: # All rights reserved.
 0007: #
 0008: # Redistribution and use in source and binary forms, with or without
 0009: # modification, are permitted provided that the following conditions are met:
 0010: #
 0011: # 1. Redistributions of source code must retain the above copyright notice,
 0012: #    this list of conditions and the following disclaimer.
 0013: #
 0014: # 2. Redistributions in binary form must reproduce the above copyright
 0015: #    notice, this list of conditions and the following disclaimer in the
 0016: #    documentation and/or other materials provided with the distribution.
 0017: #
 0018: # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 0019: # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 0020: # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 0021: # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 0022: # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 0023: # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 0024: # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 0025: # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 0026: # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 0027: # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 0028: # POSSIBILITY OF SUCH DAMAGE.
 0029: 
 0030: r"""Cython implementation."""
 0031: 
 0032: cimport cython
 0033: from cpython.bytearray cimport PyByteArray_FromStringAndSize
 0034: from cpython.bytes cimport PyBytes_FromStringAndSize
 0035: 
+0036: from itertools import count as _count
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_count);
  __Pyx_GIVEREF(__pyx_n_s_count);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_count);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_itertools, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_count); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_count_2, __pyx_t_1) < 0) __PYX_ERR(0, 36, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0037: from itertools import islice as _islice
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_islice);
  __Pyx_GIVEREF(__pyx_n_s_islice);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_islice);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_itertools, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_islice); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_islice_2, __pyx_t_2) < 0) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0038: from itertools import repeat as _repeat
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_repeat);
  __Pyx_GIVEREF(__pyx_n_s_repeat);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_repeat);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_itertools, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_repeat); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_repeat_2, __pyx_t_1) < 0) __PYX_ERR(0, 38, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0039: from itertools import zip_longest as _zip_longest
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_zip_longest);
  __Pyx_GIVEREF(__pyx_n_s_zip_longest);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_zip_longest);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_itertools, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_zip_longest); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 39, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_zip_longest_2, __pyx_t_2) < 0) __PYX_ERR(0, 39, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0040: from typing import Any
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_Any);
  __Pyx_GIVEREF(__pyx_n_s_Any);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_Any);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Any); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Any, __pyx_t_1) < 0) __PYX_ERR(0, 40, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0041: from typing import ByteString
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_ByteString);
  __Pyx_GIVEREF(__pyx_n_s_ByteString);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_ByteString);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_ByteString); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ByteString, __pyx_t_2) < 0) __PYX_ERR(0, 41, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0042: from typing import Iterable
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_Iterable);
  __Pyx_GIVEREF(__pyx_n_s_Iterable);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_Iterable);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Iterable); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Iterable, __pyx_t_1) < 0) __PYX_ERR(0, 42, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0043: from typing import Iterator
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_Iterator);
  __Pyx_GIVEREF(__pyx_n_s_Iterator);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Iterator);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_Iterator); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Iterator, __pyx_t_2) < 0) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0044: from typing import List
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_List);
  __Pyx_GIVEREF(__pyx_n_s_List);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_List);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_List); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_List, __pyx_t_1) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0045: from typing import Optional
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_Optional);
  __Pyx_GIVEREF(__pyx_n_s_Optional);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Optional);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Optional, __pyx_t_2) < 0) __PYX_ERR(0, 45, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0046: from typing import Sequence
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_Sequence);
  __Pyx_GIVEREF(__pyx_n_s_Sequence);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_Sequence);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Sequence); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Sequence, __pyx_t_1) < 0) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0047: from typing import Tuple
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_Tuple);
  __Pyx_GIVEREF(__pyx_n_s_Tuple);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Tuple);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_Tuple); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 47, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Tuple, __pyx_t_2) < 0) __PYX_ERR(0, 47, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0048: from typing import Type
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_Type);
  __Pyx_GIVEREF(__pyx_n_s_Type);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_Type);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Type, __pyx_t_1) < 0) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0049: from typing import Union
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_Union);
  __Pyx_GIVEREF(__pyx_n_s_Union);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_Union);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_typing, __pyx_t_2, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_Union); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Union, __pyx_t_2) < 0) __PYX_ERR(0, 49, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 0050: 
+0051: Address = int
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Address, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 51, __pyx_L1_error)
+0052: Value = int
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Value, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 52, __pyx_L1_error)
+0053: AnyBytes = Union[ByteString, bytes, bytearray, memoryview, Sequence[Value]]
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Union); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_ByteString); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_memoryview); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Sequence); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
  __Pyx_INCREF(((PyObject *)(&PyBytes_Type)));
  __Pyx_GIVEREF(((PyObject *)(&PyBytes_Type)));
  PyTuple_SET_ITEM(__pyx_t_5, 1, ((PyObject *)(&PyBytes_Type)));
  __Pyx_INCREF(((PyObject *)(&PyByteArray_Type)));
  __Pyx_GIVEREF(((PyObject *)(&PyByteArray_Type)));
  PyTuple_SET_ITEM(__pyx_t_5, 2, ((PyObject *)(&PyByteArray_Type)));
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_t_6);
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_AnyBytes, __pyx_t_6) < 0) __PYX_ERR(0, 53, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0054: Data = bytearray
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Data, ((PyObject *)(&PyByteArray_Type))) < 0) __PYX_ERR(0, 54, __pyx_L1_error)
 0055: 
+0056: Block = List[Union[Address, Data]]  # typed as Tuple[Address, Data]
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_List); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Union); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Block, __pyx_t_2) < 0) __PYX_ERR(0, 56, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0057: BlockIndex = int
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BlockIndex, ((PyObject *)(&PyInt_Type))) < 0) __PYX_ERR(0, 57, __pyx_L1_error)
+0058: BlockIterable = Iterable[Block]
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Iterable); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Block); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BlockIterable, __pyx_t_6) < 0) __PYX_ERR(0, 58, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0059: BlockSequence = Sequence[Block]
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Sequence); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Block); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BlockSequence, __pyx_t_2) < 0) __PYX_ERR(0, 59, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0060: BlockList = List[Block]
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_List); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Block); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_BlockList, __pyx_t_6) < 0) __PYX_ERR(0, 60, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+0061: MemoryList = List[Memory]
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_List); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_6, ((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MemoryList, __pyx_t_3) < 0) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0062: 
+0063: OpenInterval = Tuple[Optional[Address], Optional[Address]]
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Tuple); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Address); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
  __pyx_t_5 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 63, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_OpenInterval, __pyx_t_1) < 0) __PYX_ERR(0, 63, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+0064: ClosedInterval = Tuple[Address, Address]
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Address); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
  __pyx_t_6 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 64, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ClosedInterval, __pyx_t_3) < 0) __PYX_ERR(0, 64, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0065: 
+0066: EllipsisType = Type['Ellipsis']
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_Dict_GetItem(__pyx_t_3, __pyx_n_u_Ellipsis); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_EllipsisType, __pyx_t_5) < 0) __PYX_ERR(0, 66, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 0067: 
+0068: STR_MAX_CONTENT_SIZE: Address = 1000
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_STR_MAX_CONTENT_SIZE, __pyx_int_1000) < 0) __PYX_ERR(0, 68, __pyx_L1_error)
 0069: 
 0070: 
 0071: # =====================================================================================================================
 0072: 
+0073: def collapse_blocks(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_1collapse_blocks(PyObject *__pyx_self, PyObject *__pyx_v_blocks); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_collapse_blocks[] = "collapse_blocks(blocks: BlockIterable) -> BlockList\nCollapses a generic sequence of blocks.\n\n    Given a generic sequence of blocks, writes them in the same order,\n    generating a new sequence of non-contiguous blocks, sorted by address.\n\n    Arguments:\n        blocks (sequence of blocks):\n            Sequence of blocks to collapse.\n\n    Returns:\n        list of blocks: Collapsed block list.\n\n    Examples:\n        +---+---+---+---+---+---+---+---+---+---+\n        | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |\n        +===+===+===+===+===+===+===+===+===+===+\n        |[0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9]|\n        +---+---+---+---+---+---+---+---+---+---+\n        |[A | B | C | D]|   |   |   |   |   |   |\n        +---+---+---+---+---+---+---+---+---+---+\n        |   |   |   |[E | F]|   |   |   |   |   |\n        +---+---+---+---+---+---+---+---+---+---+\n        |[$]|   |   |   |   |   |   |   |   |   |\n        +---+---+---+---+---+---+---+---+---+---+\n        |   |   |   |   |   |   |[x | y | z]|   |\n        +---+---+---+---+---+---+---+---+---+---+\n        |[$ | B | C | E | F | 5 | x | y | z | 9]|\n        +---+---+---+---+---+---+---+---+---+---+\n\n        >>> blocks = [\n        ...     [0, b'0123456789'],\n        ...     [0, b'ABCD'],\n        ...     [3, b'EF'],\n        ...     [0, b'$'],\n        ...     [6, b'xyz'],\n        ... ]\n        >>> collapse_blocks(blocks)\n        [[0, b'$BCEF5xyz9']]\n\n        ~~~\n\n        +---+---+---+---+---+---+---+---+---+---+\n        | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |\n        +===+===+===+===+===+===+===+===+===+===+\n        |[0 | 1 | 2]|   |   |   |   |   |   |   |\n        +---+---+---+---+---+---+---+---+---+---+\n        |   |   |   |   |[A | B]|   |   |   |   |\n        +---+---+---+---+---+---+---+---+---+---+\n        |   |   |   |   |   |   |[x | y | z]|   |\n        +---+---+---+---+---+---+---+---+---+---+\n        |   |[$]|   |   |   |   |   |   |   |   |\n        +---+---+---""+---+---+---+---+---+---+---+\n        |[0 | $ | 2]|   |[A | B | x | y | z]|   |\n        +---+---+---+---+---+---+---+---+---+---+\n\n        >>> blocks = [\n        ...     [0, b'012'],\n        ...     [4, b'AB'],\n        ...     [6, b'xyz'],\n        ...     [1, b'$'],\n        ... ]\n        >>> collapse_blocks(blocks)\n        [[0, b'0$2'], [4, b'ABxyz']]\n    ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_1collapse_blocks = {"collapse_blocks", (PyCFunction)__pyx_pw_11cbytesparse_2_c_1collapse_blocks, METH_O, __pyx_doc_11cbytesparse_2_c_collapse_blocks};
static PyObject *__pyx_pw_11cbytesparse_2_c_1collapse_blocks(PyObject *__pyx_self, PyObject *__pyx_v_blocks) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("collapse_blocks (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_collapse_blocks(__pyx_self, ((PyObject *)__pyx_v_blocks));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_collapse_blocks(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_blocks) {
  Memory_ *__pyx_v_memory;
  PyObject *__pyx_v_collapsed = 0;
  PyObject *__pyx_v_block_start = NULL;
  PyObject *__pyx_v_block_data = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("collapse_blocks", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("cbytesparse._c.collapse_blocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_collapsed);
  __Pyx_XDECREF(__pyx_v_block_start);
  __Pyx_XDECREF(__pyx_v_block_data);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__59 = PyTuple_Pack(5, __pyx_n_s_blocks, __pyx_n_s_memory, __pyx_n_s_collapsed, __pyx_n_s_block_start, __pyx_n_s_block_data); if (unlikely(!__pyx_tuple__59)) __PYX_ERR(0, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__59);
  __Pyx_GIVEREF(__pyx_tuple__59);
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
/* … */
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_1collapse_blocks, 0, __pyx_n_s_collapse_blocks, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__60)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 73, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_collapse_blocks, __pyx_t_3) < 0) __PYX_ERR(0, 73, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_codeobj__60 = (PyObject*)__Pyx_PyCode_New(1, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__59, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_collapse_blocks, 73, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__60)) __PYX_ERR(0, 73, __pyx_L1_error)
+0074:     blocks: BlockIterable,
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_BlockIterable); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 74, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_blocks, __pyx_t_3) < 0) __PYX_ERR(0, 73, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+0075: ) -> BlockList:
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_BlockList); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 75, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_t_3) < 0) __PYX_ERR(0, 73, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 0076:     r"""Collapses a generic sequence of blocks.
 0077: 
 0078:     Given a generic sequence of blocks, writes them in the same order,
 0079:     generating a new sequence of non-contiguous blocks, sorted by address.
 0080: 
 0081:     Arguments:
 0082:         blocks (sequence of blocks):
 0083:             Sequence of blocks to collapse.
 0084: 
 0085:     Returns:
 0086:         list of blocks: Collapsed block list.
 0087: 
 0088:     Examples:
 0089:         +---+---+---+---+---+---+---+---+---+---+
 0090:         | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
 0091:         +===+===+===+===+===+===+===+===+===+===+
 0092:         |[0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9]|
 0093:         +---+---+---+---+---+---+---+---+---+---+
 0094:         |[A | B | C | D]|   |   |   |   |   |   |
 0095:         +---+---+---+---+---+---+---+---+---+---+
 0096:         |   |   |   |[E | F]|   |   |   |   |   |
 0097:         +---+---+---+---+---+---+---+---+---+---+
 0098:         |[$]|   |   |   |   |   |   |   |   |   |
 0099:         +---+---+---+---+---+---+---+---+---+---+
 0100:         |   |   |   |   |   |   |[x | y | z]|   |
 0101:         +---+---+---+---+---+---+---+---+---+---+
 0102:         |[$ | B | C | E | F | 5 | x | y | z | 9]|
 0103:         +---+---+---+---+---+---+---+---+---+---+
 0104: 
 0105:         >>> blocks = [
 0106:         ...     [0, b'0123456789'],
 0107:         ...     [0, b'ABCD'],
 0108:         ...     [3, b'EF'],
 0109:         ...     [0, b'$'],
 0110:         ...     [6, b'xyz'],
 0111:         ... ]
 0112:         >>> collapse_blocks(blocks)
 0113:         [[0, b'$BCEF5xyz9']]
 0114: 
 0115:         ~~~
 0116: 
 0117:         +---+---+---+---+---+---+---+---+---+---+
 0118:         | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
 0119:         +===+===+===+===+===+===+===+===+===+===+
 0120:         |[0 | 1 | 2]|   |   |   |   |   |   |   |
 0121:         +---+---+---+---+---+---+---+---+---+---+
 0122:         |   |   |   |   |[A | B]|   |   |   |   |
 0123:         +---+---+---+---+---+---+---+---+---+---+
 0124:         |   |   |   |   |   |   |[x | y | z]|   |
 0125:         +---+---+---+---+---+---+---+---+---+---+
 0126:         |   |[$]|   |   |   |   |   |   |   |   |
 0127:         +---+---+---+---+---+---+---+---+---+---+
 0128:         |[0 | $ | 2]|   |[A | B | x | y | z]|   |
 0129:         +---+---+---+---+---+---+---+---+---+---+
 0130: 
 0131:         >>> blocks = [
 0132:         ...     [0, b'012'],
 0133:         ...     [4, b'AB'],
 0134:         ...     [6, b'xyz'],
 0135:         ...     [1, b'$'],
 0136:         ... ]
 0137:         >>> collapse_blocks(blocks)
 0138:         [[0, b'0$2'], [4, b'ABxyz']]
 0139:     """
 0140: 
 0141:     cdef:
+0142:         Memory_* memory = Memory_Alloc()
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Alloc(); if (unlikely(__pyx_t_1 == ((Memory_ *)NULL))) __PYX_ERR(0, 142, __pyx_L1_error)
  __pyx_v_memory = __pyx_t_1;
+0143:         list collapsed = None
  __Pyx_INCREF(Py_None);
  __pyx_v_collapsed = ((PyObject*)Py_None);
 0144: 
+0145:     try:
  /*try:*/ {
+0146:         for block_start, block_data in blocks:
    if (likely(PyList_CheckExact(__pyx_v_blocks)) || PyTuple_CheckExact(__pyx_v_blocks)) {
      __pyx_t_2 = __pyx_v_blocks; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
      __pyx_t_4 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_blocks); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 146, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 146, __pyx_L4_error)
    }
    for (;;) {
      if (likely(!__pyx_t_4)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 146, __pyx_L4_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 146, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 146, __pyx_L4_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 146, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_4(__pyx_t_2);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 146, __pyx_L4_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
        PyObject* sequence = __pyx_t_5;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 146, __pyx_L4_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_6 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_7 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(__pyx_t_7);
        #else
        __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 146, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_6);
        __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 146, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_7);
        #endif
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_8 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 146, __pyx_L4_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext;
        index = 0; __pyx_t_6 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_6);
        index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L8_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_7);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) __PYX_ERR(0, 146, __pyx_L4_error)
        __pyx_t_9 = NULL;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L9_unpacking_done;
        __pyx_L8_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __pyx_t_9 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 146, __pyx_L4_error)
        __pyx_L9_unpacking_done:;
      }
      __Pyx_XDECREF_SET(__pyx_v_block_start, __pyx_t_6);
      __pyx_t_6 = 0;
      __Pyx_XDECREF_SET(__pyx_v_block_data, __pyx_t_7);
      __pyx_t_7 = 0;
/* … */
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+0147:             Memory_Write(memory, block_start, block_data, True, None)
      __pyx_t_10 = __pyx_f_11cbytesparse_2_c_Memory_Write(__pyx_v_memory, __pyx_v_block_start, __pyx_v_block_data, 1, ((PyObject*)Py_None)); if (unlikely(__pyx_t_10 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 147, __pyx_L4_error)
 0148: 
+0149:         collapsed = Memory_ToBlocks(memory)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_ToBlocks(__pyx_v_memory); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 149, __pyx_L4_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_collapsed, ((PyObject*)__pyx_t_2));
    __pyx_t_2 = 0;
  }
 0150:     finally:
+0151:         Memory_Free(memory)
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Free(__pyx_v_memory); if (unlikely(__pyx_t_1 == ((Memory_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 151, __pyx_L1_error)
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_16);
      __Pyx_XGOTREF(__pyx_t_17);
      __Pyx_XGOTREF(__pyx_t_18);
      __Pyx_XGOTREF(__pyx_t_19);
      __pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
      {
        __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Free(__pyx_v_memory); if (unlikely(__pyx_t_1 == ((Memory_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 151, __pyx_L11_error)
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_17);
        __Pyx_XGIVEREF(__pyx_t_18);
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      }
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_XGIVEREF(__pyx_t_15);
      __Pyx_XGIVEREF(__pyx_t_16);
      __Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
      __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
      goto __pyx_L1_error;
      __pyx_L11_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_17);
        __Pyx_XGIVEREF(__pyx_t_18);
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
      }
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
      __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }
 0152: 
+0153:     return collapsed
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_collapsed);
  __pyx_r = __pyx_v_collapsed;
  goto __pyx_L0;
 0154: 
 0155: 
 0156: # =====================================================================================================================
 0157: 
 0158: # FIXME: Not yet provided by the current Cython (0.29.x)
+0159: cdef void* PyMem_Calloc(size_t nelem, size_t elsize):
static void *__pyx_f_11cbytesparse_2_c_PyMem_Calloc(size_t __pyx_v_nelem, size_t __pyx_v_elsize) {
  void *__pyx_v_ptr;
  size_t __pyx_v_total;
  void *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("PyMem_Calloc", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0160:     cdef:
 0161:         void* ptr
 0162:         size_t total
 0163: 
+0164:     if CannotMulSizeU(nelem, elsize):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotMulSizeU(__pyx_v_nelem, __pyx_v_elsize) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0165:         return NULL  # overflow
    __pyx_r = NULL;
    goto __pyx_L0;
+0166:     total = nelem * elsize
  __pyx_v_total = (__pyx_v_nelem * __pyx_v_elsize);
 0167: 
+0168:     ptr = PyMem_Malloc(total)
  __pyx_v_ptr = PyMem_Malloc(__pyx_v_total);
+0169:     if ptr:
  __pyx_t_1 = (__pyx_v_ptr != 0);
  if (__pyx_t_1) {
/* … */
  }
+0170:         memset(ptr, 0, total)
    (void)(memset(__pyx_v_ptr, 0, __pyx_v_total));
+0171:     return ptr
  __pyx_r = __pyx_v_ptr;
  goto __pyx_L0;
 0172: 
 0173: 
 0174: # =====================================================================================================================
 0175: 
+0176: cdef size_t Downsize(size_t allocated, size_t requested) nogil:
static size_t __pyx_f_11cbytesparse_2_c_Downsize(size_t __pyx_v_allocated, size_t __pyx_v_requested) {
  size_t __pyx_v_resized;
  size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0177:     # Note: free margin will be either before and after allocated data
 0178:     cdef size_t resized
 0179: 
+0180:     if requested < allocated >> 1:
  __pyx_t_1 = ((__pyx_v_requested < (__pyx_v_allocated >> 1)) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
 0181:         # Major downsize; allocate as per request
+0182:         resized = requested
    __pyx_v_resized = __pyx_v_requested;
 0183: 
 0184:         # Align to next MARGIN; always gives some additional MARGIN
 0185:         with cython.cdivision(True):
+0186:             resized += (2 * MARGIN) - (resized % MARGIN)
    __pyx_v_resized = (__pyx_v_resized + ((2 * MARGIN) - (__pyx_v_resized % MARGIN)));
 0187:     else:
 0188:         # Do not require reallocation
+0189:         resized = allocated
  /*else*/ {
    __pyx_v_resized = __pyx_v_allocated;
 0190: 
 0191:         # Align to next MARGIN; always gives some additional MARGIN
+0192:         if resized < 2 * MARGIN:
    __pyx_t_1 = ((__pyx_v_resized < (2 * MARGIN)) != 0);
    if (__pyx_t_1) {
/* … */
    }
  }
  __pyx_L3:;
+0193:             resized = 2 * MARGIN
      __pyx_v_resized = (2 * MARGIN);
 0194: 
+0195:     return resized
  __pyx_r = __pyx_v_resized;
  goto __pyx_L0;
 0196: 
 0197: 
+0198: cdef size_t Upsize(size_t allocated, size_t requested) nogil:
static size_t __pyx_f_11cbytesparse_2_c_Upsize(size_t __pyx_v_allocated, size_t __pyx_v_requested) {
  size_t __pyx_v_resized;
  size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0199:     # Note: free margin will be either before and after allocated data
+0200:     cdef size_t resized = requested
  __pyx_v_resized = __pyx_v_requested;
 0201: 
 0202:     # Moderate upsize; overallocate proportionally
+0203:     if resized <= allocated + (allocated >> 3):
  __pyx_t_1 = ((__pyx_v_resized <= (__pyx_v_allocated + (__pyx_v_allocated >> 3))) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0204:         resized += resized >> 3
    __pyx_v_resized = (__pyx_v_resized + (__pyx_v_resized >> 3));
 0205: 
 0206:     # Align to next MARGIN; always gives some additional MARGIN
 0207:     with cython.cdivision(True):
+0208:         resized += (2 * MARGIN) - (resized % MARGIN)
  __pyx_v_resized = (__pyx_v_resized + ((2 * MARGIN) - (__pyx_v_resized % MARGIN)));
+0209:     return resized
  __pyx_r = __pyx_v_resized;
  goto __pyx_L0;
 0210: 
 0211: 
 0212: # ---------------------------------------------------------------------------------------------------------------------
 0213: 
+0214: cdef void Reverse(byte_t* buffer, size_t start, size_t endin) nogil:
static void __pyx_f_11cbytesparse_2_c_Reverse(byte_t *__pyx_v_buffer, size_t __pyx_v_start, size_t __pyx_v_endin) {
  byte_t __pyx_v_t;
/* … */
  /* function exit code */
}
 0215:     cdef:
 0216:         byte_t t
 0217: 
+0218:     while start < endin:
  while (1) {
    __pyx_t_1 = ((__pyx_v_start < __pyx_v_endin) != 0);
    if (!__pyx_t_1) break;
+0219:         t = buffer[start]
    __pyx_v_t = (__pyx_v_buffer[__pyx_v_start]);
+0220:         buffer[start] = buffer[endin]
    (__pyx_v_buffer[__pyx_v_start]) = (__pyx_v_buffer[__pyx_v_endin]);
+0221:         buffer[endin] = t
    (__pyx_v_buffer[__pyx_v_endin]) = __pyx_v_t;
+0222:         start += 1
    __pyx_v_start = (__pyx_v_start + 1);
+0223:         endin -= 1
    __pyx_v_endin = (__pyx_v_endin - 1);
  }
 0224: 
 0225: 
+0226: cdef bint IsSequence(object obj) except -1:
static int __pyx_f_11cbytesparse_2_c_IsSequence(PyObject *__pyx_v_obj) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("IsSequence", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("cbytesparse._c.IsSequence", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0227:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
    __pyx_L6_except_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+0228:         len(obj)
      __pyx_t_4 = PyObject_Length(__pyx_v_obj); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(0, 228, __pyx_L3_error)
+0229:         obj[0:0]
      __pyx_t_5 = __Pyx_PyObject_GetSlice(__pyx_v_obj, 0, 0, NULL, NULL, &__pyx_slice_, 1, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 229, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
/* … */
  __pyx_slice_ = PySlice_New(__pyx_int_0, __pyx_int_0, Py_None); if (unlikely(!__pyx_slice_)) __PYX_ERR(0, 229, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_slice_);
  __Pyx_GIVEREF(__pyx_slice_);
+0230:         return True
      __pyx_r = 1;
      goto __pyx_L7_try_return;
+0231:     except TypeError:
    __pyx_t_6 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
    if (__pyx_t_6) {
      __Pyx_AddTraceback("cbytesparse._c.IsSequence", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(0, 231, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_8);
+0232:         return False
      __pyx_r = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L6_except_return;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;
 0233: 
 0234: 
 0235: # =====================================================================================================================
 0236: 
+0237: cdef bint CannotAddSizeU(size_t a, size_t b) nogil:
static int __pyx_f_11cbytesparse_2_c_CannotAddSizeU(size_t __pyx_v_a, size_t __pyx_v_b) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+0238:     return SIZE_MAX - a < b
  __pyx_r = ((SIZE_MAX - __pyx_v_a) < __pyx_v_b);
  goto __pyx_L0;
 0239: 
 0240: 
+0241: cdef vint CheckAddSizeU(size_t a, size_t b) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_CheckAddSizeU(size_t __pyx_v_a, size_t __pyx_v_b) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("CheckAddSizeU", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.CheckAddSizeU", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0242:     if CannotAddSizeU(a, b):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotAddSizeU(__pyx_v_a, __pyx_v_b) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0243:         raise OverflowError()
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_builtin_OverflowError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 243, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 243, __pyx_L1_error)
 0244: 
 0245: 
+0246: cdef size_t AddSizeU(size_t a, size_t b) except? 0xDEAD:
static size_t __pyx_f_11cbytesparse_2_c_AddSizeU(size_t __pyx_v_a, size_t __pyx_v_b) {
  size_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("AddSizeU", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.AddSizeU", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0xDEAD;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0247:     CheckAddSizeU(a, b)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_a, __pyx_v_b); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 247, __pyx_L1_error)
+0248:     return a + b
  __pyx_r = (__pyx_v_a + __pyx_v_b);
  goto __pyx_L0;
 0249: 
 0250: 
+0251: cdef bint CannotSubSizeU(size_t a, size_t b) nogil:
static int __pyx_f_11cbytesparse_2_c_CannotSubSizeU(size_t __pyx_v_a, size_t __pyx_v_b) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+0252:     return a < b
  __pyx_r = (__pyx_v_a < __pyx_v_b);
  goto __pyx_L0;
 0253: 
 0254: 
+0255: cdef vint CheckSubSizeU(size_t a, size_t b) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_CheckSubSizeU(size_t __pyx_v_a, size_t __pyx_v_b) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("CheckSubSizeU", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.CheckSubSizeU", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0256:     if CannotSubSizeU(a, b):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotSubSizeU(__pyx_v_a, __pyx_v_b) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0257:         raise OverflowError()
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_builtin_OverflowError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 257, __pyx_L1_error)
 0258: 
 0259: 
+0260: cdef size_t SubSizeU(size_t a, size_t b) except? 0xDEAD:
static size_t __pyx_f_11cbytesparse_2_c_SubSizeU(size_t __pyx_v_a, size_t __pyx_v_b) {
  size_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("SubSizeU", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.SubSizeU", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0xDEAD;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0261:     CheckSubSizeU(a, b)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckSubSizeU(__pyx_v_a, __pyx_v_b); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 261, __pyx_L1_error)
+0262:     return a - b
  __pyx_r = (__pyx_v_a - __pyx_v_b);
  goto __pyx_L0;
 0263: 
 0264: 
+0265: cdef bint CannotMulSizeU(size_t a, size_t b) nogil:
static int __pyx_f_11cbytesparse_2_c_CannotMulSizeU(size_t __pyx_v_a, size_t __pyx_v_b) {
  size_t __pyx_v_r;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0266:     cdef:
+0267:         size_t r = a * b
  __pyx_v_r = (__pyx_v_a * __pyx_v_b);
+0268:     return a and b and (r < a or r < b)
  __pyx_t_2 = (__pyx_v_a != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_b != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_r < __pyx_v_a) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_r < __pyx_v_b) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 0269: 
 0270: 
+0271: cdef vint CheckMulSizeU(size_t a, size_t b) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_CheckMulSizeU(size_t __pyx_v_a, size_t __pyx_v_b) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("CheckMulSizeU", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.CheckMulSizeU", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0272:     if CannotMulSizeU(a, b):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotMulSizeU(__pyx_v_a, __pyx_v_b) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0273:         raise OverflowError()
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_builtin_OverflowError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 273, __pyx_L1_error)
 0274: 
 0275: 
+0276: cdef size_t MulSizeU(size_t a, size_t b) except? 0xDEAD:
static size_t __pyx_f_11cbytesparse_2_c_MulSizeU(size_t __pyx_v_a, size_t __pyx_v_b) {
  size_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("MulSizeU", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.MulSizeU", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0xDEAD;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0277:     CheckMulSizeU(a, b)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckMulSizeU(__pyx_v_a, __pyx_v_b); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 277, __pyx_L1_error)
+0278:     return a * b
  __pyx_r = (__pyx_v_a * __pyx_v_b);
  goto __pyx_L0;
 0279: 
 0280: 
 0281: # ---------------------------------------------------------------------------------------------------------------------
 0282: 
+0283: cdef bint CannotAddSizeS(ssize_t a, ssize_t b) nogil:
static int __pyx_f_11cbytesparse_2_c_CannotAddSizeS(Py_ssize_t __pyx_v_a, Py_ssize_t __pyx_v_b) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+0284:     return ((b > 0 and a > SSIZE_MAX - b) or
  __pyx_t_2 = ((__pyx_v_b > 0) != 0);
  if (!__pyx_t_2) {
    goto __pyx_L4_next_or;
  } else {
  }
  __pyx_t_2 = ((__pyx_v_a > (SSIZE_MAX - __pyx_v_b)) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_L4_next_or:;
+0285:             (b < 0 and a < SSIZE_MIN - b))
  __pyx_t_2 = ((__pyx_v_b < 0) != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_a < (SSIZE_MIN - __pyx_v_b)) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 0286: 
 0287: 
+0288: cdef vint CheckAddSizeS(ssize_t a, ssize_t b) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_CheckAddSizeS(Py_ssize_t __pyx_v_a, Py_ssize_t __pyx_v_b) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("CheckAddSizeS", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.CheckAddSizeS", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0289:     if CannotAddSizeS(a, b):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotAddSizeS(__pyx_v_a, __pyx_v_b) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0290:         raise OverflowError()
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_builtin_OverflowError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 290, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 290, __pyx_L1_error)
 0291: 
 0292: 
+0293: cdef ssize_t AddSizeS(ssize_t a, ssize_t b) except? 0xDEAD:
static Py_ssize_t __pyx_f_11cbytesparse_2_c_AddSizeS(Py_ssize_t __pyx_v_a, Py_ssize_t __pyx_v_b) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("AddSizeS", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.AddSizeS", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0xDEAD;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0294:     CheckAddSizeS(a, b)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckAddSizeS(__pyx_v_a, __pyx_v_b); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 294, __pyx_L1_error)
+0295:     return a + b
  __pyx_r = (__pyx_v_a + __pyx_v_b);
  goto __pyx_L0;
 0296: 
 0297: 
+0298: cdef bint CannotSubSizeS(ssize_t a, ssize_t b) nogil:
static int __pyx_f_11cbytesparse_2_c_CannotSubSizeS(Py_ssize_t __pyx_v_a, Py_ssize_t __pyx_v_b) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+0299:     return ((b > 0 and a < SSIZE_MIN + b) or
  __pyx_t_2 = ((__pyx_v_b > 0) != 0);
  if (!__pyx_t_2) {
    goto __pyx_L4_next_or;
  } else {
  }
  __pyx_t_2 = ((__pyx_v_a < (SSIZE_MIN + __pyx_v_b)) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_L4_next_or:;
+0300:             (b < 0 and a > SSIZE_MAX + b))
  __pyx_t_2 = ((__pyx_v_b < 0) != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_a > (SSIZE_MAX + __pyx_v_b)) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 0301: 
 0302: 
+0303: cdef vint CheckSubSizeS(ssize_t a, ssize_t b) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_CheckSubSizeS(Py_ssize_t __pyx_v_a, Py_ssize_t __pyx_v_b) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("CheckSubSizeS", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.CheckSubSizeS", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0304:     if CannotSubSizeS(a, b):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotSubSizeS(__pyx_v_a, __pyx_v_b) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0305:         raise OverflowError()
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_builtin_OverflowError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 305, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 305, __pyx_L1_error)
 0306: 
 0307: 
+0308: cdef ssize_t SubSizeS(ssize_t a, ssize_t b) except? 0xDEAD:
static Py_ssize_t __pyx_f_11cbytesparse_2_c_SubSizeS(Py_ssize_t __pyx_v_a, Py_ssize_t __pyx_v_b) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("SubSizeS", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.SubSizeS", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0xDEAD;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0309:     CheckSubSizeS(a, b)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckSubSizeS(__pyx_v_a, __pyx_v_b); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 309, __pyx_L1_error)
+0310:     return a - b
  __pyx_r = (__pyx_v_a - __pyx_v_b);
  goto __pyx_L0;
 0311: 
 0312: 
+0313: cdef bint CannotMulSizeS(ssize_t a, ssize_t b) nogil:
static int __pyx_f_11cbytesparse_2_c_CannotMulSizeS(Py_ssize_t __pyx_v_a, Py_ssize_t __pyx_v_b) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0314:     with cython.cdivision(True):
+0315:         if a > 0:
  __pyx_t_1 = ((__pyx_v_a > 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0316:             if b > 0:
    __pyx_t_1 = ((__pyx_v_b > 0) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0317:                 return a > (SSIZE_MAX // b)
      __pyx_r = (__pyx_v_a > (SSIZE_MAX / __pyx_v_b));
      goto __pyx_L0;
 0318:             else:
+0319:                 return b < (SSIZE_MIN // a)
    /*else*/ {
      __pyx_r = (__pyx_v_b < (SSIZE_MIN / __pyx_v_a));
      goto __pyx_L0;
    }
 0320:         else:
+0321:             if b > 0:
  /*else*/ {
    __pyx_t_1 = ((__pyx_v_b > 0) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0322:                 return a < (SSIZE_MIN // b)
      __pyx_r = (__pyx_v_a < (SSIZE_MIN / __pyx_v_b));
      goto __pyx_L0;
 0323:             else:
+0324:                 return a and b < (SSIZE_MAX // a)
    /*else*/ {
      __pyx_t_2 = (__pyx_v_a != 0);
      if (__pyx_t_2) {
      } else {
        __pyx_t_1 = __pyx_t_2;
        goto __pyx_L6_bool_binop_done;
      }
      __pyx_t_2 = ((__pyx_v_b < (SSIZE_MAX / __pyx_v_a)) != 0);
      __pyx_t_1 = __pyx_t_2;
      __pyx_L6_bool_binop_done:;
      __pyx_r = __pyx_t_1;
      goto __pyx_L0;
    }
  }
 0325: 
 0326: 
+0327: cdef vint CheckMulSizeS(ssize_t a, ssize_t b) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_CheckMulSizeS(Py_ssize_t __pyx_v_a, Py_ssize_t __pyx_v_b) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("CheckMulSizeS", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.CheckMulSizeS", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0328:     if CannotMulSizeS(a, b):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotMulSizeS(__pyx_v_a, __pyx_v_b) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0329:         raise OverflowError()
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_builtin_OverflowError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 329, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 329, __pyx_L1_error)
 0330: 
 0331: 
+0332: cdef ssize_t MulSizeS(ssize_t a, ssize_t b) except? 0xDEAD:
static Py_ssize_t __pyx_f_11cbytesparse_2_c_MulSizeS(Py_ssize_t __pyx_v_a, Py_ssize_t __pyx_v_b) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("MulSizeS", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.MulSizeS", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0xDEAD;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0333:     CheckMulSizeS(a, b)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckMulSizeS(__pyx_v_a, __pyx_v_b); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 333, __pyx_L1_error)
+0334:     return a * b
  __pyx_r = (__pyx_v_a * __pyx_v_b);
  goto __pyx_L0;
 0335: 
 0336: 
 0337: # =====================================================================================================================
 0338: 
+0339: cdef bint CannotAddAddrU(addr_t a, addr_t b) nogil:
static int __pyx_f_11cbytesparse_2_c_CannotAddAddrU(addr_t __pyx_v_a, addr_t __pyx_v_b) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+0340:     return ADDR_MAX - a < b
  __pyx_r = ((ADDR_MAX - __pyx_v_a) < __pyx_v_b);
  goto __pyx_L0;
 0341: 
 0342: 
+0343: cdef vint CheckAddAddrU(addr_t a, addr_t b) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_CheckAddAddrU(addr_t __pyx_v_a, addr_t __pyx_v_b) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("CheckAddAddrU", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.CheckAddAddrU", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0344:     if CannotAddAddrU(a, b):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotAddAddrU(__pyx_v_a, __pyx_v_b) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0345:         raise OverflowError()
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_builtin_OverflowError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 345, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 345, __pyx_L1_error)
 0346: 
 0347: 
+0348: cdef addr_t AddAddrU(addr_t a, addr_t b) except? 0xDEAD:
static addr_t __pyx_f_11cbytesparse_2_c_AddAddrU(addr_t __pyx_v_a, addr_t __pyx_v_b) {
  addr_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("AddAddrU", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.AddAddrU", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0xDEAD;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0349:     CheckAddAddrU(a, b)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_a, __pyx_v_b); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 349, __pyx_L1_error)
+0350:     return a + b
  __pyx_r = (__pyx_v_a + __pyx_v_b);
  goto __pyx_L0;
 0351: 
 0352: 
+0353: cdef bint CannotSubAddrU(addr_t a, addr_t b) nogil:
static int __pyx_f_11cbytesparse_2_c_CannotSubAddrU(addr_t __pyx_v_a, addr_t __pyx_v_b) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+0354:     return a < b
  __pyx_r = (__pyx_v_a < __pyx_v_b);
  goto __pyx_L0;
 0355: 
 0356: 
+0357: cdef vint CheckSubAddrU(addr_t a, addr_t b) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_CheckSubAddrU(addr_t __pyx_v_a, addr_t __pyx_v_b) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("CheckSubAddrU", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.CheckSubAddrU", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0358:     if CannotSubAddrU(a, b):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotSubAddrU(__pyx_v_a, __pyx_v_b) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0359:         raise OverflowError()
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_builtin_OverflowError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 359, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 359, __pyx_L1_error)
 0360: 
 0361: 
+0362: cdef addr_t SubAddrU(addr_t a, addr_t b) except? 0xDEAD:
static addr_t __pyx_f_11cbytesparse_2_c_SubAddrU(addr_t __pyx_v_a, addr_t __pyx_v_b) {
  addr_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("SubAddrU", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.SubAddrU", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0xDEAD;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0363:     CheckSubAddrU(a, b)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckSubAddrU(__pyx_v_a, __pyx_v_b); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 363, __pyx_L1_error)
+0364:     return a - b
  __pyx_r = (__pyx_v_a - __pyx_v_b);
  goto __pyx_L0;
 0365: 
 0366: 
+0367: cdef bint CannotMulAddrU(addr_t a, addr_t b) nogil:
static int __pyx_f_11cbytesparse_2_c_CannotMulAddrU(addr_t __pyx_v_a, addr_t __pyx_v_b) {
  addr_t __pyx_v_r;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0368:     cdef:
+0369:         addr_t r = a * b
  __pyx_v_r = (__pyx_v_a * __pyx_v_b);
+0370:     return a and b and (r < a or r < b)
  __pyx_t_2 = (__pyx_v_a != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_b != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_r < __pyx_v_a) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_r < __pyx_v_b) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 0371: 
 0372: 
+0373: cdef vint CheckMulAddrU(addr_t a, addr_t b) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_CheckMulAddrU(addr_t __pyx_v_a, addr_t __pyx_v_b) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("CheckMulAddrU", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.CheckMulAddrU", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0374:     if CannotMulAddrU(a, b):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotMulAddrU(__pyx_v_a, __pyx_v_b) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0375:         raise OverflowError()
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_builtin_OverflowError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 375, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 375, __pyx_L1_error)
 0376: 
 0377: 
+0378: cdef addr_t MulAddrU(addr_t a, addr_t b) except? 0xDEAD:
static addr_t __pyx_f_11cbytesparse_2_c_MulAddrU(addr_t __pyx_v_a, addr_t __pyx_v_b) {
  addr_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("MulAddrU", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.MulAddrU", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0xDEAD;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0379:     CheckMulAddrU(a, b)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckMulAddrU(__pyx_v_a, __pyx_v_b); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 379, __pyx_L1_error)
+0380:     return a * b
  __pyx_r = (__pyx_v_a * __pyx_v_b);
  goto __pyx_L0;
 0381: 
 0382: 
+0383: cdef bint CannotAddrToSizeU(addr_t a) nogil:
static int __pyx_f_11cbytesparse_2_c_CannotAddrToSizeU(addr_t __pyx_v_a) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+0384:     return a > <addr_t>SIZE_MAX
  __pyx_r = (__pyx_v_a > ((addr_t)SIZE_MAX));
  goto __pyx_L0;
 0385: 
 0386: 
+0387: cdef vint CheckAddrToSizeU(addr_t a) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_CheckAddrToSizeU(addr_t __pyx_v_a) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("CheckAddrToSizeU", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.CheckAddrToSizeU", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0388:     if CannotAddrToSizeU(a):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotAddrToSizeU(__pyx_v_a) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0389:         raise OverflowError()
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_builtin_OverflowError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 389, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 389, __pyx_L1_error)
 0390: 
 0391: 
+0392: cdef size_t AddrToSizeU(addr_t a) except? 0xDEAD:
static size_t __pyx_f_11cbytesparse_2_c_AddrToSizeU(addr_t __pyx_v_a) {
  size_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("AddrToSizeU", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.AddrToSizeU", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0xDEAD;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0393:     CheckAddrToSizeU(a)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckAddrToSizeU(__pyx_v_a); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 393, __pyx_L1_error)
+0394:     return <size_t>a
  __pyx_r = ((size_t)__pyx_v_a);
  goto __pyx_L0;
 0395: 
 0396: 
 0397: # ---------------------------------------------------------------------------------------------------------------------
 0398: 
+0399: cdef bint CannotAddAddrS(saddr_t a, saddr_t b) nogil:
static int __pyx_f_11cbytesparse_2_c_CannotAddAddrS(saddr_t __pyx_v_a, saddr_t __pyx_v_b) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+0400:     return ((b > 0 and a > SADDR_MAX - b) or
  __pyx_t_2 = ((__pyx_v_b > 0) != 0);
  if (!__pyx_t_2) {
    goto __pyx_L4_next_or;
  } else {
  }
  __pyx_t_2 = ((__pyx_v_a > (SADDR_MAX - __pyx_v_b)) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_L4_next_or:;
+0401:             (b < 0 and a < SADDR_MIN - b))
  __pyx_t_2 = ((__pyx_v_b < 0) != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_a < (SADDR_MIN - __pyx_v_b)) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 0402: 
 0403: 
+0404: cdef vint CheckAddAddrS(saddr_t a, saddr_t b) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_CheckAddAddrS(saddr_t __pyx_v_a, saddr_t __pyx_v_b) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("CheckAddAddrS", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.CheckAddAddrS", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0405:     if CannotAddAddrS(a, b):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotAddAddrS(__pyx_v_a, __pyx_v_b) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0406:         raise OverflowError()
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_builtin_OverflowError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 406, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 406, __pyx_L1_error)
 0407: 
 0408: 
+0409: cdef saddr_t AddAddrS(saddr_t a, saddr_t b) except? 0xDEAD:
static saddr_t __pyx_f_11cbytesparse_2_c_AddAddrS(saddr_t __pyx_v_a, saddr_t __pyx_v_b) {
  saddr_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("AddAddrS", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.AddAddrS", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0xDEAD;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0410:     CheckAddAddrS(a, b)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckAddAddrS(__pyx_v_a, __pyx_v_b); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 410, __pyx_L1_error)
+0411:     return a + b
  __pyx_r = (__pyx_v_a + __pyx_v_b);
  goto __pyx_L0;
 0412: 
 0413: 
+0414: cdef bint CannotSubAddrS(saddr_t a, saddr_t b) nogil:
static int __pyx_f_11cbytesparse_2_c_CannotSubAddrS(saddr_t __pyx_v_a, saddr_t __pyx_v_b) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+0415:     return ((b > 0 and a < SADDR_MIN + b) or
  __pyx_t_2 = ((__pyx_v_b > 0) != 0);
  if (!__pyx_t_2) {
    goto __pyx_L4_next_or;
  } else {
  }
  __pyx_t_2 = ((__pyx_v_a < (SADDR_MIN + __pyx_v_b)) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_L4_next_or:;
+0416:             (b < 0 and a > SADDR_MAX + b))
  __pyx_t_2 = ((__pyx_v_b < 0) != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_a > (SADDR_MAX + __pyx_v_b)) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 0417: 
 0418: 
+0419: cdef vint CheckSubAddrS(saddr_t a, saddr_t b) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_CheckSubAddrS(saddr_t __pyx_v_a, saddr_t __pyx_v_b) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("CheckSubAddrS", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.CheckSubAddrS", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0420:     if CannotSubAddrS(a, b):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotSubAddrS(__pyx_v_a, __pyx_v_b) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0421:         raise OverflowError()
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_builtin_OverflowError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 421, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 421, __pyx_L1_error)
 0422: 
 0423: 
+0424: cdef saddr_t SubAddrS(saddr_t a, saddr_t b) except? 0xDEAD:
static saddr_t __pyx_f_11cbytesparse_2_c_SubAddrS(saddr_t __pyx_v_a, saddr_t __pyx_v_b) {
  saddr_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("SubAddrS", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.SubAddrS", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0xDEAD;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0425:     CheckSubAddrS(a, b)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckSubAddrS(__pyx_v_a, __pyx_v_b); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 425, __pyx_L1_error)
+0426:     return a - b
  __pyx_r = (__pyx_v_a - __pyx_v_b);
  goto __pyx_L0;
 0427: 
 0428: 
+0429: cdef bint CannotMulAddrS(saddr_t a, saddr_t b) nogil:
static int __pyx_f_11cbytesparse_2_c_CannotMulAddrS(saddr_t __pyx_v_a, saddr_t __pyx_v_b) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0430:     with cython.cdivision(True):
+0431:         if a > 0:
  __pyx_t_1 = ((__pyx_v_a > 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0432:             if b > 0:
    __pyx_t_1 = ((__pyx_v_b > 0) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0433:                 return a > (SADDR_MAX // b)
      __pyx_r = (__pyx_v_a > (SADDR_MAX / __pyx_v_b));
      goto __pyx_L0;
 0434:             else:
+0435:                 return b < (SADDR_MIN // a)
    /*else*/ {
      __pyx_r = (__pyx_v_b < (SADDR_MIN / __pyx_v_a));
      goto __pyx_L0;
    }
 0436:         else:
+0437:             if b > 0:
  /*else*/ {
    __pyx_t_1 = ((__pyx_v_b > 0) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0438:                 return a < (SADDR_MIN // b)
      __pyx_r = (__pyx_v_a < (SADDR_MIN / __pyx_v_b));
      goto __pyx_L0;
 0439:             else:
+0440:                 return a and b < (SADDR_MAX // a)
    /*else*/ {
      __pyx_t_2 = (__pyx_v_a != 0);
      if (__pyx_t_2) {
      } else {
        __pyx_t_1 = __pyx_t_2;
        goto __pyx_L6_bool_binop_done;
      }
      __pyx_t_2 = ((__pyx_v_b < (SADDR_MAX / __pyx_v_a)) != 0);
      __pyx_t_1 = __pyx_t_2;
      __pyx_L6_bool_binop_done:;
      __pyx_r = __pyx_t_1;
      goto __pyx_L0;
    }
  }
 0441: 
 0442: 
+0443: cdef vint CheckMulAddrS(saddr_t a, saddr_t b) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_CheckMulAddrS(saddr_t __pyx_v_a, saddr_t __pyx_v_b) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("CheckMulAddrS", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.CheckMulAddrS", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0444:     if CannotMulAddrS(a, b):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotMulAddrS(__pyx_v_a, __pyx_v_b) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0445:         raise OverflowError()
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_builtin_OverflowError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 445, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 445, __pyx_L1_error)
 0446: 
 0447: 
+0448: cdef saddr_t MulAddrS(saddr_t a, saddr_t b) except? 0xDEAD:
static saddr_t __pyx_f_11cbytesparse_2_c_MulAddrS(saddr_t __pyx_v_a, saddr_t __pyx_v_b) {
  saddr_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("MulAddrS", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.MulAddrS", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0xDEAD;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0449:     CheckMulAddrS(a, b)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckMulAddrS(__pyx_v_a, __pyx_v_b); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 449, __pyx_L1_error)
+0450:     return a * b
  __pyx_r = (__pyx_v_a * __pyx_v_b);
  goto __pyx_L0;
 0451: 
 0452: 
+0453: cdef bint CannotAddrToSizeS(saddr_t a) nogil:
static int __pyx_f_11cbytesparse_2_c_CannotAddrToSizeS(saddr_t __pyx_v_a) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+0454:     return a < <saddr_t>SSIZE_MIN or a > <saddr_t>SSIZE_MAX
  __pyx_t_2 = ((__pyx_v_a < ((saddr_t)SSIZE_MIN)) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = ((__pyx_v_a > ((saddr_t)SSIZE_MAX)) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 0455: 
 0456: 
+0457: cdef vint CheckAddrToSizeS(saddr_t a) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_CheckAddrToSizeS(saddr_t __pyx_v_a) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("CheckAddrToSizeS", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.CheckAddrToSizeS", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0458:     if CannotAddrToSizeS(a):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotAddrToSizeS(__pyx_v_a) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0459:         raise OverflowError()
    __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_builtin_OverflowError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 459, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 459, __pyx_L1_error)
 0460: 
 0461: 
+0462: cdef ssize_t AddrToSizeS(saddr_t a) except? 0xDEAD:
static Py_ssize_t __pyx_f_11cbytesparse_2_c_AddrToSizeS(saddr_t __pyx_v_a) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("AddrToSizeS", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.AddrToSizeS", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0xDEAD;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0463:     CheckAddrToSizeS(a)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckAddrToSizeS(__pyx_v_a); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 463, __pyx_L1_error)
+0464:     return <ssize_t>a
  __pyx_r = ((Py_ssize_t)__pyx_v_a);
  goto __pyx_L0;
 0465: 
 0466: 
 0467: # =====================================================================================================================
 0468: 
+0469: cdef Block_* Block_Alloc(addr_t address, size_t size, bint zero) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Alloc(addr_t __pyx_v_address, size_t __pyx_v_size, int __pyx_v_zero) {
  Block_ *__pyx_v_that;
  size_t __pyx_v_allocated;
  size_t __pyx_v_actual;
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Alloc", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Block_Alloc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0470:     cdef:
+0471:         Block_* that = NULL
  __pyx_v_that = NULL;
 0472:         size_t allocated
 0473:         size_t actual
 0474: 
+0475:     if size > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_size > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0476:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 476, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 476, __pyx_L1_error)
/* … */
  __pyx_tuple__2 = PyTuple_Pack(1, __pyx_kp_u_size_overflow); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 476, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__2);
  __Pyx_GIVEREF(__pyx_tuple__2);
 0477: 
 0478:     # Allocate as per request
+0479:     allocated = Upsize(0, size)
  __pyx_v_allocated = __pyx_f_11cbytesparse_2_c_Upsize(0, __pyx_v_size);
+0480:     if allocated > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_allocated > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0481:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 481, __pyx_L1_error)
 0482: 
+0483:     actual = Block_HEADING + (allocated * sizeof(byte_t))
  __pyx_v_actual = (Block_HEADING + (__pyx_v_allocated * (sizeof(byte_t))));
+0484:     if zero:
  __pyx_t_1 = (__pyx_v_zero != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L5;
  }
+0485:         that = <Block_*>PyMem_Calloc(actual, 1)
    __pyx_v_that = ((Block_ *)__pyx_f_11cbytesparse_2_c_PyMem_Calloc(__pyx_v_actual, 1));
 0486:     else:
+0487:         that = <Block_*>PyMem_Malloc(actual)
  /*else*/ {
    __pyx_v_that = ((Block_ *)PyMem_Malloc(__pyx_v_actual));
  }
  __pyx_L5:;
+0488:     if that == NULL:
  __pyx_t_1 = ((__pyx_v_that == NULL) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0489:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 489, __pyx_L1_error)
 0490: 
+0491:     that.address = address
  __pyx_v_that->address = __pyx_v_address;
+0492:     that.references = 1  # acquired by default
  __pyx_v_that->references = 1;
+0493:     that.allocated = allocated
  __pyx_v_that->allocated = __pyx_v_allocated;
+0494:     that.start = MARGIN  # leave some initial room
  __pyx_v_that->start = MARGIN;
+0495:     that.endex = that.start + size
  __pyx_v_that->endex = (__pyx_v_that->start + __pyx_v_size);
+0496:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 0497: 
 0498: 
+0499: cdef Block_* Block_Free(Block_* that):
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Free(Block_ *__pyx_v_that) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Free", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0500:     if that:
  __pyx_t_1 = (__pyx_v_that != 0);
  if (__pyx_t_1) {
/* … */
  }
+0501:         PyMem_Free(that)
    PyMem_Free(__pyx_v_that);
+0502:     return NULL
  __pyx_r = NULL;
  goto __pyx_L0;
 0503: 
 0504: 
+0505: cdef Block_* Block_Create(addr_t address, size_t size, const byte_t* buffer) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Create(addr_t __pyx_v_address, size_t __pyx_v_size, byte_t const *__pyx_v_buffer) {
  Block_ *__pyx_v_that;
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Create", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cbytesparse._c.Block_Create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0506:     if not size or buffer:
  __pyx_t_2 = ((!(__pyx_v_size != 0)) != 0);
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_v_buffer != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (likely(__pyx_t_1)) {
/* … */
  }
+0507:         that = Block_Alloc(address, size, False)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Alloc(__pyx_v_address, __pyx_v_size, 0); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 507, __pyx_L1_error)
    __pyx_v_that = __pyx_t_3;
+0508:         memcpy(&that.data[that.start], buffer, size * sizeof(byte_t))
    (void)(memcpy((&(__pyx_v_that->data[__pyx_v_that->start])), __pyx_v_buffer, (__pyx_v_size * (sizeof(byte_t)))));
+0509:         return that
    __pyx_r = __pyx_v_that;
    goto __pyx_L0;
 0510:     else:
+0511:         raise ValueError('null pointer')
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 511, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(0, 511, __pyx_L1_error)
  }
/* … */
  __pyx_tuple__3 = PyTuple_Pack(1, __pyx_kp_u_null_pointer); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__3);
  __Pyx_GIVEREF(__pyx_tuple__3);
 0512: 
 0513: 
+0514: cdef Block_* Block_Copy(const Block_* that) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Copy(Block_ const *__pyx_v_that) {
  Block_ *__pyx_v_ptr;
  size_t __pyx_v_size;
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Copy", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Block_Copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0515:     cdef:
 0516:         Block_* ptr
 0517:         size_t size
 0518: 
+0519:     if that:
  __pyx_t_1 = (__pyx_v_that != 0);
  if (likely(__pyx_t_1)) {
/* … */
  }
+0520:         size = Block_HEADING + (that.allocated * sizeof(byte_t))
    __pyx_v_size = (Block_HEADING + (__pyx_v_that->allocated * (sizeof(byte_t))));
+0521:         ptr = <Block_*>PyMem_Malloc(size)
    __pyx_v_ptr = ((Block_ *)PyMem_Malloc(__pyx_v_size));
+0522:         if ptr == NULL:
    __pyx_t_1 = ((__pyx_v_ptr == NULL) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+0523:             raise MemoryError()
      PyErr_NoMemory(); __PYX_ERR(0, 523, __pyx_L1_error)
 0524: 
+0525:         memcpy(ptr, that, size)
    (void)(memcpy(__pyx_v_ptr, __pyx_v_that, __pyx_v_size));
+0526:         ptr.references = 1  # acquired by default
    __pyx_v_ptr->references = 1;
+0527:         return ptr
    __pyx_r = __pyx_v_ptr;
    goto __pyx_L0;
 0528:     else:
+0529:         raise ValueError('null pointer')
  /*else*/ {
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 529, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 529, __pyx_L1_error)
  }
 0530: 
 0531: 
+0532: cdef Block_* Block_FromObject(addr_t address, object obj, bint nonnull) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_FromObject(addr_t __pyx_v_address, PyObject *__pyx_v_obj, int __pyx_v_nonnull) {
  byte_t __pyx_v_value;
  __Pyx_memviewslice __pyx_v_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  size_t __pyx_v_size;
  byte_t const *__pyx_v_ptr;
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_FromObject", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("cbytesparse._c.Block_FromObject", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_view, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0533:     cdef:
 0534:         byte_t value
 0535:         const byte_t[:] view
 0536:         size_t size
 0537:         const byte_t* ptr
 0538: 
+0539:     if isinstance(obj, int):
  __pyx_t_1 = PyInt_Check(__pyx_v_obj); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
  }
+0540:         value = <byte_t>obj
    __pyx_t_3 = __Pyx_PyInt_As_byte_t(__pyx_v_obj); if (unlikely((__pyx_t_3 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 540, __pyx_L1_error)
    __pyx_v_value = ((byte_t)__pyx_t_3);
+0541:         return Block_Create(address, 1, &value)
    __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Block_Create(__pyx_v_address, 1, (&__pyx_v_value)); if (unlikely(__pyx_t_4 == ((Block_ *)NULL))) __PYX_ERR(0, 541, __pyx_L1_error)
    __pyx_r = __pyx_t_4;
    goto __pyx_L0;
 0542:     else:
+0543:         try:
  /*else*/ {
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      goto __pyx_L9_try_end;
      __pyx_L4_error:;
      __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      goto __pyx_L1_error;
      __pyx_L5_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      __pyx_L9_try_end:;
    }
+0544:             view = obj
        __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(__pyx_v_obj, 0); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 544, __pyx_L4_error)
        __pyx_v_view = __pyx_t_8;
        __pyx_t_8.memview = NULL;
        __pyx_t_8.data = NULL;
+0545:         except TypeError:
      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
      if (__pyx_t_9) {
        __Pyx_AddTraceback("cbytesparse._c.Block_FromObject", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0) __PYX_ERR(0, 545, __pyx_L6_except_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_GOTREF(__pyx_t_12);
+0546:             view = bytes(obj)
        __pyx_t_13 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_v_obj); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 546, __pyx_L6_except_error)
        __Pyx_GOTREF(__pyx_t_13);
        __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(__pyx_t_13, 0); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 546, __pyx_L6_except_error)
        __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
        __PYX_XDEC_MEMVIEW(&__pyx_v_view, 1);
        __pyx_v_view = __pyx_t_8;
        __pyx_t_8.memview = NULL;
        __pyx_t_8.data = NULL;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        goto __pyx_L5_exception_handled;
      }
      goto __pyx_L6_except_error;
      __pyx_L6_except_error:;
+0547:         size = len(view)
    __pyx_t_14 = __Pyx_MemoryView_Len(__pyx_v_view); 
    __pyx_v_size = __pyx_t_14;
+0548:         if size:
    __pyx_t_2 = (__pyx_v_size != 0);
    if (__pyx_t_2) {
/* … */
    }
 0549:             with cython.boundscheck(False):
+0550:                 ptr = &view[0]
      __pyx_t_15 = 0;
      if (__pyx_t_15 < 0) __pyx_t_15 += __pyx_v_view.shape[0];
      __pyx_v_ptr = (&(*((byte_t const  *) ( /* dim=0 */ (__pyx_v_view.data + __pyx_t_15 * __pyx_v_view.strides[0]) ))));
+0551:             return Block_Create(address, size, ptr)
      __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Block_Create(__pyx_v_address, __pyx_v_size, __pyx_v_ptr); if (unlikely(__pyx_t_4 == ((Block_ *)NULL))) __PYX_ERR(0, 551, __pyx_L1_error)
      __pyx_r = __pyx_t_4;
      goto __pyx_L0;
 0552:         else:
+0553:             if nonnull:
    /*else*/ {
      __pyx_t_2 = (__pyx_v_nonnull != 0);
      if (unlikely(__pyx_t_2)) {
/* … */
      }
+0554:                 raise ValueError('invalid block data size')
        __pyx_t_12 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 554, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_Raise(__pyx_t_12, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
        __PYX_ERR(0, 554, __pyx_L1_error)
/* … */
  __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_u_invalid_block_data_size); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 554, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__4);
  __Pyx_GIVEREF(__pyx_tuple__4);
 0555:             else:
+0556:                 return Block_Alloc(address, 0, False)
      /*else*/ {
        __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Block_Alloc(__pyx_v_address, 0, 0); if (unlikely(__pyx_t_4 == ((Block_ *)NULL))) __PYX_ERR(0, 556, __pyx_L1_error)
        __pyx_r = __pyx_t_4;
        goto __pyx_L0;
      }
    }
  }
 0557: 
 0558: 
+0559: cdef Block_* Block_Acquire(Block_* that) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Acquire(Block_ *__pyx_v_that) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Acquire", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Block_Acquire", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0560:     if that:
  __pyx_t_1 = (__pyx_v_that != 0);
  if (likely(__pyx_t_1)) {
/* … */
  }
+0561:         if that.references < SIZE_MAX:
    __pyx_t_1 = ((__pyx_v_that->references < SIZE_MAX) != 0);
    if (likely(__pyx_t_1)) {
/* … */
    }
+0562:             that.references += 1
      __pyx_v_that->references = (__pyx_v_that->references + 1);
+0563:             return that
      __pyx_r = __pyx_v_that;
      goto __pyx_L0;
 0564:         else:
+0565:             raise OverflowError()
    /*else*/ {
      __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_builtin_OverflowError); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 565, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(0, 565, __pyx_L1_error)
    }
 0566:     else:
+0567:         raise RuntimeError('null pointer')
  /*else*/ {
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 567, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 567, __pyx_L1_error)
  }
 0568: 
 0569: 
+0570: cdef Block_* Block_Release_(Block_* that):
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Release_(Block_ *__pyx_v_that) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Release_", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0571:     if that:
  __pyx_t_1 = (__pyx_v_that != 0);
  if (__pyx_t_1) {
/* … */
  }
+0572:         if that.references:
    __pyx_t_1 = (__pyx_v_that->references != 0);
    if (__pyx_t_1) {
/* … */
    }
+0573:             that.references -= 1
      __pyx_v_that->references = (__pyx_v_that->references - 1);
 0574: 
+0575:         if that.references:
    __pyx_t_1 = (__pyx_v_that->references != 0);
    if (__pyx_t_1) {
/* … */
    }
+0576:             return that
      __pyx_r = __pyx_v_that;
      goto __pyx_L0;
 0577:         else:
+0578:             PyMem_Free(that)
    /*else*/ {
      PyMem_Free(__pyx_v_that);
    }
 0579: 
+0580:     return NULL
  __pyx_r = NULL;
  goto __pyx_L0;
 0581: 
 0582: 
+0583: cdef Block_* Block_Release(Block_* that):
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Release(Block_ *__pyx_v_that) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Release", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0584:     if that:
  __pyx_t_1 = (__pyx_v_that != 0);
  if (__pyx_t_1) {
/* … */
  }
+0585:         if that.references:
    __pyx_t_1 = (__pyx_v_that->references != 0);
    if (__pyx_t_1) {
/* … */
    }
+0586:             that.references -= 1
      __pyx_v_that->references = (__pyx_v_that->references - 1);
 0587: 
+0588:         if not that.references:
    __pyx_t_1 = ((!(__pyx_v_that->references != 0)) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0589:             PyMem_Free(that)
      PyMem_Free(__pyx_v_that);
 0590: 
+0591:     return NULL
  __pyx_r = NULL;
  goto __pyx_L0;
 0592: 
 0593: 
+0594: cdef size_t Block_Length(const Block_* that) nogil:
static size_t __pyx_f_11cbytesparse_2_c_Block_Length(Block_ const *__pyx_v_that) {
  size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+0595:     return that.endex - that.start
  __pyx_r = (__pyx_v_that->endex - __pyx_v_that->start);
  goto __pyx_L0;
 0596: 
 0597: 
+0598: cdef addr_t Block_Start(const Block_* that) nogil:
static addr_t __pyx_f_11cbytesparse_2_c_Block_Start(Block_ const *__pyx_v_that) {
  addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+0599:     return that.address
  __pyx_r = __pyx_v_that->address;
  goto __pyx_L0;
 0600: 
 0601: 
+0602: cdef addr_t Block_Endex(const Block_* that) nogil:
static addr_t __pyx_f_11cbytesparse_2_c_Block_Endex(Block_ const *__pyx_v_that) {
  addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+0603:     return that.address + (that.endex - that.start)
  __pyx_r = (__pyx_v_that->address + (__pyx_v_that->endex - __pyx_v_that->start));
  goto __pyx_L0;
 0604: 
 0605: 
+0606: cdef addr_t Block_Endin(const Block_* that) nogil:
static addr_t __pyx_f_11cbytesparse_2_c_Block_Endin(Block_ const *__pyx_v_that) {
  addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+0607:     return that.address + (that.endex - that.start) - 1
  __pyx_r = ((__pyx_v_that->address + (__pyx_v_that->endex - __pyx_v_that->start)) - 1);
  goto __pyx_L0;
 0608: 
 0609: 
+0610: cdef addr_t Block_BoundAddress(const Block_* that, addr_t address) nogil:
static addr_t __pyx_f_11cbytesparse_2_c_Block_BoundAddress(Block_ const *__pyx_v_that, addr_t __pyx_v_address) {
  addr_t __pyx_v_block_start;
  addr_t __pyx_v_block_endex;
  addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0611:     cdef:
+0612:         addr_t block_start = that.address
  __pyx_t_1 = __pyx_v_that->address;
  __pyx_v_block_start = __pyx_t_1;
+0613:         addr_t block_endex = block_start + that.endex - that.start
  __pyx_v_block_endex = ((__pyx_v_block_start + __pyx_v_that->endex) - __pyx_v_that->start);
 0614: 
+0615:     if address < block_start:
  __pyx_t_2 = ((__pyx_v_address < __pyx_v_block_start) != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0616:         address = block_start  # trim to start
    __pyx_v_address = __pyx_v_block_start;
+0617:     elif address > block_endex:
  __pyx_t_2 = ((__pyx_v_address > __pyx_v_block_endex) != 0);
  if (__pyx_t_2) {
/* … */
  }
  __pyx_L3:;
+0618:         address = block_endex  # trim to end
    __pyx_v_address = __pyx_v_block_endex;
+0619:     return address
  __pyx_r = __pyx_v_address;
  goto __pyx_L0;
 0620: 
 0621: 
+0622: cdef size_t Block_BoundAddressToOffset(const Block_* that, addr_t address) nogil:
static size_t __pyx_f_11cbytesparse_2_c_Block_BoundAddressToOffset(Block_ const *__pyx_v_that, addr_t __pyx_v_address) {
  addr_t __pyx_v_block_start;
  addr_t __pyx_v_block_endex;
  size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0623:     cdef:
+0624:         addr_t block_start = that.address
  __pyx_t_1 = __pyx_v_that->address;
  __pyx_v_block_start = __pyx_t_1;
+0625:         addr_t block_endex = block_start + that.endex - that.start
  __pyx_v_block_endex = ((__pyx_v_block_start + __pyx_v_that->endex) - __pyx_v_that->start);
 0626: 
+0627:     if address < block_start:
  __pyx_t_2 = ((__pyx_v_address < __pyx_v_block_start) != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0628:         address = block_start  # trim to start
    __pyx_v_address = __pyx_v_block_start;
+0629:     elif address > block_endex:
  __pyx_t_2 = ((__pyx_v_address > __pyx_v_block_endex) != 0);
  if (__pyx_t_2) {
/* … */
  }
  __pyx_L3:;
+0630:         address = block_endex  # trim to end
    __pyx_v_address = __pyx_v_block_endex;
+0631:     return <size_t>(address - block_start)
  __pyx_r = ((size_t)(__pyx_v_address - __pyx_v_block_start));
  goto __pyx_L0;
 0632: 
 0633: 
+0634: cdef size_t Block_BoundOffset(const Block_* that, size_t offset) nogil:
static size_t __pyx_f_11cbytesparse_2_c_Block_BoundOffset(Block_ const *__pyx_v_that, size_t __pyx_v_offset) {
  size_t __pyx_v_size;
  size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0635:     cdef:
+0636:         size_t size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 0637: 
+0638:     if offset > size:
  __pyx_t_1 = ((__pyx_v_offset > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0639:         offset = size  # trim to end
    __pyx_v_offset = __pyx_v_size;
+0640:     return offset
  __pyx_r = __pyx_v_offset;
  goto __pyx_L0;
 0641: 
 0642: 
+0643: cdef (addr_t, addr_t) Block_BoundAddressSlice(const Block_* that, addr_t start, addr_t endex) nogil:
static __pyx_ctuple_addr_t__and_addr_t __pyx_f_11cbytesparse_2_c_Block_BoundAddressSlice(Block_ const *__pyx_v_that, addr_t __pyx_v_start, addr_t __pyx_v_endex) {
  addr_t __pyx_v_block_start;
  addr_t __pyx_v_block_endex;
  __pyx_ctuple_addr_t__and_addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0644:     cdef:
+0645:         addr_t block_start = that.address
  __pyx_t_1 = __pyx_v_that->address;
  __pyx_v_block_start = __pyx_t_1;
+0646:         addr_t block_endex = block_start + (that.endex - that.start)
  __pyx_v_block_endex = (__pyx_v_block_start + (__pyx_v_that->endex - __pyx_v_that->start));
 0647: 
+0648:     if start < block_start:
  __pyx_t_2 = ((__pyx_v_start < __pyx_v_block_start) != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0649:         start = block_start  # trim to start
    __pyx_v_start = __pyx_v_block_start;
+0650:     elif start > block_endex:
  __pyx_t_2 = ((__pyx_v_start > __pyx_v_block_endex) != 0);
  if (__pyx_t_2) {
/* … */
  }
  __pyx_L3:;
+0651:         start = block_endex  # trim to end
    __pyx_v_start = __pyx_v_block_endex;
 0652: 
+0653:     if endex < block_start:
  __pyx_t_2 = ((__pyx_v_endex < __pyx_v_block_start) != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L4;
  }
+0654:         endex = block_start  # trim to start
    __pyx_v_endex = __pyx_v_block_start;
+0655:     elif endex > block_endex:
  __pyx_t_2 = ((__pyx_v_endex > __pyx_v_block_endex) != 0);
  if (__pyx_t_2) {
/* … */
  }
  __pyx_L4:;
+0656:         endex = block_endex  # trim to end
    __pyx_v_endex = __pyx_v_block_endex;
 0657: 
+0658:     if endex < start:
  __pyx_t_2 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_2) {
/* … */
  }
+0659:         endex = start  # clamp negative length
    __pyx_v_endex = __pyx_v_start;
 0660: 
+0661:     return start, endex
  __pyx_t_3.f0 = __pyx_v_start;
  __pyx_t_3.f1 = __pyx_v_endex;
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;
 0662: 
 0663: 
+0664: cdef (size_t, size_t) Block_BoundAddressSliceToOffset(const Block_* that, addr_t start, addr_t endex) nogil:
static __pyx_ctuple_size_t__and_size_t __pyx_f_11cbytesparse_2_c_Block_BoundAddressSliceToOffset(Block_ const *__pyx_v_that, addr_t __pyx_v_start, addr_t __pyx_v_endex) {
  addr_t __pyx_v_block_start;
  addr_t __pyx_v_block_endex;
  __pyx_ctuple_size_t__and_size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0665:     cdef:
+0666:         addr_t block_start = that.address
  __pyx_t_1 = __pyx_v_that->address;
  __pyx_v_block_start = __pyx_t_1;
+0667:         addr_t block_endex = block_start + (that.endex - that.start)
  __pyx_v_block_endex = (__pyx_v_block_start + (__pyx_v_that->endex - __pyx_v_that->start));
 0668: 
+0669:     if start < block_start:
  __pyx_t_2 = ((__pyx_v_start < __pyx_v_block_start) != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+0670:         start = block_start  # trim to start
    __pyx_v_start = __pyx_v_block_start;
+0671:     elif start > block_endex:
  __pyx_t_2 = ((__pyx_v_start > __pyx_v_block_endex) != 0);
  if (__pyx_t_2) {
/* … */
  }
  __pyx_L3:;
+0672:         start = block_endex  # trim to end
    __pyx_v_start = __pyx_v_block_endex;
 0673: 
+0674:     if endex < block_start:
  __pyx_t_2 = ((__pyx_v_endex < __pyx_v_block_start) != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L4;
  }
+0675:         endex = block_start  # trim to start
    __pyx_v_endex = __pyx_v_block_start;
+0676:     elif endex > block_endex:
  __pyx_t_2 = ((__pyx_v_endex > __pyx_v_block_endex) != 0);
  if (__pyx_t_2) {
/* … */
  }
  __pyx_L4:;
+0677:         endex = block_endex  # trim to end
    __pyx_v_endex = __pyx_v_block_endex;
 0678: 
+0679:     if endex < start:
  __pyx_t_2 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_2) {
/* … */
  }
+0680:         endex = start  # clamp negative length
    __pyx_v_endex = __pyx_v_start;
 0681: 
+0682:     return <size_t>(start - block_start), <size_t>(endex - block_start)
  __pyx_t_3.f0 = ((size_t)(__pyx_v_start - __pyx_v_block_start));
  __pyx_t_3.f1 = ((size_t)(__pyx_v_endex - __pyx_v_block_start));
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;
 0683: 
 0684: 
+0685: cdef (size_t, size_t) Block_BoundOffsetSlice(const Block_* that, size_t start, size_t endex) nogil:
static __pyx_ctuple_size_t__and_size_t __pyx_f_11cbytesparse_2_c_Block_BoundOffsetSlice(Block_ const *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex) {
  size_t __pyx_v_size;
  __pyx_ctuple_size_t__and_size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0686:     cdef:
+0687:         size_t size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 0688: 
+0689:     if start > size:
  __pyx_t_1 = ((__pyx_v_start > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0690:         start = size  # trim to end
    __pyx_v_start = __pyx_v_size;
 0691: 
+0692:     if endex > size:
  __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0693:         endex = size  # trim to end
    __pyx_v_endex = __pyx_v_size;
 0694: 
+0695:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0696:         endex = start  # clamp negative length
    __pyx_v_endex = __pyx_v_start;
 0697: 
+0698:     return start, endex
  __pyx_t_2.f0 = __pyx_v_start;
  __pyx_t_2.f1 = __pyx_v_endex;
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;
 0699: 
 0700: 
+0701: cdef vint Block_CheckMutable(const Block_* that) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Block_CheckMutable(Block_ const *__pyx_v_that) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_CheckMutable", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Block_CheckMutable", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+0702:     if that.references > 1:
  __pyx_t_1 = ((__pyx_v_that->references > 1) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+0703:         raise RuntimeError('Existing exports of data: object cannot be re-sized')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 703, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 703, __pyx_L1_error)
/* … */
  __pyx_tuple__5 = PyTuple_Pack(1, __pyx_kp_u_Existing_exports_of_data_object); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 703, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__5);
  __Pyx_GIVEREF(__pyx_tuple__5);
 0704: 
 0705: 
+0706: cdef bint Block_Eq_(const Block_* that, size_t size, const byte_t* buffer) nogil:
static int __pyx_f_11cbytesparse_2_c_Block_Eq_(Block_ const *__pyx_v_that, size_t __pyx_v_size, byte_t const *__pyx_v_buffer) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+0707:     if size != that.endex - that.start:
  __pyx_t_1 = ((__pyx_v_size != (__pyx_v_that->endex - __pyx_v_that->start)) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0708:         return False
    __pyx_r = 0;
    goto __pyx_L0;
 0709: 
+0710:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+0711:         if memcmp(&that.data[that.start], buffer, size):
    __pyx_t_1 = (memcmp((&(__pyx_v_that->data[__pyx_v_that->start])), __pyx_v_buffer, __pyx_v_size) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0712:             return False
      __pyx_r = 0;
      goto __pyx_L0;
 0713: 
+0714:     return True
  __pyx_r = 1;
  goto __pyx_L0;
 0715: 
 0716: 
+0717: cdef bint Block_Eq(const Block_* that, const Block_* other) nogil:
static int __pyx_f_11cbytesparse_2_c_Block_Eq(Block_ const *__pyx_v_that, Block_ const *__pyx_v_other) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0718:     # if that.address != other.address:
 0719:     #     return False
 0720: 
+0721:     return Block_Eq_(that, other.endex - other.start, &other.data[other.start])
  __pyx_r = __pyx_f_11cbytesparse_2_c_Block_Eq_(__pyx_v_that, (__pyx_v_other->endex - __pyx_v_other->start), (&(__pyx_v_other->data[__pyx_v_other->start])));
  goto __pyx_L0;
 0722: 
 0723: 
+0724: cdef int Block_Cmp_(const Block_* that, size_t size, const byte_t* buffer) nogil:
static int __pyx_f_11cbytesparse_2_c_Block_Cmp_(Block_ const *__pyx_v_that, size_t __pyx_v_size, byte_t const *__pyx_v_buffer) {
  size_t __pyx_v_size2;
  size_t __pyx_v_minsize;
  byte_t const *__pyx_v_buffer2;
  int __pyx_v_sign;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0725:     cdef:
+0726:         size_t size2 = that.endex - that.start
  __pyx_v_size2 = (__pyx_v_that->endex - __pyx_v_that->start);
+0727:         size_t minsize = size2 if size2 < size else size
  if (((__pyx_v_size2 < __pyx_v_size) != 0)) {
    __pyx_t_1 = __pyx_v_size2;
  } else {
    __pyx_t_1 = __pyx_v_size;
  }
  __pyx_v_minsize = __pyx_t_1;
+0728:         const byte_t* buffer2 = &that.data[that.start]
  __pyx_v_buffer2 = (&(__pyx_v_that->data[__pyx_v_that->start]));
+0729:         int sign = memcmp(buffer2, buffer, minsize)
  __pyx_v_sign = memcmp(__pyx_v_buffer2, __pyx_v_buffer, __pyx_v_minsize);
 0730: 
+0731:     if size2 == size:
  __pyx_t_2 = ((__pyx_v_size2 == __pyx_v_size) != 0);
  if (__pyx_t_2) {
/* … */
  }
+0732:         return sign
    __pyx_r = __pyx_v_sign;
    goto __pyx_L0;
+0733:     elif sign:
  __pyx_t_2 = (__pyx_v_sign != 0);
  if (__pyx_t_2) {
/* … */
  }
+0734:         return sign
    __pyx_r = __pyx_v_sign;
    goto __pyx_L0;
 0735:     else:
+0736:         return -1 if size2 < size else +1
  /*else*/ {
    if (((__pyx_v_size2 < __pyx_v_size) != 0)) {
      __pyx_t_3 = -1;
    } else {
      __pyx_t_3 = 1;
    }
    __pyx_r = __pyx_t_3;
    goto __pyx_L0;
  }
 0737: 
 0738: 
+0739: cdef int Block_Cmp(const Block_* that, const Block_* other) nogil:
static int __pyx_f_11cbytesparse_2_c_Block_Cmp(Block_ const *__pyx_v_that, Block_ const *__pyx_v_other) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0740:     # if that.address != other.address:
 0741:     #     return -1 if that.address < other.address else +1
 0742: 
+0743:     return Block_Cmp_(that, other.endex - other.start, &other.data[other.start])
  __pyx_r = __pyx_f_11cbytesparse_2_c_Block_Cmp_(__pyx_v_that, (__pyx_v_other->endex - __pyx_v_other->start), (&(__pyx_v_other->data[__pyx_v_other->start])));
  goto __pyx_L0;
 0744: 
 0745: 
+0746: cdef ssize_t Block_Find__(const Block_* that, size_t start, size_t endex, byte_t value) nogil:
static Py_ssize_t __pyx_f_11cbytesparse_2_c_Block_Find__(Block_ const *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex, byte_t __pyx_v_value) {
  size_t __pyx_v_size;
  byte_t const *__pyx_v_ptr;
  byte_t const *__pyx_v_end;
  Py_ssize_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0747:     cdef:
+0748:         size_t size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 0749:         const byte_t* ptr
 0750:         const byte_t* end
 0751: 
+0752:     if start > size:
  __pyx_t_1 = ((__pyx_v_start > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0753:         start = size  # trim to end
    __pyx_v_start = __pyx_v_size;
+0754:     if endex > size:
  __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0755:         endex = size  # trim to end
    __pyx_v_endex = __pyx_v_size;
+0756:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0757:         endex = start  # clamp negative length
    __pyx_v_endex = __pyx_v_start;
 0758: 
+0759:     ptr = &that.data[that.start + start]
  __pyx_v_ptr = (&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_start)]));
+0760:     end = &that.data[that.start + endex]
  __pyx_v_end = (&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_endex)]));
 0761: 
+0762:     while ptr != end:
  while (1) {
    __pyx_t_1 = ((__pyx_v_ptr != __pyx_v_end) != 0);
    if (!__pyx_t_1) break;
+0763:         if ptr[0] == value:
    __pyx_t_1 = (((__pyx_v_ptr[0]) == __pyx_v_value) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0764:             return <ssize_t>(<ptrdiff_t>ptr - <ptrdiff_t>&that.data[that.start])
      __pyx_r = ((Py_ssize_t)(((ptrdiff_t)__pyx_v_ptr) - ((ptrdiff_t)(&(__pyx_v_that->data[__pyx_v_that->start])))));
      goto __pyx_L0;
+0765:         ptr += 1
    __pyx_v_ptr = (__pyx_v_ptr + 1);
  }
+0766:     return -1
  __pyx_r = -1L;
  goto __pyx_L0;
 0767: 
 0768: 
+0769: cdef ssize_t Block_Find_(const Block_* that, size_t start, size_t endex,
static Py_ssize_t __pyx_f_11cbytesparse_2_c_Block_Find_(Block_ const *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex, size_t __pyx_v_size, byte_t const *__pyx_v_buffer) {
  size_t __pyx_v_size2;
  byte_t const *__pyx_v_ptr;
  byte_t const *__pyx_v_end;
  Py_ssize_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0770:                          size_t size, const byte_t* buffer) nogil:
 0771:     cdef:
 0772:         size_t size2
 0773:         const byte_t* ptr
 0774:         const byte_t* end
 0775: 
+0776:     if size == 1:  # faster code for single byte
  __pyx_t_1 = ((__pyx_v_size == 1) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0777:         return Block_Find__(that, start, endex, buffer[0])
    __pyx_r = __pyx_f_11cbytesparse_2_c_Block_Find__(__pyx_v_that, __pyx_v_start, __pyx_v_endex, (__pyx_v_buffer[0]));
    goto __pyx_L0;
 0778: 
+0779:     elif size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+0780:         size2 = that.endex - that.start
    __pyx_v_size2 = (__pyx_v_that->endex - __pyx_v_that->start);
 0781: 
+0782:         if start > size2:
    __pyx_t_1 = ((__pyx_v_start > __pyx_v_size2) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0783:             start = size2  # trim to end
      __pyx_v_start = __pyx_v_size2;
+0784:         if endex > size2:
    __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size2) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0785:             endex = size2  # trim to end
      __pyx_v_endex = __pyx_v_size2;
+0786:         if endex < start:
    __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0787:             endex = start  # clamp negative length
      __pyx_v_endex = __pyx_v_start;
 0788: 
+0789:         if size <= size2 and size <= endex - start:
    __pyx_t_2 = ((__pyx_v_size <= __pyx_v_size2) != 0);
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L8_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_size <= (__pyx_v_endex - __pyx_v_start)) != 0);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L8_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
    }
+0790:             size2 = endex - size + 1
      __pyx_v_size2 = ((__pyx_v_endex - __pyx_v_size) + 1);
 0791: 
+0792:             if start > size2:
      __pyx_t_1 = ((__pyx_v_start > __pyx_v_size2) != 0);
      if (__pyx_t_1) {
/* … */
      }
+0793:                 start = size2  # trim to end
        __pyx_v_start = __pyx_v_size2;
+0794:             if endex > size2:
      __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size2) != 0);
      if (__pyx_t_1) {
/* … */
      }
+0795:                 endex = size2  # trim to end
        __pyx_v_endex = __pyx_v_size2;
 0796: 
+0797:             ptr = &that.data[that.start + start]
      __pyx_v_ptr = (&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_start)]));
+0798:             end = &that.data[that.start + endex]
      __pyx_v_end = (&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_endex)]));
 0799: 
+0800:             while ptr != end:
      while (1) {
        __pyx_t_1 = ((__pyx_v_ptr != __pyx_v_end) != 0);
        if (!__pyx_t_1) break;
+0801:                 if ptr[0] == buffer[0]:  # faster pruning
        __pyx_t_1 = (((__pyx_v_ptr[0]) == (__pyx_v_buffer[0])) != 0);
        if (__pyx_t_1) {
/* … */
        }
+0802:                     if not memcmp(ptr, buffer, size):
          __pyx_t_1 = ((!(memcmp(__pyx_v_ptr, __pyx_v_buffer, __pyx_v_size) != 0)) != 0);
          if (__pyx_t_1) {
/* … */
          }
+0803:                         return <ssize_t>(<ptrdiff_t>ptr - <ptrdiff_t>&that.data[that.start])
            __pyx_r = ((Py_ssize_t)(((ptrdiff_t)__pyx_v_ptr) - ((ptrdiff_t)(&(__pyx_v_that->data[__pyx_v_that->start])))));
            goto __pyx_L0;
+0804:                 ptr += 1
        __pyx_v_ptr = (__pyx_v_ptr + 1);
      }
+0805:     return -1
  __pyx_r = -1L;
  goto __pyx_L0;
 0806: 
 0807: 
+0808: cdef ssize_t Block_Find(const Block_* that, ssize_t start, ssize_t endex,
static Py_ssize_t __pyx_f_11cbytesparse_2_c_Block_Find(Block_ const *__pyx_v_that, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_endex, size_t __pyx_v_size, byte_t const *__pyx_v_buffer) {
  Py_ssize_t __pyx_v_ssize;
  Py_ssize_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0809:                         size_t size, const byte_t* buffer) nogil:
 0810:     cdef:
+0811:         ssize_t ssize = <ssize_t>(that.endex - that.start)
  __pyx_v_ssize = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 0812: 
+0813:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0814:         start += ssize  # anchor to end
    __pyx_v_start = (__pyx_v_start + __pyx_v_ssize);
+0815:         if start < 0:
    __pyx_t_1 = ((__pyx_v_start < 0) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0816:             start = 0  # trim to start
      __pyx_v_start = 0;
 0817: 
+0818:     if endex < 0:
  __pyx_t_1 = ((__pyx_v_endex < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0819:         endex += ssize  # anchor to end
    __pyx_v_endex = (__pyx_v_endex + __pyx_v_ssize);
+0820:         if endex < 0:
    __pyx_t_1 = ((__pyx_v_endex < 0) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0821:             endex = 0  # trim to start
      __pyx_v_endex = 0;
 0822: 
+0823:     return Block_Find_(that, <size_t>start, <size_t>endex, size, buffer)
  __pyx_r = __pyx_f_11cbytesparse_2_c_Block_Find_(__pyx_v_that, ((size_t)__pyx_v_start), ((size_t)__pyx_v_endex), __pyx_v_size, __pyx_v_buffer);
  goto __pyx_L0;
 0824: 
 0825: 
+0826: cdef ssize_t Block_ReverseFind__(const Block_* that, size_t start, size_t endex, byte_t value) nogil:
static Py_ssize_t __pyx_f_11cbytesparse_2_c_Block_ReverseFind__(Block_ const *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex, byte_t __pyx_v_value) {
  size_t __pyx_v_size;
  byte_t const *__pyx_v_ptr;
  byte_t const *__pyx_v_end;
  Py_ssize_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0827:     cdef:
+0828:         size_t size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 0829:         const byte_t* ptr
 0830:         const byte_t* end
 0831: 
+0832:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+0833:         if start > size:
    __pyx_t_1 = ((__pyx_v_start > __pyx_v_size) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0834:             start = size  # trim to end
      __pyx_v_start = __pyx_v_size;
+0835:         if endex > size:
    __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0836:             endex = size  # trim to end
      __pyx_v_endex = __pyx_v_size;
+0837:         if endex < start:
    __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0838:             endex = start  # clamp negative length
      __pyx_v_endex = __pyx_v_start;
 0839: 
+0840:         end = &that.data[that.start + start]
    __pyx_v_end = (&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_start)]));
+0841:         ptr = &that.data[that.start + endex]
    __pyx_v_ptr = (&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_endex)]));
 0842: 
+0843:         while ptr != end:
    while (1) {
      __pyx_t_1 = ((__pyx_v_ptr != __pyx_v_end) != 0);
      if (!__pyx_t_1) break;
+0844:             ptr -= 1
      __pyx_v_ptr = (__pyx_v_ptr - 1);
+0845:             if ptr[0] == value:
      __pyx_t_1 = (((__pyx_v_ptr[0]) == __pyx_v_value) != 0);
      if (__pyx_t_1) {
/* … */
      }
    }
+0846:                 return <ssize_t>(<ptrdiff_t>ptr - <ptrdiff_t>&that.data[that.start])
        __pyx_r = ((Py_ssize_t)(((ptrdiff_t)__pyx_v_ptr) - ((ptrdiff_t)(&(__pyx_v_that->data[__pyx_v_that->start])))));
        goto __pyx_L0;
+0847:     return -1
  __pyx_r = -1L;
  goto __pyx_L0;
 0848: 
 0849: 
+0850: cdef ssize_t Block_ReverseFind_(const Block_* that, size_t start, size_t endex,
static Py_ssize_t __pyx_f_11cbytesparse_2_c_Block_ReverseFind_(Block_ const *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex, size_t __pyx_v_size, byte_t const *__pyx_v_buffer) {
  size_t __pyx_v_size2;
  byte_t const *__pyx_v_ptr;
  byte_t const *__pyx_v_end;
  Py_ssize_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0851:                                 size_t size, const byte_t* buffer) nogil:
 0852:     cdef:
 0853:         size_t size2
 0854:         const byte_t* ptr
 0855:         const byte_t* end
 0856: 
+0857:     if size == 1:  # faster code for single byte
  __pyx_t_1 = ((__pyx_v_size == 1) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0858:         return Block_ReverseFind__(that, start, endex, buffer[0])
    __pyx_r = __pyx_f_11cbytesparse_2_c_Block_ReverseFind__(__pyx_v_that, __pyx_v_start, __pyx_v_endex, (__pyx_v_buffer[0]));
    goto __pyx_L0;
 0859: 
+0860:     elif size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+0861:         size2 = that.endex - that.start
    __pyx_v_size2 = (__pyx_v_that->endex - __pyx_v_that->start);
 0862: 
+0863:         if start > size2:
    __pyx_t_1 = ((__pyx_v_start > __pyx_v_size2) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0864:             start = size2  # trim to end
      __pyx_v_start = __pyx_v_size2;
+0865:         if endex > size2:
    __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size2) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0866:             endex = size2  # trim to end
      __pyx_v_endex = __pyx_v_size2;
+0867:         if endex < start:
    __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0868:             endex = start  # clamp negative length
      __pyx_v_endex = __pyx_v_start;
 0869: 
+0870:         if size <= size2 and size <= endex - start:
    __pyx_t_2 = ((__pyx_v_size <= __pyx_v_size2) != 0);
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L8_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_size <= (__pyx_v_endex - __pyx_v_start)) != 0);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L8_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
    }
+0871:             size2 = endex - size + 1
      __pyx_v_size2 = ((__pyx_v_endex - __pyx_v_size) + 1);
 0872: 
+0873:             if start > size2:
      __pyx_t_1 = ((__pyx_v_start > __pyx_v_size2) != 0);
      if (__pyx_t_1) {
/* … */
      }
+0874:                 start = size2  # trim to end
        __pyx_v_start = __pyx_v_size2;
+0875:             if endex > size2:
      __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size2) != 0);
      if (__pyx_t_1) {
/* … */
      }
+0876:                 endex = size2  # trim to end
        __pyx_v_endex = __pyx_v_size2;
 0877: 
+0878:             end = &that.data[that.start + start]
      __pyx_v_end = (&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_start)]));
+0879:             ptr = &that.data[that.start + endex]
      __pyx_v_ptr = (&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_endex)]));
 0880: 
+0881:             while ptr != end:
      while (1) {
        __pyx_t_1 = ((__pyx_v_ptr != __pyx_v_end) != 0);
        if (!__pyx_t_1) break;
+0882:                 ptr -= 1
        __pyx_v_ptr = (__pyx_v_ptr - 1);
+0883:                 if ptr[0] == buffer[0]:  # faster pruning
        __pyx_t_1 = (((__pyx_v_ptr[0]) == (__pyx_v_buffer[0])) != 0);
        if (__pyx_t_1) {
/* … */
        }
      }
+0884:                     if not memcmp(ptr, buffer, size):
          __pyx_t_1 = ((!(memcmp(__pyx_v_ptr, __pyx_v_buffer, __pyx_v_size) != 0)) != 0);
          if (__pyx_t_1) {
/* … */
          }
+0885:                         return <ssize_t>(<ptrdiff_t>ptr - <ptrdiff_t>&that.data[that.start])
            __pyx_r = ((Py_ssize_t)(((ptrdiff_t)__pyx_v_ptr) - ((ptrdiff_t)(&(__pyx_v_that->data[__pyx_v_that->start])))));
            goto __pyx_L0;
+0886:     return -1
  __pyx_r = -1L;
  goto __pyx_L0;
 0887: 
 0888: 
+0889: cdef ssize_t Block_ReverseFind(const Block_* that, ssize_t start, ssize_t endex,
static Py_ssize_t __pyx_f_11cbytesparse_2_c_Block_ReverseFind(Block_ const *__pyx_v_that, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_endex, size_t __pyx_v_size, byte_t const *__pyx_v_buffer) {
  Py_ssize_t __pyx_v_ssize;
  Py_ssize_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0890:                                size_t size, const byte_t* buffer) nogil:
 0891:     cdef:
+0892:         ssize_t ssize = <ssize_t>(that.endex - that.start)
  __pyx_v_ssize = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 0893: 
+0894:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0895:         start += ssize  # anchor to end
    __pyx_v_start = (__pyx_v_start + __pyx_v_ssize);
+0896:         if start < 0:
    __pyx_t_1 = ((__pyx_v_start < 0) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0897:             start = 0  # trim to start
      __pyx_v_start = 0;
 0898: 
+0899:     if endex < 0:
  __pyx_t_1 = ((__pyx_v_endex < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0900:         endex += ssize  # anchor to end
    __pyx_v_endex = (__pyx_v_endex + __pyx_v_ssize);
+0901:         if endex < 0:
    __pyx_t_1 = ((__pyx_v_endex < 0) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0902:             endex = 0  # trim to start
      __pyx_v_endex = 0;
 0903: 
+0904:     return Block_ReverseFind_(that, <size_t>start, <size_t>endex, size, buffer)
  __pyx_r = __pyx_f_11cbytesparse_2_c_Block_ReverseFind_(__pyx_v_that, ((size_t)__pyx_v_start), ((size_t)__pyx_v_endex), __pyx_v_size, __pyx_v_buffer);
  goto __pyx_L0;
 0905: 
 0906: 
+0907: cdef size_t Block_Count__(const Block_* that, size_t start, size_t endex, byte_t value) nogil:
static size_t __pyx_f_11cbytesparse_2_c_Block_Count__(Block_ const *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex, byte_t __pyx_v_value) {
  size_t __pyx_v_count;
  size_t __pyx_v_size;
  byte_t const *__pyx_v_ptr;
  byte_t const *__pyx_v_end;
  size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0908:     cdef:
+0909:         size_t count = 0
  __pyx_v_count = 0;
+0910:         size_t size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 0911:         const byte_t* ptr
 0912:         const byte_t* end
 0913: 
+0914:     if start > size:
  __pyx_t_1 = ((__pyx_v_start > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0915:         start = size  # trim to end
    __pyx_v_start = __pyx_v_size;
+0916:     if endex > size:
  __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0917:         endex = size  # trim to end
    __pyx_v_endex = __pyx_v_size;
+0918:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0919:         endex = start  # clamp negative length
    __pyx_v_endex = __pyx_v_start;
 0920: 
+0921:     ptr = &that.data[that.start + start]
  __pyx_v_ptr = (&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_start)]));
+0922:     end = &that.data[that.start + endex]
  __pyx_v_end = (&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_endex)]));
 0923: 
+0924:     while ptr != end:
  while (1) {
    __pyx_t_1 = ((__pyx_v_ptr != __pyx_v_end) != 0);
    if (!__pyx_t_1) break;
+0925:         if ptr[0] == value:
    __pyx_t_1 = (((__pyx_v_ptr[0]) == __pyx_v_value) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0926:             count += 1
      __pyx_v_count = (__pyx_v_count + 1);
+0927:         ptr += 1
    __pyx_v_ptr = (__pyx_v_ptr + 1);
  }
+0928:     return count
  __pyx_r = __pyx_v_count;
  goto __pyx_L0;
 0929: 
 0930: 
+0931: cdef size_t Block_Count_(const Block_* that, size_t start, size_t endex,
static size_t __pyx_f_11cbytesparse_2_c_Block_Count_(Block_ const *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex, size_t __pyx_v_size, byte_t const *__pyx_v_buffer) {
  size_t __pyx_v_count;
  size_t __pyx_v_size2;
  byte_t const *__pyx_v_ptr;
  byte_t const *__pyx_v_end;
  size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0932:                          size_t size, const byte_t* buffer) nogil:
 0933:     cdef:
+0934:         size_t count = 0
  __pyx_v_count = 0;
 0935:         size_t size2
 0936:         const byte_t* ptr
 0937:         const byte_t* end
 0938: 
+0939:     if size == 1:  # faster code for single byte
  __pyx_t_1 = ((__pyx_v_size == 1) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0940:         return Block_Count__(that, start, endex, buffer[0])
    __pyx_r = __pyx_f_11cbytesparse_2_c_Block_Count__(__pyx_v_that, __pyx_v_start, __pyx_v_endex, (__pyx_v_buffer[0]));
    goto __pyx_L0;
 0941: 
+0942:     elif size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+0943:         size2 = that.endex - that.start
    __pyx_v_size2 = (__pyx_v_that->endex - __pyx_v_that->start);
 0944: 
+0945:         if start > size2:
    __pyx_t_1 = ((__pyx_v_start > __pyx_v_size2) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0946:             start = size2  # trim to end
      __pyx_v_start = __pyx_v_size2;
+0947:         if endex > size2:
    __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size2) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0948:             endex = size2  # trim to end
      __pyx_v_endex = __pyx_v_size2;
+0949:         if endex < start:
    __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0950:             endex = start  # clamp negative length
      __pyx_v_endex = __pyx_v_start;
 0951: 
+0952:         if size <= size2 and size <= endex - start:
    __pyx_t_2 = ((__pyx_v_size <= __pyx_v_size2) != 0);
    if (__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L8_bool_binop_done;
    }
    __pyx_t_2 = ((__pyx_v_size <= (__pyx_v_endex - __pyx_v_start)) != 0);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L8_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
    }
+0953:             size2 = endex - size + 1
      __pyx_v_size2 = ((__pyx_v_endex - __pyx_v_size) + 1);
 0954: 
+0955:             if start > size2:
      __pyx_t_1 = ((__pyx_v_start > __pyx_v_size2) != 0);
      if (__pyx_t_1) {
/* … */
      }
+0956:                 start = size2  # trim to end
        __pyx_v_start = __pyx_v_size2;
+0957:             if endex > size2:
      __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size2) != 0);
      if (__pyx_t_1) {
/* … */
      }
+0958:                 endex = size2  # trim to end
        __pyx_v_endex = __pyx_v_size2;
 0959: 
+0960:             ptr = &that.data[that.start + start]
      __pyx_v_ptr = (&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_start)]));
+0961:             end = &that.data[that.start + endex]
      __pyx_v_end = (&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_endex)]));
 0962: 
+0963:             while ptr < end:
      while (1) {
        __pyx_t_1 = ((__pyx_v_ptr < __pyx_v_end) != 0);
        if (!__pyx_t_1) break;
+0964:                 if ptr[0] == buffer[0]:  # faster pruning
        __pyx_t_1 = (((__pyx_v_ptr[0]) == (__pyx_v_buffer[0])) != 0);
        if (__pyx_t_1) {
/* … */
        }
+0965:                     if not memcmp(ptr, buffer, size):
          __pyx_t_1 = ((!(memcmp(__pyx_v_ptr, __pyx_v_buffer, __pyx_v_size) != 0)) != 0);
          if (__pyx_t_1) {
/* … */
          }
+0966:                         ptr += size - 1
            __pyx_v_ptr = (__pyx_v_ptr + (__pyx_v_size - 1));
+0967:                         count += 1
            __pyx_v_count = (__pyx_v_count + 1);
+0968:                 ptr += 1
        __pyx_v_ptr = (__pyx_v_ptr + 1);
      }
+0969:     return count
  __pyx_r = __pyx_v_count;
  goto __pyx_L0;
 0970: 
 0971: 
+0972: cdef size_t Block_Count(const Block_* that, ssize_t start, ssize_t endex,
static size_t __pyx_f_11cbytesparse_2_c_Block_Count(Block_ const *__pyx_v_that, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_endex, size_t __pyx_v_size, byte_t const *__pyx_v_buffer) {
  Py_ssize_t __pyx_v_ssize;
  size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 0973:                         size_t size, const byte_t* buffer) nogil:
 0974:     cdef:
+0975:         ssize_t ssize = <ssize_t>(that.endex - that.start)
  __pyx_v_ssize = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 0976: 
+0977:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0978:         start += ssize  # anchor to end
    __pyx_v_start = (__pyx_v_start + __pyx_v_ssize);
+0979:         if start < 0:
    __pyx_t_1 = ((__pyx_v_start < 0) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0980:             start = 0  # trim to start
      __pyx_v_start = 0;
 0981: 
+0982:     if endex < 0:
  __pyx_t_1 = ((__pyx_v_endex < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+0983:         endex += ssize  # anchor to end
    __pyx_v_endex = (__pyx_v_endex + __pyx_v_ssize);
+0984:         if endex < 0:
    __pyx_t_1 = ((__pyx_v_endex < 0) != 0);
    if (__pyx_t_1) {
/* … */
    }
+0985:             endex = 0  # trim to start
      __pyx_v_endex = 0;
 0986: 
+0987:     return Block_Count_(that, <size_t>start, <size_t>endex, size, buffer)
  __pyx_r = __pyx_f_11cbytesparse_2_c_Block_Count_(__pyx_v_that, ((size_t)__pyx_v_start), ((size_t)__pyx_v_endex), __pyx_v_size, __pyx_v_buffer);
  goto __pyx_L0;
 0988: 
 0989: 
+0990: cdef Block_* Block_Reserve_(Block_* that, size_t offset, size_t size, bint zero) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Reserve_(Block_ *__pyx_v_that, size_t __pyx_v_offset, size_t __pyx_v_size, int __pyx_v_zero) {
  size_t __pyx_v_actual;
  size_t __pyx_v_used;
  size_t __pyx_v_allocated;
  Block_ *__pyx_v_ptr;
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Reserve_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cbytesparse._c.Block_Reserve_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 0991:     cdef:
 0992:         size_t actual
 0993:         size_t used
 0994:         size_t margin
 0995:         size_t allocated
 0996:         Block_* ptr
 0997: 
+0998:     Block_CheckMutable(that)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Block_CheckMutable(__pyx_v_that); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 998, __pyx_L1_error)
 0999: 
+1000:     if size:
  __pyx_t_2 = (__pyx_v_size != 0);
  if (__pyx_t_2) {
/* … */
  }
+1001:         if ((size > SIZE_HMAX or
    __pyx_t_3 = ((__pyx_v_size > SIZE_HMAX) != 0);
    if (!__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L5_bool_binop_done;
    }
/* … */
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+1002:              CannotAddSizeU(that.endex, size) or
    __pyx_t_3 = (__pyx_f_11cbytesparse_2_c_CannotAddSizeU(__pyx_v_that->endex, __pyx_v_size) != 0);
    if (!__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L5_bool_binop_done;
    }
+1003:              that.endex + size > SIZE_HMAX)):
    __pyx_t_3 = (((__pyx_v_that->endex + __pyx_v_size) > SIZE_HMAX) != 0);
    __pyx_t_2 = __pyx_t_3;
    __pyx_L5_bool_binop_done:;
+1004:             raise OverflowError('size overflow')
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1004, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(0, 1004, __pyx_L1_error)
 1005: 
+1006:         used = that.endex - that.start
    __pyx_v_used = (__pyx_v_that->endex - __pyx_v_that->start);
+1007:         if offset > used:
    __pyx_t_2 = ((__pyx_v_offset > __pyx_v_used) != 0);
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+1008:             raise IndexError('index out of range')
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1008, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(0, 1008, __pyx_L1_error)
/* … */
  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_u_index_out_of_range); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 1008, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__6);
  __Pyx_GIVEREF(__pyx_tuple__6);
 1009: 
 1010:         # Prefer the side where there is less data to shift, which also favors the extremes
+1011:         if offset >= (used >> 1):
    __pyx_t_2 = ((__pyx_v_offset >= (__pyx_v_used >> 1)) != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L9;
    }
+1012:             if size > that.allocated - that.endex:
      __pyx_t_2 = ((__pyx_v_size > (__pyx_v_that->allocated - __pyx_v_that->endex)) != 0);
      if (__pyx_t_2) {
/* … */
      }
 1013:                 # Calculate the upsized allocation
+1014:                 allocated = Upsize(that.allocated, that.allocated + size)
        __pyx_v_allocated = __pyx_f_11cbytesparse_2_c_Upsize(__pyx_v_that->allocated, (__pyx_v_that->allocated + __pyx_v_size));
+1015:                 if allocated > SIZE_HMAX:
        __pyx_t_2 = ((__pyx_v_allocated > SIZE_HMAX) != 0);
        if (unlikely(__pyx_t_2)) {
/* … */
        }
+1016:                     raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 1016, __pyx_L1_error)
 1017: 
 1018:                 # Reallocate, including the header
+1019:                 ptr = <Block_*>PyMem_Realloc(that, Block_HEADING + (allocated * sizeof(byte_t)))
        __pyx_v_ptr = ((Block_ *)PyMem_Realloc(__pyx_v_that, (Block_HEADING + (__pyx_v_allocated * (sizeof(byte_t))))));
+1020:                 if ptr == NULL:
        __pyx_t_2 = ((__pyx_v_ptr == NULL) != 0);
        if (unlikely(__pyx_t_2)) {
/* … */
        }
+1021:                     raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 1021, __pyx_L1_error)
 1022: 
 1023:                 # Reassign to that
+1024:                 that = ptr
        __pyx_v_that = __pyx_v_ptr;
+1025:                 that.allocated = allocated  # update
        __pyx_v_that->allocated = __pyx_v_allocated;
 1026: 
 1027:             # Shift elements to make room for reservation at the requested offset
+1028:             CheckAddSizeU(offset, that.start)
      __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_offset, __pyx_v_that->start); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 1028, __pyx_L1_error)
+1029:             offset += that.start
      __pyx_v_offset = (__pyx_v_offset + __pyx_v_that->start);
+1030:             used = that.endex - offset
      __pyx_v_used = (__pyx_v_that->endex - __pyx_v_offset);
+1031:             if used:
      __pyx_t_2 = (__pyx_v_used != 0);
      if (__pyx_t_2) {
/* … */
      }
+1032:                 memmove(&that.data[offset + size],
        (void)(memmove((&(__pyx_v_that->data[(__pyx_v_offset + __pyx_v_size)])), (&(__pyx_v_that->data[__pyx_v_offset])), (__pyx_v_used * (sizeof(byte_t)))));
 1033:                         &that.data[offset],
 1034:                         used * sizeof(byte_t))
+1035:             if zero:
      __pyx_t_2 = (__pyx_v_zero != 0);
      if (__pyx_t_2) {
/* … */
      }
+1036:                 memset(&that.data[offset], 0, size * sizeof(byte_t))  # pad with zeros
        (void)(memset((&(__pyx_v_that->data[__pyx_v_offset])), 0, (__pyx_v_size * (sizeof(byte_t)))));
+1037:             that.endex += size
      __pyx_v_that->endex = (__pyx_v_that->endex + __pyx_v_size);
 1038: 
 1039:         else:
+1040:             if size <= that.start:
    /*else*/ {
      __pyx_t_2 = ((__pyx_v_size <= __pyx_v_that->start) != 0);
      if (__pyx_t_2) {
/* … */
        goto __pyx_L15;
      }
 1041:                 # Shift elements to make room for reservation at the requested offset
+1042:                 that.start -= size
        __pyx_v_that->start = (__pyx_v_that->start - __pyx_v_size);
+1043:                 if offset:
        __pyx_t_2 = (__pyx_v_offset != 0);
        if (__pyx_t_2) {
/* … */
        }
+1044:                     memmove(&that.data[that.start],
          (void)(memmove((&(__pyx_v_that->data[__pyx_v_that->start])), (&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_size)])), (__pyx_v_offset * (sizeof(byte_t)))));
 1045:                             &that.data[that.start + size],
 1046:                             offset * sizeof(byte_t))
+1047:                 if zero:
        __pyx_t_2 = (__pyx_v_zero != 0);
        if (__pyx_t_2) {
/* … */
        }
+1048:                     memset(&that.data[that.start + offset], 0, size * sizeof(byte_t))  # pad with zeros
          (void)(memset((&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_offset)])), 0, (__pyx_v_size * (sizeof(byte_t)))));
 1049: 
 1050:             else:
 1051:                 # Calculate the upsized allocation
+1052:                 CheckAddSizeU(that.allocated, size)
      /*else*/ {
        __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_that->allocated, __pyx_v_size); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 1052, __pyx_L1_error)
+1053:                 allocated = Upsize(that.allocated, that.allocated + size)
        __pyx_v_allocated = __pyx_f_11cbytesparse_2_c_Upsize(__pyx_v_that->allocated, (__pyx_v_that->allocated + __pyx_v_size));
+1054:                 if allocated > SIZE_HMAX:
        __pyx_t_2 = ((__pyx_v_allocated > SIZE_HMAX) != 0);
        if (unlikely(__pyx_t_2)) {
/* … */
        }
+1055:                     raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 1055, __pyx_L1_error)
 1056: 
 1057:                 # Allocate a new chunk, including the header
+1058:                 actual = Block_HEADING + (allocated * sizeof(byte_t))
        __pyx_v_actual = (Block_HEADING + (__pyx_v_allocated * (sizeof(byte_t))));
+1059:                 if zero:
        __pyx_t_2 = (__pyx_v_zero != 0);
        if (__pyx_t_2) {
/* … */
          goto __pyx_L19;
        }
+1060:                     ptr = <Block_*>PyMem_Calloc(actual, 1)
          __pyx_v_ptr = ((Block_ *)__pyx_f_11cbytesparse_2_c_PyMem_Calloc(__pyx_v_actual, 1));
 1061:                 else:
+1062:                     ptr = <Block_*>PyMem_Malloc(actual)
        /*else*/ {
          __pyx_v_ptr = ((Block_ *)PyMem_Malloc(__pyx_v_actual));
        }
        __pyx_L19:;
+1063:                 if ptr == NULL:
        __pyx_t_2 = ((__pyx_v_ptr == NULL) != 0);
        if (unlikely(__pyx_t_2)) {
/* … */
        }
+1064:                     raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 1064, __pyx_L1_error)
 1065: 
 1066:                 # Prepare the new chunk aligning towards the end
+1067:                 ptr.address = that.address
        __pyx_t_5 = __pyx_v_that->address;
        __pyx_v_ptr->address = __pyx_t_5;
+1068:                 ptr.references = that.references  # transfer ownership
        __pyx_t_6 = __pyx_v_that->references;
        __pyx_v_ptr->references = __pyx_t_6;
+1069:                 ptr.allocated = allocated
        __pyx_v_ptr->allocated = __pyx_v_allocated;
+1070:                 ptr.endex = ptr.allocated - MARGIN  # leave some room
        __pyx_v_ptr->endex = (__pyx_v_ptr->allocated - MARGIN);
+1071:                 ptr.start = ptr.endex - used - size
        __pyx_v_ptr->start = ((__pyx_v_ptr->endex - __pyx_v_used) - __pyx_v_size);
 1072: 
 1073:                 # Shift/copy elements to make room for reservation at the requested offset
+1074:                 if offset:
        __pyx_t_2 = (__pyx_v_offset != 0);
        if (__pyx_t_2) {
/* … */
        }
+1075:                     used -= offset  # prepare for later
          __pyx_v_used = (__pyx_v_used - __pyx_v_offset);
+1076:                     memcpy(&ptr.data[ptr.start],
          (void)(memcpy((&(__pyx_v_ptr->data[__pyx_v_ptr->start])), (&(__pyx_v_that->data[__pyx_v_that->start])), (__pyx_v_offset * (sizeof(byte_t)))));
 1077:                            &that.data[that.start],
 1078:                            offset * sizeof(byte_t))
+1079:                 if used:
        __pyx_t_2 = (__pyx_v_used != 0);
        if (__pyx_t_2) {
/* … */
        }
+1080:                     memcpy(&ptr.data[ptr.start + offset + size],
          (void)(memcpy((&(__pyx_v_ptr->data[((__pyx_v_ptr->start + __pyx_v_offset) + __pyx_v_size)])), (&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_offset)])), (__pyx_v_used * (sizeof(byte_t)))));
 1081:                            &that.data[that.start + offset],
 1082:                            used * sizeof(byte_t))
 1083: 
 1084:                 # Reassign to that
+1085:                 PyMem_Free(that)
        PyMem_Free(__pyx_v_that);
+1086:                 that = ptr
        __pyx_v_that = __pyx_v_ptr;
      }
      __pyx_L15:;
    }
    __pyx_L9:;
 1087: 
+1088:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 1089: 
 1090: 
+1091: cdef Block_* Block_Delete_(Block_* that, size_t offset, size_t size) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Delete_(Block_ *__pyx_v_that, size_t __pyx_v_offset, size_t __pyx_v_size) {
  size_t __pyx_v_allocated;
  Block_ *__pyx_v_ptr;
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Delete_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cbytesparse._c.Block_Delete_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1092:     cdef:
 1093:         size_t allocated
 1094:         Block_* ptr
 1095: 
+1096:     Block_CheckMutable(that)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Block_CheckMutable(__pyx_v_that); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 1096, __pyx_L1_error)
 1097: 
+1098:     if size:
  __pyx_t_2 = (__pyx_v_size != 0);
  if (__pyx_t_2) {
/* … */
  }
+1099:         if ((size > SIZE_HMAX or
    __pyx_t_3 = ((__pyx_v_size > SIZE_HMAX) != 0);
    if (!__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L5_bool_binop_done;
    }
/* … */
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+1100:              CannotAddSizeU(offset, size) or
    __pyx_t_3 = (__pyx_f_11cbytesparse_2_c_CannotAddSizeU(__pyx_v_offset, __pyx_v_size) != 0);
    if (!__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L5_bool_binop_done;
    }
+1101:              offset + size > SIZE_HMAX or
    __pyx_t_3 = (((__pyx_v_offset + __pyx_v_size) > SIZE_HMAX) != 0);
    if (!__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L5_bool_binop_done;
    }
+1102:              CannotAddSizeU(offset, that.start) or
    __pyx_t_3 = (__pyx_f_11cbytesparse_2_c_CannotAddSizeU(__pyx_v_offset, __pyx_v_that->start) != 0);
    if (!__pyx_t_3) {
    } else {
      __pyx_t_2 = __pyx_t_3;
      goto __pyx_L5_bool_binop_done;
    }
+1103:              that.start > SIZE_HMAX)):
    __pyx_t_3 = ((__pyx_v_that->start > SIZE_HMAX) != 0);
    __pyx_t_2 = __pyx_t_3;
    __pyx_L5_bool_binop_done:;
+1104:             raise OverflowError('size overflow')
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1104, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(0, 1104, __pyx_L1_error)
 1105: 
+1106:         if that.endex < that.start + offset + size:
    __pyx_t_2 = ((__pyx_v_that->endex < ((__pyx_v_that->start + __pyx_v_offset) + __pyx_v_size)) != 0);
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+1107:             raise IndexError('index out of range')
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1107, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_Raise(__pyx_t_4, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __PYX_ERR(0, 1107, __pyx_L1_error)
 1108: 
 1109:         # Calculate the downsized allocation
+1110:         allocated = Downsize(that.allocated, that.allocated - size)
    __pyx_v_allocated = __pyx_f_11cbytesparse_2_c_Downsize(__pyx_v_that->allocated, (__pyx_v_that->allocated - __pyx_v_size));
+1111:         if allocated > SIZE_HMAX:
    __pyx_t_2 = ((__pyx_v_allocated > SIZE_HMAX) != 0);
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+1112:             raise MemoryError()
      PyErr_NoMemory(); __PYX_ERR(0, 1112, __pyx_L1_error)
 1113: 
+1114:         if offset == 0:
    __pyx_t_2 = ((__pyx_v_offset == 0) != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L12;
    }
+1115:             if allocated == that.allocated:
      __pyx_t_2 = ((__pyx_v_allocated == __pyx_v_that->allocated) != 0);
      if (__pyx_t_2) {
/* … */
        goto __pyx_L13;
      }
 1116:                 # Just skip initial if not reallocated and no offset
+1117:                 that.start += size
        __pyx_v_that->start = (__pyx_v_that->start + __pyx_v_size);
 1118:             else:
 1119:                 # Shift elements to make for the deleted gap at the beginning
+1120:                 offset += that.start
      /*else*/ {
        __pyx_v_offset = (__pyx_v_offset + __pyx_v_that->start);
+1121:                 memmove(&that.data[MARGIN],  # realign to initial MARGIN
        (void)(memmove((&(__pyx_v_that->data[MARGIN])), (&(__pyx_v_that->data[(__pyx_v_offset + __pyx_v_size)])), ((__pyx_v_that->endex - (__pyx_v_offset + __pyx_v_size)) * (sizeof(byte_t)))));
 1122:                         &that.data[offset + size],
 1123:                         (that.endex - (offset + size)) * sizeof(byte_t))
+1124:                 size = that.endex - that.start - size
        __pyx_v_size = ((__pyx_v_that->endex - __pyx_v_that->start) - __pyx_v_size);
+1125:                 that.start = MARGIN
        __pyx_v_that->start = MARGIN;
+1126:                 that.endex = MARGIN + size
        __pyx_v_that->endex = (MARGIN + __pyx_v_size);
      }
      __pyx_L13:;
 1127:         else:
 1128:             # Shift elements to make for the deleted gap at the requested offset
+1129:             offset += that.start
    /*else*/ {
      __pyx_v_offset = (__pyx_v_offset + __pyx_v_that->start);
+1130:             memmove(&that.data[offset],
      (void)(memmove((&(__pyx_v_that->data[__pyx_v_offset])), (&(__pyx_v_that->data[(__pyx_v_offset + __pyx_v_size)])), ((__pyx_v_that->endex - (__pyx_v_offset + __pyx_v_size)) * (sizeof(byte_t)))));
 1131:                     &that.data[offset + size],
 1132:                     (that.endex - (offset + size)) * sizeof(byte_t))
+1133:             that.endex -= size
      __pyx_v_that->endex = (__pyx_v_that->endex - __pyx_v_size);
    }
    __pyx_L12:;
 1134: 
+1135:         if allocated != that.allocated:
    __pyx_t_2 = ((__pyx_v_allocated != __pyx_v_that->allocated) != 0);
    if (__pyx_t_2) {
/* … */
    }
 1136:             # Reallocate, including the header
+1137:             ptr = <Block_*>PyMem_Realloc(that, Block_HEADING + (allocated * sizeof(byte_t)))
      __pyx_v_ptr = ((Block_ *)PyMem_Realloc(__pyx_v_that, (Block_HEADING + (__pyx_v_allocated * (sizeof(byte_t))))));
+1138:             if ptr == NULL:
      __pyx_t_2 = ((__pyx_v_ptr == NULL) != 0);
      if (unlikely(__pyx_t_2)) {
/* … */
      }
+1139:                 raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 1139, __pyx_L1_error)
 1140: 
 1141:             # Reassign to that
+1142:             that = ptr
      __pyx_v_that = __pyx_v_ptr;
+1143:             that.allocated = allocated
      __pyx_v_that->allocated = __pyx_v_allocated;
 1144: 
+1145:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 1146: 
 1147: 
+1148: cdef Block_* Block_Clear(Block_* that) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Clear(Block_ *__pyx_v_that) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Clear", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Block_Clear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1149:     return Block_Delete_(that, 0, that.endex - that.start)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Block_Delete_(__pyx_v_that, 0, (__pyx_v_that->endex - __pyx_v_that->start)); if (unlikely(__pyx_t_1 == ((Block_ *)NULL))) __PYX_ERR(0, 1149, __pyx_L1_error)
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 1150: 
 1151: 
+1152: cdef byte_t* Block_At_(Block_* that, size_t offset) nogil:
static byte_t *__pyx_f_11cbytesparse_2_c_Block_At_(Block_ *__pyx_v_that, size_t __pyx_v_offset) {
  byte_t *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+1153:     return &that.data[that.start + offset]
  __pyx_r = (&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_offset)]));
  goto __pyx_L0;
 1154: 
 1155: 
+1156: cdef const byte_t* Block_At__(const Block_* that, size_t offset) nogil:
static byte_t const *__pyx_f_11cbytesparse_2_c_Block_At__(Block_ const *__pyx_v_that, size_t __pyx_v_offset) {
  byte_t const *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+1157:     return &that.data[that.start + offset]
  __pyx_r = (&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_offset)]));
  goto __pyx_L0;
 1158: 
 1159: 
+1160: cdef byte_t Block_Get__(const Block_* that, size_t offset) nogil:
static byte_t __pyx_f_11cbytesparse_2_c_Block_Get__(Block_ const *__pyx_v_that, size_t __pyx_v_offset) {
  byte_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+1161:     return that.data[that.start + offset]
  __pyx_r = (__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_offset)]);
  goto __pyx_L0;
 1162: 
 1163: 
+1164: cdef int Block_Get_(const Block_* that, size_t offset) except -1:
static int __pyx_f_11cbytesparse_2_c_Block_Get_(Block_ const *__pyx_v_that, size_t __pyx_v_offset) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Get_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Block_Get_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1165:     CheckAddSizeU(that.start, offset)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_that->start, __pyx_v_offset); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 1165, __pyx_L1_error)
+1166:     offset += that.start
  __pyx_v_offset = (__pyx_v_offset + __pyx_v_that->start);
 1167: 
+1168:     if offset < that.endex:
  __pyx_t_2 = ((__pyx_v_offset < __pyx_v_that->endex) != 0);
  if (likely(__pyx_t_2)) {
/* … */
  }
+1169:         return <int><unsigned>that.data[offset]
    __pyx_r = ((int)((unsigned int)(__pyx_v_that->data[__pyx_v_offset])));
    goto __pyx_L0;
 1170:     else:
+1171:         raise IndexError('index out of range')
  /*else*/ {
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1171, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 1171, __pyx_L1_error)
  }
 1172: 
 1173: 
+1174: cdef int Block_Get(const Block_* that, ssize_t offset) except -1:
static int __pyx_f_11cbytesparse_2_c_Block_Get(Block_ const *__pyx_v_that, Py_ssize_t __pyx_v_offset) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Get", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Block_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1175:     if offset < 0:
  __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1176:         offset += <ssize_t>(that.endex - that.start)  # anchor to end
    __pyx_v_offset = (__pyx_v_offset + ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start)));
+1177:         if offset < 0:
    __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1178:             raise IndexError('index out of range')
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1178, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(0, 1178, __pyx_L1_error)
 1179: 
+1180:     return Block_Get_(that, <size_t>offset)
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Get_(__pyx_v_that, ((size_t)__pyx_v_offset)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1180, __pyx_L1_error)
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;
 1181: 
 1182: 
+1183: cdef byte_t Block_Set__(Block_* that, size_t offset, byte_t value) nogil:
static byte_t __pyx_f_11cbytesparse_2_c_Block_Set__(Block_ *__pyx_v_that, size_t __pyx_v_offset, byte_t __pyx_v_value) {
  byte_t __pyx_v_backup;
  byte_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 1184:     cdef:
 1185:         byte_t backup
 1186: 
+1187:     offset += that.start
  __pyx_v_offset = (__pyx_v_offset + __pyx_v_that->start);
+1188:     backup = that.data[offset]
  __pyx_v_backup = (__pyx_v_that->data[__pyx_v_offset]);
+1189:     that.data[offset] = value
  (__pyx_v_that->data[__pyx_v_offset]) = __pyx_v_value;
+1190:     return backup
  __pyx_r = __pyx_v_backup;
  goto __pyx_L0;
 1191: 
 1192: 
+1193: cdef int Block_Set_(Block_* that, size_t offset, byte_t value) except -1:
static int __pyx_f_11cbytesparse_2_c_Block_Set_(Block_ *__pyx_v_that, size_t __pyx_v_offset, byte_t __pyx_v_value) {
  int __pyx_v_backup;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Set_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Block_Set_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1194:     cdef:
 1195:         int backup
 1196: 
 1197:     # Block_CheckMutable(that)
+1198:     CheckAddSizeU(that.start, offset)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_that->start, __pyx_v_offset); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 1198, __pyx_L1_error)
+1199:     offset += that.start
  __pyx_v_offset = (__pyx_v_offset + __pyx_v_that->start);
 1200: 
+1201:     if offset < that.endex:
  __pyx_t_2 = ((__pyx_v_offset < __pyx_v_that->endex) != 0);
  if (likely(__pyx_t_2)) {
/* … */
  }
+1202:         backup = <int><unsigned>that.data[offset]
    __pyx_v_backup = ((int)((unsigned int)(__pyx_v_that->data[__pyx_v_offset])));
+1203:         that.data[offset] = value
    (__pyx_v_that->data[__pyx_v_offset]) = __pyx_v_value;
+1204:         return backup
    __pyx_r = __pyx_v_backup;
    goto __pyx_L0;
 1205:     else:
+1206:         raise IndexError('index out of range')
  /*else*/ {
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1206, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 1206, __pyx_L1_error)
  }
 1207: 
 1208: 
+1209: cdef int Block_Set(Block_* that, ssize_t offset, byte_t value) except -1:
static int __pyx_f_11cbytesparse_2_c_Block_Set(Block_ *__pyx_v_that, Py_ssize_t __pyx_v_offset, byte_t __pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Set", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Block_Set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1210:     if offset < 0:
  __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1211:         offset += <ssize_t>(that.endex - that.start)  # anchor to end
    __pyx_v_offset = (__pyx_v_offset + ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start)));
+1212:         if offset < 0:
    __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1213:             raise IndexError('index out of range')
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1213, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(0, 1213, __pyx_L1_error)
 1214: 
+1215:     return Block_Set_(that, <size_t>offset, value)
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Set_(__pyx_v_that, ((size_t)__pyx_v_offset), __pyx_v_value); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1215, __pyx_L1_error)
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;
 1216: 
 1217: 
+1218: cdef Block_* Block_Pop__(Block_* that, byte_t* value) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Pop__(Block_ *__pyx_v_that, byte_t *__pyx_v_value) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Pop__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Block_Pop__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1219:     # Block_CheckMutable(that)
 1220: 
+1221:     if that.start < that.endex:
  __pyx_t_1 = ((__pyx_v_that->start < __pyx_v_that->endex) != 0);
  if (likely(__pyx_t_1)) {
/* … */
  }
+1222:         if value:
    __pyx_t_1 = (__pyx_v_value != 0);
    if (__pyx_t_1) {
/* … */
    }
+1223:             value[0] = that.data[that.endex - 1]  # backup
      (__pyx_v_value[0]) = (__pyx_v_that->data[(__pyx_v_that->endex - 1)]);
 1224: 
+1225:         return Block_Delete_(that, that.endex - that.start - 1, 1)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Block_Delete_(__pyx_v_that, ((__pyx_v_that->endex - __pyx_v_that->start) - 1), 1); if (unlikely(__pyx_t_2 == ((Block_ *)NULL))) __PYX_ERR(0, 1225, __pyx_L1_error)
    __pyx_r = __pyx_t_2;
    goto __pyx_L0;
 1226:     else:
+1227:         raise IndexError('pop index out of range')
  /*else*/ {
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1227, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 1227, __pyx_L1_error)
  }
/* … */
  __pyx_tuple__7 = PyTuple_Pack(1, __pyx_kp_u_pop_index_out_of_range); if (unlikely(!__pyx_tuple__7)) __PYX_ERR(0, 1227, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__7);
  __Pyx_GIVEREF(__pyx_tuple__7);
 1228: 
 1229: 
+1230: cdef Block_* Block_Pop_(Block_* that, size_t offset, byte_t* value) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Pop_(Block_ *__pyx_v_that, size_t __pyx_v_offset, byte_t *__pyx_v_value) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Pop_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cbytesparse._c.Block_Pop_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1231:     # Block_CheckMutable(that)
+1232:     CheckAddSizeU(that.start, offset)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_that->start, __pyx_v_offset); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 1232, __pyx_L1_error)
 1233: 
+1234:     if that.start + offset < that.endex:
  __pyx_t_2 = (((__pyx_v_that->start + __pyx_v_offset) < __pyx_v_that->endex) != 0);
  if (likely(__pyx_t_2)) {
/* … */
  }
+1235:         if value:
    __pyx_t_2 = (__pyx_v_value != 0);
    if (__pyx_t_2) {
/* … */
    }
+1236:             value[0] = that.data[that.start + offset]  # backup
      (__pyx_v_value[0]) = (__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_offset)]);
 1237: 
+1238:         return Block_Delete_(that, offset, 1)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Delete_(__pyx_v_that, __pyx_v_offset, 1); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 1238, __pyx_L1_error)
    __pyx_r = __pyx_t_3;
    goto __pyx_L0;
 1239:     else:
+1240:         raise IndexError('pop index out of range')
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(0, 1240, __pyx_L1_error)
  }
 1241: 
 1242: 
+1243: cdef Block_* Block_Pop(Block_* that, ssize_t offset, byte_t* value) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Pop(Block_ *__pyx_v_that, Py_ssize_t __pyx_v_offset, byte_t *__pyx_v_value) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Pop", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Block_Pop", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1244:     if offset < 0:
  __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1245:         offset += <ssize_t>(that.endex - that.start)  # anchor to end
    __pyx_v_offset = (__pyx_v_offset + ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start)));
+1246:         if offset < 0:
    __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1247:             raise IndexError('pop index out of range')
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1247, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(0, 1247, __pyx_L1_error)
 1248: 
+1249:     return Block_Pop_(that, <size_t>offset, value)
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Pop_(__pyx_v_that, ((size_t)__pyx_v_offset), __pyx_v_value); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 1249, __pyx_L1_error)
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;
 1250: 
 1251: 
+1252: cdef Block_* Block_PopLeft(Block_* that, byte_t* value) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_PopLeft(Block_ *__pyx_v_that, byte_t *__pyx_v_value) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_PopLeft", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Block_PopLeft", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1253:     return Block_Pop_(that, 0, value)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Block_Pop_(__pyx_v_that, 0, __pyx_v_value); if (unlikely(__pyx_t_1 == ((Block_ *)NULL))) __PYX_ERR(0, 1253, __pyx_L1_error)
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 1254: 
 1255: 
+1256: cdef Block_* Block_Insert_(Block_* that, size_t offset, byte_t value) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Insert_(Block_ *__pyx_v_that, size_t __pyx_v_offset, byte_t __pyx_v_value) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Insert_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Block_Insert_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1257:     # Insert the value at the requested offset
+1258:     that = Block_Reserve_(that, offset, 1, False)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Block_Reserve_(__pyx_v_that, __pyx_v_offset, 1, 0); if (unlikely(__pyx_t_1 == ((Block_ *)NULL))) __PYX_ERR(0, 1258, __pyx_L1_error)
  __pyx_v_that = __pyx_t_1;
+1259:     that.data[that.start + offset] = value
  (__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_offset)]) = __pyx_v_value;
+1260:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 1261: 
 1262: 
+1263: cdef Block_* Block_Insert(Block_* that, ssize_t offset, byte_t value) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Insert(Block_ *__pyx_v_that, Py_ssize_t __pyx_v_offset, byte_t __pyx_v_value) {
  Py_ssize_t __pyx_v_size;
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Insert", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Block_Insert", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1264:     cdef:
+1265:         ssize_t size = <ssize_t>(that.endex - that.start)
  __pyx_v_size = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 1266: 
+1267:     if offset < 0:
  __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+1268:         offset += size  # anchor to end
    __pyx_v_offset = (__pyx_v_offset + __pyx_v_size);
+1269:         if offset < 0:
    __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
    if (__pyx_t_1) {
/* … */
    }
 1270:             # raise IndexError('index out of range')
+1271:             offset = 0  # as per bytearray.insert
      __pyx_v_offset = 0;
 1272: 
+1273:     elif offset > size:
  __pyx_t_1 = ((__pyx_v_offset > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
  __pyx_L3:;
 1274:         # raise IndexError('index out of range')
+1275:         offset = size  # as per bytearray.insert
    __pyx_v_offset = __pyx_v_size;
 1276: 
+1277:     return Block_Insert_(that, <size_t>offset, value)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Block_Insert_(__pyx_v_that, ((size_t)__pyx_v_offset), __pyx_v_value); if (unlikely(__pyx_t_2 == ((Block_ *)NULL))) __PYX_ERR(0, 1277, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;
 1278: 
 1279: 
+1280: cdef Block_* Block_Append(Block_* that, byte_t value) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Append(Block_ *__pyx_v_that, byte_t __pyx_v_value) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Append", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Block_Append", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1281:     # Insert the value after the end
+1282:     that = Block_Reserve_(that, that.endex - that.start, 1, False)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Block_Reserve_(__pyx_v_that, (__pyx_v_that->endex - __pyx_v_that->start), 1, 0); if (unlikely(__pyx_t_1 == ((Block_ *)NULL))) __PYX_ERR(0, 1282, __pyx_L1_error)
  __pyx_v_that = __pyx_t_1;
+1283:     that.data[that.endex - 1] = value
  (__pyx_v_that->data[(__pyx_v_that->endex - 1)]) = __pyx_v_value;
+1284:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 1285: 
 1286: 
+1287: cdef Block_* Block_AppendLeft(Block_* that, byte_t value) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_AppendLeft(Block_ *__pyx_v_that, byte_t __pyx_v_value) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_AppendLeft", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Block_AppendLeft", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1288:     # Insert the value after the end
+1289:     that = Block_Reserve_(that, 0, 1, False)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Block_Reserve_(__pyx_v_that, 0, 1, 0); if (unlikely(__pyx_t_1 == ((Block_ *)NULL))) __PYX_ERR(0, 1289, __pyx_L1_error)
  __pyx_v_that = __pyx_t_1;
+1290:     that.data[that.start] = value
  (__pyx_v_that->data[__pyx_v_that->start]) = __pyx_v_value;
+1291:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 1292: 
 1293: 
+1294: cdef Block_* Block_Extend_(Block_* that, size_t size, const byte_t* buffer) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Extend_(Block_ *__pyx_v_that, size_t __pyx_v_size, byte_t const *__pyx_v_buffer) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Extend_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Block_Extend_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1295:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+1296:         that = Block_Reserve_(that, that.endex - that.start, size, False)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Block_Reserve_(__pyx_v_that, (__pyx_v_that->endex - __pyx_v_that->start), __pyx_v_size, 0); if (unlikely(__pyx_t_2 == ((Block_ *)NULL))) __PYX_ERR(0, 1296, __pyx_L1_error)
    __pyx_v_that = __pyx_t_2;
+1297:         memmove(&that.data[that.endex - size], buffer, size * sizeof(byte_t))
    (void)(memmove((&(__pyx_v_that->data[(__pyx_v_that->endex - __pyx_v_size)])), __pyx_v_buffer, (__pyx_v_size * (sizeof(byte_t)))));
+1298:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 1299: 
 1300: 
+1301: cdef Block_* Block_Extend(Block_* that, const Block_* more) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Extend(Block_ *__pyx_v_that, Block_ const *__pyx_v_more) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Extend", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Block_Extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1302:     that = Block_Extend_(that, Block_Length(more), Block_At__(more, 0))
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Block_Extend_(__pyx_v_that, __pyx_f_11cbytesparse_2_c_Block_Length(__pyx_v_more), __pyx_f_11cbytesparse_2_c_Block_At__(__pyx_v_more, 0)); if (unlikely(__pyx_t_1 == ((Block_ *)NULL))) __PYX_ERR(0, 1302, __pyx_L1_error)
  __pyx_v_that = __pyx_t_1;
+1303:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 1304: 
 1305: 
+1306: cdef Block_* Block_ExtendLeft_(Block_* that, size_t size, const byte_t* buffer) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_ExtendLeft_(Block_ *__pyx_v_that, size_t __pyx_v_size, byte_t const *__pyx_v_buffer) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_ExtendLeft_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Block_ExtendLeft_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1307:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+1308:         that = Block_Reserve_(that, 0, size, False)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Block_Reserve_(__pyx_v_that, 0, __pyx_v_size, 0); if (unlikely(__pyx_t_2 == ((Block_ *)NULL))) __PYX_ERR(0, 1308, __pyx_L1_error)
    __pyx_v_that = __pyx_t_2;
+1309:         memmove(&that.data[that.start], buffer, size * sizeof(byte_t))
    (void)(memmove((&(__pyx_v_that->data[__pyx_v_that->start])), __pyx_v_buffer, (__pyx_v_size * (sizeof(byte_t)))));
+1310:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 1311: 
 1312: 
+1313: cdef Block_* Block_ExtendLeft(Block_* that, const Block_* more) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_ExtendLeft(Block_ *__pyx_v_that, Block_ const *__pyx_v_more) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_ExtendLeft", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Block_ExtendLeft", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1314:     that = Block_ExtendLeft_(that, Block_Length(more), Block_At__(more, 0))
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Block_ExtendLeft_(__pyx_v_that, __pyx_f_11cbytesparse_2_c_Block_Length(__pyx_v_more), __pyx_f_11cbytesparse_2_c_Block_At__(__pyx_v_more, 0)); if (unlikely(__pyx_t_1 == ((Block_ *)NULL))) __PYX_ERR(0, 1314, __pyx_L1_error)
  __pyx_v_that = __pyx_t_1;
+1315:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 1316: 
 1317: 
+1318: cdef void Block_RotateLeft__(Block_* that, size_t offset) nogil:
static void __pyx_f_11cbytesparse_2_c_Block_RotateLeft__(Block_ *__pyx_v_that, size_t __pyx_v_offset) {
  size_t __pyx_v_size;
  byte_t *__pyx_v_data;
  byte_t __pyx_v_first;
/* … */
  /* function exit code */
}
 1319:     cdef:
+1320:         size_t size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
+1321:         byte_t* data = &that.data[that.start]
  __pyx_v_data = (&(__pyx_v_that->data[__pyx_v_that->start]));
 1322:         byte_t first
 1323: 
+1324:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+1325:         if offset == 1:
    __pyx_t_1 = ((__pyx_v_offset == 1) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L4;
    }
+1326:             first = data[0]
      __pyx_v_first = (__pyx_v_data[0]);
+1327:             size -= 1
      __pyx_v_size = (__pyx_v_size - 1);
+1328:             while size:
      while (1) {
        __pyx_t_1 = (__pyx_v_size != 0);
        if (!__pyx_t_1) break;
+1329:                 data[0] = data[1]
        (__pyx_v_data[0]) = (__pyx_v_data[1]);
+1330:                 data += 1
        __pyx_v_data = (__pyx_v_data + 1);
+1331:                 size -= 1
        __pyx_v_size = (__pyx_v_size - 1);
      }
+1332:             data[0] = first
      (__pyx_v_data[0]) = __pyx_v_first;
 1333: 
+1334:         elif offset:
    __pyx_t_1 = (__pyx_v_offset != 0);
    if (__pyx_t_1) {
/* … */
    }
    __pyx_L4:;
+1335:             Reverse(data, 0, offset - 1)
      __pyx_f_11cbytesparse_2_c_Reverse(__pyx_v_data, 0, (__pyx_v_offset - 1));
+1336:             Reverse(data, offset, size - 1)
      __pyx_f_11cbytesparse_2_c_Reverse(__pyx_v_data, __pyx_v_offset, (__pyx_v_size - 1));
+1337:             Reverse(data, 0, size - 1)
      __pyx_f_11cbytesparse_2_c_Reverse(__pyx_v_data, 0, (__pyx_v_size - 1));
 1338: 
 1339: 
+1340: cdef void Block_RotateLeft_(Block_* that, size_t offset) nogil:
static void __pyx_f_11cbytesparse_2_c_Block_RotateLeft_(Block_ *__pyx_v_that, size_t __pyx_v_offset) {
  size_t __pyx_v_size;
/* … */
  /* function exit code */
}
 1341:     cdef:
+1342:         size_t size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 1343: 
+1344:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+1345:         if offset >= size:
    __pyx_t_1 = ((__pyx_v_offset >= __pyx_v_size) != 0);
    if (__pyx_t_1) {
/* … */
    }
 1346:             with cython.cdivision(True):
+1347:                 offset = offset % size  # no "%=" to avoid zero check
      __pyx_v_offset = (__pyx_v_offset % __pyx_v_size);
 1348: 
+1349:         Block_RotateLeft__(that, offset)
    __pyx_f_11cbytesparse_2_c_Block_RotateLeft__(__pyx_v_that, __pyx_v_offset);
 1350: 
 1351: 
+1352: cdef void Block_RotateRight__(Block_* that, size_t offset) nogil:
static void __pyx_f_11cbytesparse_2_c_Block_RotateRight__(Block_ *__pyx_v_that, size_t __pyx_v_offset) {
  size_t __pyx_v_size;
  byte_t *__pyx_v_data;
  byte_t __pyx_v_last;
/* … */
  /* function exit code */
}
 1353:     cdef:
+1354:         size_t size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
+1355:         byte_t* data = &that.data[that.start]
  __pyx_v_data = (&(__pyx_v_that->data[__pyx_v_that->start]));
 1356:         byte_t last
 1357: 
+1358:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+1359:         if offset == 1:
    __pyx_t_1 = ((__pyx_v_offset == 1) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L4;
    }
+1360:             size -= 1
      __pyx_v_size = (__pyx_v_size - 1);
+1361:             if size:
      __pyx_t_1 = (__pyx_v_size != 0);
      if (__pyx_t_1) {
/* … */
      }
+1362:                 data += size
        __pyx_v_data = (__pyx_v_data + __pyx_v_size);
+1363:                 last = data[0]
        __pyx_v_last = (__pyx_v_data[0]);
+1364:                 while size:
        while (1) {
          __pyx_t_1 = (__pyx_v_size != 0);
          if (!__pyx_t_1) break;
+1365:                     size -= 1
          __pyx_v_size = (__pyx_v_size - 1);
+1366:                     data -= 1
          __pyx_v_data = (__pyx_v_data - 1);
+1367:                     data[1] = data[0]
          (__pyx_v_data[1]) = (__pyx_v_data[0]);
        }
+1368:                 data[0] = last
        (__pyx_v_data[0]) = __pyx_v_last;
 1369: 
+1370:         elif offset:
    __pyx_t_1 = (__pyx_v_offset != 0);
    if (__pyx_t_1) {
/* … */
    }
    __pyx_L4:;
+1371:             offset = size - offset
      __pyx_v_offset = (__pyx_v_size - __pyx_v_offset);
+1372:             Reverse(data, 0, offset - 1)
      __pyx_f_11cbytesparse_2_c_Reverse(__pyx_v_data, 0, (__pyx_v_offset - 1));
+1373:             Reverse(data, offset, size - 1)
      __pyx_f_11cbytesparse_2_c_Reverse(__pyx_v_data, __pyx_v_offset, (__pyx_v_size - 1));
+1374:             Reverse(data, 0, size - 1)
      __pyx_f_11cbytesparse_2_c_Reverse(__pyx_v_data, 0, (__pyx_v_size - 1));
 1375: 
 1376: 
+1377: cdef void Block_RotateRight_(Block_* that, size_t offset) nogil:
static void __pyx_f_11cbytesparse_2_c_Block_RotateRight_(Block_ *__pyx_v_that, size_t __pyx_v_offset) {
  size_t __pyx_v_size;
/* … */
  /* function exit code */
}
 1378:     cdef:
+1379:         size_t size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 1380: 
+1381:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+1382:         if offset >= size:
    __pyx_t_1 = ((__pyx_v_offset >= __pyx_v_size) != 0);
    if (__pyx_t_1) {
/* … */
    }
 1383:             with cython.cdivision(True):
+1384:                 offset = offset % size  # no "%=" to avoid zero check
      __pyx_v_offset = (__pyx_v_offset % __pyx_v_size);
 1385: 
+1386:         Block_RotateRight__(that, offset)
    __pyx_f_11cbytesparse_2_c_Block_RotateRight__(__pyx_v_that, __pyx_v_offset);
 1387: 
 1388: 
+1389: cdef void Block_Rotate(Block_* that, ssize_t offset) nogil:
static void __pyx_f_11cbytesparse_2_c_Block_Rotate(Block_ *__pyx_v_that, Py_ssize_t __pyx_v_offset) {
/* … */
  /* function exit code */
}
+1390:     if offset < 0:
  __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+1391:         Block_RotateLeft_(that, <size_t>-offset)
    __pyx_f_11cbytesparse_2_c_Block_RotateLeft_(__pyx_v_that, ((size_t)(-__pyx_v_offset)));
 1392:     else:
+1393:         Block_RotateRight_(that, <size_t>offset)
  /*else*/ {
    __pyx_f_11cbytesparse_2_c_Block_RotateRight_(__pyx_v_that, ((size_t)__pyx_v_offset));
  }
  __pyx_L3:;
 1394: 
 1395: 
+1396: cdef Block_* Block_Repeat(Block_* that, size_t times) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Repeat(Block_ *__pyx_v_that, size_t __pyx_v_times) {
  size_t __pyx_v_size;
  byte_t *__pyx_v_src;
  byte_t *__pyx_v_dst;
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Repeat", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Block_Repeat", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1397:     cdef:
 1398:         size_t size
 1399:         byte_t* src
 1400:         byte_t* dst
 1401: 
+1402:     if times == 1:
  __pyx_t_1 = ((__pyx_v_times == 1) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1403:         return that
    __pyx_r = __pyx_v_that;
    goto __pyx_L0;
 1404: 
+1405:     elif times < 1:
  __pyx_t_1 = ((__pyx_v_times < 1) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1406:         return Block_Clear(that)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Block_Clear(__pyx_v_that); if (unlikely(__pyx_t_2 == ((Block_ *)NULL))) __PYX_ERR(0, 1406, __pyx_L1_error)
    __pyx_r = __pyx_t_2;
    goto __pyx_L0;
 1407: 
 1408:     else:
+1409:         size = that.endex - that.start
  /*else*/ {
    __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 1410:         with cython.cdivision(True):
+1411:             if size > SIZE_HMAX // times:
    __pyx_t_1 = ((__pyx_v_size > (SIZE_HMAX / __pyx_v_times)) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1412:                 raise OverflowError()
      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_builtin_OverflowError); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1412, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(0, 1412, __pyx_L1_error)
 1413: 
+1414:         times -= 1
    __pyx_v_times = (__pyx_v_times - 1);
+1415:         that = Block_Reserve_(that, size, size * times, False)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Block_Reserve_(__pyx_v_that, __pyx_v_size, (__pyx_v_size * __pyx_v_times), 0); if (unlikely(__pyx_t_2 == ((Block_ *)NULL))) __PYX_ERR(0, 1415, __pyx_L1_error)
    __pyx_v_that = __pyx_t_2;
+1416:         src = &that.data[that.start]
    __pyx_v_src = (&(__pyx_v_that->data[__pyx_v_that->start]));
+1417:         dst = src
    __pyx_v_dst = __pyx_v_src;
 1418: 
+1419:         while times:
    while (1) {
      __pyx_t_1 = (__pyx_v_times != 0);
      if (!__pyx_t_1) break;
+1420:             times -= 1
      __pyx_v_times = (__pyx_v_times - 1);
+1421:             dst += size
      __pyx_v_dst = (__pyx_v_dst + __pyx_v_size);
+1422:             memcpy(dst, src, size)  # whole repetition
      (void)(memcpy(__pyx_v_dst, __pyx_v_src, __pyx_v_size));
    }
 1423: 
+1424:         return that
    __pyx_r = __pyx_v_that;
    goto __pyx_L0;
  }
 1425: 
 1426: 
+1427: cdef Block_* Block_RepeatToSize(Block_* that, size_t size) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_RepeatToSize(Block_ *__pyx_v_that, size_t __pyx_v_size) {
  size_t __pyx_v_size2;
  size_t __pyx_v_times;
  byte_t *__pyx_v_src;
  byte_t *__pyx_v_dst;
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_RepeatToSize", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Block_RepeatToSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1428:     cdef:
 1429:         size_t size2
 1430:         size_t times
 1431:         byte_t* src
 1432:         byte_t* dst
 1433: 
+1434:     size2 = that.endex - that.start
  __pyx_v_size2 = (__pyx_v_that->endex - __pyx_v_that->start);
 1435: 
+1436:     if size2 == 0:
  __pyx_t_1 = ((__pyx_v_size2 == 0) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1437:         raise RuntimeError('empty')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1437, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 1437, __pyx_L1_error)
/* … */
  __pyx_tuple__8 = PyTuple_Pack(1, __pyx_n_u_empty); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 1437, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__8);
  __Pyx_GIVEREF(__pyx_tuple__8);
 1438: 
+1439:     if size == size2:
  __pyx_t_1 = ((__pyx_v_size == __pyx_v_size2) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1440:         return that
    __pyx_r = __pyx_v_that;
    goto __pyx_L0;
 1441: 
+1442:     elif size < size2:
  __pyx_t_1 = ((__pyx_v_size < __pyx_v_size2) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1443:         return Block_DelSlice_(that, size, size2)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_DelSlice_(__pyx_v_that, __pyx_v_size, __pyx_v_size2); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 1443, __pyx_L1_error)
    __pyx_r = __pyx_t_3;
    goto __pyx_L0;
 1444: 
 1445:     else:  # size > size2
+1446:         that = Block_Reserve_(that, size2, size - size2, False)
  /*else*/ {
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Reserve_(__pyx_v_that, __pyx_v_size2, (__pyx_v_size - __pyx_v_size2), 0); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 1446, __pyx_L1_error)
    __pyx_v_that = __pyx_t_3;
 1447: 
+1448:         if that.start + 1 == that.endex:  # single byte
    __pyx_t_1 = (((__pyx_v_that->start + 1) == __pyx_v_that->endex) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L5;
    }
+1449:             dst = &that.data[that.start]
      __pyx_v_dst = (&(__pyx_v_that->data[__pyx_v_that->start]));
+1450:             memset(dst, dst[0], size)
      (void)(memset(__pyx_v_dst, (__pyx_v_dst[0]), __pyx_v_size));
 1451: 
 1452:         else:  # multiple bytes
+1453:             with cython.cdivision(True):
    /*else*/ {
+1454:                 times = size // size2
      __pyx_v_times = (__pyx_v_size / __pyx_v_size2);
 1455: 
 1456:             # Copy the final partial chunk
+1457:             src = &that.data[that.start]
      __pyx_v_src = (&(__pyx_v_that->data[__pyx_v_that->start]));
+1458:             dst = &that.data[that.start + (size2 * times)]
      __pyx_v_dst = (&(__pyx_v_that->data[(__pyx_v_that->start + (__pyx_v_size2 * __pyx_v_times))]));
+1459:             memcpy(dst, src, size - (size2 * times))
      (void)(memcpy(__pyx_v_dst, __pyx_v_src, (__pyx_v_size - (__pyx_v_size2 * __pyx_v_times))));
 1460: 
 1461:             # Copy the multiple times, skipping the first one
+1462:             dst = src + size2
      __pyx_v_dst = (__pyx_v_src + __pyx_v_size2);
+1463:             times -= 1
      __pyx_v_times = (__pyx_v_times - 1);
+1464:             while times:
      while (1) {
        __pyx_t_1 = (__pyx_v_times != 0);
        if (!__pyx_t_1) break;
+1465:                 memcpy(dst, src, size2)
        (void)(memcpy(__pyx_v_dst, __pyx_v_src, __pyx_v_size2));
+1466:                 dst += size2
        __pyx_v_dst = (__pyx_v_dst + __pyx_v_size2);
+1467:                 times -= 1
        __pyx_v_times = (__pyx_v_times - 1);
      }
    }
    __pyx_L5:;
 1468: 
+1469:         return that
    __pyx_r = __pyx_v_that;
    goto __pyx_L0;
  }
 1470: 
 1471: 
+1472: cdef vint Block_Read_(const Block_* that, size_t offset, size_t size, byte_t* buffer) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Block_Read_(Block_ const *__pyx_v_that, size_t __pyx_v_offset, size_t __pyx_v_size, byte_t *__pyx_v_buffer) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Read_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Block_Read_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1473:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+1474:         if size > SIZE_HMAX:
    __pyx_t_1 = ((__pyx_v_size > SIZE_HMAX) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1475:             raise OverflowError('size overflow')
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1475, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(0, 1475, __pyx_L1_error)
 1476: 
+1477:         CheckAddSizeU(offset, that.start)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_offset, __pyx_v_that->start); if (unlikely(__pyx_t_3 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 1477, __pyx_L1_error)
+1478:         offset += that.start
    __pyx_v_offset = (__pyx_v_offset + __pyx_v_that->start);
 1479: 
+1480:         CheckAddSizeU(offset, size)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_offset, __pyx_v_size); if (unlikely(__pyx_t_3 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 1480, __pyx_L1_error)
+1481:         if that.endex < offset + size:
    __pyx_t_1 = ((__pyx_v_that->endex < (__pyx_v_offset + __pyx_v_size)) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+1482:             raise IndexError('index out of range')
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1482, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(0, 1482, __pyx_L1_error)
 1483: 
+1484:         memmove(buffer, &that.data[offset], size * sizeof(byte_t))
    (void)(memmove(__pyx_v_buffer, (&(__pyx_v_that->data[__pyx_v_offset])), (__pyx_v_size * (sizeof(byte_t)))));
 1485: 
 1486: 
+1487: cdef Block_* Block_Write_(Block_* that, size_t offset, size_t size, const byte_t* buffer) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_Write_(Block_ *__pyx_v_that, size_t __pyx_v_offset, size_t __pyx_v_size, byte_t const *__pyx_v_buffer) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Write_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Block_Write_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1488:     # Block_CheckMutable(that)
 1489: 
+1490:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+1491:         CheckAddSizeU(that.start, offset)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_that->start, __pyx_v_offset); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 1491, __pyx_L1_error)
+1492:         offset += that.start
    __pyx_v_offset = (__pyx_v_offset + __pyx_v_that->start);
 1493: 
+1494:         CheckAddSizeU(offset, size)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_offset, __pyx_v_size); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 1494, __pyx_L1_error)
+1495:         if that.endex < offset + size:
    __pyx_t_1 = ((__pyx_v_that->endex < (__pyx_v_offset + __pyx_v_size)) != 0);
    if (__pyx_t_1) {
/* … */
    }
+1496:             that = Block_Reserve_(that, that.endex - that.start, (offset + size) - that.endex, False)
      __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Reserve_(__pyx_v_that, (__pyx_v_that->endex - __pyx_v_that->start), ((__pyx_v_offset + __pyx_v_size) - __pyx_v_that->endex), 0); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 1496, __pyx_L1_error)
      __pyx_v_that = __pyx_t_3;
 1497: 
+1498:         memmove(&that.data[offset], buffer, size * sizeof(byte_t))
    (void)(memmove((&(__pyx_v_that->data[__pyx_v_offset])), __pyx_v_buffer, (__pyx_v_size * (sizeof(byte_t)))));
+1499:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 1500: 
 1501: 
+1502: cdef vint Block_ReadSlice_(const Block_* that, size_t start, size_t endex,
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Block_ReadSlice_(Block_ const *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex, size_t *__pyx_v_size_, byte_t *__pyx_v_buffer) {
  size_t __pyx_v_size;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_ReadSlice_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Block_ReadSlice_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1503:                            size_t* size_, byte_t* buffer) except -1:
 1504:     cdef:
+1505:         size_t size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 1506: 
+1507:     size_[0] = 0
  (__pyx_v_size_[0]) = 0;
 1508: 
+1509:     if start > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_start > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1510:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1510, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 1510, __pyx_L1_error)
+1511:     elif start > size:
  __pyx_t_1 = ((__pyx_v_start > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1512:         start = size  # trim source start
    __pyx_v_start = __pyx_v_size;
 1513: 
+1514:     if endex > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_endex > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1515:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1515, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 1515, __pyx_L1_error)
+1516:     elif endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+1517:         endex = start  # clamp negative source length
    __pyx_v_endex = __pyx_v_start;
+1518:     elif endex > size:
  __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
  __pyx_L4:;
+1519:         endex = size  # trim source end
    __pyx_v_endex = __pyx_v_size;
 1520: 
+1521:     size = endex - start
  __pyx_v_size = (__pyx_v_endex - __pyx_v_start);
+1522:     Block_Read_(that, start, size, buffer)
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Read_(__pyx_v_that, __pyx_v_start, __pyx_v_size, __pyx_v_buffer); if (unlikely(__pyx_t_3 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 1522, __pyx_L1_error)
+1523:     size_[0] = size
  (__pyx_v_size_[0]) = __pyx_v_size;
 1524: 
 1525: 
+1526: cdef vint Block_ReadSlice(const Block_* that, ssize_t start, ssize_t endex,
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Block_ReadSlice(Block_ const *__pyx_v_that, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_endex, size_t *__pyx_v_size_, byte_t *__pyx_v_buffer) {
  Py_ssize_t __pyx_v_ssize;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_ReadSlice", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Block_ReadSlice", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1527:                           size_t* size_, byte_t* buffer) except -1:
 1528:     cdef:
+1529:         ssize_t ssize = <ssize_t>(that.endex - that.start)
  __pyx_v_ssize = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 1530: 
+1531:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1532:         start += ssize  # anchor to end
    __pyx_v_start = (__pyx_v_start + __pyx_v_ssize);
+1533:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1534:         start = 0  # trim source start
    __pyx_v_start = 0;
 1535: 
+1536:     if endex < 0:
  __pyx_t_1 = ((__pyx_v_endex < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1537:         endex += ssize  # anchor to end
    __pyx_v_endex = (__pyx_v_endex + __pyx_v_ssize);
+1538:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1539:         endex = start  # clamp negative source length
    __pyx_v_endex = __pyx_v_start;
 1540: 
+1541:     Block_ReadSlice_(that, <size_t>start, <size_t>endex, size_, buffer)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Block_ReadSlice_(__pyx_v_that, ((size_t)__pyx_v_start), ((size_t)__pyx_v_endex), __pyx_v_size_, __pyx_v_buffer); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 1541, __pyx_L1_error)
 1542: 
 1543: 
+1544: cdef Block_* Block_GetSlice_(const Block_* that, size_t start, size_t endex) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_GetSlice_(Block_ const *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex) {
  size_t __pyx_v_size;
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_GetSlice_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Block_GetSlice_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1545:     cdef:
+1546:         size_t size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 1547: 
+1548:     if start > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_start > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1549:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1549, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 1549, __pyx_L1_error)
+1550:     elif start > size:
  __pyx_t_1 = ((__pyx_v_start > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1551:         start = size  # trim source start
    __pyx_v_start = __pyx_v_size;
 1552: 
+1553:     if endex > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_endex > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1554:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 1554, __pyx_L1_error)
+1555:     elif endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+1556:         endex = start  # clamp negative source length
    __pyx_v_endex = __pyx_v_start;
+1557:     elif endex > size:
  __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
  __pyx_L4:;
+1558:         endex = size  # trim source end
    __pyx_v_endex = __pyx_v_size;
 1559: 
+1560:     return Block_Create(that.address + start, endex - start, &that.data[that.start + start])
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Create((__pyx_v_that->address + __pyx_v_start), (__pyx_v_endex - __pyx_v_start), (&(__pyx_v_that->data[(__pyx_v_that->start + __pyx_v_start)]))); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 1560, __pyx_L1_error)
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;
 1561: 
 1562: 
+1563: cdef Block_* Block_GetSlice(const Block_* that, ssize_t start, ssize_t endex) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_GetSlice(Block_ const *__pyx_v_that, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_endex) {
  Py_ssize_t __pyx_v_ssize;
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_GetSlice", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Block_GetSlice", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1564:     cdef:
+1565:         ssize_t ssize = <ssize_t>(that.endex - that.start)
  __pyx_v_ssize = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 1566: 
+1567:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1568:         start += ssize  # anchor to end
    __pyx_v_start = (__pyx_v_start + __pyx_v_ssize);
+1569:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1570:         start = 0  # trim source start
    __pyx_v_start = 0;
 1571: 
+1572:     if endex < 0:
  __pyx_t_1 = ((__pyx_v_endex < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1573:         endex += ssize  # anchor to end
    __pyx_v_endex = (__pyx_v_endex + __pyx_v_ssize);
+1574:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1575:         endex = start  # clamp negative source length
    __pyx_v_endex = __pyx_v_start;
 1576: 
+1577:     return Block_GetSlice_(that, <size_t>start, <size_t>endex)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Block_GetSlice_(__pyx_v_that, ((size_t)__pyx_v_start), ((size_t)__pyx_v_endex)); if (unlikely(__pyx_t_2 == ((Block_ *)NULL))) __PYX_ERR(0, 1577, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;
 1578: 
 1579: 
+1580: cdef Block_* Block_WriteSlice_(Block_* that, size_t start, size_t endex,
static Block_ *__pyx_f_11cbytesparse_2_c_Block_WriteSlice_(Block_ *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex, size_t __pyx_v_size, byte_t const *__pyx_v_buffer) {
  size_t __pyx_v_size2;
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_WriteSlice_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Block_WriteSlice_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1581:                                size_t size, const byte_t* buffer) except NULL:
 1582:     cdef:
 1583:         size_t size2   # source size
 1584: 
+1585:     size2 = size
  __pyx_v_size2 = __pyx_v_size;
+1586:     size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 1587: 
+1588:     if start > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_start > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1589:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1589, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 1589, __pyx_L1_error)
+1590:     elif start > size:
  __pyx_t_1 = ((__pyx_v_start > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1591:         start = size  # trim target start
    __pyx_v_start = __pyx_v_size;
 1592: 
+1593:     if endex > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_endex > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1594:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1594, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 1594, __pyx_L1_error)
+1595:     elif endex > size:
  __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1596:         endex = size  # trim target end
    __pyx_v_endex = __pyx_v_size;
 1597: 
+1598:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1599:         endex = start  # clamp negative target length
    __pyx_v_endex = __pyx_v_start;
+1600:     size = endex - start
  __pyx_v_size = (__pyx_v_endex - __pyx_v_start);
 1601: 
+1602:     if size2 > size:  # enlarge target at range end
  __pyx_t_1 = ((__pyx_v_size2 > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L6;
  }
+1603:         that = Block_Reserve_(that, endex, size2 - size, False)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Reserve_(__pyx_v_that, __pyx_v_endex, (__pyx_v_size2 - __pyx_v_size), 0); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 1603, __pyx_L1_error)
    __pyx_v_that = __pyx_t_3;
 1604: 
+1605:     elif size > size2:  # shrink target at range end
  __pyx_t_1 = ((__pyx_v_size > __pyx_v_size2) != 0);
  if (__pyx_t_1) {
/* … */
  }
  __pyx_L6:;
+1606:         endex -= size - size2
    __pyx_v_endex = (__pyx_v_endex - (__pyx_v_size - __pyx_v_size2));
+1607:         that = Block_Delete_(that, endex, size - size2)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Delete_(__pyx_v_that, __pyx_v_endex, (__pyx_v_size - __pyx_v_size2)); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 1607, __pyx_L1_error)
    __pyx_v_that = __pyx_t_3;
 1608: 
+1609:     that = Block_Write_(that, start, size2, buffer)
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Write_(__pyx_v_that, __pyx_v_start, __pyx_v_size2, __pyx_v_buffer); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 1609, __pyx_L1_error)
  __pyx_v_that = __pyx_t_3;
+1610:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 1611: 
 1612: 
+1613: cdef Block_* Block_WriteSlice(Block_* that, ssize_t start, ssize_t endex,
static Block_ *__pyx_f_11cbytesparse_2_c_Block_WriteSlice(Block_ *__pyx_v_that, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_endex, size_t __pyx_v_size, byte_t const *__pyx_v_buffer) {
  Py_ssize_t __pyx_v_ssize;
  Py_ssize_t __pyx_v_ssize2;
  Py_ssize_t __pyx_v_start2;
  Py_ssize_t __pyx_v_endex2;
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_WriteSlice", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Block_WriteSlice", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1614:                               size_t size, const byte_t* buffer) except NULL:
 1615:     cdef:
 1616:         ssize_t ssize   # target size
 1617:         ssize_t ssize2  # source size
 1618:         ssize_t start2  # source start
 1619:         ssize_t endex2  # source end
 1620: 
+1621:     start2 = 0
  __pyx_v_start2 = 0;
+1622:     endex2 = <ssize_t>size
  __pyx_v_endex2 = ((Py_ssize_t)__pyx_v_size);
 1623: 
+1624:     ssize = <ssize_t>(that.endex - that.start)
  __pyx_v_ssize = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 1625: 
+1626:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1627:         start += ssize  # anchor to end
    __pyx_v_start = (__pyx_v_start + __pyx_v_ssize);
+1628:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
 1629:         # start2 -= start  # skip initial source data  # as per bytearray
+1630:         start = 0  # trim target start
    __pyx_v_start = 0;
+1631:     if start2 > endex2:
  __pyx_t_1 = ((__pyx_v_start2 > __pyx_v_endex2) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1632:         start2 = endex2  # clamp source start
    __pyx_v_start2 = __pyx_v_endex2;
 1633: 
+1634:     if endex < 0:
  __pyx_t_1 = ((__pyx_v_endex < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1635:         endex += ssize  # anchor to end
    __pyx_v_endex = (__pyx_v_endex + __pyx_v_ssize);
+1636:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1637:         endex = start  # clamp negative target length
    __pyx_v_endex = __pyx_v_start;
 1638: 
+1639:     if endex2 < start2:
  __pyx_t_1 = ((__pyx_v_endex2 < __pyx_v_start2) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1640:         endex2 = start2  # clamp negative source length
    __pyx_v_endex2 = __pyx_v_start2;
+1641:     ssize2 = endex2 - start2
  __pyx_v_ssize2 = (__pyx_v_endex2 - __pyx_v_start2);
 1642: 
+1643:     that = Block_WriteSlice_(that, <size_t>start, <size_t>endex, <size_t>ssize2, &buffer[start2])
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Block_WriteSlice_(__pyx_v_that, ((size_t)__pyx_v_start), ((size_t)__pyx_v_endex), ((size_t)__pyx_v_ssize2), (&(__pyx_v_buffer[__pyx_v_start2]))); if (unlikely(__pyx_t_2 == ((Block_ *)NULL))) __PYX_ERR(0, 1643, __pyx_L1_error)
  __pyx_v_that = __pyx_t_2;
+1644:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 1645: 
 1646: 
+1647: cdef Block_* Block_SetSlice_(Block_* that, size_t start, size_t endex,
static Block_ *__pyx_f_11cbytesparse_2_c_Block_SetSlice_(Block_ *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex, Block_ const *__pyx_v_src, size_t __pyx_v_start2, size_t __pyx_v_endex2) {
  size_t __pyx_v_size;
  size_t __pyx_v_size2;
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_SetSlice_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Block_SetSlice_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1648:                              const Block_* src, size_t start2, size_t endex2) except NULL:
 1649:     cdef:
 1650:         size_t size    # target size
 1651:         size_t size2   # source size
 1652: 
+1653:     size2 = src.endex - src.start
  __pyx_v_size2 = (__pyx_v_src->endex - __pyx_v_src->start);
 1654: 
+1655:     if start2 > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_start2 > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1656:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1656, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 1656, __pyx_L1_error)
+1657:     elif start2 > size2:
  __pyx_t_1 = ((__pyx_v_start2 > __pyx_v_size2) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1658:         start2 = size2  # trim source start
    __pyx_v_start2 = __pyx_v_size2;
 1659: 
+1660:     if endex2 > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_endex2 > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1661:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1661, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 1661, __pyx_L1_error)
+1662:     elif endex2 > size2:
  __pyx_t_1 = ((__pyx_v_endex2 > __pyx_v_size2) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1663:         endex2 = size2  # trim source end
    __pyx_v_endex2 = __pyx_v_size2;
 1664: 
+1665:     if endex2 < start2:
  __pyx_t_1 = ((__pyx_v_endex2 < __pyx_v_start2) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1666:         endex2 = start2  # clamp negative source length
    __pyx_v_endex2 = __pyx_v_start2;
+1667:     size2 = endex2 - start2
  __pyx_v_size2 = (__pyx_v_endex2 - __pyx_v_start2);
 1668: 
+1669:     size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 1670: 
+1671:     if start > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_start > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1672:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 1672, __pyx_L1_error)
+1673:     elif start > size:
  __pyx_t_1 = ((__pyx_v_start > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1674:         start = size  # trim target start
    __pyx_v_start = __pyx_v_size;
 1675: 
+1676:     if endex > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_endex > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1677:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1677, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 1677, __pyx_L1_error)
+1678:     elif endex > size:
  __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1679:         endex = size  # trim target end
    __pyx_v_endex = __pyx_v_size;
 1680: 
+1681:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1682:         endex = start  # clamp negative target length
    __pyx_v_endex = __pyx_v_start;
+1683:     size = endex - start
  __pyx_v_size = (__pyx_v_endex - __pyx_v_start);
 1684: 
+1685:     if size2 > size:  # enlarge target at range end
  __pyx_t_1 = ((__pyx_v_size2 > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L9;
  }
+1686:         that = Block_Reserve_(that, endex, size2 - size, False)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Reserve_(__pyx_v_that, __pyx_v_endex, (__pyx_v_size2 - __pyx_v_size), 0); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 1686, __pyx_L1_error)
    __pyx_v_that = __pyx_t_3;
 1687: 
+1688:     elif size > size2:  # shrink target at range end
  __pyx_t_1 = ((__pyx_v_size > __pyx_v_size2) != 0);
  if (__pyx_t_1) {
/* … */
  }
  __pyx_L9:;
+1689:         endex -= size - size2
    __pyx_v_endex = (__pyx_v_endex - (__pyx_v_size - __pyx_v_size2));
+1690:         that = Block_Delete_(that, endex, size - size2)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Delete_(__pyx_v_that, __pyx_v_endex, (__pyx_v_size - __pyx_v_size2)); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 1690, __pyx_L1_error)
    __pyx_v_that = __pyx_t_3;
 1691: 
+1692:     that = Block_Write_(that, start, size2, &src.data[src.start + start2])
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Write_(__pyx_v_that, __pyx_v_start, __pyx_v_size2, (&(__pyx_v_src->data[(__pyx_v_src->start + __pyx_v_start2)]))); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 1692, __pyx_L1_error)
  __pyx_v_that = __pyx_t_3;
+1693:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 1694: 
 1695: 
+1696: cdef Block_* Block_SetSlice(Block_* that, ssize_t start, ssize_t endex,
static Block_ *__pyx_f_11cbytesparse_2_c_Block_SetSlice(Block_ *__pyx_v_that, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_endex, Block_ const *__pyx_v_src, Py_ssize_t __pyx_v_start2, Py_ssize_t __pyx_v_endex2) {
  Py_ssize_t __pyx_v_ssize;
  Py_ssize_t __pyx_v_ssize2;
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_SetSlice", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Block_SetSlice", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1697:                             const Block_* src, ssize_t start2, ssize_t endex2) except NULL:
 1698:     cdef:
 1699:         ssize_t ssize   # target size
 1700:         ssize_t ssize2  # source size
 1701: 
+1702:     ssize = <ssize_t>(that.endex - that.start)
  __pyx_v_ssize = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
+1703:     ssize2 = <ssize_t>(src.endex - src.start)
  __pyx_v_ssize2 = ((Py_ssize_t)(__pyx_v_src->endex - __pyx_v_src->start));
 1704: 
+1705:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1706:         start += ssize  # anchor to target end
    __pyx_v_start = (__pyx_v_start + __pyx_v_ssize);
+1707:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
 1708:         # start2 -= start  # skip initial source data  # as per bytearray
+1709:         start = 0  # trim target start
    __pyx_v_start = 0;
 1710: 
+1711:     if endex < 0:
  __pyx_t_1 = ((__pyx_v_endex < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1712:         endex += ssize  # anchor to target end
    __pyx_v_endex = (__pyx_v_endex + __pyx_v_ssize);
+1713:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1714:         endex = start  # clamp negative target length
    __pyx_v_endex = __pyx_v_start;
 1715: 
+1716:     if start2 < 0:
  __pyx_t_1 = ((__pyx_v_start2 < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1717:         start2 += ssize2  # anchor to source end
    __pyx_v_start2 = (__pyx_v_start2 + __pyx_v_ssize2);
+1718:     if start2 < 0:
  __pyx_t_1 = ((__pyx_v_start2 < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1719:         start2 = 0  # trim source start
    __pyx_v_start2 = 0;
 1720: 
+1721:     if endex2 < 0:
  __pyx_t_1 = ((__pyx_v_endex2 < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1722:         endex2 += ssize2  # anchor to source end
    __pyx_v_endex2 = (__pyx_v_endex2 + __pyx_v_ssize2);
+1723:     if endex2 < start2:
  __pyx_t_1 = ((__pyx_v_endex2 < __pyx_v_start2) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1724:         endex2 = start2  # clamp negative source length
    __pyx_v_endex2 = __pyx_v_start2;
 1725: 
+1726:     that = Block_SetSlice_(that, <size_t>start, <size_t>endex, src, <size_t>start2, <size_t>endex2)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Block_SetSlice_(__pyx_v_that, ((size_t)__pyx_v_start), ((size_t)__pyx_v_endex), __pyx_v_src, ((size_t)__pyx_v_start2), ((size_t)__pyx_v_endex2)); if (unlikely(__pyx_t_2 == ((Block_ *)NULL))) __PYX_ERR(0, 1726, __pyx_L1_error)
  __pyx_v_that = __pyx_t_2;
+1727:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 1728: 
 1729: 
+1730: cdef Block_* Block_DelSlice_(Block_* that, size_t start, size_t endex) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_DelSlice_(Block_ *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex) {
  size_t __pyx_v_size;
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_DelSlice_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Block_DelSlice_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1731:     cdef:
 1732:         size_t size
 1733: 
+1734:     size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 1735: 
+1736:     if start > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_start > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1737:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1737, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 1737, __pyx_L1_error)
+1738:     elif start > size:
  __pyx_t_1 = ((__pyx_v_start > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1739:         start = size  # trim start
    __pyx_v_start = __pyx_v_size;
 1740: 
+1741:     if endex > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_endex > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1742:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1742, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 1742, __pyx_L1_error)
+1743:     elif endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+1744:         endex = start  # clamp negative length
    __pyx_v_endex = __pyx_v_start;
+1745:     elif endex > size:
  __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
  __pyx_L4:;
+1746:         endex = size  # trim end
    __pyx_v_endex = __pyx_v_size;
 1747: 
+1748:     that = Block_Delete_(that, start, (endex - start))
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Delete_(__pyx_v_that, __pyx_v_start, (__pyx_v_endex - __pyx_v_start)); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 1748, __pyx_L1_error)
  __pyx_v_that = __pyx_t_3;
+1749:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 1750: 
 1751: 
+1752: cdef Block_* Block_DelSlice(Block_* that, ssize_t start, ssize_t endex) except NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Block_DelSlice(Block_ *__pyx_v_that, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_endex) {
  Py_ssize_t __pyx_v_ssize;
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_DelSlice", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Block_DelSlice", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1753:     cdef:
 1754:         ssize_t ssize
 1755: 
+1756:     ssize = <ssize_t>(that.endex - that.start)
  __pyx_v_ssize = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 1757: 
+1758:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1759:         start += ssize  # anchor to end
    __pyx_v_start = (__pyx_v_start + __pyx_v_ssize);
+1760:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1761:         start = 0  # trim start
    __pyx_v_start = 0;
 1762: 
+1763:     if endex < 0:
  __pyx_t_1 = ((__pyx_v_endex < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1764:         endex += ssize  # anchor to end
    __pyx_v_endex = (__pyx_v_endex + __pyx_v_ssize);
+1765:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1766:         endex = start  # clamp negative length
    __pyx_v_endex = __pyx_v_start;
 1767: 
+1768:     that = Block_DelSlice_(that, <size_t>start, <size_t>endex)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Block_DelSlice_(__pyx_v_that, ((size_t)__pyx_v_start), ((size_t)__pyx_v_endex)); if (unlikely(__pyx_t_2 == ((Block_ *)NULL))) __PYX_ERR(0, 1768, __pyx_L1_error)
  __pyx_v_that = __pyx_t_2;
+1769:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 1770: 
 1771: 
+1772: cdef bytes Block_Bytes(const Block_* that):
static PyObject *__pyx_f_11cbytesparse_2_c_Block_Bytes(Block_ const *__pyx_v_that) {
  char *__pyx_v_ptr;
  Py_ssize_t __pyx_v_size;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Bytes", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Block_Bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1773:     cdef:
+1774:         char* ptr = <char*><void*>&that.data[that.start]
  __pyx_v_ptr = ((char *)((void *)(&(__pyx_v_that->data[__pyx_v_that->start]))));
+1775:         ssize_t size = <ssize_t>(that.endex - that.start)
  __pyx_v_size = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 1776: 
+1777:     return PyBytes_FromStringAndSize(ptr, size)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyBytes_FromStringAndSize(__pyx_v_ptr, __pyx_v_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1777, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1778: 
 1779: 
+1780: cdef bytearray Block_Bytearray(const Block_* that):
static PyObject *__pyx_f_11cbytesparse_2_c_Block_Bytearray(Block_ const *__pyx_v_that) {
  char *__pyx_v_ptr;
  Py_ssize_t __pyx_v_size;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_Bytearray", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Block_Bytearray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1781:     cdef:
+1782:         char* ptr = <char*><void*>&that.data[that.start]
  __pyx_v_ptr = ((char *)((void *)(&(__pyx_v_that->data[__pyx_v_that->start]))));
+1783:         ssize_t size = <ssize_t>(that.endex - that.start)
  __pyx_v_size = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 1784: 
+1785:     return PyByteArray_FromStringAndSize(ptr, size)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyByteArray_FromStringAndSize(__pyx_v_ptr, __pyx_v_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1785, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1786: 
 1787: 
+1788: cdef BlockView Block_View(Block_* that):
static struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_f_11cbytesparse_2_c_Block_View(Block_ *__pyx_v_that) {
  struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_view = 0;
  struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_View", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Block_View", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_view);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1789:     cdef:
 1790:         BlockView view
 1791: 
+1792:     view = BlockView()
  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_11cbytesparse_2_c_BlockView)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1792, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_view = ((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_t_1);
  __pyx_t_1 = 0;
+1793:     that = Block_Acquire(that)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Block_Acquire(__pyx_v_that); if (unlikely(__pyx_t_2 == ((Block_ *)NULL))) __PYX_ERR(0, 1793, __pyx_L1_error)
  __pyx_v_that = __pyx_t_2;
+1794:     view._block = that
  __pyx_v_view->_block = __pyx_v_that;
+1795:     view._start = that.start
  __pyx_t_3 = __pyx_v_that->start;
  __pyx_v_view->_start = __pyx_t_3;
+1796:     view._endex = that.endex
  __pyx_t_3 = __pyx_v_that->endex;
  __pyx_v_view->_endex = __pyx_t_3;
+1797:     return view
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_view));
  __pyx_r = __pyx_v_view;
  goto __pyx_L0;
 1798: 
 1799: 
+1800: cdef BlockView Block_ViewSlice_(Block_* that, size_t start, size_t endex):
static struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_f_11cbytesparse_2_c_Block_ViewSlice_(Block_ *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex) {
  size_t __pyx_v_size;
  struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_view = 0;
  struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_ViewSlice_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Block_ViewSlice_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_view);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1801:     cdef:
+1802:         size_t size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 1803:         BlockView view
 1804: 
+1805:     if start > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_start > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1806:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1806, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 1806, __pyx_L1_error)
+1807:     elif start > size:
  __pyx_t_1 = ((__pyx_v_start > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1808:         start = size  # trim source start
    __pyx_v_start = __pyx_v_size;
 1809: 
+1810:     if endex > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_endex > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1811:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1811, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 1811, __pyx_L1_error)
+1812:     elif endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+1813:         endex = start  # clamp negative source length
    __pyx_v_endex = __pyx_v_start;
+1814:     elif endex > size:
  __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
  __pyx_L4:;
+1815:         endex = size  # trim source end
    __pyx_v_endex = __pyx_v_size;
 1816: 
+1817:     view = BlockView()
  __pyx_t_2 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_11cbytesparse_2_c_BlockView)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1817, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_view = ((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_t_2);
  __pyx_t_2 = 0;
+1818:     that = Block_Acquire(that)
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Acquire(__pyx_v_that); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 1818, __pyx_L1_error)
  __pyx_v_that = __pyx_t_3;
+1819:     view._block = that
  __pyx_v_view->_block = __pyx_v_that;
+1820:     view._start = that.start + start
  __pyx_v_view->_start = (__pyx_v_that->start + __pyx_v_start);
+1821:     view._endex = that.start + endex
  __pyx_v_view->_endex = (__pyx_v_that->start + __pyx_v_endex);
+1822:     return view
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_view));
  __pyx_r = __pyx_v_view;
  goto __pyx_L0;
 1823: 
 1824: 
+1825: cdef BlockView Block_ViewSlice(Block_* that, ssize_t start, ssize_t endex):
static struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_f_11cbytesparse_2_c_Block_ViewSlice(Block_ *__pyx_v_that, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_endex) {
  Py_ssize_t __pyx_v_ssize;
  struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Block_ViewSlice", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Block_ViewSlice", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1826:     cdef:
 1827:         ssize_t ssize
 1828: 
+1829:     ssize = <ssize_t>(that.endex - that.start)
  __pyx_v_ssize = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 1830: 
+1831:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1832:         start += ssize  # anchor to end
    __pyx_v_start = (__pyx_v_start + __pyx_v_ssize);
+1833:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1834:         start = 0  # trim source start
    __pyx_v_start = 0;
 1835: 
+1836:     if endex < 0:
  __pyx_t_1 = ((__pyx_v_endex < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1837:         endex += ssize  # anchor to end
    __pyx_v_endex = (__pyx_v_endex + __pyx_v_ssize);
+1838:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+1839:         endex = start  # clamp negative source length
    __pyx_v_endex = __pyx_v_start;
 1840: 
+1841:     return Block_ViewSlice_(that, <size_t>start, <size_t>endex)
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __pyx_t_2 = ((PyObject *)__pyx_f_11cbytesparse_2_c_Block_ViewSlice_(__pyx_v_that, ((size_t)__pyx_v_start), ((size_t)__pyx_v_endex))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1841, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = ((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;
 1842: 
 1843: 
 1844: # ---------------------------------------------------------------------------------------------------------------------
 1845: 
+1846: cdef class BlockView:
struct __pyx_vtabstruct_11cbytesparse_2_c_BlockView {
  int (*check_)(struct __pyx_obj_11cbytesparse_2_c_BlockView *);
};
static struct __pyx_vtabstruct_11cbytesparse_2_c_BlockView *__pyx_vtabptr_11cbytesparse_2_c_BlockView;

 1847:     r"""Block viewer.
 1848: 
 1849:     Memory view around an underlying block slice, implementing Python's `buffer`
 1850:     protocol API.
 1851: 
 1852:     Accessing a block makes it read-only. Please ensure any views get
 1853:     disposed before trying to write to the memory block again.
 1854:     """
 1855: 
+1856:     def __cinit__(self: BlockView):
/* Python wrapper */
static int __pyx_pw_11cbytesparse_2_c_9BlockView_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_11cbytesparse_2_c_9BlockView_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_9BlockView___cinit__(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11cbytesparse_2_c_9BlockView___cinit__(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+1857:         self._block = NULL
  __pyx_v_self->_block = NULL;
 1858: 
+1859:     def __dealloc__(self: BlockView):
/* Python wrapper */
static void __pyx_pw_11cbytesparse_2_c_9BlockView_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_11cbytesparse_2_c_9BlockView_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_11cbytesparse_2_c_9BlockView_2__dealloc__(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_11cbytesparse_2_c_9BlockView_2__dealloc__(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__", 0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
+1860:         if self._block:
  __pyx_t_1 = (__pyx_v_self->_block != 0);
  if (__pyx_t_1) {
/* … */
  }
+1861:             self._block = Block_Release(self._block)
    __pyx_v_self->_block = __pyx_f_11cbytesparse_2_c_Block_Release(__pyx_v_self->_block);
 1862: 
+1863:     def __getbuffer__(self: BlockView, Py_buffer* buffer, int flags):
/* Python wrapper */
static CYTHON_UNUSED int __pyx_pw_11cbytesparse_2_c_9BlockView_5__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_buffer, int __pyx_v_flags); /*proto*/
static CYTHON_UNUSED int __pyx_pw_11cbytesparse_2_c_9BlockView_5__getbuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_buffer, int __pyx_v_flags) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_9BlockView_4__getbuffer__(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self), ((Py_buffer *)__pyx_v_buffer), ((int)__pyx_v_flags));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11cbytesparse_2_c_9BlockView_4__getbuffer__(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self, Py_buffer *__pyx_v_buffer, int __pyx_v_flags) {
  int __pyx_v_CONTIGUOUS;
  int __pyx_r;
  if (__pyx_v_buffer == NULL) {
    PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete");
    return -1;
  }
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getbuffer__", 0);
  __pyx_v_buffer->obj = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(__pyx_v_buffer->obj);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.BlockView.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  if (__pyx_v_buffer->obj != NULL) {
    __Pyx_GOTREF(__pyx_v_buffer->obj);
    __Pyx_DECREF(__pyx_v_buffer->obj); __pyx_v_buffer->obj = 0;
  }
  goto __pyx_L2;
  __pyx_L0:;
  if (__pyx_v_buffer->obj == Py_None) {
    __Pyx_GOTREF(__pyx_v_buffer->obj);
    __Pyx_DECREF(__pyx_v_buffer->obj); __pyx_v_buffer->obj = 0;
  }
  __pyx_L2:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1864:         cdef:
+1865:             int CONTIGUOUS = PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
  __pyx_v_CONTIGUOUS = ((PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS) | PyBUF_ANY_CONTIGUOUS);
 1866: 
+1867:         if flags & PyBUF_WRITABLE:
  __pyx_t_1 = ((__pyx_v_flags & PyBUF_WRITABLE) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+1868:             raise ValueError('read only access')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1868, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 1868, __pyx_L1_error)
/* … */
  __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_u_read_only_access); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 1868, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__9);
  __Pyx_GIVEREF(__pyx_tuple__9);
 1869: 
+1870:         self.check_()
  __pyx_t_1 = ((struct __pyx_vtabstruct_11cbytesparse_2_c_BlockView *)__pyx_v_self->__pyx_vtab)->check_(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1870, __pyx_L1_error)
 1871: 
 1872:         # self._block = Block_Acquire(self._block)
 1873: 
+1874:         buffer.buf = &self._block.data[self._start]
  __pyx_v_buffer->buf = (&(__pyx_v_self->_block->data[__pyx_v_self->_start]));
+1875:         buffer.obj = self
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  __Pyx_GOTREF(__pyx_v_buffer->obj);
  __Pyx_DECREF(__pyx_v_buffer->obj);
  __pyx_v_buffer->obj = ((PyObject *)__pyx_v_self);
+1876:         buffer.len = self._endex - self._start
  __pyx_v_buffer->len = (__pyx_v_self->_endex - __pyx_v_self->_start);
+1877:         buffer.itemsize = 1
  __pyx_v_buffer->itemsize = 1;
+1878:         buffer.readonly = 1
  __pyx_v_buffer->readonly = 1;
+1879:         buffer.ndim = 1
  __pyx_v_buffer->ndim = 1;
+1880:         buffer.format = <char*>'B' if flags & (PyBUF_FORMAT | CONTIGUOUS) else NULL
  if (((__pyx_v_flags & (PyBUF_FORMAT | __pyx_v_CONTIGUOUS)) != 0)) {
    __pyx_t_3 = ((char *)((char *)"B"));
  } else {
    __pyx_t_3 = NULL;
  }
  __pyx_v_buffer->format = __pyx_t_3;
+1881:         buffer.shape = &buffer.len if flags & (PyBUF_ND | CONTIGUOUS) else NULL
  if (((__pyx_v_flags & (PyBUF_ND | __pyx_v_CONTIGUOUS)) != 0)) {
    __pyx_t_4 = (&__pyx_v_buffer->len);
  } else {
    __pyx_t_4 = NULL;
  }
  __pyx_v_buffer->shape = __pyx_t_4;
+1882:         buffer.strides = &buffer.itemsize if flags & (PyBUF_STRIDES | CONTIGUOUS) else NULL
  if (((__pyx_v_flags & (PyBUF_STRIDES | __pyx_v_CONTIGUOUS)) != 0)) {
    __pyx_t_4 = (&__pyx_v_buffer->itemsize);
  } else {
    __pyx_t_4 = NULL;
  }
  __pyx_v_buffer->strides = __pyx_t_4;
+1883:         buffer.suboffsets = NULL
  __pyx_v_buffer->suboffsets = NULL;
+1884:         buffer.internal = NULL
  __pyx_v_buffer->internal = NULL;
 1885: 
+1886:     def __releasebuffer__(self: BlockView, Py_buffer* buffer):
/* Python wrapper */
static CYTHON_UNUSED void __pyx_pw_11cbytesparse_2_c_9BlockView_7__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_buffer); /*proto*/
static CYTHON_UNUSED void __pyx_pw_11cbytesparse_2_c_9BlockView_7__releasebuffer__(PyObject *__pyx_v_self, Py_buffer *__pyx_v_buffer) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__releasebuffer__ (wrapper)", 0);
  __pyx_pf_11cbytesparse_2_c_9BlockView_6__releasebuffer__(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self), ((Py_buffer *)__pyx_v_buffer));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_11cbytesparse_2_c_9BlockView_6__releasebuffer__(CYTHON_UNUSED struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self, CYTHON_UNUSED Py_buffer *__pyx_v_buffer) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__releasebuffer__", 0);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
 1887:         # if self._block:
 1888:         #     self._block = Block_Release(self._block)
 1889:         pass
 1890: 
+1891:     def __repr__(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_9__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_9__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_9BlockView_8__repr__(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_9BlockView_8__repr__(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.BlockView.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1892:         self: BlockView,
 1893:     ) -> str:
 1894: 
+1895:         return repr(str(self))
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_Repr(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 1896: 
+1897:     def __str__(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_11__str__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_11__str__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_9BlockView_10__str__(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_9BlockView_10__str__(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self) {
  Block_ const *__pyx_v_block;
  size_t __pyx_v_size;
  addr_t __pyx_v_start;
  addr_t __pyx_v_endex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("cbytesparse._c.BlockView.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1898:         self: BlockView,
 1899:     ) -> str:
 1900:         cdef:
+1901:             const Block_* block = self._block
  __pyx_t_1 = __pyx_v_self->_block;
  __pyx_v_block = __pyx_t_1;
+1902:             size_t size = self._endex - self._start
  __pyx_v_size = (__pyx_v_self->_endex - __pyx_v_self->_start);
 1903:             addr_t start
 1904:             addr_t endex
 1905: 
+1906:         self.check_()
  __pyx_t_2 = ((struct __pyx_vtabstruct_11cbytesparse_2_c_BlockView *)__pyx_v_self->__pyx_vtab)->check_(__pyx_v_self); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1906, __pyx_L1_error)
 1907: 
+1908:         if size > STR_MAX_CONTENT_SIZE:
  __pyx_t_3 = __Pyx_PyInt_FromSize_t(__pyx_v_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_STR_MAX_CONTENT_SIZE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_GT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1908, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1908, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__pyx_t_2) {
/* … */
  }
+1909:             start = block.address
    __pyx_t_6 = __pyx_v_block->address;
    __pyx_v_start = __pyx_t_6;
+1910:             CheckAddAddrU(start, size)
    __pyx_t_7 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_start, __pyx_v_size); if (unlikely(__pyx_t_7 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 1910, __pyx_L1_error)
+1911:             endex = start + size
    __pyx_v_endex = (__pyx_v_start + __pyx_v_size);
+1912:             return f'<{type(self).__name__}[0x{start:X}:0x{endex:X}]@0x{<uintptr_t><void*>self:X}>'
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_5 = PyTuple_New(9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = 0;
    __pyx_t_9 = 127;
    __Pyx_INCREF(__pyx_kp_u__10);
    __pyx_t_8 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__10);
    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u__10);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_9 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_9) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_9;
    __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_INCREF(__pyx_kp_u_0x);
    __pyx_t_8 += 3;
    __Pyx_GIVEREF(__pyx_kp_u_0x);
    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u_0x);
    __pyx_t_3 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_start); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_Format(__pyx_t_3, __pyx_n_u_X); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_9 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_9) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_9;
    __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_4);
    __pyx_t_4 = 0;
    __Pyx_INCREF(__pyx_kp_u_0x_2);
    __pyx_t_8 += 3;
    __Pyx_GIVEREF(__pyx_kp_u_0x_2);
    PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_kp_u_0x_2);
    __pyx_t_4 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_endex); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_Format(__pyx_t_4, __pyx_n_u_X); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_9 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_9) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_9;
    __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_5, 5, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_INCREF(__pyx_kp_u_0x_3);
    __pyx_t_8 += 4;
    __Pyx_GIVEREF(__pyx_kp_u_0x_3);
    PyTuple_SET_ITEM(__pyx_t_5, 6, __pyx_kp_u_0x_3);
    __pyx_t_3 = __Pyx_PyInt_FromSize_t(((uintptr_t)((void *)__pyx_v_self))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_Format(__pyx_t_3, __pyx_n_u_X); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_9 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_9) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_9;
    __pyx_t_8 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_5, 7, __pyx_t_4);
    __pyx_t_4 = 0;
    __Pyx_INCREF(__pyx_kp_u__11);
    __pyx_t_8 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__11);
    PyTuple_SET_ITEM(__pyx_t_5, 8, __pyx_kp_u__11);
    __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_5, 9, __pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1912, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
 1913: 
 1914:         else:
+1915:             return self.memview.tobytes().decode('ascii')
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1915, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_tobytes); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1915, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_5 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_10);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1915, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_decode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1915, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_10);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_10, function);
      }
    }
    __pyx_t_4 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_5, __pyx_n_u_ascii) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_n_u_ascii);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1915, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
  }
 1916: 
+1917:     def __bool__(
/* Python wrapper */
static int __pyx_pw_11cbytesparse_2_c_9BlockView_13__bool__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_11cbytesparse_2_c_9BlockView_13__bool__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_9BlockView_12__bool__(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11cbytesparse_2_c_9BlockView_12__bool__(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.BlockView.__bool__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1918:         self: BlockView,
 1919:     ) -> bool:
 1920:         r"""Has any data.
 1921: 
 1922:         Returns:
 1923:             bool: Non-null slice length.
 1924:         """
 1925: 
+1926:         self.check_()
  __pyx_t_1 = ((struct __pyx_vtabstruct_11cbytesparse_2_c_BlockView *)__pyx_v_self->__pyx_vtab)->check_(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1926, __pyx_L1_error)
+1927:         return self._start < self._endex
  __pyx_r = (__pyx_v_self->_start < __pyx_v_self->_endex);
  goto __pyx_L0;
 1928: 
+1929:     def __bytes__(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_15__bytes__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_9BlockView_14__bytes__[] = "BlockView.__bytes__(self: BlockView) -> bytes\nConverts into bytes.\n\n        Returns:\n            bytes: :class:`bytes` clone of the viewed slice.\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_9BlockView_15__bytes__ = {"__bytes__", (PyCFunction)__pyx_pw_11cbytesparse_2_c_9BlockView_15__bytes__, METH_NOARGS, __pyx_doc_11cbytesparse_2_c_9BlockView_14__bytes__};
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_15__bytes__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bytes__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_9BlockView_14__bytes__(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_9BlockView_14__bytes__(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bytes__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.BlockView.__bytes__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__61 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__61)) __PYX_ERR(0, 1929, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__61);
  __Pyx_GIVEREF(__pyx_tuple__61);
/* … */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1929, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_self, __pyx_n_u_BlockView) < 0) __PYX_ERR(0, 1929, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_return, __pyx_n_u_bytes_2) < 0) __PYX_ERR(0, 1929, __pyx_L1_error)
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_9BlockView_15__bytes__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_BlockView___bytes, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__62)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1929, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_BlockView->tp_dict, __pyx_n_s_bytes, __pyx_t_5) < 0) __PYX_ERR(0, 1929, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_BlockView);
  __pyx_codeobj__62 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__61, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_bytes, 1929, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__62)) __PYX_ERR(0, 1929, __pyx_L1_error)
 1930:         self: BlockView,
 1931:     ) -> bytes:
 1932:         r"""Converts into bytes.
 1933: 
 1934:         Returns:
 1935:             bytes: :class:`bytes` clone of the viewed slice.
 1936:         """
 1937: 
+1938:         return bytes(self.memview)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1938, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1938, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;
 1939: 
 1940:     @property
+1941:     def memview(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_7memview_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_7memview_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_9BlockView_7memview___get__(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_9BlockView_7memview___get__(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cbytesparse._c.BlockView.memview.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1942:         self: BlockView,
 1943:     ) -> memoryview:
 1944:         r"""memoryview: Python :class:`memoryview` wrapper."""
 1945: 
+1946:         self.check_()
  __pyx_t_1 = ((struct __pyx_vtabstruct_11cbytesparse_2_c_BlockView *)__pyx_v_self->__pyx_vtab)->check_(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1946, __pyx_L1_error)
+1947:         if self._memview is None:
  __pyx_t_1 = (__pyx_v_self->_memview == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
  }
+1948:             self._memview = memoryview(self)
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_memoryview); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1948, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1948, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GIVEREF(__pyx_t_4);
    __Pyx_GOTREF(__pyx_v_self->_memview);
    __Pyx_DECREF(__pyx_v_self->_memview);
    __pyx_v_self->_memview = __pyx_t_4;
    __pyx_t_4 = 0;
+1949:         return self._memview
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->_memview);
  __pyx_r = __pyx_v_self->_memview;
  goto __pyx_L0;
 1950: 
+1951:     def __len__(
/* Python wrapper */
static Py_ssize_t __pyx_pw_11cbytesparse_2_c_9BlockView_17__len__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_9BlockView_16__len__[] = "int: Slice length.";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_11cbytesparse_2_c_9BlockView_16__len__;
#endif
static Py_ssize_t __pyx_pw_11cbytesparse_2_c_9BlockView_17__len__(PyObject *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_9BlockView_16__len__(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static Py_ssize_t __pyx_pf_11cbytesparse_2_c_9BlockView_16__len__(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.BlockView.__len__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1952:         self: BlockView,
 1953:     ) -> Address:
 1954:         r"""int: Slice length."""
 1955: 
+1956:         self.check_()
  __pyx_t_1 = ((struct __pyx_vtabstruct_11cbytesparse_2_c_BlockView *)__pyx_v_self->__pyx_vtab)->check_(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1956, __pyx_L1_error)
+1957:         return self._endex - self._start
  __pyx_r = (__pyx_v_self->_endex - __pyx_v_self->_start);
  goto __pyx_L0;
 1958: 
+1959:     def __getattr__(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_19__getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_19__getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_attr), (&PyUnicode_Type), 1, "attr", 1))) __PYX_ERR(0, 1961, __pyx_L1_error)
  __pyx_r = __pyx_pf_11cbytesparse_2_c_9BlockView_18__getattr__(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self), ((PyObject*)__pyx_v_attr));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_9BlockView_18__getattr__(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self, PyObject *__pyx_v_attr) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getattr__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.BlockView.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1960:         self: BlockView,
 1961:         attr: str,
 1962:     ) -> Any:
 1963: 
+1964:         return getattr(self.memview, attr)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_GetAttr(__pyx_t_1, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 1965: 
+1966:     def __getitem__(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_21__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_21__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_9BlockView_20__getitem__(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self), ((PyObject *)__pyx_v_item));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_9BlockView_20__getitem__(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self, PyObject *__pyx_v_item) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.BlockView.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1967:         self: BlockView,
 1968:         item: Any,
 1969:     ) -> Any:
 1970: 
+1971:         self.check_()
  __pyx_t_1 = ((struct __pyx_vtabstruct_11cbytesparse_2_c_BlockView *)__pyx_v_self->__pyx_vtab)->check_(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1971, __pyx_L1_error)
+1972:         return self.memview[item]
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_v_item); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1972, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 1973: 
 1974:     @property
+1975:     def start(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_5start_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_5start_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_9BlockView_5start___get__(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_9BlockView_5start___get__(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.BlockView.start.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1976:         self: BlockView,
 1977:     ) -> Address:
 1978:         r"""int: Slice inclusive start address."""
 1979: 
+1980:         self.check()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_check); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1981:         return self._block.address
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_self->_block->address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1982: 
 1983:     @property
+1984:     def endex(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_5endex_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_5endex_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_9BlockView_5endex___get__(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_9BlockView_5endex___get__(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.BlockView.endex.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1985:         self: BlockView,
 1986:     ) -> Address:
 1987:         r"""int: Slice exclusive end address."""
 1988: 
+1989:         self.check()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_check); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+1990:         return self._block.address + self._endex - self._start
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_uint_fast64_t(((__pyx_v_self->_block->address + __pyx_v_self->_endex) - __pyx_v_self->_start)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1990, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 1991: 
 1992:     @property
+1993:     def endin(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_5endin_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_5endin_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_9BlockView_5endin___get__(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_9BlockView_5endin___get__(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.BlockView.endin.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 1994:         self: BlockView,
 1995:     ) -> Address:
 1996:         r"""int: Slice inclusive end address."""
 1997: 
+1998:         return self.endex - 1
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_endex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_SubtractObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 1999: 
 2000:     @property
+2001:     def acquired(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_8acquired_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_8acquired_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_9BlockView_8acquired___get__(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_9BlockView_8acquired___get__(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.BlockView.acquired.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2002:         self: BlockView,
 2003:     ) -> bool:
 2004:         r"""bool: Underlying block currently acquired."""
 2005: 
+2006:         return self._block != NULL
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong((__pyx_v_self->_block != NULL)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2006, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 2007: 
+2008:     cdef bint check_(self) except -1:
static int __pyx_f_11cbytesparse_2_c_9BlockView_check_(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("check_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.BlockView.check_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2009:         if self._block == NULL:
  __pyx_t_1 = ((__pyx_v_self->_block == NULL) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2010:             raise RuntimeError('null internal data pointer')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_RuntimeError, __pyx_tuple__12, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2010, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2010, __pyx_L1_error)
/* … */
  __pyx_tuple__12 = PyTuple_Pack(1, __pyx_kp_u_null_internal_data_pointer); if (unlikely(!__pyx_tuple__12)) __PYX_ERR(0, 2010, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__12);
  __Pyx_GIVEREF(__pyx_tuple__12);
 2011: 
+2012:     def check(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_23check(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_9BlockView_22check[] = "BlockView.check(self: BlockView) -> None\nChecks for data consistency.";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_9BlockView_23check = {"check", (PyCFunction)__pyx_pw_11cbytesparse_2_c_9BlockView_23check, METH_NOARGS, __pyx_doc_11cbytesparse_2_c_9BlockView_22check};
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_23check(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("check (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_9BlockView_22check(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_9BlockView_22check(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("check", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.BlockView.check", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__63 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__63)) __PYX_ERR(0, 2012, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__63);
  __Pyx_GIVEREF(__pyx_tuple__63);
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2012, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_self, __pyx_n_u_BlockView) < 0) __PYX_ERR(0, 2012, __pyx_L1_error)
/* … */
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_9BlockView_23check, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_BlockView_check, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__64)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2012, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_BlockView->tp_dict, __pyx_n_s_check, __pyx_t_3) < 0) __PYX_ERR(0, 2012, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_BlockView);
  __pyx_codeobj__64 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__63, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_check, 2012, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__64)) __PYX_ERR(0, 2012, __pyx_L1_error)
 2013:         self: BlockView,
+2014:     ) -> None:
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, Py_None) < 0) __PYX_ERR(0, 2012, __pyx_L1_error)
 2015:         r"""Checks for data consistency."""
 2016: 
+2017:         self.check_()
  __pyx_t_1 = ((struct __pyx_vtabstruct_11cbytesparse_2_c_BlockView *)__pyx_v_self->__pyx_vtab)->check_(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2017, __pyx_L1_error)
 2018: 
+2019:     def dispose(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_25dispose(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_9BlockView_24dispose[] = "BlockView.dispose(self: BlockView) -> None\nForces object disposal.\n\n        Useful to make sure that any memory blocks are unreferenced before automatic\n        garbage collection.\n\n        Any access to the object after calling this function could raise exceptions.\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_9BlockView_25dispose = {"dispose", (PyCFunction)__pyx_pw_11cbytesparse_2_c_9BlockView_25dispose, METH_NOARGS, __pyx_doc_11cbytesparse_2_c_9BlockView_24dispose};
static PyObject *__pyx_pw_11cbytesparse_2_c_9BlockView_25dispose(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dispose (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_9BlockView_24dispose(((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_9BlockView_24dispose(struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("dispose", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__65 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__65)) __PYX_ERR(0, 2019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__65);
  __Pyx_GIVEREF(__pyx_tuple__65);
/* … */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_self, __pyx_n_u_BlockView) < 0) __PYX_ERR(0, 2019, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_9BlockView_25dispose, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_BlockView_dispose, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__66)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2019, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_3);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_BlockView->tp_dict, __pyx_n_s_dispose, __pyx_t_5) < 0) __PYX_ERR(0, 2019, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_BlockView);
  __pyx_codeobj__66 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__65, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_dispose, 2019, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__66)) __PYX_ERR(0, 2019, __pyx_L1_error)
 2020:         self: BlockView,
+2021:     ) -> None:
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_return, Py_None) < 0) __PYX_ERR(0, 2019, __pyx_L1_error)
 2022:         r"""Forces object disposal.
 2023: 
 2024:         Useful to make sure that any memory blocks are unreferenced before automatic
 2025:         garbage collection.
 2026: 
 2027:         Any access to the object after calling this function could raise exceptions.
 2028:         """
 2029: 
+2030:         if self._block:
  __pyx_t_1 = (__pyx_v_self->_block != 0);
  if (__pyx_t_1) {
/* … */
  }
+2031:             self._block = Block_Release(self._block)
    __pyx_v_self->_block = __pyx_f_11cbytesparse_2_c_Block_Release(__pyx_v_self->_block);
 2032: 
 2033: 
 2034: # =====================================================================================================================
 2035: 
+2036: cdef Rack_* Rack_Alloc(size_t size) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Alloc(size_t __pyx_v_size) {
  Rack_ *__pyx_v_that;
  size_t __pyx_v_allocated;
  size_t __pyx_v_actual;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Alloc", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Rack_Alloc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2037:     cdef:
+2038:         Rack_* that = NULL
  __pyx_v_that = NULL;
 2039:         size_t allocated
 2040:         size_t actual
 2041: 
+2042:     if size > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_size > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2043:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2043, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2043, __pyx_L1_error)
 2044: 
 2045:     # Allocate as per request
+2046:     allocated = Upsize(0, size)
  __pyx_v_allocated = __pyx_f_11cbytesparse_2_c_Upsize(0, __pyx_v_size);
+2047:     if allocated > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_allocated > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2048:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 2048, __pyx_L1_error)
 2049: 
+2050:     actual = Rack_HEADING + (allocated * sizeof(Block_*))
  __pyx_v_actual = (Rack_HEADING + (__pyx_v_allocated * (sizeof(Block_ *))));
+2051:     that = <Rack_*>PyMem_Calloc(actual, 1)
  __pyx_v_that = ((Rack_ *)__pyx_f_11cbytesparse_2_c_PyMem_Calloc(__pyx_v_actual, 1));
+2052:     if that == NULL:
  __pyx_t_1 = ((__pyx_v_that == NULL) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2053:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 2053, __pyx_L1_error)
 2054: 
+2055:     that.allocated = allocated
  __pyx_v_that->allocated = __pyx_v_allocated;
+2056:     that.start = MARGIN  # leave some initial room
  __pyx_v_that->start = MARGIN;
+2057:     that.endex = that.start + size
  __pyx_v_that->endex = (__pyx_v_that->start + __pyx_v_size);
+2058:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2059: 
 2060: 
+2061: cdef Rack_* Rack_Free(Rack_* that):
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Free(Rack_ *__pyx_v_that) {
  size_t __pyx_v_index;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Free", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2062:     cdef:
 2063:         size_t index
 2064: 
+2065:     if that:
  __pyx_t_1 = (__pyx_v_that != 0);
  if (__pyx_t_1) {
/* … */
  }
 2066:         # Decrement data referencing
+2067:         for index in range(that.start, that.endex):
    __pyx_t_2 = __pyx_v_that->endex;
    __pyx_t_3 = __pyx_t_2;
    for (__pyx_t_4 = __pyx_v_that->start; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
      __pyx_v_index = __pyx_t_4;
+2068:             that.blocks[index] = Block_Release(that.blocks[index])
      (__pyx_v_that->blocks[__pyx_v_index]) = __pyx_f_11cbytesparse_2_c_Block_Release((__pyx_v_that->blocks[__pyx_v_index]));
    }
+2069:         PyMem_Free(that)
    PyMem_Free(__pyx_v_that);
+2070:     return NULL
  __pyx_r = NULL;
  goto __pyx_L0;
 2071: 
 2072: 
+2073: cdef Rack_* Rack_ShallowCopy(const Rack_* other) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_ShallowCopy(Rack_ const *__pyx_v_other) {
  Rack_ *__pyx_v_that;
  size_t __pyx_v_start1;
  size_t __pyx_v_start2;
  size_t __pyx_v_offset;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_ShallowCopy", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("cbytesparse._c.Rack_ShallowCopy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2074:     cdef:
+2075:         Rack_* that = Rack_Alloc(other.endex - other.start)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Alloc((__pyx_v_other->endex - __pyx_v_other->start)); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 2075, __pyx_L1_error)
  __pyx_v_that = __pyx_t_1;
+2076:         size_t start1 = that.start
  __pyx_t_2 = __pyx_v_that->start;
  __pyx_v_start1 = __pyx_t_2;
+2077:         size_t start2 = other.start
  __pyx_t_2 = __pyx_v_other->start;
  __pyx_v_start2 = __pyx_t_2;
 2078:         size_t offset
 2079: 
+2080:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
/* … */
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+2081:         for offset in range(that.endex - that.start):
      __pyx_t_2 = (__pyx_v_that->endex - __pyx_v_that->start);
      __pyx_t_6 = __pyx_t_2;
      for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
        __pyx_v_offset = __pyx_t_7;
+2082:             that.blocks[start1 + offset] = Block_Acquire(other.blocks[start2 + offset])
        __pyx_t_8 = __pyx_f_11cbytesparse_2_c_Block_Acquire((__pyx_v_other->blocks[(__pyx_v_start2 + __pyx_v_offset)])); if (unlikely(__pyx_t_8 == ((Block_ *)NULL))) __PYX_ERR(0, 2082, __pyx_L3_error)
        (__pyx_v_that->blocks[(__pyx_v_start1 + __pyx_v_offset)]) = __pyx_t_8;
      }
+2083:     except:
    /*except:*/ {
      __Pyx_AddTraceback("cbytesparse._c.Rack_ShallowCopy", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0) __PYX_ERR(0, 2083, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_GOTREF(__pyx_t_11);
+2084:         that = Rack_Free(that)
      __pyx_v_that = __pyx_f_11cbytesparse_2_c_Rack_Free(__pyx_v_that);
+2085:         raise
      __Pyx_GIVEREF(__pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ErrRestoreWithState(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; 
      __PYX_ERR(0, 2085, __pyx_L5_except_error)
    }
    __pyx_L5_except_error:;
+2086:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2087: 
 2088: 
+2089: cdef Rack_* Rack_Copy(const Rack_* other) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Copy(Rack_ const *__pyx_v_other) {
  Rack_ *__pyx_v_that;
  size_t __pyx_v_start1;
  size_t __pyx_v_start2;
  size_t __pyx_v_offset;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Copy", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("cbytesparse._c.Rack_Copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2090:     cdef:
+2091:         Rack_* that = Rack_Alloc(other.endex - other.start)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Alloc((__pyx_v_other->endex - __pyx_v_other->start)); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 2091, __pyx_L1_error)
  __pyx_v_that = __pyx_t_1;
+2092:         size_t start1 = that.start
  __pyx_t_2 = __pyx_v_that->start;
  __pyx_v_start1 = __pyx_t_2;
+2093:         size_t start2 = other.start
  __pyx_t_2 = __pyx_v_other->start;
  __pyx_v_start2 = __pyx_t_2;
 2094:         size_t offset
 2095: 
+2096:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
/* … */
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+2097:         for offset in range(that.endex - that.start):
      __pyx_t_2 = (__pyx_v_that->endex - __pyx_v_that->start);
      __pyx_t_6 = __pyx_t_2;
      for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
        __pyx_v_offset = __pyx_t_7;
+2098:             that.blocks[start1 + offset] = Block_Copy(other.blocks[start2 + offset])
        __pyx_t_8 = __pyx_f_11cbytesparse_2_c_Block_Copy((__pyx_v_other->blocks[(__pyx_v_start2 + __pyx_v_offset)])); if (unlikely(__pyx_t_8 == ((Block_ *)NULL))) __PYX_ERR(0, 2098, __pyx_L3_error)
        (__pyx_v_that->blocks[(__pyx_v_start1 + __pyx_v_offset)]) = __pyx_t_8;
      }
+2099:     except:
    /*except:*/ {
      __Pyx_AddTraceback("cbytesparse._c.Rack_Copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0) __PYX_ERR(0, 2099, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_GOTREF(__pyx_t_11);
+2100:         that = Rack_Free(that)
      __pyx_v_that = __pyx_f_11cbytesparse_2_c_Rack_Free(__pyx_v_that);
+2101:         raise
      __Pyx_GIVEREF(__pyx_t_9);
      __Pyx_GIVEREF(__pyx_t_10);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ErrRestoreWithState(__pyx_t_9, __pyx_t_10, __pyx_t_11);
      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; 
      __PYX_ERR(0, 2101, __pyx_L5_except_error)
    }
    __pyx_L5_except_error:;
+2102:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2103: 
 2104: 
+2105: cdef Rack_* Rack_FromObject(object obj, saddr_t offset) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_FromObject(PyObject *__pyx_v_obj, saddr_t __pyx_v_offset) {
  Rack_ *__pyx_v_that;
  size_t __pyx_v_size;
  size_t __pyx_v_index;
  addr_t __pyx_v_address;
  PyObject *__pyx_v_data = NULL;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_FromObject", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_XDECREF(__pyx_t_22);
  __Pyx_XDECREF(__pyx_t_23);
  __Pyx_XDECREF(__pyx_t_24);
  __Pyx_AddTraceback("cbytesparse._c.Rack_FromObject", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_data);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2106:     cdef:
+2107:         Rack_* that = NULL
  __pyx_v_that = NULL;
 2108:         size_t size
 2109:         size_t index
 2110:         addr_t address
 2111: 
+2112:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
    __Pyx_XDECREF(__pyx_t_22); __pyx_t_22 = 0;
    __Pyx_XDECREF(__pyx_t_23); __pyx_t_23 = 0;
    __Pyx_XDECREF(__pyx_t_24); __pyx_t_24 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+2113:         try:
      {
        /*try:*/ {
/* … */
        }
/* … */
        __Pyx_XGIVEREF(__pyx_t_4);
        __Pyx_XGIVEREF(__pyx_t_5);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
        goto __pyx_L3_error;
        __pyx_L10_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_4);
        __Pyx_XGIVEREF(__pyx_t_5);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
        __pyx_L14_try_end:;
      }
+2114:             size = len(obj)
          __pyx_t_7 = PyObject_Length(__pyx_v_obj); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(0, 2114, __pyx_L9_error)
          __pyx_v_size = __pyx_t_7;
+2115:         except TypeError:
        __pyx_t_21 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
        if (__pyx_t_21) {
          __Pyx_AddTraceback("cbytesparse._c.Rack_FromObject", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_12, &__pyx_t_14) < 0) __PYX_ERR(0, 2115, __pyx_L11_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_GOTREF(__pyx_t_14);
+2116:             that = Rack_Alloc(0)
          __pyx_t_8 = __pyx_f_11cbytesparse_2_c_Rack_Alloc(0); if (unlikely(__pyx_t_8 == ((Rack_ *)NULL))) __PYX_ERR(0, 2116, __pyx_L11_except_error)
          __pyx_v_that = __pyx_t_8;
+2117:             for address, data in obj:
          if (likely(PyList_CheckExact(__pyx_v_obj)) || PyTuple_CheckExact(__pyx_v_obj)) {
            __pyx_t_13 = __pyx_v_obj; __Pyx_INCREF(__pyx_t_13); __pyx_t_7 = 0;
            __pyx_t_11 = NULL;
          } else {
            __pyx_t_7 = -1; __pyx_t_13 = PyObject_GetIter(__pyx_v_obj); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2117, __pyx_L11_except_error)
            __Pyx_GOTREF(__pyx_t_13);
            __pyx_t_11 = Py_TYPE(__pyx_t_13)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2117, __pyx_L11_except_error)
          }
          for (;;) {
            if (likely(!__pyx_t_11)) {
              if (likely(PyList_CheckExact(__pyx_t_13))) {
                if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_13)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_15 = PyList_GET_ITEM(__pyx_t_13, __pyx_t_7); __Pyx_INCREF(__pyx_t_15); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 2117, __pyx_L11_except_error)
                #else
                __pyx_t_15 = PySequence_ITEM(__pyx_t_13, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2117, __pyx_L11_except_error)
                __Pyx_GOTREF(__pyx_t_15);
                #endif
              } else {
                if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_13)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_15 = PyTuple_GET_ITEM(__pyx_t_13, __pyx_t_7); __Pyx_INCREF(__pyx_t_15); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 2117, __pyx_L11_except_error)
                #else
                __pyx_t_15 = PySequence_ITEM(__pyx_t_13, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2117, __pyx_L11_except_error)
                __Pyx_GOTREF(__pyx_t_15);
                #endif
              }
            } else {
              __pyx_t_15 = __pyx_t_11(__pyx_t_13);
              if (unlikely(!__pyx_t_15)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                  else __PYX_ERR(0, 2117, __pyx_L11_except_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_15);
            }
            if ((likely(PyTuple_CheckExact(__pyx_t_15))) || (PyList_CheckExact(__pyx_t_15))) {
              PyObject* sequence = __pyx_t_15;
              Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
              if (unlikely(size != 2)) {
                if (size > 2) __Pyx_RaiseTooManyValuesError(2);
                else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
                __PYX_ERR(0, 2117, __pyx_L11_except_error)
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              if (likely(PyTuple_CheckExact(sequence))) {
                __pyx_t_22 = PyTuple_GET_ITEM(sequence, 0); 
                __pyx_t_23 = PyTuple_GET_ITEM(sequence, 1); 
              } else {
                __pyx_t_22 = PyList_GET_ITEM(sequence, 0); 
                __pyx_t_23 = PyList_GET_ITEM(sequence, 1); 
              }
              __Pyx_INCREF(__pyx_t_22);
              __Pyx_INCREF(__pyx_t_23);
              #else
              __pyx_t_22 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_22)) __PYX_ERR(0, 2117, __pyx_L11_except_error)
              __Pyx_GOTREF(__pyx_t_22);
              __pyx_t_23 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_23)) __PYX_ERR(0, 2117, __pyx_L11_except_error)
              __Pyx_GOTREF(__pyx_t_23);
              #endif
              __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
            } else {
              Py_ssize_t index = -1;
              __pyx_t_24 = PyObject_GetIter(__pyx_t_15); if (unlikely(!__pyx_t_24)) __PYX_ERR(0, 2117, __pyx_L11_except_error)
              __Pyx_GOTREF(__pyx_t_24);
              __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
              __pyx_t_16 = Py_TYPE(__pyx_t_24)->tp_iternext;
              index = 0; __pyx_t_22 = __pyx_t_16(__pyx_t_24); if (unlikely(!__pyx_t_22)) goto __pyx_L24_unpacking_failed;
              __Pyx_GOTREF(__pyx_t_22);
              index = 1; __pyx_t_23 = __pyx_t_16(__pyx_t_24); if (unlikely(!__pyx_t_23)) goto __pyx_L24_unpacking_failed;
              __Pyx_GOTREF(__pyx_t_23);
              if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_24), 2) < 0) __PYX_ERR(0, 2117, __pyx_L11_except_error)
              __pyx_t_16 = NULL;
              __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
              goto __pyx_L25_unpacking_done;
              __pyx_L24_unpacking_failed:;
              __Pyx_DECREF(__pyx_t_24); __pyx_t_24 = 0;
              __pyx_t_16 = NULL;
              if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
              __PYX_ERR(0, 2117, __pyx_L11_except_error)
              __pyx_L25_unpacking_done:;
            }
            __pyx_t_17 = __Pyx_PyInt_As_uint_fast64_t(__pyx_t_22); if (unlikely((__pyx_t_17 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2117, __pyx_L11_except_error)
            __Pyx_DECREF(__pyx_t_22); __pyx_t_22 = 0;
            __pyx_v_address = __pyx_t_17;
            __Pyx_XDECREF_SET(__pyx_v_data, __pyx_t_23);
            __pyx_t_23 = 0;
/* … */
          }
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          goto __pyx_L10_exception_handled;
        }
        goto __pyx_L11_except_error;
        __pyx_L11_except_error:;
+2118:                 if offset < 0:
            __pyx_t_18 = ((__pyx_v_offset < 0) != 0);
            if (__pyx_t_18) {
/* … */
              goto __pyx_L26;
            }
+2119:                     CheckSubAddrU(address, <addr_t>-offset)
              __pyx_t_19 = __pyx_f_11cbytesparse_2_c_CheckSubAddrU(__pyx_v_address, ((addr_t)(-__pyx_v_offset))); if (unlikely(__pyx_t_19 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2119, __pyx_L11_except_error)
+2120:                     address -= <addr_t>-offset
              __pyx_v_address = (__pyx_v_address - ((addr_t)(-__pyx_v_offset)));
+2121:                 elif offset > 0:
            __pyx_t_18 = ((__pyx_v_offset > 0) != 0);
            if (__pyx_t_18) {
/* … */
            }
            __pyx_L26:;
+2122:                     CheckAddAddrU(address, <addr_t>offset)
              __pyx_t_19 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_address, ((addr_t)__pyx_v_offset)); if (unlikely(__pyx_t_19 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2122, __pyx_L11_except_error)
+2123:                     address += <addr_t>offset
              __pyx_v_address = (__pyx_v_address + ((addr_t)__pyx_v_offset));
+2124:                 that = Rack_Append(that, Block_FromObject(address, data, True))
            __pyx_t_20 = __pyx_f_11cbytesparse_2_c_Block_FromObject(__pyx_v_address, __pyx_v_data, 1); if (unlikely(__pyx_t_20 == ((Block_ *)NULL))) __PYX_ERR(0, 2124, __pyx_L11_except_error)
            __pyx_t_8 = __pyx_f_11cbytesparse_2_c_Rack_Append(__pyx_v_that, __pyx_t_20); if (unlikely(__pyx_t_8 == ((Rack_ *)NULL))) __PYX_ERR(0, 2124, __pyx_L11_except_error)
            __pyx_v_that = __pyx_t_8;
 2125:         else:
+2126:             that = Rack_Alloc(size)
        /*else:*/ {
          __pyx_t_8 = __pyx_f_11cbytesparse_2_c_Rack_Alloc(__pyx_v_size); if (unlikely(__pyx_t_8 == ((Rack_ *)NULL))) __PYX_ERR(0, 2126, __pyx_L11_except_error)
          __pyx_v_that = __pyx_t_8;
+2127:             index = that.start
          __pyx_t_9 = __pyx_v_that->start;
          __pyx_v_index = __pyx_t_9;
+2128:             for address, data in obj:
          if (likely(PyList_CheckExact(__pyx_v_obj)) || PyTuple_CheckExact(__pyx_v_obj)) {
            __pyx_t_10 = __pyx_v_obj; __Pyx_INCREF(__pyx_t_10); __pyx_t_7 = 0;
            __pyx_t_11 = NULL;
          } else {
            __pyx_t_7 = -1; __pyx_t_10 = PyObject_GetIter(__pyx_v_obj); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2128, __pyx_L11_except_error)
            __Pyx_GOTREF(__pyx_t_10);
            __pyx_t_11 = Py_TYPE(__pyx_t_10)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2128, __pyx_L11_except_error)
          }
          for (;;) {
            if (likely(!__pyx_t_11)) {
              if (likely(PyList_CheckExact(__pyx_t_10))) {
                if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_10)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_12 = PyList_GET_ITEM(__pyx_t_10, __pyx_t_7); __Pyx_INCREF(__pyx_t_12); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 2128, __pyx_L11_except_error)
                #else
                __pyx_t_12 = PySequence_ITEM(__pyx_t_10, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2128, __pyx_L11_except_error)
                __Pyx_GOTREF(__pyx_t_12);
                #endif
              } else {
                if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_10)) break;
                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                __pyx_t_12 = PyTuple_GET_ITEM(__pyx_t_10, __pyx_t_7); __Pyx_INCREF(__pyx_t_12); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 2128, __pyx_L11_except_error)
                #else
                __pyx_t_12 = PySequence_ITEM(__pyx_t_10, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 2128, __pyx_L11_except_error)
                __Pyx_GOTREF(__pyx_t_12);
                #endif
              }
            } else {
              __pyx_t_12 = __pyx_t_11(__pyx_t_10);
              if (unlikely(!__pyx_t_12)) {
                PyObject* exc_type = PyErr_Occurred();
                if (exc_type) {
                  if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
                  else __PYX_ERR(0, 2128, __pyx_L11_except_error)
                }
                break;
              }
              __Pyx_GOTREF(__pyx_t_12);
            }
            if ((likely(PyTuple_CheckExact(__pyx_t_12))) || (PyList_CheckExact(__pyx_t_12))) {
              PyObject* sequence = __pyx_t_12;
              Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
              if (unlikely(size != 2)) {
                if (size > 2) __Pyx_RaiseTooManyValuesError(2);
                else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
                __PYX_ERR(0, 2128, __pyx_L11_except_error)
              }
              #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
              if (likely(PyTuple_CheckExact(sequence))) {
                __pyx_t_13 = PyTuple_GET_ITEM(sequence, 0); 
                __pyx_t_14 = PyTuple_GET_ITEM(sequence, 1); 
              } else {
                __pyx_t_13 = PyList_GET_ITEM(sequence, 0); 
                __pyx_t_14 = PyList_GET_ITEM(sequence, 1); 
              }
              __Pyx_INCREF(__pyx_t_13);
              __Pyx_INCREF(__pyx_t_14);
              #else
              __pyx_t_13 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 2128, __pyx_L11_except_error)
              __Pyx_GOTREF(__pyx_t_13);
              __pyx_t_14 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 2128, __pyx_L11_except_error)
              __Pyx_GOTREF(__pyx_t_14);
              #endif
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
            } else {
              Py_ssize_t index = -1;
              __pyx_t_15 = PyObject_GetIter(__pyx_t_12); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 2128, __pyx_L11_except_error)
              __Pyx_GOTREF(__pyx_t_15);
              __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
              __pyx_t_16 = Py_TYPE(__pyx_t_15)->tp_iternext;
              index = 0; __pyx_t_13 = __pyx_t_16(__pyx_t_15); if (unlikely(!__pyx_t_13)) goto __pyx_L17_unpacking_failed;
              __Pyx_GOTREF(__pyx_t_13);
              index = 1; __pyx_t_14 = __pyx_t_16(__pyx_t_15); if (unlikely(!__pyx_t_14)) goto __pyx_L17_unpacking_failed;
              __Pyx_GOTREF(__pyx_t_14);
              if (__Pyx_IternextUnpackEndCheck(__pyx_t_16(__pyx_t_15), 2) < 0) __PYX_ERR(0, 2128, __pyx_L11_except_error)
              __pyx_t_16 = NULL;
              __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
              goto __pyx_L18_unpacking_done;
              __pyx_L17_unpacking_failed:;
              __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
              __pyx_t_16 = NULL;
              if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
              __PYX_ERR(0, 2128, __pyx_L11_except_error)
              __pyx_L18_unpacking_done:;
            }
            __pyx_t_17 = __Pyx_PyInt_As_uint_fast64_t(__pyx_t_13); if (unlikely((__pyx_t_17 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 2128, __pyx_L11_except_error)
            __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
            __pyx_v_address = __pyx_t_17;
            __Pyx_XDECREF_SET(__pyx_v_data, __pyx_t_14);
            __pyx_t_14 = 0;
/* … */
          }
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        }
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        goto __pyx_L14_try_end;
        __pyx_L9_error:;
+2129:                 if offset < 0:
            __pyx_t_18 = ((__pyx_v_offset < 0) != 0);
            if (__pyx_t_18) {
/* … */
              goto __pyx_L19;
            }
+2130:                     CheckSubAddrU(address, <addr_t>-offset)
              __pyx_t_19 = __pyx_f_11cbytesparse_2_c_CheckSubAddrU(__pyx_v_address, ((addr_t)(-__pyx_v_offset))); if (unlikely(__pyx_t_19 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2130, __pyx_L11_except_error)
+2131:                     address -= <addr_t>-offset
              __pyx_v_address = (__pyx_v_address - ((addr_t)(-__pyx_v_offset)));
+2132:                 elif offset > 0:
            __pyx_t_18 = ((__pyx_v_offset > 0) != 0);
            if (__pyx_t_18) {
/* … */
            }
            __pyx_L19:;
+2133:                     CheckAddAddrU(address, <addr_t>offset)
              __pyx_t_19 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_address, ((addr_t)__pyx_v_offset)); if (unlikely(__pyx_t_19 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2133, __pyx_L11_except_error)
+2134:                     address += <addr_t>offset
              __pyx_v_address = (__pyx_v_address + ((addr_t)__pyx_v_offset));
+2135:                 that.blocks[index] = Block_FromObject(address, data, True)
            __pyx_t_20 = __pyx_f_11cbytesparse_2_c_Block_FromObject(__pyx_v_address, __pyx_v_data, 1); if (unlikely(__pyx_t_20 == ((Block_ *)NULL))) __PYX_ERR(0, 2135, __pyx_L11_except_error)
            (__pyx_v_that->blocks[__pyx_v_index]) = __pyx_t_20;
+2136:                 index += 1
            __pyx_v_index = (__pyx_v_index + 1);
+2137:         return that
      __pyx_r = __pyx_v_that;
      goto __pyx_L7_try_return;
 2138: 
+2139:     except:
    /*except:*/ {
      __Pyx_AddTraceback("cbytesparse._c.Rack_FromObject", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_14, &__pyx_t_12, &__pyx_t_10) < 0) __PYX_ERR(0, 2139, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_GOTREF(__pyx_t_10);
+2140:         that = Rack_Free(that)
      __pyx_v_that = __pyx_f_11cbytesparse_2_c_Rack_Free(__pyx_v_that);
+2141:         raise
      __Pyx_GIVEREF(__pyx_t_14);
      __Pyx_GIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_10);
      __Pyx_ErrRestoreWithState(__pyx_t_14, __pyx_t_12, __pyx_t_10);
      __pyx_t_14 = 0; __pyx_t_12 = 0; __pyx_t_10 = 0; 
      __PYX_ERR(0, 2141, __pyx_L5_except_error)
    }
    __pyx_L5_except_error:;
 2142: 
 2143: 
+2144: cdef size_t Rack_Length(const Rack_* that) nogil:
static size_t __pyx_f_11cbytesparse_2_c_Rack_Length(Rack_ const *__pyx_v_that) {
  size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+2145:     return that.endex - that.start
  __pyx_r = (__pyx_v_that->endex - __pyx_v_that->start);
  goto __pyx_L0;
 2146: 
 2147: 
+2148: cdef (addr_t, addr_t) Rack_BoundSlice(const Rack_* that, addr_t start, addr_t endex) nogil:
static __pyx_ctuple_addr_t__and_addr_t __pyx_f_11cbytesparse_2_c_Rack_BoundSlice(Rack_ const *__pyx_v_that, addr_t __pyx_v_start, addr_t __pyx_v_endex) {
  Block_ const *__pyx_v_block;
  addr_t __pyx_v_block_start;
  addr_t __pyx_v_block_endex;
  __pyx_ctuple_addr_t__and_addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 2149:     cdef:
 2150:         const Block_* block
 2151:         addr_t block_start
 2152:         addr_t block_endex
 2153: 
+2154:     if that.start < that.endex:
  __pyx_t_1 = ((__pyx_v_that->start < __pyx_v_that->endex) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+2155:         block = that.blocks[that.start]
    __pyx_v_block = (__pyx_v_that->blocks[__pyx_v_that->start]);
+2156:         block_start = Block_Start(block)
    __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+2157:         if start < block_start:
    __pyx_t_1 = ((__pyx_v_start < __pyx_v_block_start) != 0);
    if (__pyx_t_1) {
/* … */
    }
+2158:             start = block_start
      __pyx_v_start = __pyx_v_block_start;
+2159:         if endex < start:
    __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
    if (__pyx_t_1) {
/* … */
    }
+2160:             endex = start
      __pyx_v_endex = __pyx_v_start;
 2161: 
+2162:         block = that.blocks[that.endex - 1]
    __pyx_v_block = (__pyx_v_that->blocks[(__pyx_v_that->endex - 1)]);
+2163:         block_endex = Block_Endex(block)
    __pyx_v_block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
+2164:         if endex > block_endex:
    __pyx_t_1 = ((__pyx_v_endex > __pyx_v_block_endex) != 0);
    if (__pyx_t_1) {
/* … */
    }
+2165:             endex = block_endex
      __pyx_v_endex = __pyx_v_block_endex;
+2166:         if start > endex:
    __pyx_t_1 = ((__pyx_v_start > __pyx_v_endex) != 0);
    if (__pyx_t_1) {
/* … */
    }
+2167:             start = endex
      __pyx_v_start = __pyx_v_endex;
 2168:     else:
+2169:         start = 0
  /*else*/ {
    __pyx_v_start = 0;
+2170:         endex = 0
    __pyx_v_endex = 0;
  }
  __pyx_L3:;
 2171: 
+2172:     return start, endex
  __pyx_t_2.f0 = __pyx_v_start;
  __pyx_t_2.f1 = __pyx_v_endex;
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;
 2173: 
 2174: 
+2175: cdef Rack_* Rack_Shift_(Rack_* that, addr_t offset) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Shift_(Rack_ *__pyx_v_that, addr_t __pyx_v_offset) {
  size_t __pyx_v_index;
  Block_ *__pyx_v_block;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Shift_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_Shift_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2176:     cdef:
 2177:         size_t index
 2178:         Block_* block
 2179: 
+2180:     if offset:
  __pyx_t_1 = (__pyx_v_offset != 0);
  if (__pyx_t_1) {
/* … */
  }
+2181:         if that.start < that.endex:
    __pyx_t_1 = ((__pyx_v_that->start < __pyx_v_that->endex) != 0);
    if (__pyx_t_1) {
/* … */
    }
+2182:             block = that.blocks[that.endex - 1]
      __pyx_v_block = (__pyx_v_that->blocks[(__pyx_v_that->endex - 1)]);
+2183:             CheckAddAddrU(block.address, offset)
      __pyx_t_2 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_block->address, __pyx_v_offset); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2183, __pyx_L1_error)
 2184: 
+2185:             for index in range(that.start, that.endex):
      __pyx_t_3 = __pyx_v_that->endex;
      __pyx_t_4 = __pyx_t_3;
      for (__pyx_t_5 = __pyx_v_that->start; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
        __pyx_v_index = __pyx_t_5;
+2186:                 block = that.blocks[index]
        __pyx_v_block = (__pyx_v_that->blocks[__pyx_v_index]);
+2187:                 block.address += offset
        __pyx_v_block->address = (__pyx_v_block->address + __pyx_v_offset);
      }
+2188:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2189: 
 2190: 
+2191: cdef Rack_* Rack_Shift(Rack_* that, saddr_t offset) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Shift(Rack_ *__pyx_v_that, saddr_t __pyx_v_offset) {
  size_t __pyx_v_index;
  Block_ *__pyx_v_block;
  addr_t __pyx_v_offset_;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Shift", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_Shift", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2192:     cdef:
 2193:         size_t index
 2194:         Block_* block
 2195:         addr_t offset_
 2196: 
+2197:     if offset:
  __pyx_t_1 = (__pyx_v_offset != 0);
  if (__pyx_t_1) {
/* … */
  }
+2198:         if that.start < that.endex:
    __pyx_t_1 = ((__pyx_v_that->start < __pyx_v_that->endex) != 0);
    if (__pyx_t_1) {
/* … */
    }
+2199:             if offset < 0:
      __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L5;
      }
+2200:                 block = that.blocks[that.start]
        __pyx_v_block = (__pyx_v_that->blocks[__pyx_v_that->start]);
+2201:                 offset_ = <addr_t>-offset
        __pyx_v_offset_ = ((addr_t)(-__pyx_v_offset));
+2202:                 CheckSubAddrU(block.address, offset_)
        __pyx_t_2 = __pyx_f_11cbytesparse_2_c_CheckSubAddrU(__pyx_v_block->address, __pyx_v_offset_); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2202, __pyx_L1_error)
 2203: 
+2204:                 for index in range(that.start, that.endex):
        __pyx_t_3 = __pyx_v_that->endex;
        __pyx_t_4 = __pyx_t_3;
        for (__pyx_t_5 = __pyx_v_that->start; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
          __pyx_v_index = __pyx_t_5;
+2205:                     block = that.blocks[index]
          __pyx_v_block = (__pyx_v_that->blocks[__pyx_v_index]);
+2206:                     block.address -= offset_
          __pyx_v_block->address = (__pyx_v_block->address - __pyx_v_offset_);
        }
 2207:             else:
+2208:                 block = that.blocks[that.endex - 1]
      /*else*/ {
        __pyx_v_block = (__pyx_v_that->blocks[(__pyx_v_that->endex - 1)]);
+2209:                 offset_ = <addr_t>offset
        __pyx_v_offset_ = ((addr_t)__pyx_v_offset);
+2210:                 CheckAddAddrU(block.address, offset_)
        __pyx_t_2 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_block->address, __pyx_v_offset_); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2210, __pyx_L1_error)
 2211: 
+2212:                 for index in range(that.start, that.endex):
        __pyx_t_3 = __pyx_v_that->endex;
        __pyx_t_4 = __pyx_t_3;
        for (__pyx_t_5 = __pyx_v_that->start; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
          __pyx_v_index = __pyx_t_5;
+2213:                     block = that.blocks[index]
          __pyx_v_block = (__pyx_v_that->blocks[__pyx_v_index]);
+2214:                     block.address += offset_
          __pyx_v_block->address = (__pyx_v_block->address + __pyx_v_offset_);
        }
      }
      __pyx_L5:;
+2215:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2216: 
 2217: 
+2218: cdef bint Rack_Eq(const Rack_* that, const Rack_* other) except -1:
static int __pyx_f_11cbytesparse_2_c_Rack_Eq(Rack_ const *__pyx_v_that, Rack_ const *__pyx_v_other) {
  size_t __pyx_v_block_count;
  size_t __pyx_v_block_index;
  CYTHON_UNUSED size_t __pyx_v_block_length;
  Block_ const *__pyx_v_block1;
  Block_ const *__pyx_v_block2;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Eq", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2219:     cdef:
+2220:         size_t block_count = that.endex - that.start
  __pyx_v_block_count = (__pyx_v_that->endex - __pyx_v_that->start);
 2221:         size_t block_index
 2222:         size_t block_length
 2223:         const Block_* block1
 2224:         const Block_* block2
 2225: 
+2226:     if block_count != other.endex - other.start:
  __pyx_t_1 = ((__pyx_v_block_count != (__pyx_v_other->endex - __pyx_v_other->start)) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2227:         return False
    __pyx_r = 0;
    goto __pyx_L0;
 2228: 
+2229:     for block_index in range(block_count):
  __pyx_t_2 = __pyx_v_block_count;
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_block_index = __pyx_t_4;
+2230:         block1 = Rack_Get__(that, block_index)
    __pyx_v_block1 = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_that, __pyx_v_block_index);
+2231:         block2 = Rack_Get__(other, block_index)
    __pyx_v_block2 = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_other, __pyx_v_block_index);
+2232:         block_length = Block_Length(block1)
    __pyx_v_block_length = __pyx_f_11cbytesparse_2_c_Block_Length(__pyx_v_block1);
 2233: 
+2234:         if block1.address != block2.address:
    __pyx_t_1 = ((__pyx_v_block1->address != __pyx_v_block2->address) != 0);
    if (__pyx_t_1) {
/* … */
    }
+2235:             return False
      __pyx_r = 0;
      goto __pyx_L0;
 2236: 
+2237:         if not Block_Eq(block1, block2):
    __pyx_t_1 = ((!(__pyx_f_11cbytesparse_2_c_Block_Eq(__pyx_v_block1, __pyx_v_block2) != 0)) != 0);
    if (__pyx_t_1) {
/* … */
    }
  }
+2238:             return False
      __pyx_r = 0;
      goto __pyx_L0;
 2239: 
+2240:     return True
  __pyx_r = 1;
  goto __pyx_L0;
 2241: 
 2242: 
+2243: cdef Rack_* Rack_Reserve_(Rack_* that, size_t offset, size_t size) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Reserve_(Rack_ *__pyx_v_that, size_t __pyx_v_offset, size_t __pyx_v_size) {
  size_t __pyx_v_actual;
  size_t __pyx_v_used;
  size_t __pyx_v_allocated;
  Rack_ *__pyx_v_ptr;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Reserve_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Rack_Reserve_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2244:     cdef:
 2245:         size_t actual
 2246:         size_t used
 2247:         size_t margin
 2248:         size_t allocated
 2249:         Rack_* ptr
 2250:         size_t index
 2251:         Block_* node
 2252: 
+2253:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+2254:         if ((size > SIZE_HMAX or
    __pyx_t_2 = ((__pyx_v_size > SIZE_HMAX) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L5_bool_binop_done;
    }
/* … */
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+2255:              CannotAddSizeU(that.endex, size) or
    __pyx_t_2 = (__pyx_f_11cbytesparse_2_c_CannotAddSizeU(__pyx_v_that->endex, __pyx_v_size) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L5_bool_binop_done;
    }
+2256:              that.endex + size > SIZE_HMAX)):
    __pyx_t_2 = (((__pyx_v_that->endex + __pyx_v_size) > SIZE_HMAX) != 0);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L5_bool_binop_done:;
+2257:             raise OverflowError('size overflow')
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2257, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(0, 2257, __pyx_L1_error)
 2258: 
+2259:         used = that.endex - that.start
    __pyx_v_used = (__pyx_v_that->endex - __pyx_v_that->start);
+2260:         if offset > used:
    __pyx_t_1 = ((__pyx_v_offset > __pyx_v_used) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+2261:             raise IndexError('index out of range')
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2261, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(0, 2261, __pyx_L1_error)
 2262: 
 2263:         # Prefer the side where there is less data to shift, which also favors the extremes
+2264:         if offset >= (used >> 1):
    __pyx_t_1 = ((__pyx_v_offset >= (__pyx_v_used >> 1)) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L9;
    }
+2265:             if size > that.allocated - that.endex:
      __pyx_t_1 = ((__pyx_v_size > (__pyx_v_that->allocated - __pyx_v_that->endex)) != 0);
      if (__pyx_t_1) {
/* … */
      }
 2266:                 # Calculate the upsized allocation
+2267:                 allocated = Upsize(that.allocated, that.allocated + size)
        __pyx_v_allocated = __pyx_f_11cbytesparse_2_c_Upsize(__pyx_v_that->allocated, (__pyx_v_that->allocated + __pyx_v_size));
+2268:                 if allocated > SIZE_HMAX:
        __pyx_t_1 = ((__pyx_v_allocated > SIZE_HMAX) != 0);
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+2269:                     raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 2269, __pyx_L1_error)
 2270: 
 2271:                 # Reallocate, including the header
+2272:                 ptr = <Rack_*>PyMem_Realloc(that, Rack_HEADING + (allocated * sizeof(Block_*)))
        __pyx_v_ptr = ((Rack_ *)PyMem_Realloc(__pyx_v_that, (Rack_HEADING + (__pyx_v_allocated * (sizeof(Block_ *))))));
+2273:                 if ptr == NULL:
        __pyx_t_1 = ((__pyx_v_ptr == NULL) != 0);
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+2274:                     raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 2274, __pyx_L1_error)
 2275: 
 2276:                 # Reassign to that
+2277:                 that = ptr
        __pyx_v_that = __pyx_v_ptr;
+2278:                 that.allocated = allocated  # update
        __pyx_v_that->allocated = __pyx_v_allocated;
 2279: 
 2280:             # Shift elements to make room for reservation at the requested offset
+2281:             CheckAddSizeU(offset, that.start)
      __pyx_t_4 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_offset, __pyx_v_that->start); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2281, __pyx_L1_error)
+2282:             offset += that.start
      __pyx_v_offset = (__pyx_v_offset + __pyx_v_that->start);
+2283:             used = that.endex - offset
      __pyx_v_used = (__pyx_v_that->endex - __pyx_v_offset);
+2284:             if used:
      __pyx_t_1 = (__pyx_v_used != 0);
      if (__pyx_t_1) {
/* … */
      }
+2285:                 memmove(&that.blocks[offset + size],
        (void)(memmove((&(__pyx_v_that->blocks[(__pyx_v_offset + __pyx_v_size)])), (&(__pyx_v_that->blocks[__pyx_v_offset])), (__pyx_v_used * (sizeof(Block_ *)))));
 2286:                         &that.blocks[offset],
 2287:                         used * sizeof(Block_*))
 2288: 
+2289:             memset(&that.blocks[offset], 0, size * sizeof(Block_*))  # pad with zeros
      (void)(memset((&(__pyx_v_that->blocks[__pyx_v_offset])), 0, (__pyx_v_size * (sizeof(Block_ *)))));
+2290:             that.endex += size
      __pyx_v_that->endex = (__pyx_v_that->endex + __pyx_v_size);
 2291: 
 2292:         else:
+2293:             if size <= that.start:
    /*else*/ {
      __pyx_t_1 = ((__pyx_v_size <= __pyx_v_that->start) != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L14;
      }
 2294:                 # Shift elements to make room for reservation at the requested offset
+2295:                 that.start -= size
        __pyx_v_that->start = (__pyx_v_that->start - __pyx_v_size);
+2296:                 if offset:
        __pyx_t_1 = (__pyx_v_offset != 0);
        if (__pyx_t_1) {
/* … */
        }
+2297:                     memmove(&that.blocks[that.start],
          (void)(memmove((&(__pyx_v_that->blocks[__pyx_v_that->start])), (&(__pyx_v_that->blocks[(__pyx_v_that->start + __pyx_v_size)])), (__pyx_v_offset * (sizeof(Block_ *)))));
 2298:                             &that.blocks[that.start + size],
 2299:                             offset * sizeof(Block_*))
 2300: 
+2301:                 memset(&that.blocks[that.start + offset], 0, size * sizeof(Block_*))  # pad with zeros
        (void)(memset((&(__pyx_v_that->blocks[(__pyx_v_that->start + __pyx_v_offset)])), 0, (__pyx_v_size * (sizeof(Block_ *)))));
 2302: 
 2303:             else:
 2304:                 # Calculate the upsized allocation
+2305:                 CheckAddSizeU(that.allocated, size)
      /*else*/ {
        __pyx_t_4 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_that->allocated, __pyx_v_size); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2305, __pyx_L1_error)
+2306:                 allocated = Upsize(that.allocated, that.allocated + size)
        __pyx_v_allocated = __pyx_f_11cbytesparse_2_c_Upsize(__pyx_v_that->allocated, (__pyx_v_that->allocated + __pyx_v_size));
+2307:                 if allocated > SIZE_HMAX:
        __pyx_t_1 = ((__pyx_v_allocated > SIZE_HMAX) != 0);
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+2308:                     raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 2308, __pyx_L1_error)
 2309: 
 2310:                 # Allocate a new chunk, including the header
+2311:                 actual = Rack_HEADING + (allocated * sizeof(Block_*))
        __pyx_v_actual = (Rack_HEADING + (__pyx_v_allocated * (sizeof(Block_ *))));
+2312:                 ptr = <Rack_*>PyMem_Calloc(actual, 1)
        __pyx_v_ptr = ((Rack_ *)__pyx_f_11cbytesparse_2_c_PyMem_Calloc(__pyx_v_actual, 1));
+2313:                 if ptr == NULL:
        __pyx_t_1 = ((__pyx_v_ptr == NULL) != 0);
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+2314:                     raise MemoryError()
          PyErr_NoMemory(); __PYX_ERR(0, 2314, __pyx_L1_error)
 2315: 
 2316:                 # Prepare the new chunk aligning towards the end
+2317:                 ptr.allocated = allocated
        __pyx_v_ptr->allocated = __pyx_v_allocated;
+2318:                 ptr.endex = ptr.allocated - MARGIN  # leave some room
        __pyx_v_ptr->endex = (__pyx_v_ptr->allocated - MARGIN);
+2319:                 ptr.start = ptr.endex - used - size
        __pyx_v_ptr->start = ((__pyx_v_ptr->endex - __pyx_v_used) - __pyx_v_size);
 2320: 
 2321:                 # Shift/copy elements to make room for reservation at the requested offset
+2322:                 if offset:
        __pyx_t_1 = (__pyx_v_offset != 0);
        if (__pyx_t_1) {
/* … */
        }
+2323:                     used -= offset  # prepare for later
          __pyx_v_used = (__pyx_v_used - __pyx_v_offset);
+2324:                     memcpy(&ptr.blocks[ptr.start],
          (void)(memcpy((&(__pyx_v_ptr->blocks[__pyx_v_ptr->start])), (&(__pyx_v_that->blocks[__pyx_v_that->start])), (__pyx_v_offset * (sizeof(Block_ *)))));
 2325:                            &that.blocks[that.start],
 2326:                            offset * sizeof(Block_*))
+2327:                 if used:
        __pyx_t_1 = (__pyx_v_used != 0);
        if (__pyx_t_1) {
/* … */
        }
+2328:                     memcpy(&ptr.blocks[ptr.start + offset + size],
          (void)(memcpy((&(__pyx_v_ptr->blocks[((__pyx_v_ptr->start + __pyx_v_offset) + __pyx_v_size)])), (&(__pyx_v_that->blocks[(__pyx_v_that->start + __pyx_v_offset)])), (__pyx_v_used * (sizeof(Block_ *)))));
 2329:                            &that.blocks[that.start + offset],
 2330:                            used * sizeof(Block_*))
 2331: 
 2332:                 # Reassign to that
+2333:                 PyMem_Free(that)
        PyMem_Free(__pyx_v_that);
+2334:                 that = ptr
        __pyx_v_that = __pyx_v_ptr;
      }
      __pyx_L14:;
    }
    __pyx_L9:;
 2335: 
+2336:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2337: 
 2338: 
+2339: cdef Rack_* Rack_Delete_(Rack_* that, size_t offset, size_t size) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Delete_(Rack_ *__pyx_v_that, size_t __pyx_v_offset, size_t __pyx_v_size) {
  size_t __pyx_v_allocated;
  Rack_ *__pyx_v_ptr;
  size_t __pyx_v_index;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Delete_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Rack_Delete_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2340:     cdef:
 2341:         size_t allocated
 2342:         Rack_* ptr
 2343:         size_t index
 2344:         Block_* node
 2345: 
+2346:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+2347:         if ((size > SIZE_HMAX or
    __pyx_t_2 = ((__pyx_v_size > SIZE_HMAX) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L5_bool_binop_done;
    }
/* … */
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+2348:              CannotAddSizeU(offset, size) or
    __pyx_t_2 = (__pyx_f_11cbytesparse_2_c_CannotAddSizeU(__pyx_v_offset, __pyx_v_size) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L5_bool_binop_done;
    }
+2349:              offset + size > SIZE_HMAX or
    __pyx_t_2 = (((__pyx_v_offset + __pyx_v_size) > SIZE_HMAX) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L5_bool_binop_done;
    }
+2350:              CannotAddSizeU(offset, that.start) or
    __pyx_t_2 = (__pyx_f_11cbytesparse_2_c_CannotAddSizeU(__pyx_v_offset, __pyx_v_that->start) != 0);
    if (!__pyx_t_2) {
    } else {
      __pyx_t_1 = __pyx_t_2;
      goto __pyx_L5_bool_binop_done;
    }
+2351:              that.start > SIZE_HMAX)):
    __pyx_t_2 = ((__pyx_v_that->start > SIZE_HMAX) != 0);
    __pyx_t_1 = __pyx_t_2;
    __pyx_L5_bool_binop_done:;
+2352:             raise OverflowError('size overflow')
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2352, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(0, 2352, __pyx_L1_error)
 2353: 
+2354:         if that.endex < that.start + offset + size:
    __pyx_t_1 = ((__pyx_v_that->endex < ((__pyx_v_that->start + __pyx_v_offset) + __pyx_v_size)) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+2355:             raise IndexError('index out of range')
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2355, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(0, 2355, __pyx_L1_error)
 2356: 
 2357:         # Calculate the downsized allocation
+2358:         allocated = Downsize(that.allocated, that.allocated - size)
    __pyx_v_allocated = __pyx_f_11cbytesparse_2_c_Downsize(__pyx_v_that->allocated, (__pyx_v_that->allocated - __pyx_v_size));
+2359:         if allocated > SIZE_HMAX:
    __pyx_t_1 = ((__pyx_v_allocated > SIZE_HMAX) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+2360:             raise MemoryError()
      PyErr_NoMemory(); __PYX_ERR(0, 2360, __pyx_L1_error)
 2361: 
 2362:         # Release blocks within the deleted range
+2363:         offset += that.start
    __pyx_v_offset = (__pyx_v_offset + __pyx_v_that->start);
+2364:         for index in range(offset, offset + size):
    __pyx_t_4 = (__pyx_v_offset + __pyx_v_size);
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = __pyx_v_offset; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_index = __pyx_t_6;
+2365:             that.blocks[index] = Block_Release(that.blocks[index])
      (__pyx_v_that->blocks[__pyx_v_index]) = __pyx_f_11cbytesparse_2_c_Block_Release((__pyx_v_that->blocks[__pyx_v_index]));
    }
 2366: 
+2367:         if offset == 0:
    __pyx_t_1 = ((__pyx_v_offset == 0) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L14;
    }
+2368:             if allocated == that.allocated:
      __pyx_t_1 = ((__pyx_v_allocated == __pyx_v_that->allocated) != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L15;
      }
 2369:                 # Just skip initial if not reallocated and no offset
+2370:                 memset(&that.blocks[that.start], 0, size * sizeof(Block_*))  # cleanup margin
        (void)(memset((&(__pyx_v_that->blocks[__pyx_v_that->start])), 0, (__pyx_v_size * (sizeof(Block_ *)))));
+2371:                 that.start += size
        __pyx_v_that->start = (__pyx_v_that->start + __pyx_v_size);
 2372:             else:
 2373:                 # Shift elements to make for the deleted gap at the beginning
+2374:                 offset += that.start
      /*else*/ {
        __pyx_v_offset = (__pyx_v_offset + __pyx_v_that->start);
+2375:                 memmove(&that.blocks[MARGIN],  # realign to initial MARGIN
        (void)(memmove((&(__pyx_v_that->blocks[MARGIN])), (&(__pyx_v_that->blocks[(__pyx_v_offset + __pyx_v_size)])), ((__pyx_v_that->endex - (__pyx_v_offset + __pyx_v_size)) * (sizeof(Block_ *)))));
 2376:                         &that.blocks[offset + size],
 2377:                         (that.endex - (offset + size)) * sizeof(Block_*))
+2378:                 size = that.endex - that.start - size
        __pyx_v_size = ((__pyx_v_that->endex - __pyx_v_that->start) - __pyx_v_size);
+2379:                 that.start = MARGIN
        __pyx_v_that->start = MARGIN;
+2380:                 that.endex = MARGIN + size
        __pyx_v_that->endex = (MARGIN + __pyx_v_size);
 2381: 
 2382:                 # Cleanup margins
+2383:                 memset(&that.blocks[0], 0, that.start * sizeof(Block_*))
        (void)(memset((&(__pyx_v_that->blocks[0])), 0, (__pyx_v_that->start * (sizeof(Block_ *)))));
+2384:                 memset(&that.blocks[that.endex], 0, (that.allocated - that.endex) * sizeof(Block_*))
        (void)(memset((&(__pyx_v_that->blocks[__pyx_v_that->endex])), 0, ((__pyx_v_that->allocated - __pyx_v_that->endex) * (sizeof(Block_ *)))));
      }
      __pyx_L15:;
 2385:         else:
 2386:             # Shift elements to make for the deleted gap at the requested offset
+2387:             memmove(&that.blocks[offset],
    /*else*/ {
/* … */
      (void)(memmove((&(__pyx_v_that->blocks[__pyx_v_offset])), (&(__pyx_v_that->blocks[(__pyx_v_offset + __pyx_v_size)])), ((__pyx_v_that->endex - (__pyx_v_offset + __pyx_v_size)) * (sizeof(Block_ *)))));
 2388:                     &that.blocks[offset + size],
 2389:                     (that.endex - (offset + size)) * sizeof(Block_*))
+2390:             that.endex -= size
      __pyx_v_that->endex = (__pyx_v_that->endex - __pyx_v_size);
+2391:             memset(&that.blocks[that.endex], 0, size * sizeof(Block_*))  # cleanup margin
      (void)(memset((&(__pyx_v_that->blocks[__pyx_v_that->endex])), 0, (__pyx_v_size * (sizeof(Block_ *)))));
    }
    __pyx_L14:;
 2392: 
+2393:         if allocated != that.allocated:
    __pyx_t_1 = ((__pyx_v_allocated != __pyx_v_that->allocated) != 0);
    if (__pyx_t_1) {
/* … */
    }
 2394:             # Reallocate, including the header
+2395:             ptr = <Rack_*>PyMem_Realloc(that, Rack_HEADING + (allocated * sizeof(Block_*)))
      __pyx_v_ptr = ((Rack_ *)PyMem_Realloc(__pyx_v_that, (Rack_HEADING + (__pyx_v_allocated * (sizeof(Block_ *))))));
+2396:             if ptr == NULL:
      __pyx_t_1 = ((__pyx_v_ptr == NULL) != 0);
      if (unlikely(__pyx_t_1)) {
/* … */
      }
+2397:                 raise MemoryError()
        PyErr_NoMemory(); __PYX_ERR(0, 2397, __pyx_L1_error)
 2398: 
 2399:             # Reassign to that
+2400:             that = ptr
      __pyx_v_that = __pyx_v_ptr;
+2401:             that.allocated = allocated
      __pyx_v_that->allocated = __pyx_v_allocated;
 2402: 
+2403:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2404: 
 2405: 
+2406: cdef Rack_* Rack_Clear(Rack_* that) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Clear(Rack_ *__pyx_v_that) {
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Clear", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_Clear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2407:     return Rack_Delete_(that, 0, that.endex - that.start)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Delete_(__pyx_v_that, 0, (__pyx_v_that->endex - __pyx_v_that->start)); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 2407, __pyx_L1_error)
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 2408: 
 2409: 
+2410: cdef Rack_* Rack_Consolidate(Rack_* that) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Consolidate(Rack_ *__pyx_v_that) {
  size_t __pyx_v_offset;
  Block_ *__pyx_v_block;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Consolidate", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_Consolidate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2411:     cdef:
 2412:         size_t offset
 2413:         Block_* block
 2414: 
+2415:     for offset in range(that.start, that.endex):
  __pyx_t_1 = __pyx_v_that->endex;
  __pyx_t_2 = __pyx_t_1;
  for (__pyx_t_3 = __pyx_v_that->start; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
    __pyx_v_offset = __pyx_t_3;
+2416:         block = that.blocks[offset]
    __pyx_v_block = (__pyx_v_that->blocks[__pyx_v_offset]);
+2417:         if block.references > 1:
    __pyx_t_4 = ((__pyx_v_block->references > 1) != 0);
    if (__pyx_t_4) {
/* … */
    }
  }
+2418:             that.blocks[offset] = Block_Copy(block)
      __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Block_Copy(__pyx_v_block); if (unlikely(__pyx_t_5 == ((Block_ *)NULL))) __PYX_ERR(0, 2418, __pyx_L1_error)
      (__pyx_v_that->blocks[__pyx_v_offset]) = __pyx_t_5;
+2419:             block = Block_Release(block)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Block_Release(__pyx_v_block);
+2420:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2421: 
 2422: 
+2423: cdef Block_** Rack_At_(Rack_* that, size_t offset) nogil:
static Block_ **__pyx_f_11cbytesparse_2_c_Rack_At_(Rack_ *__pyx_v_that, size_t __pyx_v_offset) {
  Block_ **__pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+2424:     return &that.blocks[that.start + offset]
  __pyx_r = (&(__pyx_v_that->blocks[(__pyx_v_that->start + __pyx_v_offset)]));
  goto __pyx_L0;
 2425: 
 2426: 
+2427: cdef const Block_** Rack_At__(const Rack_* that, size_t offset) nogil:
static Block_ const **__pyx_f_11cbytesparse_2_c_Rack_At__(Rack_ const *__pyx_v_that, size_t __pyx_v_offset) {
  Block_ const **__pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+2428:     return <const Block_**>&that.blocks[that.start + offset]
  __pyx_r = ((Block_ const **)(&(__pyx_v_that->blocks[(__pyx_v_that->start + __pyx_v_offset)])));
  goto __pyx_L0;
 2429: 
 2430: 
+2431: cdef Block_* Rack_First_(Rack_* that) nogil:
static Block_ *__pyx_f_11cbytesparse_2_c_Rack_First_(Rack_ *__pyx_v_that) {
  Block_ *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+2432:     return that.blocks[that.start]
  __pyx_r = (__pyx_v_that->blocks[__pyx_v_that->start]);
  goto __pyx_L0;
 2433: 
 2434: 
+2435: cdef const Block_* Rack_First__(const Rack_* that) nogil:
static Block_ const *__pyx_f_11cbytesparse_2_c_Rack_First__(Rack_ const *__pyx_v_that) {
  Block_ const *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+2436:     return that.blocks[that.start]
  __pyx_r = (__pyx_v_that->blocks[__pyx_v_that->start]);
  goto __pyx_L0;
 2437: 
 2438: 
+2439: cdef Block_* Rack_Last_(Rack_* that) nogil:
static Block_ *__pyx_f_11cbytesparse_2_c_Rack_Last_(Rack_ *__pyx_v_that) {
  Block_ *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+2440:     return that.blocks[that.endex - 1]
  __pyx_r = (__pyx_v_that->blocks[(__pyx_v_that->endex - 1)]);
  goto __pyx_L0;
 2441: 
 2442: 
+2443: cdef const Block_* Rack_Last__(const Rack_* that) nogil:
static Block_ const *__pyx_f_11cbytesparse_2_c_Rack_Last__(Rack_ const *__pyx_v_that) {
  Block_ const *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+2444:     return that.blocks[that.endex - 1]
  __pyx_r = (__pyx_v_that->blocks[(__pyx_v_that->endex - 1)]);
  goto __pyx_L0;
 2445: 
 2446: 
+2447: cdef Block_* Rack_Get__(const Rack_* that, size_t offset) nogil:
static Block_ *__pyx_f_11cbytesparse_2_c_Rack_Get__(Rack_ const *__pyx_v_that, size_t __pyx_v_offset) {
  Block_ *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+2448:     return that.blocks[that.start + offset]
  __pyx_r = (__pyx_v_that->blocks[(__pyx_v_that->start + __pyx_v_offset)]);
  goto __pyx_L0;
 2449: 
 2450: 
+2451: cdef Block_* Rack_Get_(const Rack_* that, size_t offset) except? NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Rack_Get_(Rack_ const *__pyx_v_that, size_t __pyx_v_offset) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Get_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Rack_Get_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2452:     CheckAddSizeU(that.start, offset)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_that->start, __pyx_v_offset); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2452, __pyx_L1_error)
+2453:     offset += that.start
  __pyx_v_offset = (__pyx_v_offset + __pyx_v_that->start);
 2454: 
+2455:     if offset < that.endex:
  __pyx_t_2 = ((__pyx_v_offset < __pyx_v_that->endex) != 0);
  if (likely(__pyx_t_2)) {
/* … */
  }
+2456:         return that.blocks[offset]
    __pyx_r = (__pyx_v_that->blocks[__pyx_v_offset]);
    goto __pyx_L0;
 2457:     else:
+2458:         raise IndexError('index out of range')
  /*else*/ {
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2458, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 2458, __pyx_L1_error)
  }
 2459: 
 2460: 
+2461: cdef Block_* Rack_Get(const Rack_* that, ssize_t offset) except? NULL:
static Block_ *__pyx_f_11cbytesparse_2_c_Rack_Get(Rack_ const *__pyx_v_that, Py_ssize_t __pyx_v_offset) {
  Block_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Get", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Rack_Get", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2462:     if offset < 0:
  __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2463:         offset += <ssize_t>(that.endex - that.start)  # anchor to end
    __pyx_v_offset = (__pyx_v_offset + ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start)));
+2464:         if offset < 0:
    __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+2465:             raise IndexError('index out of range')
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2465, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(0, 2465, __pyx_L1_error)
 2466: 
+2467:     return Rack_Get_(that, <size_t>offset)
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_Get_(__pyx_v_that, ((size_t)__pyx_v_offset)); if (unlikely(__pyx_t_3 == ((Block_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 2467, __pyx_L1_error)
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;
 2468: 
 2469: 
+2470: cdef Block_* Rack_Set__(Rack_* that, size_t offset, Block_* value) nogil:
static Block_ *__pyx_f_11cbytesparse_2_c_Rack_Set__(Rack_ *__pyx_v_that, size_t __pyx_v_offset, Block_ *__pyx_v_value) {
  Block_ *__pyx_v_backup;
  Block_ *__pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 2471:     cdef:
 2472:         Block_* backup
 2473: 
+2474:     offset += that.start
  __pyx_v_offset = (__pyx_v_offset + __pyx_v_that->start);
+2475:     backup = that.blocks[offset]
  __pyx_v_backup = (__pyx_v_that->blocks[__pyx_v_offset]);
+2476:     that.blocks[offset] = value
  (__pyx_v_that->blocks[__pyx_v_offset]) = __pyx_v_value;
+2477:     return backup
  __pyx_r = __pyx_v_backup;
  goto __pyx_L0;
 2478: 
 2479: 
+2480: cdef vint Rack_Set_(Rack_* that, size_t offset, Block_* value, Block_** backup) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Rack_Set_(Rack_ *__pyx_v_that, size_t __pyx_v_offset, Block_ *__pyx_v_value, Block_ **__pyx_v_backup) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Set_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Rack_Set_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2481:     CheckAddSizeU(that.start, offset)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_that->start, __pyx_v_offset); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2481, __pyx_L1_error)
+2482:     offset += that.start
  __pyx_v_offset = (__pyx_v_offset + __pyx_v_that->start);
 2483: 
+2484:     if offset < that.endex:
  __pyx_t_2 = ((__pyx_v_offset < __pyx_v_that->endex) != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+2485:         if backup:
    __pyx_t_2 = (__pyx_v_backup != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L4;
    }
+2486:             backup[0] = that.blocks[offset]
      (__pyx_v_backup[0]) = (__pyx_v_that->blocks[__pyx_v_offset]);
 2487:         else:
+2488:             that.blocks[offset] = Block_Release(that.blocks[offset])
    /*else*/ {
      (__pyx_v_that->blocks[__pyx_v_offset]) = __pyx_f_11cbytesparse_2_c_Block_Release((__pyx_v_that->blocks[__pyx_v_offset]));
    }
    __pyx_L4:;
+2489:         that.blocks[offset] = value
    (__pyx_v_that->blocks[__pyx_v_offset]) = __pyx_v_value;
 2490:     else:
+2491:         if backup:
  /*else*/ {
    __pyx_t_2 = (__pyx_v_backup != 0);
    if (__pyx_t_2) {
/* … */
    }
+2492:             backup[0] = NULL
      (__pyx_v_backup[0]) = NULL;
+2493:         raise IndexError('index out of range')
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2493, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 2493, __pyx_L1_error)
  }
  __pyx_L3:;
 2494: 
 2495: 
+2496: cdef vint Rack_Set(Rack_* that, ssize_t offset, Block_* value, Block_** backup) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Rack_Set(Rack_ *__pyx_v_that, Py_ssize_t __pyx_v_offset, Block_ *__pyx_v_value, Block_ **__pyx_v_backup) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Set", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Rack_Set", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2497:     if offset < 0:
  __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2498:         offset += <ssize_t>(that.endex - that.start)  # anchor to end
    __pyx_v_offset = (__pyx_v_offset + ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start)));
+2499:         if offset < 0:
    __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+2500:             raise IndexError('index out of range')
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2500, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(0, 2500, __pyx_L1_error)
 2501: 
+2502:     Rack_Set_(that, <size_t>offset, value, backup)
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_Set_(__pyx_v_that, ((size_t)__pyx_v_offset), __pyx_v_value, __pyx_v_backup); if (unlikely(__pyx_t_3 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2502, __pyx_L1_error)
 2503: 
 2504: 
+2505: cdef Rack_* Rack_Pop__(Rack_* that, Block_** value) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Pop__(Rack_ *__pyx_v_that, Block_ **__pyx_v_value) {
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Pop__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cbytesparse._c.Rack_Pop__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2506:     if that.start < that.endex:
  __pyx_t_1 = ((__pyx_v_that->start < __pyx_v_that->endex) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2507:         if value:
    __pyx_t_1 = (__pyx_v_value != 0);
    if (__pyx_t_1) {
/* … */
    }
+2508:             value[0] = Block_Acquire(that.blocks[that.endex - 1])  # backup
      __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Block_Acquire((__pyx_v_that->blocks[(__pyx_v_that->endex - 1)])); if (unlikely(__pyx_t_2 == ((Block_ *)NULL))) __PYX_ERR(0, 2508, __pyx_L1_error)
      (__pyx_v_value[0]) = __pyx_t_2;
 2509: 
+2510:         return Rack_Delete_(that, that.endex - that.start - 1, 1)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_Delete_(__pyx_v_that, ((__pyx_v_that->endex - __pyx_v_that->start) - 1), 1); if (unlikely(__pyx_t_3 == ((Rack_ *)NULL))) __PYX_ERR(0, 2510, __pyx_L1_error)
    __pyx_r = __pyx_t_3;
    goto __pyx_L0;
 2511:     else:
+2512:         if value:
  /*else*/ {
    __pyx_t_1 = (__pyx_v_value != 0);
    if (__pyx_t_1) {
/* … */
    }
+2513:             value[0] = NULL
      (__pyx_v_value[0]) = NULL;
+2514:         raise IndexError('pop index out of range')
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2514, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_Raise(__pyx_t_4, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __PYX_ERR(0, 2514, __pyx_L1_error)
  }
 2515: 
 2516: 
+2517: cdef Rack_* Rack_Pop_(Rack_* that, size_t offset, Block_** value) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Pop_(Rack_ *__pyx_v_that, size_t __pyx_v_offset, Block_ **__pyx_v_value) {
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Pop_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("cbytesparse._c.Rack_Pop_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2518:     CheckAddSizeU(that.start, offset)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_that->start, __pyx_v_offset); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2518, __pyx_L1_error)
 2519: 
+2520:     if that.start + offset < that.endex:
  __pyx_t_2 = (((__pyx_v_that->start + __pyx_v_offset) < __pyx_v_that->endex) != 0);
  if (__pyx_t_2) {
/* … */
  }
+2521:         if value:
    __pyx_t_2 = (__pyx_v_value != 0);
    if (__pyx_t_2) {
/* … */
    }
+2522:             value[0] = Block_Acquire(that.blocks[that.start + offset])  # backup
      __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Acquire((__pyx_v_that->blocks[(__pyx_v_that->start + __pyx_v_offset)])); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 2522, __pyx_L1_error)
      (__pyx_v_value[0]) = __pyx_t_3;
 2523: 
+2524:         return Rack_Delete_(that, offset, 1)
    __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Rack_Delete_(__pyx_v_that, __pyx_v_offset, 1); if (unlikely(__pyx_t_4 == ((Rack_ *)NULL))) __PYX_ERR(0, 2524, __pyx_L1_error)
    __pyx_r = __pyx_t_4;
    goto __pyx_L0;
 2525:     else:
+2526:         if value:
  /*else*/ {
    __pyx_t_2 = (__pyx_v_value != 0);
    if (__pyx_t_2) {
/* … */
    }
+2527:             value[0] = NULL
      (__pyx_v_value[0]) = NULL;
+2528:         raise IndexError('pop index out of range')
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2528, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __PYX_ERR(0, 2528, __pyx_L1_error)
  }
 2529: 
 2530: 
+2531: cdef Rack_* Rack_Pop(Rack_* that, ssize_t offset, Block_** value) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Pop(Rack_ *__pyx_v_that, Py_ssize_t __pyx_v_offset, Block_ **__pyx_v_value) {
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Pop", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Rack_Pop", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2532:     if offset < 0:
  __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2533:         offset += <ssize_t>(that.endex - that.start)  # anchor to end
    __pyx_v_offset = (__pyx_v_offset + ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start)));
+2534:         if offset < 0:
    __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+2535:             raise IndexError('pop index out of range')
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2535, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(0, 2535, __pyx_L1_error)
 2536: 
+2537:     return Rack_Pop_(that, <size_t>offset, value)
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_Pop_(__pyx_v_that, ((size_t)__pyx_v_offset), __pyx_v_value); if (unlikely(__pyx_t_3 == ((Rack_ *)NULL))) __PYX_ERR(0, 2537, __pyx_L1_error)
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;
 2538: 
 2539: 
+2540: cdef Rack_* Rack_PopLeft(Rack_* that, Block_** value) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_PopLeft(Rack_ *__pyx_v_that, Block_ **__pyx_v_value) {
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_PopLeft", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_PopLeft", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2541:     return Rack_Pop_(that, 0, value)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Pop_(__pyx_v_that, 0, __pyx_v_value); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 2541, __pyx_L1_error)
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 2542: 
 2543: 
+2544: cdef Rack_* Rack_Insert_(Rack_* that, size_t offset, Block_* value) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Insert_(Rack_ *__pyx_v_that, size_t __pyx_v_offset, Block_ *__pyx_v_value) {
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Insert_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_Insert_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2545:     # Insert the value at the requested offset
+2546:     that = Rack_Reserve_(that, offset, 1)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Reserve_(__pyx_v_that, __pyx_v_offset, 1); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 2546, __pyx_L1_error)
  __pyx_v_that = __pyx_t_1;
+2547:     that.blocks[that.start + offset] = value
  (__pyx_v_that->blocks[(__pyx_v_that->start + __pyx_v_offset)]) = __pyx_v_value;
+2548:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2549: 
 2550: 
+2551: cdef Rack_* Rack_Insert(Rack_* that, ssize_t offset, Block_* value) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Insert(Rack_ *__pyx_v_that, Py_ssize_t __pyx_v_offset, Block_ *__pyx_v_value) {
  Py_ssize_t __pyx_v_size;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Insert", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_Insert", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2552:     cdef:
+2553:         ssize_t size = <ssize_t>(that.endex - that.start)
  __pyx_v_size = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 2554: 
+2555:     if offset < 0:
  __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+2556:         offset += size  # anchor to end
    __pyx_v_offset = (__pyx_v_offset + __pyx_v_size);
+2557:         if offset < 0:
    __pyx_t_1 = ((__pyx_v_offset < 0) != 0);
    if (__pyx_t_1) {
/* … */
    }
 2558:             # raise IndexError('index out of range')
+2559:             offset = 0  # as per bytearray.insert
      __pyx_v_offset = 0;
 2560: 
+2561:     elif offset > size:
  __pyx_t_1 = ((__pyx_v_offset > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
  __pyx_L3:;
 2562:         # raise IndexError('index out of range')
+2563:         offset = size  # as per bytearray.insert
    __pyx_v_offset = __pyx_v_size;
 2564: 
+2565:     return Rack_Insert_(that, <size_t>offset, value)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_Insert_(__pyx_v_that, ((size_t)__pyx_v_offset), __pyx_v_value); if (unlikely(__pyx_t_2 == ((Rack_ *)NULL))) __PYX_ERR(0, 2565, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;
 2566: 
 2567: 
+2568: cdef Rack_* Rack_Append(Rack_* that, Block_* value) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Append(Rack_ *__pyx_v_that, Block_ *__pyx_v_value) {
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Append", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_Append", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2569:     # Insert the value after the end
+2570:     that = Rack_Reserve_(that, that.endex - that.start, 1)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Reserve_(__pyx_v_that, (__pyx_v_that->endex - __pyx_v_that->start), 1); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 2570, __pyx_L1_error)
  __pyx_v_that = __pyx_t_1;
+2571:     that.blocks[that.endex - 1] = value
  (__pyx_v_that->blocks[(__pyx_v_that->endex - 1)]) = __pyx_v_value;
+2572:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2573: 
 2574: 
+2575: cdef Rack_* Rack_AppendLeft(Rack_* that, Block_* value) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_AppendLeft(Rack_ *__pyx_v_that, Block_ *__pyx_v_value) {
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_AppendLeft", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_AppendLeft", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2576:     # Insert the value after the end
+2577:     that = Rack_Reserve_(that, 0, 1)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Reserve_(__pyx_v_that, 0, 1); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 2577, __pyx_L1_error)
  __pyx_v_that = __pyx_t_1;
+2578:     that.blocks[that.start] = value
  (__pyx_v_that->blocks[__pyx_v_that->start]) = __pyx_v_value;
+2579:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2580: 
 2581: 
+2582: cdef Rack_* Rack_Extend_(Rack_* that, size_t size, Block_** buffer, bint direct) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Extend_(Rack_ *__pyx_v_that, size_t __pyx_v_size, Block_ **__pyx_v_buffer, int __pyx_v_direct) {
  size_t __pyx_v_start;
  size_t __pyx_v_offset;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Extend_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_Extend_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2583:     cdef:
 2584:         size_t start
 2585:         size_t offset
 2586: 
+2587:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+2588:         that = Rack_Reserve_(that, that.endex - that.start, size)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_Reserve_(__pyx_v_that, (__pyx_v_that->endex - __pyx_v_that->start), __pyx_v_size); if (unlikely(__pyx_t_2 == ((Rack_ *)NULL))) __PYX_ERR(0, 2588, __pyx_L1_error)
    __pyx_v_that = __pyx_t_2;
+2589:         if direct:
    __pyx_t_1 = (__pyx_v_direct != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L4;
    }
+2590:             memmove(&that.blocks[that.endex - size], buffer, size * sizeof(Block_*))
      (void)(memmove((&(__pyx_v_that->blocks[(__pyx_v_that->endex - __pyx_v_size)])), __pyx_v_buffer, (__pyx_v_size * (sizeof(Block_ *)))));
 2591:         else:
+2592:             start = that.endex - size
    /*else*/ {
      __pyx_v_start = (__pyx_v_that->endex - __pyx_v_size);
+2593:             for offset in range(size):
      __pyx_t_3 = __pyx_v_size;
      __pyx_t_4 = __pyx_t_3;
      for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
        __pyx_v_offset = __pyx_t_5;
+2594:                 that.blocks[start + offset] = Block_Acquire(buffer[offset])
        __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Block_Acquire((__pyx_v_buffer[__pyx_v_offset])); if (unlikely(__pyx_t_6 == ((Block_ *)NULL))) __PYX_ERR(0, 2594, __pyx_L1_error)
        (__pyx_v_that->blocks[(__pyx_v_start + __pyx_v_offset)]) = __pyx_t_6;
      }
    }
    __pyx_L4:;
+2595:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2596: 
 2597: 
+2598: cdef Rack_* Rack_Extend(Rack_* that, Rack_* more) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Extend(Rack_ *__pyx_v_that, Rack_ *__pyx_v_more) {
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Extend", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_Extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2599:     that = Rack_Extend_(that, more.endex - more.start, &more.blocks[more.start], False)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Extend_(__pyx_v_that, (__pyx_v_more->endex - __pyx_v_more->start), (&(__pyx_v_more->blocks[__pyx_v_more->start])), 0); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 2599, __pyx_L1_error)
  __pyx_v_that = __pyx_t_1;
+2600:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2601: 
 2602: 
+2603: cdef Rack_* Rack_ExtendLeft_(Rack_* that, size_t size, Block_** buffer, bint direct) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_ExtendLeft_(Rack_ *__pyx_v_that, size_t __pyx_v_size, Block_ **__pyx_v_buffer, int __pyx_v_direct) {
  size_t __pyx_v_start;
  size_t __pyx_v_offset;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_ExtendLeft_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_ExtendLeft_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2604:     cdef:
 2605:         size_t start
 2606:         size_t offset
 2607: 
+2608:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+2609:         that = Rack_Reserve_(that, 0, size)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_Reserve_(__pyx_v_that, 0, __pyx_v_size); if (unlikely(__pyx_t_2 == ((Rack_ *)NULL))) __PYX_ERR(0, 2609, __pyx_L1_error)
    __pyx_v_that = __pyx_t_2;
+2610:         if direct:
    __pyx_t_1 = (__pyx_v_direct != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L4;
    }
+2611:             memmove(&that.blocks[that.endex - size], buffer, size * sizeof(Block_*))
      (void)(memmove((&(__pyx_v_that->blocks[(__pyx_v_that->endex - __pyx_v_size)])), __pyx_v_buffer, (__pyx_v_size * (sizeof(Block_ *)))));
 2612:         else:
+2613:             start = that.start
    /*else*/ {
      __pyx_t_3 = __pyx_v_that->start;
      __pyx_v_start = __pyx_t_3;
+2614:             for offset in range(size):
      __pyx_t_3 = __pyx_v_size;
      __pyx_t_4 = __pyx_t_3;
      for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
        __pyx_v_offset = __pyx_t_5;
+2615:                 that.blocks[start + offset] = Block_Acquire(buffer[offset])
        __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Block_Acquire((__pyx_v_buffer[__pyx_v_offset])); if (unlikely(__pyx_t_6 == ((Block_ *)NULL))) __PYX_ERR(0, 2615, __pyx_L1_error)
        (__pyx_v_that->blocks[(__pyx_v_start + __pyx_v_offset)]) = __pyx_t_6;
      }
    }
    __pyx_L4:;
+2616:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2617: 
 2618: 
+2619: cdef Rack_* Rack_ExtendLeft(Rack_* that, Rack_* more) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_ExtendLeft(Rack_ *__pyx_v_that, Rack_ *__pyx_v_more) {
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_ExtendLeft", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_ExtendLeft", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+2620:     that = Rack_ExtendLeft_(that, more.endex - more.start, &more.blocks[more.start], False)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_ExtendLeft_(__pyx_v_that, (__pyx_v_more->endex - __pyx_v_more->start), (&(__pyx_v_more->blocks[__pyx_v_more->start])), 0); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 2620, __pyx_L1_error)
  __pyx_v_that = __pyx_t_1;
+2621:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2622: 
 2623: 
+2624: cdef vint Rack_Read_(const Rack_* that, size_t offset,
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Rack_Read_(Rack_ const *__pyx_v_that, size_t __pyx_v_offset, size_t __pyx_v_size, Block_ **__pyx_v_buffer, int __pyx_v_direct) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Read_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Rack_Read_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2625:                      size_t size, Block_** buffer, bint direct) except -1:
+2626:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+2627:         if size > SIZE_HMAX:
    __pyx_t_1 = ((__pyx_v_size > SIZE_HMAX) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+2628:             raise OverflowError('size overflow')
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2628, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(0, 2628, __pyx_L1_error)
 2629: 
+2630:         CheckAddSizeU(that.start, offset)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_that->start, __pyx_v_offset); if (unlikely(__pyx_t_3 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2630, __pyx_L1_error)
+2631:         offset += that.start
    __pyx_v_offset = (__pyx_v_offset + __pyx_v_that->start);
 2632: 
+2633:         CheckAddSizeU(offset, size)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_offset, __pyx_v_size); if (unlikely(__pyx_t_3 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2633, __pyx_L1_error)
+2634:         if that.endex <= offset + size:
    __pyx_t_1 = ((__pyx_v_that->endex <= (__pyx_v_offset + __pyx_v_size)) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+2635:             raise IndexError('index out of range')
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_IndexError, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2635, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_Raise(__pyx_t_2, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __PYX_ERR(0, 2635, __pyx_L1_error)
 2636: 
+2637:         if direct:
    __pyx_t_1 = (__pyx_v_direct != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L6;
    }
+2638:             memmove(buffer, &that.blocks[offset], size * sizeof(Block_*))
      (void)(memmove(__pyx_v_buffer, (&(__pyx_v_that->blocks[__pyx_v_offset])), (__pyx_v_size * (sizeof(Block_ *)))));
 2639:         else:
+2640:             for offset in range(offset, offset + size):
    /*else*/ {
      __pyx_t_4 = (__pyx_v_offset + __pyx_v_size);
      __pyx_t_5 = __pyx_t_4;
      for (__pyx_t_6 = __pyx_v_offset; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
        __pyx_v_offset = __pyx_t_6;
+2641:                 buffer[offset - that.start] = Block_Acquire(buffer[offset])
        __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Block_Acquire((__pyx_v_buffer[__pyx_v_offset])); if (unlikely(__pyx_t_7 == ((Block_ *)NULL))) __PYX_ERR(0, 2641, __pyx_L1_error)
        (__pyx_v_buffer[(__pyx_v_offset - __pyx_v_that->start)]) = __pyx_t_7;
      }
    }
    __pyx_L6:;
 2642: 
 2643: 
+2644: cdef Rack_* Rack_Write_(Rack_* that, size_t offset,
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_Write_(Rack_ *__pyx_v_that, size_t __pyx_v_offset, size_t __pyx_v_size, Block_ **__pyx_v_buffer, int __pyx_v_direct) {
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_Write_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_Write_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2645:                         size_t size, Block_** buffer, bint direct) except NULL:
+2646:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+2647:         CheckAddSizeU(that.start, offset)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_that->start, __pyx_v_offset); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2647, __pyx_L1_error)
+2648:         offset += that.start
    __pyx_v_offset = (__pyx_v_offset + __pyx_v_that->start);
 2649: 
+2650:         CheckAddSizeU(offset, size)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_offset, __pyx_v_size); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2650, __pyx_L1_error)
+2651:         if that.endex < offset + size:
    __pyx_t_1 = ((__pyx_v_that->endex < (__pyx_v_offset + __pyx_v_size)) != 0);
    if (__pyx_t_1) {
/* … */
    }
+2652:             that = Rack_Reserve_(that, that.endex - that.start, (offset + size) - that.endex)
      __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_Reserve_(__pyx_v_that, (__pyx_v_that->endex - __pyx_v_that->start), ((__pyx_v_offset + __pyx_v_size) - __pyx_v_that->endex)); if (unlikely(__pyx_t_3 == ((Rack_ *)NULL))) __PYX_ERR(0, 2652, __pyx_L1_error)
      __pyx_v_that = __pyx_t_3;
 2653: 
+2654:         if direct:
    __pyx_t_1 = (__pyx_v_direct != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L5;
    }
+2655:             memmove(&that.blocks[offset], buffer, size * sizeof(Block_*))
      (void)(memmove((&(__pyx_v_that->blocks[__pyx_v_offset])), __pyx_v_buffer, (__pyx_v_size * (sizeof(Block_ *)))));
 2656:         else:
+2657:             for offset in range(offset, offset + size):
    /*else*/ {
      __pyx_t_4 = (__pyx_v_offset + __pyx_v_size);
      __pyx_t_5 = __pyx_t_4;
      for (__pyx_t_6 = __pyx_v_offset; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
        __pyx_v_offset = __pyx_t_6;
+2658:                 that.blocks[offset] = Block_Release(that.blocks[offset])
        (__pyx_v_that->blocks[__pyx_v_offset]) = __pyx_f_11cbytesparse_2_c_Block_Release((__pyx_v_that->blocks[__pyx_v_offset]));
+2659:                 that.blocks[offset] = Block_Acquire(buffer[offset - that.start])
        __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Block_Acquire((__pyx_v_buffer[(__pyx_v_offset - __pyx_v_that->start)])); if (unlikely(__pyx_t_7 == ((Block_ *)NULL))) __PYX_ERR(0, 2659, __pyx_L1_error)
        (__pyx_v_that->blocks[__pyx_v_offset]) = __pyx_t_7;
      }
    }
    __pyx_L5:;
 2660: 
+2661:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2662: 
 2663: 
+2664: cdef vint Rack_ReadSlice_(const Rack_* that, size_t start, size_t endex,
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Rack_ReadSlice_(Rack_ const *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex, size_t *__pyx_v_size_, Block_ **__pyx_v_buffer, int __pyx_v_direct) {
  size_t __pyx_v_size;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_ReadSlice_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Rack_ReadSlice_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2665:                           size_t* size_, Block_** buffer, bint direct) except -1:
 2666:     cdef:
+2667:         size_t size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 2668: 
+2669:     size_[0] = 0
  (__pyx_v_size_[0]) = 0;
 2670: 
+2671:     if start > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_start > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2672:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2672, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2672, __pyx_L1_error)
+2673:     elif start > size:
  __pyx_t_1 = ((__pyx_v_start > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2674:         start = size  # trim source start
    __pyx_v_start = __pyx_v_size;
 2675: 
+2676:     if endex > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_endex > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2677:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2677, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2677, __pyx_L1_error)
+2678:     elif endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+2679:         endex = start  # clamp negative source length
    __pyx_v_endex = __pyx_v_start;
+2680:     elif endex > size:
  __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
  __pyx_L4:;
+2681:         endex = size  # trim source end
    __pyx_v_endex = __pyx_v_size;
 2682: 
+2683:     size = endex - start
  __pyx_v_size = (__pyx_v_endex - __pyx_v_start);
+2684:     Rack_Read_(that, start, size, buffer, direct)
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_Read_(__pyx_v_that, __pyx_v_start, __pyx_v_size, __pyx_v_buffer, __pyx_v_direct); if (unlikely(__pyx_t_3 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2684, __pyx_L1_error)
+2685:     size_[0] = size
  (__pyx_v_size_[0]) = __pyx_v_size;
 2686: 
 2687: 
+2688: cdef vint Rack_ReadSlice(const Rack_* that, ssize_t start, ssize_t endex,
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Rack_ReadSlice(Rack_ const *__pyx_v_that, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_endex, size_t *__pyx_v_size_, Block_ **__pyx_v_buffer, int __pyx_v_direct) {
  Py_ssize_t __pyx_v_ssize;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_ReadSlice", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_ReadSlice", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2689:                          size_t* size_, Block_** buffer, bint direct) except -1:
 2690:     cdef:
+2691:         ssize_t ssize = <ssize_t>(that.endex - that.start)
  __pyx_v_ssize = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 2692: 
+2693:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2694:         start += ssize  # anchor to end
    __pyx_v_start = (__pyx_v_start + __pyx_v_ssize);
+2695:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2696:         start = 0  # trim source start
    __pyx_v_start = 0;
 2697: 
+2698:     if endex < 0:
  __pyx_t_1 = ((__pyx_v_endex < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2699:         endex += ssize  # anchor to end
    __pyx_v_endex = (__pyx_v_endex + __pyx_v_ssize);
+2700:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2701:         endex = start  # clamp negative source length
    __pyx_v_endex = __pyx_v_start;
 2702: 
+2703:     Rack_ReadSlice_(that, <size_t>start, <size_t>endex, size_, buffer, direct)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_ReadSlice_(__pyx_v_that, ((size_t)__pyx_v_start), ((size_t)__pyx_v_endex), __pyx_v_size_, __pyx_v_buffer, __pyx_v_direct); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2703, __pyx_L1_error)
 2704: 
 2705: 
+2706: cdef Rack_* Rack_GetSlice_(const Rack_* that, size_t start, size_t endex) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_GetSlice_(Rack_ const *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex) {
  Rack_ *__pyx_v_other;
  size_t __pyx_v_size;
  size_t __pyx_v_offset;
  size_t __pyx_v_offset2;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_GetSlice_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("cbytesparse._c.Rack_GetSlice_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2707:     cdef:
+2708:         Rack_* other = NULL
  __pyx_v_other = NULL;
+2709:         size_t size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 2710:         size_t offset
 2711:         size_t offset2
 2712: 
+2713:     if start > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_start > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2714:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2714, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2714, __pyx_L1_error)
+2715:     elif start > size:
  __pyx_t_1 = ((__pyx_v_start > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2716:         start = size  # trim source start
    __pyx_v_start = __pyx_v_size;
 2717: 
+2718:     if endex > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_endex > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2719:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2719, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2719, __pyx_L1_error)
+2720:     elif endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+2721:         endex = start  # clamp negative source length
    __pyx_v_endex = __pyx_v_start;
+2722:     elif endex > size:
  __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
  __pyx_L4:;
+2723:         endex = size  # trim source end
    __pyx_v_endex = __pyx_v_size;
 2724: 
+2725:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L1_error;
    __pyx_L9_try_return:;
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
    goto __pyx_L0;
  }
+2726:         size = endex - start
      __pyx_v_size = (__pyx_v_endex - __pyx_v_start);
+2727:         other = Rack_Alloc(size)
      __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Rack_Alloc(__pyx_v_size); if (unlikely(__pyx_t_6 == ((Rack_ *)NULL))) __PYX_ERR(0, 2727, __pyx_L5_error)
      __pyx_v_other = __pyx_t_6;
+2728:         CheckAddSizeU(other.start, size)
      __pyx_t_7 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_other->start, __pyx_v_size); if (unlikely(__pyx_t_7 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 2728, __pyx_L5_error)
+2729:         offset2 = that.start + start
      __pyx_v_offset2 = (__pyx_v_that->start + __pyx_v_start);
 2730: 
+2731:         for offset in range(other.start, other.start + size):
      __pyx_t_8 = (__pyx_v_other->start + __pyx_v_size);
      __pyx_t_9 = __pyx_t_8;
      for (__pyx_t_10 = __pyx_v_other->start; __pyx_t_10 < __pyx_t_9; __pyx_t_10+=1) {
        __pyx_v_offset = __pyx_t_10;
+2732:             other.blocks[offset] = Block_Acquire(that.blocks[offset2])
        __pyx_t_11 = __pyx_f_11cbytesparse_2_c_Block_Acquire((__pyx_v_that->blocks[__pyx_v_offset2])); if (unlikely(__pyx_t_11 == ((Block_ *)NULL))) __PYX_ERR(0, 2732, __pyx_L5_error)
        (__pyx_v_other->blocks[__pyx_v_offset]) = __pyx_t_11;
+2733:             offset2 += 1
        __pyx_v_offset2 = (__pyx_v_offset2 + 1);
      }
 2734: 
+2735:         return other
      __pyx_r = __pyx_v_other;
      goto __pyx_L9_try_return;
+2736:     except:
    /*except:*/ {
      __Pyx_AddTraceback("cbytesparse._c.Rack_GetSlice_", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_12, &__pyx_t_13) < 0) __PYX_ERR(0, 2736, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_GOTREF(__pyx_t_13);
+2737:         other = Rack_Free(other)
      __pyx_v_other = __pyx_f_11cbytesparse_2_c_Rack_Free(__pyx_v_other);
+2738:         raise
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_12, __pyx_t_13);
      __pyx_t_2 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; 
      __PYX_ERR(0, 2738, __pyx_L7_except_error)
    }
    __pyx_L7_except_error:;
 2739: 
 2740: 
+2741: cdef Rack_* Rack_GetSlice(const Rack_* that, ssize_t start, ssize_t endex) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_GetSlice(Rack_ const *__pyx_v_that, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_endex) {
  Py_ssize_t __pyx_v_ssize;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_GetSlice", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_GetSlice", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2742:     cdef:
+2743:         ssize_t ssize = <ssize_t>(that.endex - that.start)
  __pyx_v_ssize = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 2744: 
+2745:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2746:         start += ssize  # anchor to end
    __pyx_v_start = (__pyx_v_start + __pyx_v_ssize);
+2747:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2748:         start = 0  # trim source start
    __pyx_v_start = 0;
 2749: 
+2750:     if endex < 0:
  __pyx_t_1 = ((__pyx_v_endex < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2751:         endex += ssize  # anchor to end
    __pyx_v_endex = (__pyx_v_endex + __pyx_v_ssize);
+2752:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2753:         endex = start  # clamp negative source length
    __pyx_v_endex = __pyx_v_start;
 2754: 
+2755:     return Rack_GetSlice_(that, <size_t>start, <size_t>endex)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_GetSlice_(__pyx_v_that, ((size_t)__pyx_v_start), ((size_t)__pyx_v_endex)); if (unlikely(__pyx_t_2 == ((Rack_ *)NULL))) __PYX_ERR(0, 2755, __pyx_L1_error)
  __pyx_r = __pyx_t_2;
  goto __pyx_L0;
 2756: 
 2757: 
+2758: cdef Rack_* Rack_WriteSlice_(Rack_* that, size_t start, size_t endex,
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_WriteSlice_(Rack_ *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex, size_t __pyx_v_size, Block_ **__pyx_v_buffer, int __pyx_v_direct) {
  size_t __pyx_v_size2;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_WriteSlice_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Rack_WriteSlice_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2759:                              size_t size, Block_** buffer, bint direct) except NULL:
 2760:     cdef:
 2761:         size_t size2   # source size
 2762: 
+2763:     size2 = size
  __pyx_v_size2 = __pyx_v_size;
+2764:     size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 2765: 
+2766:     if start > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_start > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2767:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2767, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2767, __pyx_L1_error)
+2768:     elif start > size:
  __pyx_t_1 = ((__pyx_v_start > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2769:         start = size  # trim target start
    __pyx_v_start = __pyx_v_size;
 2770: 
+2771:     if endex > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_endex > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2772:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2772, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2772, __pyx_L1_error)
+2773:     elif endex > size:
  __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2774:         endex = size  # trim target end
    __pyx_v_endex = __pyx_v_size;
 2775: 
+2776:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2777:         endex = start  # clamp negative target length
    __pyx_v_endex = __pyx_v_start;
+2778:     size = endex - start
  __pyx_v_size = (__pyx_v_endex - __pyx_v_start);
 2779: 
+2780:     if size2 > size:  # enlarge target at range end
  __pyx_t_1 = ((__pyx_v_size2 > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L6;
  }
+2781:         that = Rack_Reserve_(that, endex, size2 - size)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_Reserve_(__pyx_v_that, __pyx_v_endex, (__pyx_v_size2 - __pyx_v_size)); if (unlikely(__pyx_t_3 == ((Rack_ *)NULL))) __PYX_ERR(0, 2781, __pyx_L1_error)
    __pyx_v_that = __pyx_t_3;
 2782: 
+2783:     elif size > size2:  # shrink target at range end
  __pyx_t_1 = ((__pyx_v_size > __pyx_v_size2) != 0);
  if (__pyx_t_1) {
/* … */
  }
  __pyx_L6:;
+2784:         endex -= size - size2
    __pyx_v_endex = (__pyx_v_endex - (__pyx_v_size - __pyx_v_size2));
+2785:         that = Rack_Delete_(that, endex, size - size2)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_Delete_(__pyx_v_that, __pyx_v_endex, (__pyx_v_size - __pyx_v_size2)); if (unlikely(__pyx_t_3 == ((Rack_ *)NULL))) __PYX_ERR(0, 2785, __pyx_L1_error)
    __pyx_v_that = __pyx_t_3;
 2786: 
+2787:     that = Rack_Write_(that, start, size2, buffer, direct)
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_Write_(__pyx_v_that, __pyx_v_start, __pyx_v_size2, __pyx_v_buffer, __pyx_v_direct); if (unlikely(__pyx_t_3 == ((Rack_ *)NULL))) __PYX_ERR(0, 2787, __pyx_L1_error)
  __pyx_v_that = __pyx_t_3;
+2788:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2789: 
 2790: 
+2791: cdef Rack_* Rack_WriteSlice(Rack_* that, ssize_t start, ssize_t endex,
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_WriteSlice(Rack_ *__pyx_v_that, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_endex, size_t __pyx_v_size, Block_ **__pyx_v_buffer, int __pyx_v_direct) {
  Py_ssize_t __pyx_v_ssize;
  Py_ssize_t __pyx_v_ssize2;
  Py_ssize_t __pyx_v_start2;
  Py_ssize_t __pyx_v_endex2;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_WriteSlice", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_WriteSlice", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2792:                             size_t size, Block_** buffer, bint direct) except NULL:
 2793:     cdef:
 2794:         ssize_t ssize   # target size
 2795:         ssize_t ssize2  # source size
 2796:         ssize_t start2  # source start
 2797:         ssize_t endex2  # source end
 2798: 
+2799:     start2 = 0
  __pyx_v_start2 = 0;
+2800:     endex2 = <ssize_t>size
  __pyx_v_endex2 = ((Py_ssize_t)__pyx_v_size);
 2801: 
+2802:     ssize = <ssize_t>(that.endex - that.start)
  __pyx_v_ssize = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 2803: 
+2804:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2805:         start += ssize  # anchor to end
    __pyx_v_start = (__pyx_v_start + __pyx_v_ssize);
+2806:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
 2807:         # start2 -= start  # skip initial source data  # as per bytearray
+2808:         start = 0  # trim target start
    __pyx_v_start = 0;
+2809:     if start2 > endex2:
  __pyx_t_1 = ((__pyx_v_start2 > __pyx_v_endex2) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2810:         start2 = endex2  # clamp source start
    __pyx_v_start2 = __pyx_v_endex2;
 2811: 
+2812:     if endex < 0:
  __pyx_t_1 = ((__pyx_v_endex < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2813:         endex += ssize  # anchor to end
    __pyx_v_endex = (__pyx_v_endex + __pyx_v_ssize);
+2814:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2815:         endex = start  # clamp negative target length
    __pyx_v_endex = __pyx_v_start;
 2816: 
+2817:     if endex2 < start2:
  __pyx_t_1 = ((__pyx_v_endex2 < __pyx_v_start2) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2818:         endex2 = start2  # clamp negative source length
    __pyx_v_endex2 = __pyx_v_start2;
+2819:     ssize2 = endex2 - start2
  __pyx_v_ssize2 = (__pyx_v_endex2 - __pyx_v_start2);
 2820: 
+2821:     that = Rack_WriteSlice_(that, <size_t>start, <size_t>endex, <size_t>ssize2, &buffer[start2], direct)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_WriteSlice_(__pyx_v_that, ((size_t)__pyx_v_start), ((size_t)__pyx_v_endex), ((size_t)__pyx_v_ssize2), (&(__pyx_v_buffer[__pyx_v_start2])), __pyx_v_direct); if (unlikely(__pyx_t_2 == ((Rack_ *)NULL))) __PYX_ERR(0, 2821, __pyx_L1_error)
  __pyx_v_that = __pyx_t_2;
+2822:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2823: 
 2824: 
+2825: cdef Rack_* Rack_SetSlice_(Rack_* that, size_t start, size_t endex,
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_SetSlice_(Rack_ *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex, Rack_ *__pyx_v_src, size_t __pyx_v_start2, size_t __pyx_v_endex2) {
  size_t __pyx_v_size;
  size_t __pyx_v_size2;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_SetSlice_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Rack_SetSlice_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2826:                            Rack_* src, size_t start2, size_t endex2) except NULL:
 2827:     cdef:
 2828:         size_t size   # target size
 2829:         size_t size2  # source size
 2830: 
+2831:     size2 = src.endex - src.start
  __pyx_v_size2 = (__pyx_v_src->endex - __pyx_v_src->start);
 2832: 
+2833:     if start2 > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_start2 > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2834:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2834, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2834, __pyx_L1_error)
+2835:     elif start2 > size2:
  __pyx_t_1 = ((__pyx_v_start2 > __pyx_v_size2) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2836:         start2 = size2  # trim source start
    __pyx_v_start2 = __pyx_v_size2;
 2837: 
+2838:     if endex2 > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_endex2 > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2839:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2839, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2839, __pyx_L1_error)
+2840:     elif endex2 > size2:
  __pyx_t_1 = ((__pyx_v_endex2 > __pyx_v_size2) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2841:         endex2 = size2  # trim source end
    __pyx_v_endex2 = __pyx_v_size2;
 2842: 
+2843:     if endex2 < start2:
  __pyx_t_1 = ((__pyx_v_endex2 < __pyx_v_start2) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2844:         endex2 = start2  # clamp negative source length
    __pyx_v_endex2 = __pyx_v_start2;
+2845:     size2 = endex2 - start2
  __pyx_v_size2 = (__pyx_v_endex2 - __pyx_v_start2);
 2846: 
+2847:     size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 2848: 
+2849:     if start > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_start > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2850:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2850, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2850, __pyx_L1_error)
+2851:     elif start > size:
  __pyx_t_1 = ((__pyx_v_start > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2852:         start = size  # trim target start
    __pyx_v_start = __pyx_v_size;
 2853: 
+2854:     if endex > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_endex > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2855:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2855, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2855, __pyx_L1_error)
+2856:     elif endex > size:
  __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2857:         endex = size  # trim target end
    __pyx_v_endex = __pyx_v_size;
 2858: 
+2859:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2860:         endex = start  # clamp negative target length
    __pyx_v_endex = __pyx_v_start;
+2861:     size = endex - start
  __pyx_v_size = (__pyx_v_endex - __pyx_v_start);
 2862: 
+2863:     if size2 > size:  # enlarge target at range end
  __pyx_t_1 = ((__pyx_v_size2 > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L9;
  }
+2864:         that = Rack_Reserve_(that, endex, size2 - size)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_Reserve_(__pyx_v_that, __pyx_v_endex, (__pyx_v_size2 - __pyx_v_size)); if (unlikely(__pyx_t_3 == ((Rack_ *)NULL))) __PYX_ERR(0, 2864, __pyx_L1_error)
    __pyx_v_that = __pyx_t_3;
 2865: 
+2866:     elif size > size2:  # shrink target at range end
  __pyx_t_1 = ((__pyx_v_size > __pyx_v_size2) != 0);
  if (__pyx_t_1) {
/* … */
  }
  __pyx_L9:;
+2867:         endex -= size - size2
    __pyx_v_endex = (__pyx_v_endex - (__pyx_v_size - __pyx_v_size2));
+2868:         that = Rack_Delete_(that, endex, size - size2)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_Delete_(__pyx_v_that, __pyx_v_endex, (__pyx_v_size - __pyx_v_size2)); if (unlikely(__pyx_t_3 == ((Rack_ *)NULL))) __PYX_ERR(0, 2868, __pyx_L1_error)
    __pyx_v_that = __pyx_t_3;
 2869: 
+2870:     that = Rack_Write_(that, start, size2, &src.blocks[src.start + start2], False)
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_Write_(__pyx_v_that, __pyx_v_start, __pyx_v_size2, (&(__pyx_v_src->blocks[(__pyx_v_src->start + __pyx_v_start2)])), 0); if (unlikely(__pyx_t_3 == ((Rack_ *)NULL))) __PYX_ERR(0, 2870, __pyx_L1_error)
  __pyx_v_that = __pyx_t_3;
+2871:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2872: 
 2873: 
+2874: cdef Rack_* Rack_SetSlice(Rack_* that, ssize_t start, ssize_t endex,
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_SetSlice(Rack_ *__pyx_v_that, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_endex, Rack_ *__pyx_v_src, Py_ssize_t __pyx_v_start2, Py_ssize_t __pyx_v_endex2) {
  Py_ssize_t __pyx_v_ssize;
  Py_ssize_t __pyx_v_ssize2;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_SetSlice", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_SetSlice", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2875:                           Rack_* src, ssize_t start2, ssize_t endex2) except NULL:
 2876:     cdef:
 2877:         ssize_t ssize   # target size
 2878:         ssize_t ssize2  # source size
 2879: 
+2880:     ssize = <ssize_t>(that.endex - that.start)
  __pyx_v_ssize = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
+2881:     ssize2 = <ssize_t>(src.endex - src.start)
  __pyx_v_ssize2 = ((Py_ssize_t)(__pyx_v_src->endex - __pyx_v_src->start));
 2882: 
+2883:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2884:         start += ssize  # anchor to target end
    __pyx_v_start = (__pyx_v_start + __pyx_v_ssize);
+2885:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
 2886:         # start2 -= start  # skip initial source data  # as per bytearray
+2887:         start = 0  # trim target start
    __pyx_v_start = 0;
 2888: 
+2889:     if endex < 0:
  __pyx_t_1 = ((__pyx_v_endex < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2890:         endex += ssize  # anchor to target end
    __pyx_v_endex = (__pyx_v_endex + __pyx_v_ssize);
+2891:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2892:         endex = start  # clamp negative target length
    __pyx_v_endex = __pyx_v_start;
 2893: 
+2894:     if start2 < 0:
  __pyx_t_1 = ((__pyx_v_start2 < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2895:         start2 += ssize2  # anchor to source end
    __pyx_v_start2 = (__pyx_v_start2 + __pyx_v_ssize2);
+2896:     if start2 < 0:
  __pyx_t_1 = ((__pyx_v_start2 < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2897:         start2 = 0  # trim source start
    __pyx_v_start2 = 0;
 2898: 
+2899:     if endex2 < 0:
  __pyx_t_1 = ((__pyx_v_endex2 < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2900:         endex2 += ssize2  # anchor to source end
    __pyx_v_endex2 = (__pyx_v_endex2 + __pyx_v_ssize2);
+2901:     if endex2 < start2:
  __pyx_t_1 = ((__pyx_v_endex2 < __pyx_v_start2) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2902:         endex2 = start2  # clamp negative source length
    __pyx_v_endex2 = __pyx_v_start2;
 2903: 
+2904:     that = Rack_SetSlice_(that, <size_t>start, <size_t>endex, src, <size_t>start2, <size_t>endex2)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_SetSlice_(__pyx_v_that, ((size_t)__pyx_v_start), ((size_t)__pyx_v_endex), __pyx_v_src, ((size_t)__pyx_v_start2), ((size_t)__pyx_v_endex2)); if (unlikely(__pyx_t_2 == ((Rack_ *)NULL))) __PYX_ERR(0, 2904, __pyx_L1_error)
  __pyx_v_that = __pyx_t_2;
+2905:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2906: 
 2907: 
+2908: cdef Rack_* Rack_DelSlice_(Rack_* that, size_t start, size_t endex) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_DelSlice_(Rack_ *__pyx_v_that, size_t __pyx_v_start, size_t __pyx_v_endex) {
  size_t __pyx_v_size;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_DelSlice_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Rack_DelSlice_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2909:     cdef:
 2910:         size_t size
 2911: 
+2912:     size = that.endex - that.start
  __pyx_v_size = (__pyx_v_that->endex - __pyx_v_that->start);
 2913: 
+2914:     if start > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_start > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2915:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2915, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2915, __pyx_L1_error)
+2916:     elif start > size:
  __pyx_t_1 = ((__pyx_v_start > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2917:         start = size  # trim start
    __pyx_v_start = __pyx_v_size;
 2918: 
+2919:     if endex > SIZE_HMAX:
  __pyx_t_1 = ((__pyx_v_endex > SIZE_HMAX) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+2920:         raise OverflowError('size overflow')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_OverflowError, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2920, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 2920, __pyx_L1_error)
+2921:     elif endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+2922:         endex = start  # clamp negative length
    __pyx_v_endex = __pyx_v_start;
+2923:     elif endex > size:
  __pyx_t_1 = ((__pyx_v_endex > __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
  __pyx_L4:;
+2924:         endex = size  # trim end
    __pyx_v_endex = __pyx_v_size;
 2925: 
+2926:     that = Rack_Delete_(that, start, (endex - start))
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_Delete_(__pyx_v_that, __pyx_v_start, (__pyx_v_endex - __pyx_v_start)); if (unlikely(__pyx_t_3 == ((Rack_ *)NULL))) __PYX_ERR(0, 2926, __pyx_L1_error)
  __pyx_v_that = __pyx_t_3;
+2927:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2928: 
 2929: 
+2930: cdef Rack_* Rack_DelSlice(Rack_* that, ssize_t start, ssize_t endex) except NULL:
static Rack_ *__pyx_f_11cbytesparse_2_c_Rack_DelSlice(Rack_ *__pyx_v_that, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_endex) {
  Py_ssize_t __pyx_v_ssize;
  Rack_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_DelSlice", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rack_DelSlice", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2931:     cdef:
 2932:         ssize_t ssize
 2933: 
+2934:     ssize = <ssize_t>(that.endex - that.start)
  __pyx_v_ssize = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 2935: 
+2936:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2937:         start += ssize  # anchor to end
    __pyx_v_start = (__pyx_v_start + __pyx_v_ssize);
+2938:     if start < 0:
  __pyx_t_1 = ((__pyx_v_start < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2939:         start = 0  # trim start
    __pyx_v_start = 0;
 2940: 
+2941:     if endex < 0:
  __pyx_t_1 = ((__pyx_v_endex < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2942:         endex += ssize  # anchor to end
    __pyx_v_endex = (__pyx_v_endex + __pyx_v_ssize);
+2943:     if endex < start:
  __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
  if (__pyx_t_1) {
/* … */
  }
+2944:         endex = start  # clamp negative length
    __pyx_v_endex = __pyx_v_start;
 2945: 
+2946:     that = Rack_DelSlice_(that, <size_t>start, <size_t>endex)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_DelSlice_(__pyx_v_that, ((size_t)__pyx_v_start), ((size_t)__pyx_v_endex)); if (unlikely(__pyx_t_2 == ((Rack_ *)NULL))) __PYX_ERR(0, 2946, __pyx_L1_error)
  __pyx_v_that = __pyx_t_2;
+2947:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 2948: 
 2949: 
+2950: cdef ssize_t Rack_IndexAt(const Rack_* that, addr_t address) except -2:
static Py_ssize_t __pyx_f_11cbytesparse_2_c_Rack_IndexAt(Rack_ const *__pyx_v_that, addr_t __pyx_v_address) {
  Py_ssize_t __pyx_v_left;
  Py_ssize_t __pyx_v_right;
  Py_ssize_t __pyx_v_center;
  Block_ const *__pyx_v_block;
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_IndexAt", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2951:     cdef:
+2952:         ssize_t left = 0
  __pyx_v_left = 0;
+2953:         ssize_t right = <ssize_t>(that.endex - that.start)
  __pyx_v_right = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 2954:         ssize_t center
 2955:         const Block_* block
 2956: 
+2957:     if right:
  __pyx_t_1 = (__pyx_v_right != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+2958:         block = that.blocks[that.start]
    __pyx_v_block = (__pyx_v_that->blocks[__pyx_v_that->start]);
+2959:         if address < Block_Start(block):
    __pyx_t_1 = ((__pyx_v_address < __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block)) != 0);
    if (__pyx_t_1) {
/* … */
    }
+2960:             return -1
      __pyx_r = -1L;
      goto __pyx_L0;
 2961: 
+2962:         block = that.blocks[that.endex - 1]
    __pyx_v_block = (__pyx_v_that->blocks[(__pyx_v_that->endex - 1)]);
+2963:         if Block_Endex(block) <= address:
    __pyx_t_1 = ((__pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block) <= __pyx_v_address) != 0);
    if (__pyx_t_1) {
/* … */
    }
+2964:             return -1
      __pyx_r = -1L;
      goto __pyx_L0;
 2965:     else:
+2966:         return -1
  /*else*/ {
    __pyx_r = -1L;
    goto __pyx_L0;
  }
  __pyx_L3:;
 2967: 
+2968:     while left <= right:
  while (1) {
    __pyx_t_1 = ((__pyx_v_left <= __pyx_v_right) != 0);
    if (!__pyx_t_1) break;
+2969:         center = (left + right) >> 1
    __pyx_v_center = ((__pyx_v_left + __pyx_v_right) >> 1);
+2970:         block = that.blocks[that.start + center]
    __pyx_v_block = (__pyx_v_that->blocks[(__pyx_v_that->start + __pyx_v_center)]);
 2971: 
+2972:         if Block_Endex(block) <= address:
    __pyx_t_1 = ((__pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block) <= __pyx_v_address) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L8;
    }
+2973:             left = center + 1
      __pyx_v_left = (__pyx_v_center + 1);
+2974:         elif address < Block_Start(block):
    __pyx_t_1 = ((__pyx_v_address < __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block)) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L8;
    }
+2975:             right = center - 1
      __pyx_v_right = (__pyx_v_center - 1);
 2976:         else:
+2977:             return center
    /*else*/ {
      __pyx_r = __pyx_v_center;
      goto __pyx_L0;
    }
    __pyx_L8:;
  }
 2978:     else:
+2979:         return -1
  /*else*/ {
    __pyx_r = -1L;
    goto __pyx_L0;
  }
 2980: 
 2981: 
+2982: cdef ssize_t Rack_IndexStart(const Rack_* that, addr_t address) except -2:
static Py_ssize_t __pyx_f_11cbytesparse_2_c_Rack_IndexStart(Rack_ const *__pyx_v_that, addr_t __pyx_v_address) {
  Py_ssize_t __pyx_v_left;
  Py_ssize_t __pyx_v_right;
  Py_ssize_t __pyx_v_center;
  Block_ const *__pyx_v_block;
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_IndexStart", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 2983:     cdef:
+2984:         ssize_t left = 0
  __pyx_v_left = 0;
+2985:         ssize_t right = <ssize_t>(that.endex - that.start)
  __pyx_v_right = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 2986:         ssize_t center
 2987:         const Block_* block
 2988: 
+2989:     if right:
  __pyx_t_1 = (__pyx_v_right != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+2990:         block = that.blocks[that.start]
    __pyx_v_block = (__pyx_v_that->blocks[__pyx_v_that->start]);
+2991:         if address <= Block_Start(block):
    __pyx_t_1 = ((__pyx_v_address <= __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block)) != 0);
    if (__pyx_t_1) {
/* … */
    }
+2992:             return 0
      __pyx_r = 0;
      goto __pyx_L0;
 2993: 
+2994:         block = that.blocks[that.endex - 1]
    __pyx_v_block = (__pyx_v_that->blocks[(__pyx_v_that->endex - 1)]);
+2995:         if Block_Endex(block) <= address:
    __pyx_t_1 = ((__pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block) <= __pyx_v_address) != 0);
    if (__pyx_t_1) {
/* … */
    }
+2996:             return right
      __pyx_r = __pyx_v_right;
      goto __pyx_L0;
 2997:     else:
+2998:         return 0
  /*else*/ {
    __pyx_r = 0;
    goto __pyx_L0;
  }
  __pyx_L3:;
 2999: 
+3000:     while left <= right:
  while (1) {
    __pyx_t_1 = ((__pyx_v_left <= __pyx_v_right) != 0);
    if (!__pyx_t_1) break;
+3001:         center = (left + right) >> 1
    __pyx_v_center = ((__pyx_v_left + __pyx_v_right) >> 1);
+3002:         block = that.blocks[that.start + center]
    __pyx_v_block = (__pyx_v_that->blocks[(__pyx_v_that->start + __pyx_v_center)]);
 3003: 
+3004:         if Block_Endex(block) <= address:
    __pyx_t_1 = ((__pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block) <= __pyx_v_address) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L8;
    }
+3005:             left = center + 1
      __pyx_v_left = (__pyx_v_center + 1);
+3006:         elif address < Block_Start(block):
    __pyx_t_1 = ((__pyx_v_address < __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block)) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L8;
    }
+3007:             right = center - 1
      __pyx_v_right = (__pyx_v_center - 1);
 3008:         else:
+3009:             return center
    /*else*/ {
      __pyx_r = __pyx_v_center;
      goto __pyx_L0;
    }
    __pyx_L8:;
  }
 3010:     else:
+3011:         return left
  /*else*/ {
    __pyx_r = __pyx_v_left;
    goto __pyx_L0;
  }
 3012: 
 3013: 
+3014: cdef ssize_t Rack_IndexEndex(const Rack_* that, addr_t address) except -2:
static Py_ssize_t __pyx_f_11cbytesparse_2_c_Rack_IndexEndex(Rack_ const *__pyx_v_that, addr_t __pyx_v_address) {
  Py_ssize_t __pyx_v_left;
  Py_ssize_t __pyx_v_right;
  Py_ssize_t __pyx_v_center;
  Block_ const *__pyx_v_block;
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rack_IndexEndex", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3015:     cdef:
+3016:         ssize_t left = 0
  __pyx_v_left = 0;
+3017:         ssize_t right = <ssize_t>(that.endex - that.start)
  __pyx_v_right = ((Py_ssize_t)(__pyx_v_that->endex - __pyx_v_that->start));
 3018:         ssize_t center
 3019:         const Block_* block
 3020: 
+3021:     if right:
  __pyx_t_1 = (__pyx_v_right != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+3022:         block = that.blocks[that.start]
    __pyx_v_block = (__pyx_v_that->blocks[__pyx_v_that->start]);
+3023:         if address < Block_Start(block):
    __pyx_t_1 = ((__pyx_v_address < __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block)) != 0);
    if (__pyx_t_1) {
/* … */
    }
+3024:             return 0
      __pyx_r = 0;
      goto __pyx_L0;
 3025: 
+3026:         block = that.blocks[that.endex - 1]
    __pyx_v_block = (__pyx_v_that->blocks[(__pyx_v_that->endex - 1)]);
+3027:         if Block_Endex(block) <= address:
    __pyx_t_1 = ((__pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block) <= __pyx_v_address) != 0);
    if (__pyx_t_1) {
/* … */
    }
+3028:             return right
      __pyx_r = __pyx_v_right;
      goto __pyx_L0;
 3029:     else:
+3030:         return 0
  /*else*/ {
    __pyx_r = 0;
    goto __pyx_L0;
  }
  __pyx_L3:;
 3031: 
+3032:     while left <= right:
  while (1) {
    __pyx_t_1 = ((__pyx_v_left <= __pyx_v_right) != 0);
    if (!__pyx_t_1) break;
+3033:         center = (left + right) >> 1
    __pyx_v_center = ((__pyx_v_left + __pyx_v_right) >> 1);
+3034:         block = that.blocks[that.start + center]
    __pyx_v_block = (__pyx_v_that->blocks[(__pyx_v_that->start + __pyx_v_center)]);
 3035: 
+3036:         if Block_Endex(block) <= address:
    __pyx_t_1 = ((__pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block) <= __pyx_v_address) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L8;
    }
+3037:             left = center + 1
      __pyx_v_left = (__pyx_v_center + 1);
+3038:         elif address < Block_Start(block):
    __pyx_t_1 = ((__pyx_v_address < __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block)) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L8;
    }
+3039:             right = center - 1
      __pyx_v_right = (__pyx_v_center - 1);
 3040:         else:
+3041:             return center + 1
    /*else*/ {
      __pyx_r = (__pyx_v_center + 1);
      goto __pyx_L0;
    }
    __pyx_L8:;
  }
 3042:     else:
+3043:         return right + 1
  /*else*/ {
    __pyx_r = (__pyx_v_right + 1);
    goto __pyx_L0;
  }
 3044: 
 3045: 
 3046: # =====================================================================================================================
 3047: 
+3048: cdef Memory Memory_AsObject(Memory_* that):
static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_f_11cbytesparse_2_c_Memory_AsObject(Memory_ *__pyx_v_that) {
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_memory = 0;
  Memory_ *__pyx_v_memory_;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_AsObject", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory_AsObject", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_memory);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3049:     cdef:
+3050:         Memory memory = Memory()
  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3050, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_memory = ((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_t_1);
  __pyx_t_1 = 0;
+3051:         Memory_* memory_ = memory._
  __pyx_t_2 = __pyx_v_memory->_;
  __pyx_v_memory_ = __pyx_t_2;
 3052: 
+3053:     memory_.blocks = Rack_Free(memory_.blocks)
  __pyx_v_memory_->blocks = __pyx_f_11cbytesparse_2_c_Rack_Free(__pyx_v_memory_->blocks);
+3054:     memory_.blocks = Rack_ShallowCopy(that.blocks)
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_ShallowCopy(__pyx_v_that->blocks); if (unlikely(__pyx_t_3 == ((Rack_ *)NULL))) __PYX_ERR(0, 3054, __pyx_L1_error)
  __pyx_v_memory_->blocks = __pyx_t_3;
+3055:     memory_.trim_start = that.trim_start
  __pyx_t_4 = __pyx_v_that->trim_start;
  __pyx_v_memory_->trim_start = __pyx_t_4;
+3056:     memory_.trim_endex = that.trim_endex
  __pyx_t_4 = __pyx_v_that->trim_endex;
  __pyx_v_memory_->trim_endex = __pyx_t_4;
+3057:     memory_.trim_start_ = that.trim_start_
  __pyx_t_5 = __pyx_v_that->trim_start_;
  __pyx_v_memory_->trim_start_ = __pyx_t_5;
+3058:     memory_.trim_endex_ = that.trim_endex_
  __pyx_t_5 = __pyx_v_that->trim_endex_;
  __pyx_v_memory_->trim_endex_ = __pyx_t_5;
+3059:     return memory
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_memory));
  __pyx_r = __pyx_v_memory;
  goto __pyx_L0;
 3060: 
 3061: 
+3062: cdef Memory_* Memory_Alloc() except NULL:
static Memory_ *__pyx_f_11cbytesparse_2_c_Memory_Alloc(void) {
  Rack_ *__pyx_v_blocks;
  Memory_ *__pyx_v_that;
  Memory_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Alloc", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_Alloc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3063:     cdef:
+3064:         Rack_* blocks = Rack_Alloc(0)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Alloc(0); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 3064, __pyx_L1_error)
  __pyx_v_blocks = __pyx_t_1;
+3065:         Memory_* that = NULL
  __pyx_v_that = NULL;
 3066: 
+3067:     that = <Memory_*>PyMem_Calloc(Memory_HEADING, 1)
  __pyx_v_that = ((Memory_ *)__pyx_f_11cbytesparse_2_c_PyMem_Calloc(Memory_HEADING, 1));
+3068:     if that == NULL:
  __pyx_t_2 = ((__pyx_v_that == NULL) != 0);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+3069:         blocks = Rack_Free(blocks)
    __pyx_v_blocks = __pyx_f_11cbytesparse_2_c_Rack_Free(__pyx_v_blocks);
+3070:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 3070, __pyx_L1_error)
 3071: 
+3072:     that.blocks = blocks
  __pyx_v_that->blocks = __pyx_v_blocks;
+3073:     that.trim_start = 0
  __pyx_v_that->trim_start = 0;
+3074:     that.trim_endex = ADDR_MAX
  __pyx_v_that->trim_endex = ADDR_MAX;
+3075:     that.trim_start_ = False
  __pyx_v_that->trim_start_ = 0;
+3076:     that.trim_endex_ = False
  __pyx_v_that->trim_endex_ = 0;
+3077:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 3078: 
 3079: 
+3080: cdef Memory_* Memory_Free(Memory_* that) except? NULL:
static Memory_ *__pyx_f_11cbytesparse_2_c_Memory_Free(Memory_ *__pyx_v_that) {
  Memory_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Free", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3081:     if that:
  __pyx_t_1 = (__pyx_v_that != 0);
  if (__pyx_t_1) {
/* … */
  }
+3082:         that.blocks = Rack_Free(that.blocks)
    __pyx_v_that->blocks = __pyx_f_11cbytesparse_2_c_Rack_Free(__pyx_v_that->blocks);
+3083:         PyMem_Free(that)
    PyMem_Free(__pyx_v_that);
+3084:     return NULL
  __pyx_r = NULL;
  goto __pyx_L0;
 3085: 
 3086: 
+3087: cdef Memory_* Memory_Create(
static Memory_ *__pyx_f_11cbytesparse_2_c_Memory_Create(Memory_ *__pyx_v_memory, __Pyx_memviewslice __pyx_v_data, PyObject *__pyx_v_offset, PyObject *__pyx_v_blocks, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, int __pyx_v_copy, int __pyx_v_validate) {
  addr_t __pyx_v_start_;
  addr_t __pyx_v_endex_;
  addr_t __pyx_v_address;
  size_t __pyx_v_size;
  byte_t const *__pyx_v_ptr;
  Block_ *__pyx_v_block;
  Rack_ *__pyx_v_blocks_;
  Memory_ *__pyx_v_that;
  int __pyx_v_validate_;
  Memory_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Create", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_17);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3088:     Memory_* memory,
 3089:     const byte_t[:] data,
 3090:     object offset,
 3091:     object blocks,
 3092:     object start,
 3093:     object endex,
 3094:     bint copy,
 3095:     bint validate,
 3096: ) except NULL:
 3097:     cdef:
 3098:         addr_t start_
 3099:         addr_t endex_
 3100:         addr_t address
 3101:         size_t size
+3102:         const byte_t* ptr = NULL
  __pyx_v_ptr = NULL;
+3103:         Block_* block = NULL
  __pyx_v_block = NULL;
+3104:         Rack_* blocks_ = NULL
  __pyx_v_blocks_ = NULL;
+3105:         Memory_* that = NULL
  __pyx_v_that = NULL;
+3106:         bint validate_ = validate
  __pyx_v_validate_ = __pyx_v_validate;
 3107: 
+3108:     if (memory != NULL) + (data is not None) + (blocks is not None) > 1:
  __pyx_t_1 = (__pyx_v_blocks != Py_None);
  __pyx_t_2 = (((((__pyx_v_memory != NULL) + (((PyObject *) __pyx_v_data.memview) != Py_None)) + __pyx_t_1) > 1) != 0);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+3109:         raise ValueError('only one of [memory, data, blocks] is allowed')
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3109, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(0, 3109, __pyx_L1_error)
/* … */
  __pyx_tuple__15 = PyTuple_Pack(1, __pyx_kp_u_only_one_of_memory_data_blocks_i); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 3109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__15);
  __Pyx_GIVEREF(__pyx_tuple__15);
 3110: 
+3111:     that = <Memory_*>PyMem_Calloc(Memory_HEADING, 1)
  __pyx_v_that = ((Memory_ *)__pyx_f_11cbytesparse_2_c_PyMem_Calloc(Memory_HEADING, 1));
+3112:     if that == NULL:
  __pyx_t_2 = ((__pyx_v_that == NULL) != 0);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+3113:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 3113, __pyx_L1_error)
 3114: 
+3115:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L10_try_end;
    __pyx_L5_error:;
    __Pyx_XDECREF(__pyx_t_17); __pyx_t_17 = 0;
    __Pyx_XDECREF(__pyx_t_18); __pyx_t_18 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L10_try_end:;
  }
+3116:         start_ = ADDR_MIN if start is None else <addr_t>start
      __pyx_t_2 = (__pyx_v_start == Py_None);
      if ((__pyx_t_2 != 0)) {
        __pyx_t_7 = ADDR_MIN;
      } else {
        __pyx_t_8 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_start); if (unlikely((__pyx_t_8 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3116, __pyx_L5_error)
        __pyx_t_7 = ((addr_t)__pyx_t_8);
      }
      __pyx_v_start_ = __pyx_t_7;
+3117:         endex_ = ADDR_MAX if endex is None else <addr_t>endex
      __pyx_t_2 = (__pyx_v_endex == Py_None);
      if ((__pyx_t_2 != 0)) {
        __pyx_t_7 = ADDR_MAX;
      } else {
        __pyx_t_8 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_endex); if (unlikely((__pyx_t_8 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3117, __pyx_L5_error)
        __pyx_t_7 = ((addr_t)__pyx_t_8);
      }
      __pyx_v_endex_ = __pyx_t_7;
+3118:         if endex_ < start_:
      __pyx_t_2 = ((__pyx_v_endex_ < __pyx_v_start_) != 0);
      if (__pyx_t_2) {
/* … */
      }
+3119:             endex_ = start_  # clamp negative length
        __pyx_v_endex_ = __pyx_v_start_;
 3120: 
+3121:         if memory != NULL:
      __pyx_t_2 = ((__pyx_v_memory != NULL) != 0);
      if (__pyx_t_2) {
/* … */
        goto __pyx_L12;
      }
+3122:             if copy or offset:
        __pyx_t_1 = (__pyx_v_copy != 0);
        if (!__pyx_t_1) {
        } else {
          __pyx_t_2 = __pyx_t_1;
          goto __pyx_L14_bool_binop_done;
        }
        __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_offset); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3122, __pyx_L5_error)
        __pyx_t_2 = __pyx_t_1;
        __pyx_L14_bool_binop_done:;
        if (__pyx_t_2) {
/* … */
          goto __pyx_L13;
        }
+3123:                 blocks_ = Rack_Copy(memory.blocks)
          __pyx_t_9 = __pyx_f_11cbytesparse_2_c_Rack_Copy(__pyx_v_memory->blocks); if (unlikely(__pyx_t_9 == ((Rack_ *)NULL))) __PYX_ERR(0, 3123, __pyx_L5_error)
          __pyx_v_blocks_ = __pyx_t_9;
+3124:                 blocks_ = Rack_Shift(blocks_, <saddr_t>offset)
          __pyx_t_10 = __Pyx_PyInt_As_int_fast64_t(__pyx_v_offset); if (unlikely((__pyx_t_10 == ((saddr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3124, __pyx_L5_error)
          __pyx_t_9 = __pyx_f_11cbytesparse_2_c_Rack_Shift(__pyx_v_blocks_, ((saddr_t)__pyx_t_10)); if (unlikely(__pyx_t_9 == ((Rack_ *)NULL))) __PYX_ERR(0, 3124, __pyx_L5_error)
          __pyx_v_blocks_ = __pyx_t_9;
 3125:             else:
+3126:                 blocks_ = Rack_ShallowCopy(memory.blocks)
        /*else*/ {
          __pyx_t_9 = __pyx_f_11cbytesparse_2_c_Rack_ShallowCopy(__pyx_v_memory->blocks); if (unlikely(__pyx_t_9 == ((Rack_ *)NULL))) __PYX_ERR(0, 3126, __pyx_L5_error)
          __pyx_v_blocks_ = __pyx_t_9;
        }
        __pyx_L13:;
 3127: 
+3128:         elif data is not None:
      __pyx_t_2 = ((((PyObject *) __pyx_v_data.memview) != Py_None) != 0);
      if (__pyx_t_2) {
/* … */
        goto __pyx_L12;
      }
+3129:             if offset < 0:
        __pyx_t_3 = PyObject_RichCompare(__pyx_v_offset, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3129, __pyx_L5_error)
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3129, __pyx_L5_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(__pyx_t_2)) {
/* … */
        }
+3130:                 raise ValueError('negative offset')
          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3130, __pyx_L5_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_Raise(__pyx_t_3, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __PYX_ERR(0, 3130, __pyx_L5_error)
/* … */
  __pyx_tuple__16 = PyTuple_Pack(1, __pyx_kp_u_negative_offset); if (unlikely(!__pyx_tuple__16)) __PYX_ERR(0, 3130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__16);
  __Pyx_GIVEREF(__pyx_tuple__16);
 3131: 
+3132:             address = <addr_t>offset
        __pyx_t_7 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_offset); if (unlikely((__pyx_t_7 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3132, __pyx_L5_error)
        __pyx_v_address = ((addr_t)__pyx_t_7);
+3133:             size = <size_t>len(data)
        __pyx_t_11 = __Pyx_MemoryView_Len(__pyx_v_data); 
        __pyx_v_size = ((size_t)__pyx_t_11);
+3134:             blocks_ = Rack_Alloc(0)
        __pyx_t_9 = __pyx_f_11cbytesparse_2_c_Rack_Alloc(0); if (unlikely(__pyx_t_9 == ((Rack_ *)NULL))) __PYX_ERR(0, 3134, __pyx_L5_error)
        __pyx_v_blocks_ = __pyx_t_9;
 3135: 
+3136:             if size:
        __pyx_t_2 = (__pyx_v_size != 0);
        if (__pyx_t_2) {
/* … */
        }
 3137:                 with cython.boundscheck(False):
+3138:                     ptr = &data[0]
          __pyx_t_12 = 0;
          if (__pyx_t_12 < 0) __pyx_t_12 += __pyx_v_data.shape[0];
          __pyx_v_ptr = (&(*((byte_t const  *) ( /* dim=0 */ (__pyx_v_data.data + __pyx_t_12 * __pyx_v_data.strides[0]) ))));
+3139:                 block = Block_Create(address, size, ptr)
          __pyx_t_13 = __pyx_f_11cbytesparse_2_c_Block_Create(__pyx_v_address, __pyx_v_size, __pyx_v_ptr); if (unlikely(__pyx_t_13 == ((Block_ *)NULL))) __PYX_ERR(0, 3139, __pyx_L5_error)
          __pyx_v_block = __pyx_t_13;
+3140:                 try:
          {
            /*try:*/ {
/* … */
            }
            __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
            goto __pyx_L23_try_end;
            __pyx_L18_error:;
            __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
/* … */
            __Pyx_XGIVEREF(__pyx_t_14);
            __Pyx_XGIVEREF(__pyx_t_15);
            __Pyx_XGIVEREF(__pyx_t_16);
            __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16);
            goto __pyx_L5_error;
            __pyx_L23_try_end:;
          }
+3141:                     blocks_ = Rack_Append(blocks_, block)
              __pyx_t_9 = __pyx_f_11cbytesparse_2_c_Rack_Append(__pyx_v_blocks_, __pyx_v_block); if (unlikely(__pyx_t_9 == ((Rack_ *)NULL))) __PYX_ERR(0, 3141, __pyx_L18_error)
              __pyx_v_blocks_ = __pyx_t_9;
+3142:                 except:
            /*except:*/ {
              __Pyx_AddTraceback("cbytesparse._c.Memory_Create", __pyx_clineno, __pyx_lineno, __pyx_filename);
              if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_17, &__pyx_t_18) < 0) __PYX_ERR(0, 3142, __pyx_L20_except_error)
              __Pyx_GOTREF(__pyx_t_3);
              __Pyx_GOTREF(__pyx_t_17);
              __Pyx_GOTREF(__pyx_t_18);
+3143:                     block = Block_Free(block)
              __pyx_v_block = __pyx_f_11cbytesparse_2_c_Block_Free(__pyx_v_block);
+3144:                     raise
              __Pyx_GIVEREF(__pyx_t_3);
              __Pyx_GIVEREF(__pyx_t_17);
              __Pyx_XGIVEREF(__pyx_t_18);
              __Pyx_ErrRestoreWithState(__pyx_t_3, __pyx_t_17, __pyx_t_18);
              __pyx_t_3 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; 
              __PYX_ERR(0, 3144, __pyx_L20_except_error)
            }
            __pyx_L20_except_error:;
 3145: 
+3146:         elif blocks:
      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_blocks); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3146, __pyx_L5_error)
      if (__pyx_t_2) {
/* … */
        goto __pyx_L12;
      }
+3147:             blocks_ = Rack_FromObject(blocks, <saddr_t>offset)
        __pyx_t_10 = __Pyx_PyInt_As_int_fast64_t(__pyx_v_offset); if (unlikely((__pyx_t_10 == ((saddr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3147, __pyx_L5_error)
        __pyx_t_9 = __pyx_f_11cbytesparse_2_c_Rack_FromObject(__pyx_v_blocks, ((saddr_t)__pyx_t_10)); if (unlikely(__pyx_t_9 == ((Rack_ *)NULL))) __PYX_ERR(0, 3147, __pyx_L5_error)
        __pyx_v_blocks_ = __pyx_t_9;
 3148: 
 3149:         else:
+3150:             blocks_ = Rack_Alloc(0)
      /*else*/ {
        __pyx_t_9 = __pyx_f_11cbytesparse_2_c_Rack_Alloc(0); if (unlikely(__pyx_t_9 == ((Rack_ *)NULL))) __PYX_ERR(0, 3150, __pyx_L5_error)
        __pyx_v_blocks_ = __pyx_t_9;
      }
      __pyx_L12:;
 3151: 
+3152:         that.blocks = blocks_
      __pyx_v_that->blocks = __pyx_v_blocks_;
+3153:         blocks_ = NULL
      __pyx_v_blocks_ = NULL;
 3154: 
+3155:         that.trim_start = start_
      __pyx_v_that->trim_start = __pyx_v_start_;
+3156:         that.trim_endex = endex_
      __pyx_v_that->trim_endex = __pyx_v_endex_;
+3157:         that.trim_start_ = start is not None
      __pyx_t_2 = (__pyx_v_start != Py_None);
      __pyx_v_that->trim_start_ = __pyx_t_2;
+3158:         that.trim_endex_ = endex is not None
      __pyx_t_2 = (__pyx_v_endex != Py_None);
      __pyx_v_that->trim_endex_ = __pyx_t_2;
 3159: 
+3160:         if (that.trim_start_ or that.trim_endex_) and validate_:  # fast check
      __pyx_t_1 = (__pyx_v_that->trim_start_ != 0);
      if (!__pyx_t_1) {
      } else {
        goto __pyx_L28_next_and;
      }
      __pyx_t_1 = (__pyx_v_that->trim_endex_ != 0);
      if (__pyx_t_1) {
      } else {
        __pyx_t_2 = __pyx_t_1;
        goto __pyx_L27_bool_binop_done;
      }
      __pyx_L28_next_and:;
      __pyx_t_1 = (__pyx_v_validate_ != 0);
      __pyx_t_2 = __pyx_t_1;
      __pyx_L27_bool_binop_done:;
      if (__pyx_t_2) {
/* … */
      }
+3161:             Memory_Crop_(that, start_, endex_, None)
        __pyx_t_19 = __pyx_f_11cbytesparse_2_c_Memory_Crop_(__pyx_v_that, __pyx_v_start_, __pyx_v_endex_, ((PyObject*)Py_None)); if (unlikely(__pyx_t_19 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3161, __pyx_L5_error)
 3162: 
+3163:         if validate_:
      __pyx_t_2 = (__pyx_v_validate_ != 0);
      if (__pyx_t_2) {
/* … */
      }
+3164:             Memory_Validate(that)
        __pyx_t_19 = __pyx_f_11cbytesparse_2_c_Memory_Validate(__pyx_v_that); if (unlikely(__pyx_t_19 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3164, __pyx_L5_error)
 3165: 
+3166:     except:
    /*except:*/ {
      __Pyx_AddTraceback("cbytesparse._c.Memory_Create", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_18, &__pyx_t_17, &__pyx_t_3) < 0) __PYX_ERR(0, 3166, __pyx_L7_except_error)
      __Pyx_GOTREF(__pyx_t_18);
      __Pyx_GOTREF(__pyx_t_17);
      __Pyx_GOTREF(__pyx_t_3);
+3167:         Rack_Free(blocks_)
      (void)(__pyx_f_11cbytesparse_2_c_Rack_Free(__pyx_v_blocks_));
+3168:         that = Memory_Free(that)
      __pyx_t_20 = __pyx_f_11cbytesparse_2_c_Memory_Free(__pyx_v_that); if (unlikely(__pyx_t_20 == ((Memory_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 3168, __pyx_L7_except_error)
      __pyx_v_that = __pyx_t_20;
+3169:         raise
      __Pyx_GIVEREF(__pyx_t_18);
      __Pyx_GIVEREF(__pyx_t_17);
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_ErrRestoreWithState(__pyx_t_18, __pyx_t_17, __pyx_t_3);
      __pyx_t_18 = 0; __pyx_t_17 = 0; __pyx_t_3 = 0; 
      __PYX_ERR(0, 3169, __pyx_L7_except_error)
    }
    __pyx_L7_except_error:;
 3170: 
+3171:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 3172: 
 3173: 
+3174: cdef bint Memory_EqSame_(const Memory_* that, const Memory_* other) except -1:
static int __pyx_f_11cbytesparse_2_c_Memory_EqSame_(Memory_ const *__pyx_v_that, Memory_ const *__pyx_v_other) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_EqSame_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_EqSame_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3175:     return Rack_Eq(that.blocks, other.blocks)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Eq(__pyx_v_that->blocks, __pyx_v_other->blocks); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 3175, __pyx_L1_error)
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 3176: 
 3177: 
+3178: cdef bint Memory_EqRaw_(const Memory_* that, size_t data_size, const byte_t* data_ptr) except -1:
static int __pyx_f_11cbytesparse_2_c_Memory_EqRaw_(Memory_ const *__pyx_v_that, size_t __pyx_v_data_size, byte_t const *__pyx_v_data_ptr) {
  Rack_ const *__pyx_v_blocks;
  size_t __pyx_v_block_count;
  Block_ const *__pyx_v_block;
  size_t __pyx_v_size;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_EqRaw_", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3179:     cdef:
+3180:         const Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
 3181:         size_t block_count
 3182:         const Block_* block
 3183:         size_t size
 3184: 
+3185:     block_count = Rack_Length(blocks)
  __pyx_v_block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
+3186:     if block_count:
  __pyx_t_2 = (__pyx_v_block_count != 0);
  if (__pyx_t_2) {
/* … */
  }
+3187:         if block_count != 1:
    __pyx_t_2 = ((__pyx_v_block_count != 1) != 0);
    if (__pyx_t_2) {
/* … */
    }
+3188:             return False
      __pyx_r = 0;
      goto __pyx_L0;
 3189: 
+3190:         block = Rack_First__(blocks)
    __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_First__(__pyx_v_blocks);
+3191:         size = Block_Length(block)
    __pyx_v_size = __pyx_f_11cbytesparse_2_c_Block_Length(__pyx_v_block);
+3192:         if data_size != size:
    __pyx_t_2 = ((__pyx_v_data_size != __pyx_v_size) != 0);
    if (__pyx_t_2) {
/* … */
    }
+3193:             return False
      __pyx_r = 0;
      goto __pyx_L0;
 3194: 
+3195:         if memcmp(Block_At__(block, 0), data_ptr, data_size):
    __pyx_t_2 = (memcmp(__pyx_f_11cbytesparse_2_c_Block_At__(__pyx_v_block, 0), __pyx_v_data_ptr, __pyx_v_data_size) != 0);
    if (__pyx_t_2) {
/* … */
    }
+3196:             return False
      __pyx_r = 0;
      goto __pyx_L0;
+3197:         return True
    __pyx_r = 1;
    goto __pyx_L0;
 3198:     else:
+3199:         return not data_size
  /*else*/ {
    __pyx_r = (!(__pyx_v_data_size != 0));
    goto __pyx_L0;
  }
 3200: 
 3201: 
+3202: cdef bint Memory_EqView_(const Memory_* that, const byte_t[:] view) except -1:
static int __pyx_f_11cbytesparse_2_c_Memory_EqView_(Memory_ const *__pyx_v_that, __Pyx_memviewslice __pyx_v_view) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_EqView_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_EqView_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3203:     with cython.boundscheck(False):
+3204:         return Memory_EqRaw_(that, len(view), &view[0])
  __pyx_t_1 = __Pyx_MemoryView_Len(__pyx_v_view); 
  __pyx_t_2 = 0;
  if (__pyx_t_2 < 0) __pyx_t_2 += __pyx_v_view.shape[0];
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Memory_EqRaw_(__pyx_v_that, __pyx_t_1, (&(*((byte_t const  *) ( /* dim=0 */ (__pyx_v_view.data + __pyx_t_2 * __pyx_v_view.strides[0]) ))))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 3204, __pyx_L1_error)
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;
 3205: 
 3206: 
+3207: cdef bint Memory_EqIter_(const Memory_* that, object iterable) except -1:
static int __pyx_f_11cbytesparse_2_c_Memory_EqIter_(Memory_ const *__pyx_v_that, PyObject *__pyx_v_iterable) {
  addr_t __pyx_v_start;
  addr_t __pyx_v_endex;
  Rover_ *__pyx_v_rover;
  int __pyx_v_equal;
  int __pyx_v_item1_;
  int __pyx_v_item2_;
  PyObject *__pyx_v_item2 = NULL;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_EqIter_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("cbytesparse._c.Memory_EqIter_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_item2);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3208:     cdef:
+3209:         addr_t start = Memory_Start(that)
  __pyx_v_start = __pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_v_that);
+3210:         addr_t endex = Memory_ContentEndex(that)
  __pyx_v_endex = __pyx_f_11cbytesparse_2_c_Memory_ContentEndex(__pyx_v_that);
+3211:         Rover_* rover = Rover_Create(that, start, endex, 0, NULL, True, False)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rover_Create(__pyx_v_that, __pyx_v_start, __pyx_v_endex, 0, NULL, 1, 0); if (unlikely(__pyx_t_1 == ((Rover_ *)NULL))) __PYX_ERR(0, 3211, __pyx_L1_error)
  __pyx_v_rover = __pyx_t_1;
+3212:         bint equal = True
  __pyx_v_equal = 1;
 3213:         int item1_
 3214:         int item2_
 3215: 
+3216:     try:
  /*try:*/ {
+3217:         for item2 in iterable:
    if (likely(PyList_CheckExact(__pyx_v_iterable)) || PyTuple_CheckExact(__pyx_v_iterable)) {
      __pyx_t_2 = __pyx_v_iterable; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
      __pyx_t_4 = NULL;
    } else {
      __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_iterable); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3217, __pyx_L4_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_4 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3217, __pyx_L4_error)
    }
    for (;;) {
      if (likely(!__pyx_t_4)) {
        if (likely(PyList_CheckExact(__pyx_t_2))) {
          if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 3217, __pyx_L4_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3217, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        } else {
          if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely(0 < 0)) __PYX_ERR(0, 3217, __pyx_L4_error)
          #else
          __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3217, __pyx_L4_error)
          __Pyx_GOTREF(__pyx_t_5);
          #endif
        }
      } else {
        __pyx_t_5 = __pyx_t_4(__pyx_t_2);
        if (unlikely(!__pyx_t_5)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 3217, __pyx_L4_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_5);
      }
      __Pyx_XDECREF_SET(__pyx_v_item2, __pyx_t_5);
      __pyx_t_5 = 0;
/* … */
    }
    /*else*/ {
/* … */
    __pyx_L7_break:;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
+3218:             item1_ = Rover_Next_(rover) if Rover_HasNext(rover) else -1
      if ((__pyx_f_11cbytesparse_2_c_Rover_HasNext(__pyx_v_rover) != 0)) {
        __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Rover_Next_(__pyx_v_rover); if (unlikely(__pyx_t_7 == ((int)-2))) __PYX_ERR(0, 3218, __pyx_L4_error)
        __pyx_t_6 = __pyx_t_7;
      } else {
        __pyx_t_6 = -1;
      }
      __pyx_v_item1_ = __pyx_t_6;
+3219:             item2_ = -1 if item2 is None else <int><unsigned><byte_t>item2
      __pyx_t_8 = (__pyx_v_item2 == Py_None);
      if ((__pyx_t_8 != 0)) {
        __pyx_t_6 = -1;
      } else {
        __pyx_t_9 = __Pyx_PyInt_As_byte_t(__pyx_v_item2); if (unlikely((__pyx_t_9 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3219, __pyx_L4_error)
        __pyx_t_6 = ((int)((unsigned int)((byte_t)__pyx_t_9)));
      }
      __pyx_v_item2_ = __pyx_t_6;
 3220: 
+3221:             if item1_ != item2_:
      __pyx_t_8 = ((__pyx_v_item1_ != __pyx_v_item2_) != 0);
      if (__pyx_t_8) {
/* … */
      }
+3222:                 equal = False
        __pyx_v_equal = 0;
+3223:                 break
        goto __pyx_L7_break;
 3224:         else:
+3225:             if Rover_HasNext(rover):
      __pyx_t_8 = (__pyx_f_11cbytesparse_2_c_Rover_HasNext(__pyx_v_rover) != 0);
      if (__pyx_t_8) {
/* … */
      }
    }
+3226:                 equal = False
        __pyx_v_equal = 0;
 3227:     finally:
+3228:         Rover_Free(rover)
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rover_Free(__pyx_v_rover); if (unlikely(__pyx_t_1 == ((Rover_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 3228, __pyx_L1_error)
      goto __pyx_L5;
    }
    __pyx_L4_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13) < 0)) __Pyx_ErrFetch(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_14);
      __Pyx_XGOTREF(__pyx_t_15);
      __Pyx_XGOTREF(__pyx_t_16);
      __pyx_t_6 = __pyx_lineno; __pyx_t_7 = __pyx_clineno; __pyx_t_10 = __pyx_filename;
      {
        __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rover_Free(__pyx_v_rover); if (unlikely(__pyx_t_1 == ((Rover_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 3228, __pyx_L12_error)
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_15);
        __Pyx_XGIVEREF(__pyx_t_16);
        __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16);
      }
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ErrRestore(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
      __pyx_lineno = __pyx_t_6; __pyx_clineno = __pyx_t_7; __pyx_filename = __pyx_t_10;
      goto __pyx_L1_error;
      __pyx_L12_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_15);
        __Pyx_XGIVEREF(__pyx_t_16);
        __Pyx_ExceptionReset(__pyx_t_14, __pyx_t_15, __pyx_t_16);
      }
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L5:;
  }
 3229: 
+3230:     return equal
  __pyx_r = __pyx_v_equal;
  goto __pyx_L0;
 3231: 
 3232: 
+3233: cdef bint Memory_Eq(const Memory_* that, object other) except -1:
static int __pyx_f_11cbytesparse_2_c_Memory_Eq(Memory_ const *__pyx_v_that, PyObject *__pyx_v_other) {
  __Pyx_memviewslice __pyx_v_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Eq", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Eq", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_view, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3234:     cdef:
 3235:         const byte_t[:] view
 3236: 
+3237:     if isinstance(other, Memory):
  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_other, __pyx_ptype_11cbytesparse_2_c_Memory); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
  }
+3238:         return Memory_EqSame_(that, (<Memory>other)._)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_EqSame_(__pyx_v_that, ((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_other)->_); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 3238, __pyx_L1_error)
    __pyx_r = __pyx_t_2;
    goto __pyx_L0;
 3239:     else:
+3240:         try:
  /*else*/ {
    {
      /*try:*/ {
/* … */
      }
/* … */
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
      goto __pyx_L1_error;
      __pyx_L7_except_return:;
      __Pyx_XGIVEREF(__pyx_t_3);
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
      goto __pyx_L0;
    }
  }
+3241:             view = other
        __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(__pyx_v_other, 0); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 3241, __pyx_L4_error)
        __pyx_v_view = __pyx_t_6;
        __pyx_t_6.memview = NULL;
        __pyx_t_6.data = NULL;
+3242:         except TypeError:
      __pyx_t_7 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
      if (__pyx_t_7) {
        __Pyx_AddTraceback("cbytesparse._c.Memory_Eq", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0) __PYX_ERR(0, 3242, __pyx_L6_except_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_GOTREF(__pyx_t_10);
+3243:             return Memory_EqIter_(that, other)
        __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_EqIter_(__pyx_v_that, __pyx_v_other); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 3243, __pyx_L6_except_error)
        __pyx_r = __pyx_t_2;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        goto __pyx_L7_except_return;
      }
      goto __pyx_L6_except_error;
      __pyx_L6_except_error:;
 3244:         else:
+3245:             return Memory_EqView_(that, view)
      /*else:*/ {
        __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_EqView_(__pyx_v_that, __pyx_v_view); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 3245, __pyx_L6_except_error)
        __pyx_r = __pyx_t_2;
        goto __pyx_L7_except_return;
      }
      __pyx_L4_error:;
      __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
 3246: 
 3247: 
+3248: cdef Memory_* Memory_Add(const Memory_* that, object value) except NULL:
static Memory_ *__pyx_f_11cbytesparse_2_c_Memory_Add(Memory_ const *__pyx_v_that, PyObject *__pyx_v_value) {
  Memory_ *__pyx_v_memory;
  Memory_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Add", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Add", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3249:     cdef:
+3250:         Memory_* memory = Memory_Copy(that)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Copy(__pyx_v_that); if (unlikely(__pyx_t_1 == ((Memory_ *)NULL))) __PYX_ERR(0, 3250, __pyx_L1_error)
  __pyx_v_memory = __pyx_t_1;
+3251:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
/* … */
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
    goto __pyx_L1_error;
    __pyx_L8_try_end:;
  }
+3252:         Memory_Extend(memory, value, 0)
      __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Memory_Extend(__pyx_v_memory, __pyx_v_value, __pyx_int_0); if (unlikely(__pyx_t_5 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3252, __pyx_L3_error)
+3253:     except:
    /*except:*/ {
      __Pyx_AddTraceback("cbytesparse._c.Memory_Add", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(0, 3253, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_8);
+3254:         memory = Memory_Free(memory)
      __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Free(__pyx_v_memory); if (unlikely(__pyx_t_1 == ((Memory_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 3254, __pyx_L5_except_error)
      __pyx_v_memory = __pyx_t_1;
+3255:         raise
      __Pyx_GIVEREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; 
      __PYX_ERR(0, 3255, __pyx_L5_except_error)
    }
    __pyx_L5_except_error:;
+3256:     return memory
  __pyx_r = __pyx_v_memory;
  goto __pyx_L0;
 3257: 
 3258: 
+3259: cdef Memory_* Memory_IAdd(Memory_* that, object value) except NULL:
static Memory_ *__pyx_f_11cbytesparse_2_c_Memory_IAdd(Memory_ *__pyx_v_that, PyObject *__pyx_v_value) {
  Memory_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_IAdd", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_IAdd", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3260:     Memory_Extend(that, value, 0)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Extend(__pyx_v_that, __pyx_v_value, __pyx_int_0); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3260, __pyx_L1_error)
+3261:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 3262: 
 3263: 
+3264: cdef Memory_* Memory_Mul(const Memory_* that, addr_t times) except NULL:
static Memory_ *__pyx_f_11cbytesparse_2_c_Memory_Mul(Memory_ const *__pyx_v_that, addr_t __pyx_v_times) {
  Memory_ *__pyx_v_memory;
  addr_t __pyx_v_offset;
  addr_t __pyx_v_size;
  CYTHON_UNUSED addr_t __pyx_v_time;
  PyObject *__pyx_v_start = NULL;
  Memory_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Mul", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Mul", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_start);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3265:     cdef:
+3266:         Memory_* memory = NULL
  __pyx_v_memory = NULL;
 3267:         addr_t offset
 3268:         addr_t size
 3269:         addr_t time
 3270: 
+3271:     if times and Rack_Length(that.blocks):
  __pyx_t_2 = (__pyx_v_times != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_that->blocks) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
  }
+3272:         start = Memory_Start(that)
    __pyx_t_3 = __Pyx_PyInt_From_uint_fast64_t(__pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_v_that)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3272, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_start = __pyx_t_3;
    __pyx_t_3 = 0;
+3273:         size = Memory_Endex(that) - start
    __pyx_t_3 = __Pyx_PyInt_From_uint_fast64_t(__pyx_f_11cbytesparse_2_c_Memory_Endex(__pyx_v_that)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3273, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyNumber_Subtract(__pyx_t_3, __pyx_v_start); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3273, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_5 = __Pyx_PyInt_As_uint_fast64_t(__pyx_t_4); if (unlikely((__pyx_t_5 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3273, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_size = __pyx_t_5;
+3274:         offset = size  # adjust first write
    __pyx_v_offset = __pyx_v_size;
+3275:         memory = Memory_Copy(that)
    __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_Copy(__pyx_v_that); if (unlikely(__pyx_t_6 == ((Memory_ *)NULL))) __PYX_ERR(0, 3275, __pyx_L1_error)
    __pyx_v_memory = __pyx_t_6;
+3276:         try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      goto __pyx_L11_try_end;
      __pyx_L6_error:;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
/* … */
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_XGIVEREF(__pyx_t_9);
      __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
      goto __pyx_L1_error;
      __pyx_L11_try_end:;
    }
+3277:             for time in range(times - 1):
        __pyx_t_5 = (__pyx_v_times - 1);
        __pyx_t_10 = __pyx_t_5;
        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
          __pyx_v_time = __pyx_t_11;
+3278:                 Memory_WriteSame_(memory, offset, that, False, None)
          __pyx_t_12 = __pyx_f_11cbytesparse_2_c_Memory_WriteSame_(__pyx_v_memory, __pyx_v_offset, __pyx_v_that, 0, ((PyObject*)Py_None)); if (unlikely(__pyx_t_12 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3278, __pyx_L6_error)
+3279:                 offset += size
          __pyx_v_offset = (__pyx_v_offset + __pyx_v_size);
        }
+3280:         except:
      /*except:*/ {
        __Pyx_AddTraceback("cbytesparse._c.Memory_Mul", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_3, &__pyx_t_13) < 0) __PYX_ERR(0, 3280, __pyx_L8_except_error)
        __Pyx_GOTREF(__pyx_t_4);
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_GOTREF(__pyx_t_13);
+3281:             memory = Memory_Free(memory)
        __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_Free(__pyx_v_memory); if (unlikely(__pyx_t_6 == ((Memory_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 3281, __pyx_L8_except_error)
        __pyx_v_memory = __pyx_t_6;
+3282:             raise
        __Pyx_GIVEREF(__pyx_t_4);
        __Pyx_GIVEREF(__pyx_t_3);
        __Pyx_XGIVEREF(__pyx_t_13);
        __Pyx_ErrRestoreWithState(__pyx_t_4, __pyx_t_3, __pyx_t_13);
        __pyx_t_4 = 0; __pyx_t_3 = 0; __pyx_t_13 = 0; 
        __PYX_ERR(0, 3282, __pyx_L8_except_error)
      }
      __pyx_L8_except_error:;
 3283: 
+3284:         return memory
    __pyx_r = __pyx_v_memory;
    goto __pyx_L0;
 3285:     else:
+3286:         return Memory_Alloc()
  /*else*/ {
    __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_Alloc(); if (unlikely(__pyx_t_6 == ((Memory_ *)NULL))) __PYX_ERR(0, 3286, __pyx_L1_error)
    __pyx_r = __pyx_t_6;
    goto __pyx_L0;
  }
 3287: 
 3288: 
+3289: cdef Memory_* Memory_IMul(Memory_* that, addr_t times) except NULL:
static Memory_ *__pyx_f_11cbytesparse_2_c_Memory_IMul(Memory_ *__pyx_v_that, addr_t __pyx_v_times) {
  Memory_ *__pyx_v_memory;
  addr_t __pyx_v_offset;
  PyObject *__pyx_v_start = NULL;
  PyObject *__pyx_v_size = NULL;
  CYTHON_UNUSED addr_t __pyx_v_time;
  Memory_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_IMul", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cbytesparse._c.Memory_IMul", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_start);
  __Pyx_XDECREF(__pyx_v_size);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3290:     cdef:
+3291:         Memory_* memory = NULL
  __pyx_v_memory = NULL;
 3292:         addr_t offset
 3293: 
 3294:     times = int(times)
+3295:     if times < 0:
  __pyx_t_1 = ((__pyx_v_times < 0) != 0);
  if (__pyx_t_1) {
/* … */
  }
+3296:         times = 0
    __pyx_v_times = 0;
 3297: 
+3298:     if times and Rack_Length(that.blocks):
  __pyx_t_2 = (__pyx_v_times != 0);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_2 = (__pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_that->blocks) != 0);
  __pyx_t_1 = __pyx_t_2;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+3299:         start = Memory_Start(that)
    __pyx_t_3 = __Pyx_PyInt_From_uint_fast64_t(__pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_v_that)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3299, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_v_start = __pyx_t_3;
    __pyx_t_3 = 0;
+3300:         size = Memory_Endex(that) - start
    __pyx_t_3 = __Pyx_PyInt_From_uint_fast64_t(__pyx_f_11cbytesparse_2_c_Memory_Endex(__pyx_v_that)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyNumber_Subtract(__pyx_t_3, __pyx_v_start); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_size = __pyx_t_4;
    __pyx_t_4 = 0;
+3301:         offset = size
    __pyx_t_5 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_size); if (unlikely((__pyx_t_5 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3301, __pyx_L1_error)
    __pyx_v_offset = __pyx_t_5;
+3302:         memory = Memory_Copy(that)
    __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_Copy(__pyx_v_that); if (unlikely(__pyx_t_6 == ((Memory_ *)NULL))) __PYX_ERR(0, 3302, __pyx_L1_error)
    __pyx_v_memory = __pyx_t_6;
+3303:         try:
    /*try:*/ {
+3304:             for time in range(times - 1):
      __pyx_t_5 = (__pyx_v_times - 1);
      __pyx_t_7 = __pyx_t_5;
      for (__pyx_t_8 = 0; __pyx_t_8 < __pyx_t_7; __pyx_t_8+=1) {
        __pyx_v_time = __pyx_t_8;
+3305:                 Memory_WriteSame_(that, offset, memory, False, None)
        __pyx_t_9 = __pyx_f_11cbytesparse_2_c_Memory_WriteSame_(__pyx_v_that, __pyx_v_offset, __pyx_v_memory, 0, ((PyObject*)Py_None)); if (unlikely(__pyx_t_9 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3305, __pyx_L8_error)
+3306:                 offset += size
        __pyx_t_4 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_offset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 3306, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_t_4, __pyx_v_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3306, __pyx_L8_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_10 = __Pyx_PyInt_As_uint_fast64_t(__pyx_t_3); if (unlikely((__pyx_t_10 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3306, __pyx_L8_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_v_offset = __pyx_t_10;
      }
    }
 3307:         finally:
+3308:             memory = Memory_Free(memory)
    /*finally:*/ {
      /*normal exit:*/{
        __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_Free(__pyx_v_memory); if (unlikely(__pyx_t_6 == ((Memory_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 3308, __pyx_L1_error)
        __pyx_v_memory = __pyx_t_6;
        goto __pyx_L9;
      }
      __pyx_L8_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
        if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_17, &__pyx_t_18, &__pyx_t_19);
        if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16) < 0)) __Pyx_ErrFetch(&__pyx_t_14, &__pyx_t_15, &__pyx_t_16);
        __Pyx_XGOTREF(__pyx_t_14);
        __Pyx_XGOTREF(__pyx_t_15);
        __Pyx_XGOTREF(__pyx_t_16);
        __Pyx_XGOTREF(__pyx_t_17);
        __Pyx_XGOTREF(__pyx_t_18);
        __Pyx_XGOTREF(__pyx_t_19);
        __pyx_t_11 = __pyx_lineno; __pyx_t_12 = __pyx_clineno; __pyx_t_13 = __pyx_filename;
        {
          __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_Free(__pyx_v_memory); if (unlikely(__pyx_t_6 == ((Memory_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 3308, __pyx_L13_error)
          __pyx_v_memory = __pyx_t_6;
        }
        if (PY_MAJOR_VERSION >= 3) {
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
        }
        __Pyx_XGIVEREF(__pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_15);
        __Pyx_XGIVEREF(__pyx_t_16);
        __Pyx_ErrRestore(__pyx_t_14, __pyx_t_15, __pyx_t_16);
        __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
        __pyx_lineno = __pyx_t_11; __pyx_clineno = __pyx_t_12; __pyx_filename = __pyx_t_13;
        goto __pyx_L1_error;
        __pyx_L13_error:;
        if (PY_MAJOR_VERSION >= 3) {
          __Pyx_XGIVEREF(__pyx_t_17);
          __Pyx_XGIVEREF(__pyx_t_18);
          __Pyx_XGIVEREF(__pyx_t_19);
          __Pyx_ExceptionReset(__pyx_t_17, __pyx_t_18, __pyx_t_19);
        }
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_XDECREF(__pyx_t_16); __pyx_t_16 = 0;
        __pyx_t_17 = 0; __pyx_t_18 = 0; __pyx_t_19 = 0;
        goto __pyx_L1_error;
      }
      __pyx_L9:;
    }
 3309:     else:
+3310:         that.blocks = Rack_Clear(that.blocks)
  /*else*/ {
    __pyx_t_20 = __pyx_f_11cbytesparse_2_c_Rack_Clear(__pyx_v_that->blocks); if (unlikely(__pyx_t_20 == ((Rack_ *)NULL))) __PYX_ERR(0, 3310, __pyx_L1_error)
    __pyx_v_that->blocks = __pyx_t_20;
  }
  __pyx_L4:;
+3311:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 3312: 
 3313: 
+3314: cdef addr_t Memory_Length(const Memory_* that) nogil:
static addr_t __pyx_f_11cbytesparse_2_c_Memory_Length(Memory_ const *__pyx_v_that) {
  addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+3315:     return Memory_Endex(that) - Memory_Start(that)
  __pyx_r = (__pyx_f_11cbytesparse_2_c_Memory_Endex(__pyx_v_that) - __pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_v_that));
  goto __pyx_L0;
 3316: 
 3317: 
+3318: cdef bint Memory_IsEmpty(const Memory_* that) nogil:
static int __pyx_f_11cbytesparse_2_c_Memory_IsEmpty(Memory_ const *__pyx_v_that) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+3319:     return Rack_Length(that.blocks) == 0
  __pyx_r = (__pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_that->blocks) == 0);
  goto __pyx_L0;
 3320: 
 3321: 
+3322: cdef object Memory_ObjFind(const Memory_* that, object item, object start, object endex):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_ObjFind(Memory_ const *__pyx_v_that, PyObject *__pyx_v_item, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  PyObject *__pyx_v_offset = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_ObjFind", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory_ObjFind", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_offset);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3323:     offset = Memory_Find(that, item, start, endex)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Find(__pyx_v_that, __pyx_v_item, __pyx_v_start, __pyx_v_endex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3323, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_offset = __pyx_t_1;
  __pyx_t_1 = 0;
+3324:     if offset >= 0:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_offset, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3324, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3324, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+3325:         return offset
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_offset);
    __pyx_r = __pyx_v_offset;
    goto __pyx_L0;
 3326:     else:
+3327:         return None
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }
 3328: 
 3329: 
+3330: cdef object Memory_RevObjFind(const Memory_* that, object item, object start, object endex):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_RevObjFind(Memory_ const *__pyx_v_that, PyObject *__pyx_v_item, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  PyObject *__pyx_v_offset = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_RevObjFind", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory_RevObjFind", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_offset);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3331:     offset = Memory_RevFind(that, item, start, endex)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_RevFind(__pyx_v_that, __pyx_v_item, __pyx_v_start, __pyx_v_endex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3331, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_offset = __pyx_t_1;
  __pyx_t_1 = 0;
+3332:     if offset >= 0:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_offset, __pyx_int_0, Py_GE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3332, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3332, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+3333:         return offset
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_offset);
    __pyx_r = __pyx_v_offset;
    goto __pyx_L0;
 3334:     else:
+3335:         return None
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;
  }
 3336: 
 3337: 
+3338: cdef addr_t Memory_FindUnbounded_(const Memory_* that, size_t size, const byte_t* buffer) except? -1:
static addr_t __pyx_f_11cbytesparse_2_c_Memory_FindUnbounded_(Memory_ const *__pyx_v_that, size_t __pyx_v_size, byte_t const *__pyx_v_buffer) {
  Rack_ const *__pyx_v_blocks;
  size_t __pyx_v_block_index;
  Block_ const *__pyx_v_block;
  Py_ssize_t __pyx_v_offset;
  addr_t __pyx_v_start_;
  addr_t __pyx_v_offset_;
  addr_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_FindUnbounded_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_FindUnbounded_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3339:     cdef:
+3340:         const Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
 3341:         size_t block_index
 3342:         const Block_* block
 3343:         ssize_t offset
 3344:         addr_t start_
 3345:         addr_t offset_
 3346: 
+3347:     if size:
  __pyx_t_2 = (__pyx_v_size != 0);
  if (__pyx_t_2) {
/* … */
  }
+3348:         for block_index in range(Rack_Length(blocks)):
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
    __pyx_t_4 = __pyx_t_3;
    for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
      __pyx_v_block_index = __pyx_t_5;
+3349:             block = Rack_Get__(blocks, block_index)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+3350:             offset = Block_Find_(block, 0, SIZE_MAX, size, buffer)
      __pyx_v_offset = __pyx_f_11cbytesparse_2_c_Block_Find_(__pyx_v_block, 0, SIZE_MAX, __pyx_v_size, __pyx_v_buffer);
+3351:             if offset >= 0:
      __pyx_t_2 = ((__pyx_v_offset >= 0) != 0);
      if (__pyx_t_2) {
/* … */
      }
    }
+3352:                 start_ = Block_Start(block)
        __pyx_v_start_ = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+3353:                 offset_ = <addr_t><size_t>offset
        __pyx_v_offset_ = ((addr_t)((size_t)__pyx_v_offset));
+3354:                 CheckAddAddrU(start_, offset_)
        __pyx_t_6 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_start_, __pyx_v_offset_); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3354, __pyx_L1_error)
+3355:                 return start_ + offset_
        __pyx_r = (__pyx_v_start_ + __pyx_v_offset_);
        goto __pyx_L0;
+3356:     return ADDR_MAX
  __pyx_r = ADDR_MAX;
  goto __pyx_L0;
 3357: 
 3358: 
+3359: cdef addr_t Memory_FindBounded_(const Memory_* that, size_t size, const byte_t* buffer,
static addr_t __pyx_f_11cbytesparse_2_c_Memory_FindBounded_(Memory_ const *__pyx_v_that, size_t __pyx_v_size, byte_t const *__pyx_v_buffer, addr_t __pyx_v_start, addr_t __pyx_v_endex) {
  Rack_ const *__pyx_v_blocks;
  size_t __pyx_v_block_index;
  Block_ const *__pyx_v_block;
  Py_ssize_t __pyx_v_offset;
  size_t __pyx_v_block_index_start;
  size_t __pyx_v_block_index_endex;
  size_t __pyx_v_slice_start;
  size_t __pyx_v_slice_endex;
  addr_t __pyx_v_start_;
  addr_t __pyx_v_offset_;
  addr_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_FindBounded_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_FindBounded_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3360:                                 addr_t start, addr_t endex) except? -1:
 3361:     cdef:
+3362:         const Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
 3363:         size_t block_index
 3364:         const Block_* block
 3365:         ssize_t offset
 3366:         size_t block_index_start
 3367:         size_t block_index_endex
 3368:         size_t slice_start
 3369:         size_t slice_endex
 3370:         addr_t start_
 3371:         addr_t offset_
 3372: 
+3373:     if size:
  __pyx_t_2 = (__pyx_v_size != 0);
  if (__pyx_t_2) {
/* … */
  }
+3374:         if endex < start:
    __pyx_t_2 = ((__pyx_v_endex < __pyx_v_start) != 0);
    if (__pyx_t_2) {
/* … */
    }
+3375:             endex = start
      __pyx_v_endex = __pyx_v_start;
+3376:         block_index_start = Rack_IndexStart(blocks, start)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_IndexStart(__pyx_v_blocks, __pyx_v_start); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 3376, __pyx_L1_error)
    __pyx_v_block_index_start = __pyx_t_3;
+3377:         block_index_endex = Rack_IndexEndex(blocks, endex)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_IndexEndex(__pyx_v_blocks, __pyx_v_endex); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 3377, __pyx_L1_error)
    __pyx_v_block_index_endex = __pyx_t_3;
 3378: 
+3379:         for block_index in range(block_index_start, block_index_endex):
    __pyx_t_4 = __pyx_v_block_index_endex;
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = __pyx_v_block_index_start; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_block_index = __pyx_t_6;
+3380:             block = Rack_Get__(blocks, block_index)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+3381:             slice_start, slice_endex = Block_BoundAddressSliceToOffset(block, start, endex)
      __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Block_BoundAddressSliceToOffset(__pyx_v_block, __pyx_v_start, __pyx_v_endex);
      __pyx_t_8 = __pyx_t_7.f0;
      __pyx_t_9 = __pyx_t_7.f1;
      __pyx_v_slice_start = __pyx_t_8;
      __pyx_v_slice_endex = __pyx_t_9;
+3382:             offset = Block_Find_(block, slice_start, slice_endex, size, buffer)
      __pyx_v_offset = __pyx_f_11cbytesparse_2_c_Block_Find_(__pyx_v_block, __pyx_v_slice_start, __pyx_v_slice_endex, __pyx_v_size, __pyx_v_buffer);
+3383:             if offset >= 0:
      __pyx_t_2 = ((__pyx_v_offset >= 0) != 0);
      if (__pyx_t_2) {
/* … */
      }
    }
+3384:                 start_ = Block_Start(block)
        __pyx_v_start_ = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+3385:                 offset_ = <addr_t><size_t>offset
        __pyx_v_offset_ = ((addr_t)((size_t)__pyx_v_offset));
+3386:                 CheckAddAddrU(start_, offset_)
        __pyx_t_10 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_start_, __pyx_v_offset_); if (unlikely(__pyx_t_10 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3386, __pyx_L1_error)
+3387:                 return start_ + offset_
        __pyx_r = (__pyx_v_start_ + __pyx_v_offset_);
        goto __pyx_L0;
+3388:     return ADDR_MAX
  __pyx_r = ADDR_MAX;
  goto __pyx_L0;
 3389: 
 3390: 
+3391: cdef object Memory_Find(const Memory_* that, object item, object start, object endex):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_Find(Memory_ const *__pyx_v_that, PyObject *__pyx_v_item, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  addr_t __pyx_v_start_;
  addr_t __pyx_v_endex_;
  byte_t __pyx_v_item_value;
  __Pyx_memviewslice __pyx_v_item_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  size_t __pyx_v_item_size;
  byte_t const *__pyx_v_item_ptr;
  addr_t __pyx_v_address;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Find", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Find", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_item_view, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3392:     cdef:
 3393:         addr_t start_
 3394:         addr_t endex_
 3395:         byte_t item_value
 3396:         const byte_t[:] item_view
 3397:         size_t item_size
 3398:         const byte_t* item_ptr
 3399:         addr_t address
 3400: 
+3401:     if isinstance(item, int):
  __pyx_t_1 = PyInt_Check(__pyx_v_item); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+3402:         item_value = <byte_t>item
    __pyx_t_3 = __Pyx_PyInt_As_byte_t(__pyx_v_item); if (unlikely((__pyx_t_3 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3402, __pyx_L1_error)
    __pyx_v_item_value = ((byte_t)__pyx_t_3);
+3403:         item_size = 1
    __pyx_v_item_size = 1;
+3404:         item_ptr = &item_value
    __pyx_v_item_ptr = (&__pyx_v_item_value);
 3405:     else:
+3406:         item_view = item
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(__pyx_v_item, 0); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 3406, __pyx_L1_error)
    __pyx_v_item_view = __pyx_t_4;
    __pyx_t_4.memview = NULL;
    __pyx_t_4.data = NULL;
+3407:         item_size = 1
    __pyx_v_item_size = 1;
 3408:         with cython.boundscheck(False):
+3409:             item_ptr = &item_view[0]
    __pyx_t_5 = 0;
    if (__pyx_t_5 < 0) __pyx_t_5 += __pyx_v_item_view.shape[0];
    __pyx_v_item_ptr = (&(*((byte_t const  *) ( /* dim=0 */ (__pyx_v_item_view.data + __pyx_t_5 * __pyx_v_item_view.strides[0]) ))));
  }
  __pyx_L3:;
 3410: 
 3411:     # Faster code for unbounded slice
+3412:     if start is None and endex is None:
  __pyx_t_1 = (__pyx_v_start == Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  if (__pyx_t_6) {
  } else {
    __pyx_t_2 = __pyx_t_6;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_6 = (__pyx_v_endex == Py_None);
  __pyx_t_1 = (__pyx_t_6 != 0);
  __pyx_t_2 = __pyx_t_1;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+3413:         address = Memory_FindUnbounded_(that, item_size, item_ptr)
    __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Memory_FindUnbounded_(__pyx_v_that, __pyx_v_item_size, __pyx_v_item_ptr); if (unlikely(__pyx_t_7 == ((addr_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 3413, __pyx_L1_error)
    __pyx_v_address = __pyx_t_7;
+3414:         return -1 if address == ADDR_MAX else <object>address
    __Pyx_XDECREF(__pyx_r);
    if (((__pyx_v_address == ADDR_MAX) != 0)) {
      __Pyx_INCREF(__pyx_int_neg_1);
      __pyx_t_8 = __pyx_int_neg_1;
    } else {
      __pyx_t_9 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_address); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3414, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(((PyObject *)__pyx_t_9));
      __pyx_t_8 = __pyx_t_9;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __pyx_r = __pyx_t_8;
    __pyx_t_8 = 0;
    goto __pyx_L0;
 3415: 
 3416:     # Bounded slice
+3417:     start_, endex_ = Memory_Bound(that, start, endex)
  __pyx_t_10 = __pyx_f_11cbytesparse_2_c_Memory_Bound(__pyx_v_that, __pyx_v_start, __pyx_v_endex); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3417, __pyx_L1_error)
  __pyx_t_7 = __pyx_t_10.f0;
  __pyx_t_11 = __pyx_t_10.f1;
  __pyx_v_start_ = __pyx_t_7;
  __pyx_v_endex_ = __pyx_t_11;
+3418:     address = Memory_FindBounded_(that, item_size, item_ptr, start_, endex_)
  __pyx_t_11 = __pyx_f_11cbytesparse_2_c_Memory_FindBounded_(__pyx_v_that, __pyx_v_item_size, __pyx_v_item_ptr, __pyx_v_start_, __pyx_v_endex_); if (unlikely(__pyx_t_11 == ((addr_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 3418, __pyx_L1_error)
  __pyx_v_address = __pyx_t_11;
+3419:     return -1 if address == ADDR_MAX else <object>address
  __Pyx_XDECREF(__pyx_r);
  if (((__pyx_v_address == ADDR_MAX) != 0)) {
    __Pyx_INCREF(__pyx_int_neg_1);
    __pyx_t_8 = __pyx_int_neg_1;
  } else {
    __pyx_t_9 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_address); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3419, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_INCREF(((PyObject *)__pyx_t_9));
    __pyx_t_8 = __pyx_t_9;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __pyx_r = __pyx_t_8;
  __pyx_t_8 = 0;
  goto __pyx_L0;
 3420: 
 3421: 
+3422: cdef addr_t Memory_RevFindUnbounded_(const Memory_* that, size_t size, const byte_t* buffer) except? -1:
static addr_t __pyx_f_11cbytesparse_2_c_Memory_RevFindUnbounded_(Memory_ const *__pyx_v_that, size_t __pyx_v_size, byte_t const *__pyx_v_buffer) {
  Rack_ const *__pyx_v_blocks;
  size_t __pyx_v_block_index;
  Block_ const *__pyx_v_block;
  Py_ssize_t __pyx_v_offset;
  addr_t __pyx_v_start_;
  addr_t __pyx_v_offset_;
  addr_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_RevFindUnbounded_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_RevFindUnbounded_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3423:     cdef:
+3424:         const Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
 3425:         size_t block_index
 3426:         const Block_* block
 3427:         ssize_t offset
 3428:         addr_t start_
 3429:         addr_t offset_
 3430: 
+3431:     if size:
  __pyx_t_2 = (__pyx_v_size != 0);
  if (__pyx_t_2) {
/* … */
  }
+3432:         for block_index in range(Rack_Length(blocks), 0, -1):
    for (__pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks) + 1; __pyx_t_3 > 0 + 1; ) { __pyx_t_3-=1;
      __pyx_v_block_index = __pyx_t_3;
+3433:             block = Rack_Get__(blocks, block_index - 1)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, (__pyx_v_block_index - 1));
+3434:             offset = Block_ReverseFind_(block, 0, SIZE_MAX, size, buffer)
      __pyx_v_offset = __pyx_f_11cbytesparse_2_c_Block_ReverseFind_(__pyx_v_block, 0, SIZE_MAX, __pyx_v_size, __pyx_v_buffer);
+3435:             if offset >= 0:
      __pyx_t_2 = ((__pyx_v_offset >= 0) != 0);
      if (__pyx_t_2) {
/* … */
      }
    }
+3436:                 start_ = Block_Start(block)
        __pyx_v_start_ = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+3437:                 offset_ = <addr_t><size_t>offset
        __pyx_v_offset_ = ((addr_t)((size_t)__pyx_v_offset));
+3438:                 CheckAddAddrU(start_, offset_)
        __pyx_t_4 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_start_, __pyx_v_offset_); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3438, __pyx_L1_error)
+3439:                 return start_ + offset_
        __pyx_r = (__pyx_v_start_ + __pyx_v_offset_);
        goto __pyx_L0;
+3440:     return ADDR_MAX
  __pyx_r = ADDR_MAX;
  goto __pyx_L0;
 3441: 
 3442: 
+3443: cdef addr_t Memory_RevFindBounded_(const Memory_* that, size_t size, const byte_t* buffer,
static addr_t __pyx_f_11cbytesparse_2_c_Memory_RevFindBounded_(Memory_ const *__pyx_v_that, size_t __pyx_v_size, byte_t const *__pyx_v_buffer, addr_t __pyx_v_start, addr_t __pyx_v_endex) {
  Rack_ const *__pyx_v_blocks;
  size_t __pyx_v_block_index;
  Block_ const *__pyx_v_block;
  Py_ssize_t __pyx_v_offset;
  size_t __pyx_v_block_index_start;
  size_t __pyx_v_block_index_endex;
  size_t __pyx_v_slice_start;
  size_t __pyx_v_slice_endex;
  addr_t __pyx_v_start_;
  addr_t __pyx_v_offset_;
  addr_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_RevFindBounded_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_RevFindBounded_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3444:                                    addr_t start, addr_t endex) except? -1:
 3445:     cdef:
+3446:         const Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
 3447:         size_t block_index
 3448:         const Block_* block
 3449:         ssize_t offset
 3450:         size_t block_index_start
 3451:         size_t block_index_endex
 3452:         size_t slice_start
 3453:         size_t slice_endex
 3454:         addr_t start_
 3455:         addr_t offset_
 3456: 
+3457:     if size:
  __pyx_t_2 = (__pyx_v_size != 0);
  if (__pyx_t_2) {
/* … */
  }
+3458:         if endex < start:
    __pyx_t_2 = ((__pyx_v_endex < __pyx_v_start) != 0);
    if (__pyx_t_2) {
/* … */
    }
+3459:             endex = start
      __pyx_v_endex = __pyx_v_start;
+3460:         block_index_start = Rack_IndexStart(blocks, start)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_IndexStart(__pyx_v_blocks, __pyx_v_start); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 3460, __pyx_L1_error)
    __pyx_v_block_index_start = __pyx_t_3;
+3461:         block_index_endex = Rack_IndexEndex(blocks, endex)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_IndexEndex(__pyx_v_blocks, __pyx_v_endex); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 3461, __pyx_L1_error)
    __pyx_v_block_index_endex = __pyx_t_3;
 3462: 
+3463:         for block_index in range(block_index_endex, block_index_start, -1):
    __pyx_t_4 = __pyx_v_block_index_start;
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = __pyx_v_block_index_endex + 1; __pyx_t_6 > __pyx_t_5 + 1; ) { __pyx_t_6-=1;
      __pyx_v_block_index = __pyx_t_6;
+3464:             block = Rack_Get__(blocks, block_index - 1)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, (__pyx_v_block_index - 1));
+3465:             slice_start, slice_endex = Block_BoundAddressSliceToOffset(block, start, endex)
      __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Block_BoundAddressSliceToOffset(__pyx_v_block, __pyx_v_start, __pyx_v_endex);
      __pyx_t_8 = __pyx_t_7.f0;
      __pyx_t_9 = __pyx_t_7.f1;
      __pyx_v_slice_start = __pyx_t_8;
      __pyx_v_slice_endex = __pyx_t_9;
+3466:             offset = Block_ReverseFind_(block, slice_start, slice_endex, size, buffer)
      __pyx_v_offset = __pyx_f_11cbytesparse_2_c_Block_ReverseFind_(__pyx_v_block, __pyx_v_slice_start, __pyx_v_slice_endex, __pyx_v_size, __pyx_v_buffer);
+3467:             if offset >= 0:
      __pyx_t_2 = ((__pyx_v_offset >= 0) != 0);
      if (__pyx_t_2) {
/* … */
      }
    }
+3468:                 start_ = Block_Start(block)
        __pyx_v_start_ = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+3469:                 offset_ = <addr_t><size_t>offset
        __pyx_v_offset_ = ((addr_t)((size_t)__pyx_v_offset));
+3470:                 CheckAddAddrU(start_, offset_)
        __pyx_t_10 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_start_, __pyx_v_offset_); if (unlikely(__pyx_t_10 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3470, __pyx_L1_error)
+3471:                 return start_ + offset_
        __pyx_r = (__pyx_v_start_ + __pyx_v_offset_);
        goto __pyx_L0;
+3472:     return ADDR_MAX
  __pyx_r = ADDR_MAX;
  goto __pyx_L0;
 3473: 
 3474: 
+3475: cdef object Memory_RevFind(const Memory_* that, object item, object start, object endex):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_RevFind(Memory_ const *__pyx_v_that, PyObject *__pyx_v_item, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  addr_t __pyx_v_start_;
  addr_t __pyx_v_endex_;
  byte_t __pyx_v_item_value;
  __Pyx_memviewslice __pyx_v_item_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  size_t __pyx_v_item_size;
  byte_t const *__pyx_v_item_ptr;
  addr_t __pyx_v_address;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_RevFind", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("cbytesparse._c.Memory_RevFind", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_item_view, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3476:     cdef:
 3477:         addr_t start_
 3478:         addr_t endex_
 3479:         byte_t item_value
 3480:         const byte_t[:] item_view
 3481:         size_t item_size
 3482:         const byte_t* item_ptr
 3483:         addr_t address
 3484: 
+3485:     if isinstance(item, int):
  __pyx_t_1 = PyInt_Check(__pyx_v_item); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+3486:         item_value = <byte_t>item
    __pyx_t_3 = __Pyx_PyInt_As_byte_t(__pyx_v_item); if (unlikely((__pyx_t_3 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3486, __pyx_L1_error)
    __pyx_v_item_value = ((byte_t)__pyx_t_3);
+3487:         item_size = 1
    __pyx_v_item_size = 1;
+3488:         item_ptr = &item_value
    __pyx_v_item_ptr = (&__pyx_v_item_value);
 3489:     else:
+3490:         item_view = item
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(__pyx_v_item, 0); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 3490, __pyx_L1_error)
    __pyx_v_item_view = __pyx_t_4;
    __pyx_t_4.memview = NULL;
    __pyx_t_4.data = NULL;
+3491:         item_size = 1
    __pyx_v_item_size = 1;
 3492:         with cython.boundscheck(False):
+3493:             item_ptr = &item_view[0]
    __pyx_t_5 = 0;
    if (__pyx_t_5 < 0) __pyx_t_5 += __pyx_v_item_view.shape[0];
    __pyx_v_item_ptr = (&(*((byte_t const  *) ( /* dim=0 */ (__pyx_v_item_view.data + __pyx_t_5 * __pyx_v_item_view.strides[0]) ))));
  }
  __pyx_L3:;
 3494: 
 3495:     # Faster code for unbounded slice
+3496:     if start is None and endex is None:
  __pyx_t_1 = (__pyx_v_start == Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  if (__pyx_t_6) {
  } else {
    __pyx_t_2 = __pyx_t_6;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_6 = (__pyx_v_endex == Py_None);
  __pyx_t_1 = (__pyx_t_6 != 0);
  __pyx_t_2 = __pyx_t_1;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+3497:         address = Memory_RevFindUnbounded_(that, item_size, item_ptr)
    __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Memory_RevFindUnbounded_(__pyx_v_that, __pyx_v_item_size, __pyx_v_item_ptr); if (unlikely(__pyx_t_7 == ((addr_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 3497, __pyx_L1_error)
    __pyx_v_address = __pyx_t_7;
+3498:         return -1 if address == ADDR_MAX else <object>address
    __Pyx_XDECREF(__pyx_r);
    if (((__pyx_v_address == ADDR_MAX) != 0)) {
      __Pyx_INCREF(__pyx_int_neg_1);
      __pyx_t_8 = __pyx_int_neg_1;
    } else {
      __pyx_t_9 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_address); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3498, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(((PyObject *)__pyx_t_9));
      __pyx_t_8 = __pyx_t_9;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __pyx_r = __pyx_t_8;
    __pyx_t_8 = 0;
    goto __pyx_L0;
 3499: 
 3500:     # Bounded slice
+3501:     start_, endex_ = Memory_Bound(that, start, endex)
  __pyx_t_10 = __pyx_f_11cbytesparse_2_c_Memory_Bound(__pyx_v_that, __pyx_v_start, __pyx_v_endex); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3501, __pyx_L1_error)
  __pyx_t_7 = __pyx_t_10.f0;
  __pyx_t_11 = __pyx_t_10.f1;
  __pyx_v_start_ = __pyx_t_7;
  __pyx_v_endex_ = __pyx_t_11;
+3502:     address = Memory_RevFindBounded_(that, item_size, item_ptr, start_, endex_)
  __pyx_t_11 = __pyx_f_11cbytesparse_2_c_Memory_RevFindBounded_(__pyx_v_that, __pyx_v_item_size, __pyx_v_item_ptr, __pyx_v_start_, __pyx_v_endex_); if (unlikely(__pyx_t_11 == ((addr_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 3502, __pyx_L1_error)
  __pyx_v_address = __pyx_t_11;
+3503:     return -1 if address == ADDR_MAX else <object>address
  __Pyx_XDECREF(__pyx_r);
  if (((__pyx_v_address == ADDR_MAX) != 0)) {
    __Pyx_INCREF(__pyx_int_neg_1);
    __pyx_t_8 = __pyx_int_neg_1;
  } else {
    __pyx_t_9 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_address); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 3503, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_INCREF(((PyObject *)__pyx_t_9));
    __pyx_t_8 = __pyx_t_9;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __pyx_r = __pyx_t_8;
  __pyx_t_8 = 0;
  goto __pyx_L0;
 3504: 
 3505: 
+3506: cdef object Memory_Index(const Memory_* that, object item, object start, object endex):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_Index(Memory_ const *__pyx_v_that, PyObject *__pyx_v_item, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  PyObject *__pyx_v_offset = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Index", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Index", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_offset);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3507:     offset = Memory_Find(that, item, start, endex)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Find(__pyx_v_that, __pyx_v_item, __pyx_v_start, __pyx_v_endex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_offset = __pyx_t_1;
  __pyx_t_1 = 0;
+3508:     if offset is not -1:
  __pyx_t_2 = (__pyx_v_offset != __pyx_int_neg_1);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (likely(__pyx_t_3)) {
/* … */
  }
+3509:         return offset
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_offset);
    __pyx_r = __pyx_v_offset;
    goto __pyx_L0;
 3510:     else:
+3511:         raise ValueError('subsection not found')
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3511, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 3511, __pyx_L1_error)
  }
/* … */
  __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_u_subsection_not_found); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 3511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__17);
  __Pyx_GIVEREF(__pyx_tuple__17);
 3512: 
 3513: 
+3514: cdef object Memory_RevIndex(const Memory_* that, object item, object start, object endex):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_RevIndex(Memory_ const *__pyx_v_that, PyObject *__pyx_v_item, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  PyObject *__pyx_v_offset = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_RevIndex", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory_RevIndex", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_offset);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3515:     offset = Memory_RevFind(that, item, start, endex)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_RevFind(__pyx_v_that, __pyx_v_item, __pyx_v_start, __pyx_v_endex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_offset = __pyx_t_1;
  __pyx_t_1 = 0;
+3516:     if offset is not -1:
  __pyx_t_2 = (__pyx_v_offset != __pyx_int_neg_1);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (likely(__pyx_t_3)) {
/* … */
  }
+3517:         return offset
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_offset);
    __pyx_r = __pyx_v_offset;
    goto __pyx_L0;
 3518:     else:
+3519:         raise ValueError('subsection not found')
  /*else*/ {
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3519, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 3519, __pyx_L1_error)
  }
 3520: 
 3521: 
+3522: cdef bint Memory_Contains(const Memory_* that, object item) except -1:
static int __pyx_f_11cbytesparse_2_c_Memory_Contains(Memory_ const *__pyx_v_that, PyObject *__pyx_v_item) {
  byte_t __pyx_v_item_value;
  __Pyx_memviewslice __pyx_v_item_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  size_t __pyx_v_item_size;
  byte_t const *__pyx_v_item_ptr;
  addr_t __pyx_v_address;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Contains", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Contains", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_item_view, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3523:     cdef:
 3524:         byte_t item_value
 3525:         const byte_t[:] item_view
 3526:         size_t item_size
 3527:         const byte_t* item_ptr
 3528:         addr_t address
 3529: 
+3530:     if isinstance(item, int):
  __pyx_t_1 = PyInt_Check(__pyx_v_item); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+3531:         item_value = <byte_t>item
    __pyx_t_3 = __Pyx_PyInt_As_byte_t(__pyx_v_item); if (unlikely((__pyx_t_3 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3531, __pyx_L1_error)
    __pyx_v_item_value = ((byte_t)__pyx_t_3);
+3532:         item_size = 1
    __pyx_v_item_size = 1;
+3533:         item_ptr = &item_value
    __pyx_v_item_ptr = (&__pyx_v_item_value);
 3534:     else:
+3535:         item_view = item
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(__pyx_v_item, 0); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 3535, __pyx_L1_error)
    __pyx_v_item_view = __pyx_t_4;
    __pyx_t_4.memview = NULL;
    __pyx_t_4.data = NULL;
+3536:         item_size = 1
    __pyx_v_item_size = 1;
 3537:         with cython.boundscheck(False):
+3538:             item_ptr = &item_view[0]
    __pyx_t_5 = 0;
    if (__pyx_t_5 < 0) __pyx_t_5 += __pyx_v_item_view.shape[0];
    __pyx_v_item_ptr = (&(*((byte_t const  *) ( /* dim=0 */ (__pyx_v_item_view.data + __pyx_t_5 * __pyx_v_item_view.strides[0]) ))));
  }
  __pyx_L3:;
 3539: 
+3540:     address = Memory_FindUnbounded_(that, item_size, item_ptr)
  __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_FindUnbounded_(__pyx_v_that, __pyx_v_item_size, __pyx_v_item_ptr); if (unlikely(__pyx_t_6 == ((addr_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 3540, __pyx_L1_error)
  __pyx_v_address = __pyx_t_6;
+3541:     return address != ADDR_MAX
  __pyx_r = (__pyx_v_address != ADDR_MAX);
  goto __pyx_L0;
 3542: 
 3543: 
+3544: cdef addr_t Memory_CountUnbounded_(const Memory_* that, size_t size, const byte_t* buffer) except? -1:
static addr_t __pyx_f_11cbytesparse_2_c_Memory_CountUnbounded_(Memory_ const *__pyx_v_that, size_t __pyx_v_size, byte_t const *__pyx_v_buffer) {
  Rack_ const *__pyx_v_blocks;
  size_t __pyx_v_block_index;
  Block_ const *__pyx_v_block;
  addr_t __pyx_v_count;
  addr_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_CountUnbounded_", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3545:     cdef:
+3546:         const Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
 3547:         size_t block_index
 3548:         const Block_* block
+3549:         addr_t count = 0
  __pyx_v_count = 0;
 3550: 
+3551:     if size:
  __pyx_t_2 = (__pyx_v_size != 0);
  if (__pyx_t_2) {
/* … */
  }
+3552:         for block_index in range(Rack_Length(blocks)):
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
    __pyx_t_4 = __pyx_t_3;
    for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
      __pyx_v_block_index = __pyx_t_5;
+3553:             block = Rack_Get__(blocks, block_index)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+3554:             count += Block_Count_(block, 0, SIZE_MAX, size, buffer)
      __pyx_v_count = (__pyx_v_count + __pyx_f_11cbytesparse_2_c_Block_Count_(__pyx_v_block, 0, SIZE_MAX, __pyx_v_size, __pyx_v_buffer));
    }
+3555:     return count
  __pyx_r = __pyx_v_count;
  goto __pyx_L0;
 3556: 
 3557: 
+3558: cdef addr_t Memory_CountBounded_(const Memory_* that, size_t size, const byte_t* buffer,
static addr_t __pyx_f_11cbytesparse_2_c_Memory_CountBounded_(Memory_ const *__pyx_v_that, size_t __pyx_v_size, byte_t const *__pyx_v_buffer, addr_t __pyx_v_start, addr_t __pyx_v_endex) {
  Rack_ const *__pyx_v_blocks;
  size_t __pyx_v_block_index;
  Block_ const *__pyx_v_block;
  addr_t __pyx_v_count;
  size_t __pyx_v_block_index_start;
  size_t __pyx_v_block_index_endex;
  size_t __pyx_v_slice_start;
  size_t __pyx_v_slice_endex;
  addr_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_CountBounded_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_CountBounded_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3559:                                  addr_t start, addr_t endex) except? -1:
 3560:     cdef:
+3561:         const Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
 3562:         size_t block_index
 3563:         const Block_* block
+3564:         addr_t count = 0
  __pyx_v_count = 0;
 3565:         size_t block_index_start
 3566:         size_t block_index_endex
 3567:         addr_t block_start
 3568:         addr_t block_endex
 3569:         size_t slice_start
 3570:         size_t slice_endex
 3571: 
+3572:     if size:
  __pyx_t_2 = (__pyx_v_size != 0);
  if (__pyx_t_2) {
/* … */
  }
+3573:         if endex < start:
    __pyx_t_2 = ((__pyx_v_endex < __pyx_v_start) != 0);
    if (__pyx_t_2) {
/* … */
    }
+3574:             endex = start
      __pyx_v_endex = __pyx_v_start;
+3575:         block_index_start = Rack_IndexStart(blocks, start)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_IndexStart(__pyx_v_blocks, __pyx_v_start); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 3575, __pyx_L1_error)
    __pyx_v_block_index_start = __pyx_t_3;
+3576:         block_index_endex = Rack_IndexEndex(blocks, endex)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_IndexEndex(__pyx_v_blocks, __pyx_v_endex); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 3576, __pyx_L1_error)
    __pyx_v_block_index_endex = __pyx_t_3;
 3577: 
+3578:         for block_index in range(block_index_start, block_index_endex):
    __pyx_t_4 = __pyx_v_block_index_endex;
    __pyx_t_5 = __pyx_t_4;
    for (__pyx_t_6 = __pyx_v_block_index_start; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
      __pyx_v_block_index = __pyx_t_6;
+3579:             block = Rack_Get__(blocks, block_index)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+3580:             slice_start, slice_endex = Block_BoundAddressSliceToOffset(block, start, endex)
      __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Block_BoundAddressSliceToOffset(__pyx_v_block, __pyx_v_start, __pyx_v_endex);
      __pyx_t_8 = __pyx_t_7.f0;
      __pyx_t_9 = __pyx_t_7.f1;
      __pyx_v_slice_start = __pyx_t_8;
      __pyx_v_slice_endex = __pyx_t_9;
+3581:             count += Block_Count_(block, slice_start, slice_endex, size, buffer)
      __pyx_v_count = (__pyx_v_count + __pyx_f_11cbytesparse_2_c_Block_Count_(__pyx_v_block, __pyx_v_slice_start, __pyx_v_slice_endex, __pyx_v_size, __pyx_v_buffer));
    }
+3582:     return count
  __pyx_r = __pyx_v_count;
  goto __pyx_L0;
 3583: 
 3584: 
+3585: cdef addr_t Memory_Count(const Memory_* that, object item, object start, object endex) except? -1:
static addr_t __pyx_f_11cbytesparse_2_c_Memory_Count(Memory_ const *__pyx_v_that, PyObject *__pyx_v_item, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  addr_t __pyx_v_start_;
  addr_t __pyx_v_endex_;
  byte_t __pyx_v_item_value;
  __Pyx_memviewslice __pyx_v_item_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  size_t __pyx_v_item_size;
  byte_t const *__pyx_v_item_ptr;
  addr_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Count", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_4, 1);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Count", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1LL;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_item_view, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3586:     cdef:
 3587:         addr_t start_
 3588:         addr_t endex_
 3589:         byte_t item_value
 3590:         const byte_t[:] item_view
 3591:         size_t item_size
 3592:         const byte_t* item_ptr
 3593: 
+3594:     if isinstance(item, int):
  __pyx_t_1 = PyInt_Check(__pyx_v_item); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+3595:         item_value = <byte_t>item
    __pyx_t_3 = __Pyx_PyInt_As_byte_t(__pyx_v_item); if (unlikely((__pyx_t_3 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3595, __pyx_L1_error)
    __pyx_v_item_value = ((byte_t)__pyx_t_3);
+3596:         item_size = 1
    __pyx_v_item_size = 1;
+3597:         item_ptr = &item_value
    __pyx_v_item_ptr = (&__pyx_v_item_value);
 3598:     else:
+3599:         item_view = item
  /*else*/ {
    __pyx_t_4 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(__pyx_v_item, 0); if (unlikely(!__pyx_t_4.memview)) __PYX_ERR(0, 3599, __pyx_L1_error)
    __pyx_v_item_view = __pyx_t_4;
    __pyx_t_4.memview = NULL;
    __pyx_t_4.data = NULL;
+3600:         item_size = 1
    __pyx_v_item_size = 1;
 3601:         with cython.boundscheck(False):
+3602:             item_ptr = &item_view[0]
    __pyx_t_5 = 0;
    if (__pyx_t_5 < 0) __pyx_t_5 += __pyx_v_item_view.shape[0];
    __pyx_v_item_ptr = (&(*((byte_t const  *) ( /* dim=0 */ (__pyx_v_item_view.data + __pyx_t_5 * __pyx_v_item_view.strides[0]) ))));
  }
  __pyx_L3:;
 3603: 
 3604:     # Faster code for unbounded slice
+3605:     if start is None and endex is None:
  __pyx_t_1 = (__pyx_v_start == Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  if (__pyx_t_6) {
  } else {
    __pyx_t_2 = __pyx_t_6;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_6 = (__pyx_v_endex == Py_None);
  __pyx_t_1 = (__pyx_t_6 != 0);
  __pyx_t_2 = __pyx_t_1;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+3606:         return Memory_CountUnbounded_(that, item_size, item_ptr)
    __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Memory_CountUnbounded_(__pyx_v_that, __pyx_v_item_size, __pyx_v_item_ptr); if (unlikely(__pyx_t_7 == ((addr_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 3606, __pyx_L1_error)
    __pyx_r = __pyx_t_7;
    goto __pyx_L0;
 3607: 
 3608:     # Bounded slice
+3609:     start_, endex_ = Memory_Bound(that, start, endex)
  __pyx_t_8 = __pyx_f_11cbytesparse_2_c_Memory_Bound(__pyx_v_that, __pyx_v_start, __pyx_v_endex); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 3609, __pyx_L1_error)
  __pyx_t_7 = __pyx_t_8.f0;
  __pyx_t_9 = __pyx_t_8.f1;
  __pyx_v_start_ = __pyx_t_7;
  __pyx_v_endex_ = __pyx_t_9;
+3610:     return Memory_CountBounded_(that, item_size, item_ptr, start_, endex_)
  __pyx_t_9 = __pyx_f_11cbytesparse_2_c_Memory_CountBounded_(__pyx_v_that, __pyx_v_item_size, __pyx_v_item_ptr, __pyx_v_start_, __pyx_v_endex_); if (unlikely(__pyx_t_9 == ((addr_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 3610, __pyx_L1_error)
  __pyx_r = __pyx_t_9;
  goto __pyx_L0;
 3611: 
 3612: 
+3613: cdef object Memory_GetItem(const Memory_* that, object key):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_GetItem(Memory_ const *__pyx_v_that, PyObject *__pyx_v_key) {
  PyObject *__pyx_v_key_ = 0;
  addr_t __pyx_v_start;
  addr_t __pyx_v_endex;
  Block_ *__pyx_v_pattern;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_memory = 0;
  int __pyx_v_value;
  PyObject *__pyx_v_key_start = NULL;
  PyObject *__pyx_v_key_endex = NULL;
  PyObject *__pyx_v_key_step = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_GetItem", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_18);
  __Pyx_AddTraceback("cbytesparse._c.Memory_GetItem", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_key_);
  __Pyx_XDECREF((PyObject *)__pyx_v_memory);
  __Pyx_XDECREF(__pyx_v_key_start);
  __Pyx_XDECREF(__pyx_v_key_endex);
  __Pyx_XDECREF(__pyx_v_key_step);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3614:     cdef:
 3615:         slice key_
 3616:         addr_t start
 3617:         addr_t endex
+3618:         Block_* pattern = NULL
  __pyx_v_pattern = NULL;
 3619:         Memory memory
 3620:         int value
 3621: 
+3622:     if isinstance(key, slice):
  __pyx_t_1 = PySlice_Check(__pyx_v_key); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
  }
+3623:         key_ = <slice>key
    __pyx_t_3 = __pyx_v_key;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_key_ = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
+3624:         key_start = key_.start
    __pyx_t_3 = ((PySliceObject*)__pyx_v_key_)->start;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_key_start = __pyx_t_3;
    __pyx_t_3 = 0;
+3625:         key_endex = key_.stop
    __pyx_t_3 = ((PySliceObject*)__pyx_v_key_)->stop;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_key_endex = __pyx_t_3;
    __pyx_t_3 = 0;
+3626:         start = Memory_Start(that) if key_start is None else <addr_t>key_start
    __pyx_t_2 = (__pyx_v_key_start == Py_None);
    if ((__pyx_t_2 != 0)) {
      __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_v_that);
    } else {
      __pyx_t_5 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_key_start); if (unlikely((__pyx_t_5 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3626, __pyx_L1_error)
      __pyx_t_4 = ((addr_t)__pyx_t_5);
    }
    __pyx_v_start = __pyx_t_4;
+3627:         endex = Memory_Endex(that) if key_endex is None else <addr_t>key_endex
    __pyx_t_2 = (__pyx_v_key_endex == Py_None);
    if ((__pyx_t_2 != 0)) {
      __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Endex(__pyx_v_that);
    } else {
      __pyx_t_5 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_key_endex); if (unlikely((__pyx_t_5 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3627, __pyx_L1_error)
      __pyx_t_4 = ((addr_t)__pyx_t_5);
    }
    __pyx_v_endex = __pyx_t_4;
+3628:         key_step = key_.step
    __pyx_t_3 = ((PySliceObject*)__pyx_v_key_)->step;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_key_step = __pyx_t_3;
    __pyx_t_3 = 0;
 3629: 
+3630:         if key_step is None or key_step is 1 or key_step == 1:
    __pyx_t_1 = (__pyx_v_key_step == Py_None);
    __pyx_t_6 = (__pyx_t_1 != 0);
    if (!__pyx_t_6) {
    } else {
      __pyx_t_2 = __pyx_t_6;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_6 = (__pyx_v_key_step == __pyx_int_1);
    __pyx_t_1 = (__pyx_t_6 != 0);
    if (!__pyx_t_1) {
    } else {
      __pyx_t_2 = __pyx_t_1;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_key_step, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3630, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3630, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_2 = __pyx_t_1;
    __pyx_L5_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
    }
+3631:             return Memory_Extract_(that, start, endex, 0, NULL, 1, True)
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Memory_Extract_(__pyx_v_that, __pyx_v_start, __pyx_v_endex, 0, NULL, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3631, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L0;
 3632: 
+3633:         elif isinstance(key_step, int):
    __pyx_t_2 = PyInt_Check(__pyx_v_key_step); 
    __pyx_t_1 = (__pyx_t_2 != 0);
    if (__pyx_t_1) {
/* … */
    }
+3634:             if key_step > 1:
      __pyx_t_3 = PyObject_RichCompare(__pyx_v_key_step, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3634, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3634, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (__pyx_t_1) {
/* … */
      }
+3635:                 return Memory_Extract_(that, start, endex, 0, NULL, <saddr_t>key_step, True)
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_7 = __Pyx_PyInt_As_int_fast64_t(__pyx_v_key_step); if (unlikely((__pyx_t_7 == ((saddr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3635, __pyx_L1_error)
        __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Memory_Extract_(__pyx_v_that, __pyx_v_start, __pyx_v_endex, 0, NULL, ((saddr_t)__pyx_t_7), 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3635, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_r = __pyx_t_3;
        __pyx_t_3 = 0;
        goto __pyx_L0;
 3636:             else:
+3637:                 return Memory()  # empty
      /*else*/ {
        __Pyx_XDECREF(__pyx_r);
        __pyx_t_3 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3637, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_r = __pyx_t_3;
        __pyx_t_3 = 0;
        goto __pyx_L0;
      }
 3638: 
 3639:         else:
+3640:             pattern = Block_FromObject(0, key_step, True)
    /*else*/ {
      __pyx_t_8 = __pyx_f_11cbytesparse_2_c_Block_FromObject(0, __pyx_v_key_step, 1); if (unlikely(__pyx_t_8 == ((Block_ *)NULL))) __PYX_ERR(0, 3640, __pyx_L1_error)
      __pyx_v_pattern = __pyx_t_8;
+3641:             try:
      /*try:*/ {
+3642:                 memory = Memory_Extract_(that, start, endex, Block_Length(pattern), Block_At__(pattern, 0), 1, True)
        __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Memory_Extract_(__pyx_v_that, __pyx_v_start, __pyx_v_endex, __pyx_f_11cbytesparse_2_c_Block_Length(__pyx_v_pattern), __pyx_f_11cbytesparse_2_c_Block_At__(__pyx_v_pattern, 0), 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3642, __pyx_L10_error)
        __Pyx_GOTREF(__pyx_t_3);
        if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11cbytesparse_2_c_Memory))))) __PYX_ERR(0, 3642, __pyx_L10_error)
        __pyx_v_memory = ((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_t_3);
        __pyx_t_3 = 0;
      }
 3643:             finally:
+3644:                 Block_Free(pattern)  # orphan
      /*finally:*/ {
        /*normal exit:*/{
          (void)(__pyx_f_11cbytesparse_2_c_Block_Free(__pyx_v_pattern));
          goto __pyx_L11;
        }
        __pyx_L10_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_15, &__pyx_t_16, &__pyx_t_17);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0)) __Pyx_ErrFetch(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14);
          __Pyx_XGOTREF(__pyx_t_12);
          __Pyx_XGOTREF(__pyx_t_13);
          __Pyx_XGOTREF(__pyx_t_14);
          __Pyx_XGOTREF(__pyx_t_15);
          __Pyx_XGOTREF(__pyx_t_16);
          __Pyx_XGOTREF(__pyx_t_17);
          __pyx_t_9 = __pyx_lineno; __pyx_t_10 = __pyx_clineno; __pyx_t_11 = __pyx_filename;
          {
            (void)(__pyx_f_11cbytesparse_2_c_Block_Free(__pyx_v_pattern));
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_15);
            __Pyx_XGIVEREF(__pyx_t_16);
            __Pyx_XGIVEREF(__pyx_t_17);
            __Pyx_ExceptionReset(__pyx_t_15, __pyx_t_16, __pyx_t_17);
          }
          __Pyx_XGIVEREF(__pyx_t_12);
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_ErrRestore(__pyx_t_12, __pyx_t_13, __pyx_t_14);
          __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
          __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11;
          goto __pyx_L1_error;
        }
        __pyx_L11:;
      }
+3645:             return memory
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(((PyObject *)__pyx_v_memory));
      __pyx_r = ((PyObject *)__pyx_v_memory);
      goto __pyx_L0;
    }
 3646:     else:
+3647:         value = Memory_Peek_(that, <addr_t>key)
  /*else*/ {
    __pyx_t_4 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_key); if (unlikely((__pyx_t_4 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3647, __pyx_L1_error)
    __pyx_t_10 = __pyx_f_11cbytesparse_2_c_Memory_Peek_(__pyx_v_that, ((addr_t)__pyx_t_4)); if (unlikely(__pyx_t_10 == ((int)-2))) __PYX_ERR(0, 3647, __pyx_L1_error)
    __pyx_v_value = __pyx_t_10;
+3648:         return None if value < 0 else value
    __Pyx_XDECREF(__pyx_r);
    if (((__pyx_v_value < 0) != 0)) {
      __Pyx_INCREF(Py_None);
      __pyx_t_3 = Py_None;
    } else {
      __pyx_t_18 = __Pyx_PyInt_From_int(__pyx_v_value); if (unlikely(!__pyx_t_18)) __PYX_ERR(0, 3648, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_18);
      __pyx_t_3 = __pyx_t_18;
      __pyx_t_18 = 0;
    }
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }
 3649: 
 3650: 
+3651: cdef object Memory_SetItem(Memory_* that, object key, object value):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_SetItem(Memory_ *__pyx_v_that, PyObject *__pyx_v_key, PyObject *__pyx_v_value) {
  PyObject *__pyx_v_key_ = 0;
  addr_t __pyx_v_start;
  addr_t __pyx_v_endex;
  addr_t __pyx_v_step;
  addr_t __pyx_v_address;
  addr_t __pyx_v_slice_size;
  Block_ *__pyx_v_value_;
  size_t __pyx_v_value_size;
  addr_t __pyx_v_del_start;
  addr_t __pyx_v_del_endex;
  size_t __pyx_v_offset;
  PyObject *__pyx_v_key_start = NULL;
  PyObject *__pyx_v_key_endex = NULL;
  PyObject *__pyx_v_key_step = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_SetItem", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("cbytesparse._c.Memory_SetItem", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_key_);
  __Pyx_XDECREF(__pyx_v_key_start);
  __Pyx_XDECREF(__pyx_v_key_endex);
  __Pyx_XDECREF(__pyx_v_key_step);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3652:     cdef:
 3653:         slice key_
 3654:         addr_t start
 3655:         addr_t endex
+3656:         addr_t step = 0  # indefinite
  __pyx_v_step = 0;
 3657:         addr_t address
 3658:         addr_t slice_size
+3659:         Block_* value_ = NULL
  __pyx_v_value_ = NULL;
 3660:         size_t value_size
 3661:         addr_t del_start
 3662:         addr_t del_endex
 3663:         size_t offset
 3664: 
+3665:     if isinstance(key, slice):
  __pyx_t_1 = PySlice_Check(__pyx_v_key); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+3666:         key_ = <slice>key
    __pyx_t_3 = __pyx_v_key;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_key_ = ((PyObject*)__pyx_t_3);
    __pyx_t_3 = 0;
+3667:         key_start = key_.start
    __pyx_t_3 = ((PySliceObject*)__pyx_v_key_)->start;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_key_start = __pyx_t_3;
    __pyx_t_3 = 0;
+3668:         key_endex = key_.stop
    __pyx_t_3 = ((PySliceObject*)__pyx_v_key_)->stop;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_key_endex = __pyx_t_3;
    __pyx_t_3 = 0;
+3669:         start = Memory_Start(that) if key_start is None else <addr_t>key_start
    __pyx_t_2 = (__pyx_v_key_start == Py_None);
    if ((__pyx_t_2 != 0)) {
      __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_v_that);
    } else {
      __pyx_t_5 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_key_start); if (unlikely((__pyx_t_5 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3669, __pyx_L1_error)
      __pyx_t_4 = ((addr_t)__pyx_t_5);
    }
    __pyx_v_start = __pyx_t_4;
+3670:         endex = Memory_Endex(that) if key_endex is None else <addr_t>key_endex
    __pyx_t_2 = (__pyx_v_key_endex == Py_None);
    if ((__pyx_t_2 != 0)) {
      __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Endex(__pyx_v_that);
    } else {
      __pyx_t_5 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_key_endex); if (unlikely((__pyx_t_5 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3670, __pyx_L1_error)
      __pyx_t_4 = ((addr_t)__pyx_t_5);
    }
    __pyx_v_endex = __pyx_t_4;
+3671:         if endex < start:
    __pyx_t_2 = ((__pyx_v_endex < __pyx_v_start) != 0);
    if (__pyx_t_2) {
/* … */
    }
+3672:             endex = start
      __pyx_v_endex = __pyx_v_start;
 3673: 
+3674:         key_step = key_.step
    __pyx_t_3 = ((PySliceObject*)__pyx_v_key_)->step;
    __Pyx_INCREF(__pyx_t_3);
    __pyx_v_key_step = __pyx_t_3;
    __pyx_t_3 = 0;
+3675:         if isinstance(key_step, int):
    __pyx_t_2 = PyInt_Check(__pyx_v_key_step); 
    __pyx_t_1 = (__pyx_t_2 != 0);
    if (__pyx_t_1) {
/* … */
    }
+3676:             if key_step is None or key_step is 1 or key_step == 1:
      __pyx_t_2 = (__pyx_v_key_step == Py_None);
      __pyx_t_6 = (__pyx_t_2 != 0);
      if (!__pyx_t_6) {
      } else {
        __pyx_t_1 = __pyx_t_6;
        goto __pyx_L7_bool_binop_done;
      }
      __pyx_t_6 = (__pyx_v_key_step == __pyx_int_1);
      __pyx_t_2 = (__pyx_t_6 != 0);
      if (!__pyx_t_2) {
      } else {
        __pyx_t_1 = __pyx_t_2;
        goto __pyx_L7_bool_binop_done;
      }
      __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_key_step, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3676, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3676, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_1 = __pyx_t_2;
      __pyx_L7_bool_binop_done:;
      if (__pyx_t_1) {
        goto __pyx_L6;
      }
 3677:                 pass
+3678:             elif key_step > 1:
      __pyx_t_3 = PyObject_RichCompare(__pyx_v_key_step, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3678, __pyx_L1_error)
      __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3678, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      if (__pyx_t_1) {
/* … */
        goto __pyx_L6;
      }
+3679:                 step = <addr_t>key_step
        __pyx_t_4 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_key_step); if (unlikely((__pyx_t_4 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3679, __pyx_L1_error)
        __pyx_v_step = ((addr_t)__pyx_t_4);
 3680:             else:
+3681:                 return  # empty range
      /*else*/ {
        __Pyx_XDECREF(__pyx_r);
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        goto __pyx_L0;
      }
      __pyx_L6:;
 3682: 
+3683:         if value is None:
    __pyx_t_1 = (__pyx_v_value == Py_None);
    __pyx_t_2 = (__pyx_t_1 != 0);
    if (__pyx_t_2) {
/* … */
    }
 3684:             # Clear range
+3685:             if not step:
      __pyx_t_2 = ((!(__pyx_v_step != 0)) != 0);
      if (__pyx_t_2) {
/* … */
        goto __pyx_L11;
      }
+3686:                 Memory_Erase__(that, start, endex, False, False)  # clear
        __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_start, __pyx_v_endex, 0, 0); if (unlikely(__pyx_t_7 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3686, __pyx_L1_error)
 3687:             else:
+3688:                 address = start
      /*else*/ {
        __pyx_v_address = __pyx_v_start;
+3689:                 while address < endex:
        while (1) {
          __pyx_t_2 = ((__pyx_v_address < __pyx_v_endex) != 0);
          if (!__pyx_t_2) break;
+3690:                     Memory_Erase__(that, address, address + 1, False, False)  # clear
          __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_address, (__pyx_v_address + 1), 0, 0); if (unlikely(__pyx_t_7 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3690, __pyx_L1_error)
+3691:                     if CannotAddAddrU(address, step):
          __pyx_t_2 = (__pyx_f_11cbytesparse_2_c_CannotAddAddrU(__pyx_v_address, __pyx_v_step) != 0);
          if (__pyx_t_2) {
/* … */
          }
+3692:                         break
            goto __pyx_L13_break;
+3693:                     address += step
          __pyx_v_address = (__pyx_v_address + __pyx_v_step);
        }
        __pyx_L13_break:;
      }
      __pyx_L11:;
+3694:             return  # nothing to write
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      goto __pyx_L0;
 3695: 
+3696:         slice_size = endex - start
    __pyx_v_slice_size = (__pyx_v_endex - __pyx_v_start);
+3697:         if step:
    __pyx_t_2 = (__pyx_v_step != 0);
    if (__pyx_t_2) {
/* … */
    }
 3698:             with cython.cdivision(True):
+3699:                 slice_size = (slice_size + step - 1) // step
      __pyx_v_slice_size = (((__pyx_v_slice_size + __pyx_v_step) - 1) / __pyx_v_step);
+3700:         CheckAddrToSizeU(slice_size)
    __pyx_t_7 = __pyx_f_11cbytesparse_2_c_CheckAddrToSizeU(__pyx_v_slice_size); if (unlikely(__pyx_t_7 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3700, __pyx_L1_error)
 3701: 
+3702:         value_ = Block_FromObject(0, value, False)
    __pyx_t_8 = __pyx_f_11cbytesparse_2_c_Block_FromObject(0, __pyx_v_value, 0); if (unlikely(__pyx_t_8 == ((Block_ *)NULL))) __PYX_ERR(0, 3702, __pyx_L1_error)
    __pyx_v_value_ = __pyx_t_8;
+3703:         try:
    /*try:*/ {
+3704:             if isinstance(value, int):
      __pyx_t_2 = PyInt_Check(__pyx_v_value); 
      __pyx_t_1 = (__pyx_t_2 != 0);
      if (__pyx_t_1) {
/* … */
      }
+3705:                 value_ = Block_Repeat(value_, <size_t>slice_size)
        __pyx_t_8 = __pyx_f_11cbytesparse_2_c_Block_Repeat(__pyx_v_value_, ((size_t)__pyx_v_slice_size)); if (unlikely(__pyx_t_8 == ((Block_ *)NULL))) __PYX_ERR(0, 3705, __pyx_L17_error)
        __pyx_v_value_ = __pyx_t_8;
+3706:             value_size = Block_Length(value_)
      __pyx_v_value_size = __pyx_f_11cbytesparse_2_c_Block_Length(__pyx_v_value_);
 3707: 
+3708:             if value_size < slice_size:
      __pyx_t_1 = ((__pyx_v_value_size < __pyx_v_slice_size) != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L20;
      }
 3709:                 # Shrink: remove excess, overwrite existing
+3710:                 if not step:
        __pyx_t_1 = ((!(__pyx_v_step != 0)) != 0);
        if (likely(__pyx_t_1)) {
/* … */
          goto __pyx_L21;
        }
+3711:                     if CannotAddAddrU(start, value_size):
          __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotAddAddrU(__pyx_v_start, __pyx_v_value_size) != 0);
          if (__pyx_t_1) {
/* … */
            goto __pyx_L22;
          }
+3712:                         del_start = ADDR_MAX
            __pyx_v_del_start = ADDR_MAX;
 3713:                     else:
+3714:                         del_start = start + value_size
          /*else*/ {
            __pyx_v_del_start = (__pyx_v_start + __pyx_v_value_size);
          }
          __pyx_L22:;
+3715:                     if CannotAddAddrU(del_start, (slice_size - value_size)):
          __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotAddAddrU(__pyx_v_del_start, (__pyx_v_slice_size - __pyx_v_value_size)) != 0);
          if (__pyx_t_1) {
/* … */
            goto __pyx_L23;
          }
+3716:                         del_endex = ADDR_MAX
            __pyx_v_del_endex = ADDR_MAX;
 3717:                     else:
+3718:                         del_endex = del_start + (slice_size - value_size)
          /*else*/ {
            __pyx_v_del_endex = (__pyx_v_del_start + (__pyx_v_slice_size - __pyx_v_value_size));
          }
          __pyx_L23:;
+3719:                     Memory_Erase__(that, del_start, del_endex, True, True)  # delete
          __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_del_start, __pyx_v_del_endex, 1, 1); if (unlikely(__pyx_t_7 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3719, __pyx_L17_error)
+3720:                     if value_size:
          __pyx_t_1 = (__pyx_v_value_size != 0);
          if (__pyx_t_1) {
/* … */
          }
+3721:                         Memory_WriteRaw_(that, start, value_size, Block_At__(value_, 0), None)
            __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Memory_WriteRaw_(__pyx_v_that, __pyx_v_start, __pyx_v_value_size, __pyx_f_11cbytesparse_2_c_Block_At__(__pyx_v_value_, 0), ((PyObject*)Py_None)); if (unlikely(__pyx_t_7 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3721, __pyx_L17_error)
 3722:                 else:
+3723:                     raise ValueError(f'attempt to assign bytes of size {value_size}'
        /*else*/ {
          __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3723, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_9 = 0;
          __pyx_t_10 = 127;
          __Pyx_INCREF(__pyx_kp_u_attempt_to_assign_bytes_of_size);
          __pyx_t_9 += 32;
          __Pyx_GIVEREF(__pyx_kp_u_attempt_to_assign_bytes_of_size);
          PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_attempt_to_assign_bytes_of_size);
          __pyx_t_11 = __Pyx_PyUnicode_From_size_t(__pyx_v_value_size, 0, ' ', 'd'); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3723, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11);
          __Pyx_GIVEREF(__pyx_t_11);
          PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_11);
          __pyx_t_11 = 0;
          __Pyx_INCREF(__pyx_kp_u_to_extended_slice_of_size);
          __pyx_t_9 += 27;
          __Pyx_GIVEREF(__pyx_kp_u_to_extended_slice_of_size);
          PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_to_extended_slice_of_size);
/* … */
          __pyx_t_12 = __Pyx_PyUnicode_Join(__pyx_t_3, 4, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3723, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_12); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3723, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __Pyx_Raise(__pyx_t_3, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __PYX_ERR(0, 3723, __pyx_L17_error)
        }
        __pyx_L21:;
+3724:                                      f' to extended slice of size {slice_size}')
          __pyx_t_11 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_slice_size); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3724, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_11);
          __pyx_t_12 = __Pyx_PyObject_FormatSimple(__pyx_t_11, __pyx_empty_unicode); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3724, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_12) : __pyx_t_10;
          __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12);
          __Pyx_GIVEREF(__pyx_t_12);
          PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_12);
          __pyx_t_12 = 0;
+3725:             elif slice_size < value_size:
      __pyx_t_1 = ((__pyx_v_slice_size < __pyx_v_value_size) != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L20;
      }
 3726:                 # Enlarge: insert excess, overwrite existing
+3727:                 if not step:
        __pyx_t_1 = ((!(__pyx_v_step != 0)) != 0);
        if (likely(__pyx_t_1)) {
/* … */
          goto __pyx_L25;
        }
+3728:                     Memory_InsertRaw_(that, endex, value_size - slice_size, Block_At__(value_, slice_size), None)
          __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Memory_InsertRaw_(__pyx_v_that, __pyx_v_endex, (__pyx_v_value_size - __pyx_v_slice_size), __pyx_f_11cbytesparse_2_c_Block_At__(__pyx_v_value_, __pyx_v_slice_size), ((PyObject*)Py_None)); if (unlikely(__pyx_t_7 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3728, __pyx_L17_error)
+3729:                     Memory_WriteRaw_(that, start, slice_size, Block_At__(value_, 0), None)
          __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Memory_WriteRaw_(__pyx_v_that, __pyx_v_start, __pyx_v_slice_size, __pyx_f_11cbytesparse_2_c_Block_At__(__pyx_v_value_, 0), ((PyObject*)Py_None)); if (unlikely(__pyx_t_7 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3729, __pyx_L17_error)
 3730:                 else:
+3731:                     raise ValueError(f'attempt to assign bytes of size {value_size}'
        /*else*/ {
          __pyx_t_3 = PyTuple_New(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3731, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_3);
          __pyx_t_9 = 0;
          __pyx_t_10 = 127;
          __Pyx_INCREF(__pyx_kp_u_attempt_to_assign_bytes_of_size);
          __pyx_t_9 += 32;
          __Pyx_GIVEREF(__pyx_kp_u_attempt_to_assign_bytes_of_size);
          PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_attempt_to_assign_bytes_of_size);
          __pyx_t_12 = __Pyx_PyUnicode_From_size_t(__pyx_v_value_size, 0, ' ', 'd'); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3731, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_12);
          __Pyx_GIVEREF(__pyx_t_12);
          PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_12);
          __pyx_t_12 = 0;
          __Pyx_INCREF(__pyx_kp_u_to_extended_slice_of_size);
          __pyx_t_9 += 27;
          __Pyx_GIVEREF(__pyx_kp_u_to_extended_slice_of_size);
          PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u_to_extended_slice_of_size);
/* … */
          __pyx_t_11 = __Pyx_PyUnicode_Join(__pyx_t_3, 4, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3731, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_ValueError, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3731, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_Raise(__pyx_t_3, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __PYX_ERR(0, 3731, __pyx_L17_error)
        }
        __pyx_L25:;
+3732:                                      f' to extended slice of size {slice_size}')
          __pyx_t_12 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_slice_size); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 3732, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_11 = __Pyx_PyObject_FormatSimple(__pyx_t_12, __pyx_empty_unicode); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 3732, __pyx_L17_error)
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
          __pyx_t_10 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) > __pyx_t_10) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_11) : __pyx_t_10;
          __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_11);
          __Pyx_GIVEREF(__pyx_t_11);
          PyTuple_SET_ITEM(__pyx_t_3, 3, __pyx_t_11);
          __pyx_t_11 = 0;
 3733:             else:
 3734:                 # Same size: overwrite existing
+3735:                 if not step:
      /*else*/ {
        __pyx_t_1 = ((!(__pyx_v_step != 0)) != 0);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L26;
        }
+3736:                     Memory_WriteRaw_(that, start, value_size, Block_At__(value_, 0), None)
          __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Memory_WriteRaw_(__pyx_v_that, __pyx_v_start, __pyx_v_value_size, __pyx_f_11cbytesparse_2_c_Block_At__(__pyx_v_value_, 0), ((PyObject*)Py_None)); if (unlikely(__pyx_t_7 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3736, __pyx_L17_error)
 3737:                 else:
+3738:                     CheckMulAddrU(step, value_size)
        /*else*/ {
          __pyx_t_7 = __pyx_f_11cbytesparse_2_c_CheckMulAddrU(__pyx_v_step, __pyx_v_value_size); if (unlikely(__pyx_t_7 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3738, __pyx_L17_error)
+3739:                     CheckAddAddrU(start, step * value_size)
          __pyx_t_7 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_start, (__pyx_v_step * __pyx_v_value_size)); if (unlikely(__pyx_t_7 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3739, __pyx_L17_error)
+3740:                     for offset in range(value_size):
          __pyx_t_13 = __pyx_v_value_size;
          __pyx_t_14 = __pyx_t_13;
          for (__pyx_t_15 = 0; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
            __pyx_v_offset = __pyx_t_15;
+3741:                         Memory_Poke_(that, start + (step * offset), Block_Get__(value_, offset))
            __pyx_t_16 = __pyx_f_11cbytesparse_2_c_Memory_Poke_(__pyx_v_that, (__pyx_v_start + (__pyx_v_step * __pyx_v_offset)), __pyx_f_11cbytesparse_2_c_Block_Get__(__pyx_v_value_, __pyx_v_offset)); if (unlikely(__pyx_t_16 == ((int)-2))) __PYX_ERR(0, 3741, __pyx_L17_error)
          }
        }
        __pyx_L26:;
      }
      __pyx_L20:;
    }
 3742:         finally:
+3743:             Block_Free(value_)  # orphan
    /*finally:*/ {
      /*normal exit:*/{
        (void)(__pyx_f_11cbytesparse_2_c_Block_Free(__pyx_v_value_));
        goto __pyx_L18;
      }
      __pyx_L17_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_22, &__pyx_t_23, &__pyx_t_24);
        if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21) < 0)) __Pyx_ErrFetch(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
        __Pyx_XGOTREF(__pyx_t_19);
        __Pyx_XGOTREF(__pyx_t_20);
        __Pyx_XGOTREF(__pyx_t_21);
        __Pyx_XGOTREF(__pyx_t_22);
        __Pyx_XGOTREF(__pyx_t_23);
        __Pyx_XGOTREF(__pyx_t_24);
        __pyx_t_16 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
        {
          (void)(__pyx_f_11cbytesparse_2_c_Block_Free(__pyx_v_value_));
        }
        if (PY_MAJOR_VERSION >= 3) {
          __Pyx_XGIVEREF(__pyx_t_22);
          __Pyx_XGIVEREF(__pyx_t_23);
          __Pyx_XGIVEREF(__pyx_t_24);
          __Pyx_ExceptionReset(__pyx_t_22, __pyx_t_23, __pyx_t_24);
        }
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_XGIVEREF(__pyx_t_20);
        __Pyx_XGIVEREF(__pyx_t_21);
        __Pyx_ErrRestore(__pyx_t_19, __pyx_t_20, __pyx_t_21);
        __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0; __pyx_t_22 = 0; __pyx_t_23 = 0; __pyx_t_24 = 0;
        __pyx_lineno = __pyx_t_16; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
        goto __pyx_L1_error;
      }
      __pyx_L18:;
    }
 3744:     else:
 3745:         # below: self.poke(key, value)
+3746:         address = <addr_t>key
  /*else*/ {
    __pyx_t_4 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_key); if (unlikely((__pyx_t_4 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3746, __pyx_L1_error)
    __pyx_v_address = ((addr_t)__pyx_t_4);
+3747:         if value is None:
    __pyx_t_1 = (__pyx_v_value == Py_None);
    __pyx_t_2 = (__pyx_t_1 != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L31;
    }
+3748:             Memory_PokeNone__(that, address)
      __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Memory_PokeNone__(__pyx_v_that, __pyx_v_address); if (unlikely(__pyx_t_7 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3748, __pyx_L1_error)
 3749:         else:
+3750:             if isinstance(value, int):
    /*else*/ {
      __pyx_t_2 = PyInt_Check(__pyx_v_value); 
      __pyx_t_1 = (__pyx_t_2 != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L32;
      }
+3751:                 Memory_Poke_(that, address, <byte_t>value)
        __pyx_t_25 = __Pyx_PyInt_As_byte_t(__pyx_v_value); if (unlikely((__pyx_t_25 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3751, __pyx_L1_error)
        __pyx_t_17 = __pyx_f_11cbytesparse_2_c_Memory_Poke_(__pyx_v_that, __pyx_v_address, ((byte_t)__pyx_t_25)); if (unlikely(__pyx_t_17 == ((int)-2))) __PYX_ERR(0, 3751, __pyx_L1_error)
 3752:             else:
+3753:                 if len(value) != 1:
      /*else*/ {
        __pyx_t_9 = PyObject_Length(__pyx_v_value); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3753, __pyx_L1_error)
        __pyx_t_1 = ((__pyx_t_9 != 1) != 0);
        if (unlikely(__pyx_t_1)) {
/* … */
        }
+3754:                     raise ValueError('expecting single item')
          __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3754, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_3);
          __Pyx_Raise(__pyx_t_3, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
          __PYX_ERR(0, 3754, __pyx_L1_error)
/* … */
  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_kp_u_expecting_single_item); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(0, 3754, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__18);
  __Pyx_GIVEREF(__pyx_tuple__18);
+3755:                 Memory_Poke_(that, address, <byte_t>value[0])
        __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_value, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3755, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_25 = __Pyx_PyInt_As_byte_t(__pyx_t_3); if (unlikely((__pyx_t_25 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3755, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_17 = __pyx_f_11cbytesparse_2_c_Memory_Poke_(__pyx_v_that, __pyx_v_address, ((byte_t)__pyx_t_25)); if (unlikely(__pyx_t_17 == ((int)-2))) __PYX_ERR(0, 3755, __pyx_L1_error)
      }
      __pyx_L32:;
    }
    __pyx_L31:;
  }
  __pyx_L3:;
 3756: 
 3757: 
+3758: cdef vint Memory_DelItem(Memory_* that, object key) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_DelItem(Memory_ *__pyx_v_that, PyObject *__pyx_v_key) {
  PyObject *__pyx_v_key_ = 0;
  addr_t __pyx_v_start;
  addr_t __pyx_v_endex;
  addr_t __pyx_v_step;
  addr_t __pyx_v_address;
  PyObject *__pyx_v_key_start = NULL;
  PyObject *__pyx_v_key_endex = NULL;
  PyObject *__pyx_v_key_step = NULL;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_DelItem", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Memory_DelItem", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_key_);
  __Pyx_XDECREF(__pyx_v_key_start);
  __Pyx_XDECREF(__pyx_v_key_endex);
  __Pyx_XDECREF(__pyx_v_key_step);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3759:     cdef:
 3760:         slice key_
 3761:         addr_t start
 3762:         addr_t endex
 3763:         addr_t step
 3764:         addr_t address
 3765: 
+3766:     if Rack_Length(that.blocks):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_that->blocks) != 0);
  if (__pyx_t_1) {
/* … */
  }
+3767:         if isinstance(key, slice):
    __pyx_t_1 = PySlice_Check(__pyx_v_key); 
    __pyx_t_2 = (__pyx_t_1 != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L4;
    }
+3768:             key_ = <slice>key
      __pyx_t_3 = __pyx_v_key;
      __Pyx_INCREF(__pyx_t_3);
      __pyx_v_key_ = ((PyObject*)__pyx_t_3);
      __pyx_t_3 = 0;
+3769:             key_start = key_.start
      __pyx_t_3 = ((PySliceObject*)__pyx_v_key_)->start;
      __Pyx_INCREF(__pyx_t_3);
      __pyx_v_key_start = __pyx_t_3;
      __pyx_t_3 = 0;
+3770:             key_endex = key_.stop
      __pyx_t_3 = ((PySliceObject*)__pyx_v_key_)->stop;
      __Pyx_INCREF(__pyx_t_3);
      __pyx_v_key_endex = __pyx_t_3;
      __pyx_t_3 = 0;
+3771:             start = Memory_Start(that) if key_start is None else <addr_t>key_start
      __pyx_t_2 = (__pyx_v_key_start == Py_None);
      if ((__pyx_t_2 != 0)) {
        __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_v_that);
      } else {
        __pyx_t_5 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_key_start); if (unlikely((__pyx_t_5 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3771, __pyx_L1_error)
        __pyx_t_4 = ((addr_t)__pyx_t_5);
      }
      __pyx_v_start = __pyx_t_4;
+3772:             endex = Memory_Endex(that) if key_endex is None else <addr_t>key_endex
      __pyx_t_2 = (__pyx_v_key_endex == Py_None);
      if ((__pyx_t_2 != 0)) {
        __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Endex(__pyx_v_that);
      } else {
        __pyx_t_5 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_key_endex); if (unlikely((__pyx_t_5 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3772, __pyx_L1_error)
        __pyx_t_4 = ((addr_t)__pyx_t_5);
      }
      __pyx_v_endex = __pyx_t_4;
 3773: 
+3774:             if start < endex:
      __pyx_t_2 = ((__pyx_v_start < __pyx_v_endex) != 0);
      if (__pyx_t_2) {
/* … */
      }
+3775:                 key_step = key_.step
        __pyx_t_3 = ((PySliceObject*)__pyx_v_key_)->step;
        __Pyx_INCREF(__pyx_t_3);
        __pyx_v_key_step = __pyx_t_3;
        __pyx_t_3 = 0;
+3776:                 if key_step is None or key_step is 1 or key_step == 1:
        __pyx_t_1 = (__pyx_v_key_step == Py_None);
        __pyx_t_6 = (__pyx_t_1 != 0);
        if (!__pyx_t_6) {
        } else {
          __pyx_t_2 = __pyx_t_6;
          goto __pyx_L7_bool_binop_done;
        }
        __pyx_t_6 = (__pyx_v_key_step == __pyx_int_1);
        __pyx_t_1 = (__pyx_t_6 != 0);
        if (!__pyx_t_1) {
        } else {
          __pyx_t_2 = __pyx_t_1;
          goto __pyx_L7_bool_binop_done;
        }
        __pyx_t_3 = __Pyx_PyInt_EqObjC(__pyx_v_key_step, __pyx_int_1, 1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3776, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 3776, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_2 = __pyx_t_1;
        __pyx_L7_bool_binop_done:;
        if (__pyx_t_2) {
/* … */
          goto __pyx_L6;
        }
+3777:                     Memory_Erase__(that, start, endex, True, True)  # delete
          __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_start, __pyx_v_endex, 1, 1); if (unlikely(__pyx_t_7 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3777, __pyx_L1_error)
 3778: 
+3779:                 elif key_step > 1:
        __pyx_t_3 = PyObject_RichCompare(__pyx_v_key_step, __pyx_int_1, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 3779, __pyx_L1_error)
        __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3779, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (__pyx_t_2) {
/* … */
        }
        __pyx_L6:;
+3780:                     step = <addr_t>key_step - 1
          __pyx_t_4 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_key_step); if (unlikely((__pyx_t_4 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3780, __pyx_L1_error)
          __pyx_v_step = (((addr_t)__pyx_t_4) - 1);
+3781:                     address = start
          __pyx_v_address = __pyx_v_start;
+3782:                     while address < endex:
          while (1) {
            __pyx_t_2 = ((__pyx_v_address < __pyx_v_endex) != 0);
            if (!__pyx_t_2) break;
+3783:                         Memory_Erase__(that, address, address + 1, True, True)  # delete
            __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_address, (__pyx_v_address + 1), 1, 1); if (unlikely(__pyx_t_7 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3783, __pyx_L1_error)
+3784:                         address += step
            __pyx_v_address = (__pyx_v_address + __pyx_v_step);
+3785:                         endex -= 1
            __pyx_v_endex = (__pyx_v_endex - 1);
          }
 3786:         else:
+3787:             address = <addr_t>key
    /*else*/ {
      __pyx_t_4 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_key); if (unlikely((__pyx_t_4 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3787, __pyx_L1_error)
      __pyx_v_address = ((addr_t)__pyx_t_4);
+3788:             Memory_Erase__(that, address, address + 1, True, True)  # delete
      __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_address, (__pyx_v_address + 1), 1, 1); if (unlikely(__pyx_t_7 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3788, __pyx_L1_error)
    }
    __pyx_L4:;
 3789: 
 3790: 
+3791: cdef vint Memory_Append_(Memory_* that, byte_t value) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Append_(Memory_ *__pyx_v_that, byte_t __pyx_v_value) {
  Rack_ *__pyx_v_blocks;
  size_t __pyx_v_block_count;
  Block_ *__pyx_v_block;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Append_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Append_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3792:     cdef:
+3793:         Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
 3794:         size_t block_count
 3795:         Block_* block
 3796: 
+3797:     block_count = Rack_Length(blocks)
  __pyx_v_block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
+3798:     if block_count:
  __pyx_t_2 = (__pyx_v_block_count != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+3799:         block = Block_Append(Rack_Last_(blocks), value)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Append(__pyx_f_11cbytesparse_2_c_Rack_Last_(__pyx_v_blocks), __pyx_v_value); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 3799, __pyx_L1_error)
    __pyx_v_block = __pyx_t_3;
+3800:         Rack_Set__(blocks, block_count - 1, block)  # update pointer
    (void)(__pyx_f_11cbytesparse_2_c_Rack_Set__(__pyx_v_blocks, (__pyx_v_block_count - 1), __pyx_v_block));
 3801:     else:
+3802:         block = Block_Create(0, 1, &value)
  /*else*/ {
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Create(0, 1, (&__pyx_v_value)); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 3802, __pyx_L1_error)
    __pyx_v_block = __pyx_t_3;
+3803:         try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      goto __pyx_L9_try_end;
      __pyx_L4_error:;
/* … */
      __Pyx_XGIVEREF(__pyx_t_4);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
      goto __pyx_L1_error;
      __pyx_L9_try_end:;
    }
  }
  __pyx_L3:;
+3804:             that.blocks = blocks = Rack_Append(blocks, block)
        __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Append(__pyx_v_blocks, __pyx_v_block); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 3804, __pyx_L4_error)
        __pyx_v_that->blocks = __pyx_t_1;
        __pyx_v_blocks = __pyx_t_1;
+3805:         except:
      /*except:*/ {
        __Pyx_AddTraceback("cbytesparse._c.Memory_Append_", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0) __PYX_ERR(0, 3805, __pyx_L6_except_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_GOTREF(__pyx_t_9);
+3806:             Block_Free(block)  # orphan
        (void)(__pyx_f_11cbytesparse_2_c_Block_Free(__pyx_v_block));
+3807:             raise
        __Pyx_GIVEREF(__pyx_t_7);
        __Pyx_GIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_ErrRestoreWithState(__pyx_t_7, __pyx_t_8, __pyx_t_9);
        __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; 
        __PYX_ERR(0, 3807, __pyx_L6_except_error)
      }
      __pyx_L6_except_error:;
 3808: 
 3809: 
+3810: cdef vint Memory_Append(Memory_* that, object item) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Append(Memory_ *__pyx_v_that, PyObject *__pyx_v_item) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Append", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Append", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3811:     if isinstance(item, int):
  __pyx_t_1 = PyInt_Check(__pyx_v_item); 
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+3812:         Memory_Append_(that, <byte_t>item)
    __pyx_t_3 = __Pyx_PyInt_As_byte_t(__pyx_v_item); if (unlikely((__pyx_t_3 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3812, __pyx_L1_error)
    __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Append_(__pyx_v_that, ((byte_t)__pyx_t_3)); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3812, __pyx_L1_error)
 3813:     else:
+3814:         if len(item) != 1:
  /*else*/ {
    __pyx_t_5 = PyObject_Length(__pyx_v_item); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(0, 3814, __pyx_L1_error)
    __pyx_t_2 = ((__pyx_t_5 != 1) != 0);
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+3815:             raise ValueError('expecting single item')
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3815, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_Raise(__pyx_t_6, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __PYX_ERR(0, 3815, __pyx_L1_error)
+3816:         Memory_Append_(that, <byte_t>item[0])
    __pyx_t_6 = __Pyx_GetItemInt(__pyx_v_item, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3816, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_3 = __Pyx_PyInt_As_byte_t(__pyx_t_6); if (unlikely((__pyx_t_3 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3816, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Append_(__pyx_v_that, ((byte_t)__pyx_t_3)); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3816, __pyx_L1_error)
  }
  __pyx_L3:;
 3817: 
 3818: 
+3819: cdef vint Memory_ExtendSame_(Memory_* that, const Memory_* items, addr_t offset) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_ExtendSame_(Memory_ *__pyx_v_that, Memory_ const *__pyx_v_items, addr_t __pyx_v_offset) {
  addr_t __pyx_v_content_endex;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_ExtendSame_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_ExtendSame_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3820:     cdef:
+3821:         addr_t content_endex = Memory_ContentEndex(that)
  __pyx_v_content_endex = __pyx_f_11cbytesparse_2_c_Memory_ContentEndex(__pyx_v_that);
 3822: 
+3823:     CheckAddAddrU(content_endex, offset)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_content_endex, __pyx_v_offset); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3823, __pyx_L1_error)
+3824:     offset += content_endex
  __pyx_v_offset = (__pyx_v_offset + __pyx_v_content_endex);
+3825:     Memory_WriteSame_(that, offset, items, False, None)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_WriteSame_(__pyx_v_that, __pyx_v_offset, __pyx_v_items, 0, ((PyObject*)Py_None)); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3825, __pyx_L1_error)
 3826: 
 3827: 
+3828: cdef vint Memory_ExtendRaw_(Memory_* that, size_t items_size, const byte_t* items_ptr, addr_t offset) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_ExtendRaw_(Memory_ *__pyx_v_that, size_t __pyx_v_items_size, byte_t const *__pyx_v_items_ptr, addr_t __pyx_v_offset) {
  addr_t __pyx_v_content_endex;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_ExtendRaw_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_ExtendRaw_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3829:     cdef:
+3830:         addr_t content_endex = Memory_ContentEndex(that)
  __pyx_v_content_endex = __pyx_f_11cbytesparse_2_c_Memory_ContentEndex(__pyx_v_that);
 3831: 
+3832:     CheckAddAddrU(content_endex, offset)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_content_endex, __pyx_v_offset); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3832, __pyx_L1_error)
+3833:     offset += content_endex
  __pyx_v_offset = (__pyx_v_offset + __pyx_v_content_endex);
+3834:     CheckAddAddrU(offset, items_size)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_offset, __pyx_v_items_size); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3834, __pyx_L1_error)
+3835:     Memory_WriteRaw_(that, offset, items_size, items_ptr, None)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_WriteRaw_(__pyx_v_that, __pyx_v_offset, __pyx_v_items_size, __pyx_v_items_ptr, ((PyObject*)Py_None)); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3835, __pyx_L1_error)
 3836: 
 3837: 
+3838: cdef vint Memory_Extend(Memory_* that, object items, object offset) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Extend(Memory_ *__pyx_v_that, PyObject *__pyx_v_items, PyObject *__pyx_v_offset) {
  __Pyx_memviewslice __pyx_v_items_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  byte_t __pyx_v_items_value;
  size_t __pyx_v_items_size;
  byte_t const *__pyx_v_items_ptr;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Extend", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_7, 1);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_items_view, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3839:     cdef:
 3840:         const byte_t[:] items_view
 3841:         byte_t items_value
 3842:         size_t items_size
 3843:         const byte_t* items_ptr
 3844: 
+3845:     if offset < 0:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_offset, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3845, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 3845, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+3846:         raise ValueError('negative extension offset')
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 3846, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_Raise(__pyx_t_1, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __PYX_ERR(0, 3846, __pyx_L1_error)
/* … */
  __pyx_tuple__19 = PyTuple_Pack(1, __pyx_kp_u_negative_extension_offset); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 3846, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__19);
  __Pyx_GIVEREF(__pyx_tuple__19);
 3847: 
+3848:     if isinstance(items, Memory):
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_items, __pyx_ptype_11cbytesparse_2_c_Memory); 
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L4;
  }
+3849:         Memory_ExtendSame_(that, (<Memory>items)._, <addr_t>offset)
    __pyx_t_4 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_offset); if (unlikely((__pyx_t_4 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3849, __pyx_L1_error)
    __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Memory_ExtendSame_(__pyx_v_that, ((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_items)->_, ((addr_t)__pyx_t_4)); if (unlikely(__pyx_t_5 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3849, __pyx_L1_error)
 3850:     else:
+3851:         if isinstance(items, int):
  /*else*/ {
    __pyx_t_3 = PyInt_Check(__pyx_v_items); 
    __pyx_t_2 = (__pyx_t_3 != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L5;
    }
+3852:             items_value = <byte_t>items
      __pyx_t_6 = __Pyx_PyInt_As_byte_t(__pyx_v_items); if (unlikely((__pyx_t_6 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3852, __pyx_L1_error)
      __pyx_v_items_value = ((byte_t)__pyx_t_6);
+3853:             items_size = 1
      __pyx_v_items_size = 1;
+3854:             items_ptr = &items_value
      __pyx_v_items_ptr = (&__pyx_v_items_value);
 3855:         else:
+3856:             items_view = items
    /*else*/ {
      __pyx_t_7 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(__pyx_v_items, 0); if (unlikely(!__pyx_t_7.memview)) __PYX_ERR(0, 3856, __pyx_L1_error)
      __pyx_v_items_view = __pyx_t_7;
      __pyx_t_7.memview = NULL;
      __pyx_t_7.data = NULL;
+3857:             items_size = len(items_view)
      __pyx_t_8 = __Pyx_MemoryView_Len(__pyx_v_items_view); 
      __pyx_v_items_size = __pyx_t_8;
 3858:             with cython.boundscheck(False):
+3859:                 items_ptr = &items_view[0]
      __pyx_t_9 = 0;
      if (__pyx_t_9 < 0) __pyx_t_9 += __pyx_v_items_view.shape[0];
      __pyx_v_items_ptr = (&(*((byte_t const  *) ( /* dim=0 */ (__pyx_v_items_view.data + __pyx_t_9 * __pyx_v_items_view.strides[0]) ))));
    }
    __pyx_L5:;
 3860: 
+3861:         Memory_ExtendRaw_(that, items_size, items_ptr, <addr_t>offset)
    __pyx_t_4 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_offset); if (unlikely((__pyx_t_4 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3861, __pyx_L1_error)
    __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Memory_ExtendRaw_(__pyx_v_that, __pyx_v_items_size, __pyx_v_items_ptr, ((addr_t)__pyx_t_4)); if (unlikely(__pyx_t_5 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3861, __pyx_L1_error)
  }
  __pyx_L4:;
 3862: 
 3863: 
+3864: cdef int Memory_PopLast_(Memory_* that) except -2:
static int __pyx_f_11cbytesparse_2_c_Memory_PopLast_(Memory_ *__pyx_v_that) {
  Rack_ *__pyx_v_blocks;
  size_t __pyx_v_block_count;
  Block_ *__pyx_v_block;
  byte_t __pyx_v_backup;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_PopLast_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_PopLast_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3865:     cdef:
+3866:         Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
+3867:         size_t block_count = Rack_Length(blocks)
  __pyx_v_block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
 3868:         Block_* block
 3869:         byte_t backup
 3870: 
+3871:     if block_count:
  __pyx_t_2 = (__pyx_v_block_count != 0);
  if (__pyx_t_2) {
/* … */
  }
+3872:         block = Rack_Last_(blocks)
    __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Last_(__pyx_v_blocks);
+3873:         if Block_Length(block) > 1:
    __pyx_t_2 = ((__pyx_f_11cbytesparse_2_c_Block_Length(__pyx_v_block) > 1) != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L4;
    }
+3874:             block = Block_Pop__(block, &backup)
      __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Block_Pop__(__pyx_v_block, (&__pyx_v_backup)); if (unlikely(__pyx_t_3 == ((Block_ *)NULL))) __PYX_ERR(0, 3874, __pyx_L1_error)
      __pyx_v_block = __pyx_t_3;
+3875:             Rack_Set__(blocks, block_count - 1, block)  # update pointer
      (void)(__pyx_f_11cbytesparse_2_c_Rack_Set__(__pyx_v_blocks, (__pyx_v_block_count - 1), __pyx_v_block));
 3876:         else:
+3877:             backup = Block_Get__(block, 0)
    /*else*/ {
      __pyx_v_backup = __pyx_f_11cbytesparse_2_c_Block_Get__(__pyx_v_block, 0);
+3878:             that.blocks = blocks = Rack_Pop__(blocks, NULL)
      __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Pop__(__pyx_v_blocks, NULL); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 3878, __pyx_L1_error)
      __pyx_v_that->blocks = __pyx_t_1;
      __pyx_v_blocks = __pyx_t_1;
    }
    __pyx_L4:;
+3879:         return backup
    __pyx_r = __pyx_v_backup;
    goto __pyx_L0;
 3880:     else:
+3881:         return -1
  /*else*/ {
    __pyx_r = -1;
    goto __pyx_L0;
  }
 3882: 
 3883: 
+3884: cdef int Memory_PopAt_(Memory_* that, addr_t address) except -2:
static int __pyx_f_11cbytesparse_2_c_Memory_PopAt_(Memory_ *__pyx_v_that, addr_t __pyx_v_address) {
  int __pyx_v_backup;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_PopAt_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_PopAt_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3885:     cdef:
 3886:         int backup
 3887: 
+3888:     backup = Memory_Peek_(that, address)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Peek_(__pyx_v_that, __pyx_v_address); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 3888, __pyx_L1_error)
  __pyx_v_backup = __pyx_t_1;
+3889:     Memory_Erase__(that, address, address + 1, True, True)  # delete
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_address, (__pyx_v_address + 1), 1, 1); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 3889, __pyx_L1_error)
+3890:     return backup
  __pyx_r = __pyx_v_backup;
  goto __pyx_L0;
 3891: 
 3892: 
+3893: cdef object Memory_Pop(Memory_* that, object address):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_Pop(Memory_ *__pyx_v_that, PyObject *__pyx_v_address) {
  int __pyx_v_value;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Pop", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Pop", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3894:     cdef:
 3895:         int value
 3896: 
+3897:     if address is None:
  __pyx_t_1 = (__pyx_v_address == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+3898:         value = Memory_PopLast_(that)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Memory_PopLast_(__pyx_v_that); if (unlikely(__pyx_t_3 == ((int)-2))) __PYX_ERR(0, 3898, __pyx_L1_error)
    __pyx_v_value = __pyx_t_3;
 3899:     else:
+3900:         value = Memory_PopAt_(that, <addr_t>address)
  /*else*/ {
    __pyx_t_4 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_address); if (unlikely((__pyx_t_4 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3900, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Memory_PopAt_(__pyx_v_that, ((addr_t)__pyx_t_4)); if (unlikely(__pyx_t_3 == ((int)-2))) __PYX_ERR(0, 3900, __pyx_L1_error)
    __pyx_v_value = __pyx_t_3;
  }
  __pyx_L3:;
+3901:     return None if value < 0 else value
  __Pyx_XDECREF(__pyx_r);
  if (((__pyx_v_value < 0) != 0)) {
    __Pyx_INCREF(Py_None);
    __pyx_t_5 = Py_None;
  } else {
    __pyx_t_6 = __Pyx_PyInt_From_int(__pyx_v_value); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 3901, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __pyx_t_6;
    __pyx_t_6 = 0;
  }
  __pyx_r = __pyx_t_5;
  __pyx_t_5 = 0;
  goto __pyx_L0;
 3902: 
 3903: 
+3904: cdef BlockView Memory_View(Memory_* that):
static struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_f_11cbytesparse_2_c_Memory_View(Memory_ *__pyx_v_that) {
  Rack_ *__pyx_v_blocks;
  size_t __pyx_v_block_count;
  addr_t __pyx_v_start;
  addr_t __pyx_v_endex;
  struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_View", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("cbytesparse._c.Memory_View", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3905:     cdef:
+3906:         Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
+3907:         size_t block_count = Rack_Length(blocks)
  __pyx_v_block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
 3908:         addr_t start
 3909:         addr_t endex
 3910: 
+3911:     if not block_count:
  __pyx_t_2 = ((!(__pyx_v_block_count != 0)) != 0);
  if (__pyx_t_2) {
/* … */
  }
+3912:         start = that.trim_start
    __pyx_t_3 = __pyx_v_that->trim_start;
    __pyx_v_start = __pyx_t_3;
+3913:         endex = that.trim_endex
    __pyx_t_3 = __pyx_v_that->trim_endex;
    __pyx_v_endex = __pyx_t_3;
+3914:         if that.trim_start_ and that.trim_endex_ and start < endex - 1:
    __pyx_t_4 = (__pyx_v_that->trim_start_ != 0);
    if (__pyx_t_4) {
    } else {
      __pyx_t_2 = __pyx_t_4;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_4 = (__pyx_v_that->trim_endex_ != 0);
    if (__pyx_t_4) {
    } else {
      __pyx_t_2 = __pyx_t_4;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_4 = ((__pyx_v_start < (__pyx_v_endex - 1)) != 0);
    __pyx_t_2 = __pyx_t_4;
    __pyx_L5_bool_binop_done:;
    if (unlikely(__pyx_t_2)) {
/* … */
    }
+3915:             raise ValueError('non-contiguous data within range')
      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3915, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_Raise(__pyx_t_5, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __PYX_ERR(0, 3915, __pyx_L1_error)
/* … */
  __pyx_tuple__20 = PyTuple_Pack(1, __pyx_kp_u_non_contiguous_data_within_range); if (unlikely(!__pyx_tuple__20)) __PYX_ERR(0, 3915, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__20);
  __Pyx_GIVEREF(__pyx_tuple__20);
+3916:         return Block_View(Block_Alloc(start, 0, False))
    __Pyx_XDECREF(((PyObject *)__pyx_r));
    __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Block_Alloc(__pyx_v_start, 0, 0); if (unlikely(__pyx_t_6 == ((Block_ *)NULL))) __PYX_ERR(0, 3916, __pyx_L1_error)
    __pyx_t_5 = ((PyObject *)__pyx_f_11cbytesparse_2_c_Block_View(__pyx_t_6)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3916, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_r = ((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;
 3917: 
+3918:     elif block_count == 1:
  __pyx_t_2 = ((__pyx_v_block_count == 1) != 0);
  if (likely(__pyx_t_2)) {
/* … */
  }
+3919:         start = that.trim_start
    __pyx_t_3 = __pyx_v_that->trim_start;
    __pyx_v_start = __pyx_t_3;
+3920:         if that.trim_start_:
    __pyx_t_2 = (__pyx_v_that->trim_start_ != 0);
    if (__pyx_t_2) {
/* … */
    }
+3921:             if start != Block_Start(Rack_First__(blocks)):
      __pyx_t_2 = ((__pyx_v_start != __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_f_11cbytesparse_2_c_Rack_First__(__pyx_v_blocks))) != 0);
      if (unlikely(__pyx_t_2)) {
/* … */
      }
+3922:                 raise ValueError('non-contiguous data within range')
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3922, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_Raise(__pyx_t_5, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __PYX_ERR(0, 3922, __pyx_L1_error)
 3923: 
+3924:         endex = that.trim_endex
    __pyx_t_3 = __pyx_v_that->trim_endex;
    __pyx_v_endex = __pyx_t_3;
+3925:         if that.trim_endex_:
    __pyx_t_2 = (__pyx_v_that->trim_endex_ != 0);
    if (__pyx_t_2) {
/* … */
    }
+3926:             if endex != Block_Endex(Rack_Last__(blocks)):
      __pyx_t_2 = ((__pyx_v_endex != __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_f_11cbytesparse_2_c_Rack_Last__(__pyx_v_blocks))) != 0);
      if (unlikely(__pyx_t_2)) {
/* … */
      }
+3927:                 raise ValueError('non-contiguous data within range')
        __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3927, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_Raise(__pyx_t_5, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __PYX_ERR(0, 3927, __pyx_L1_error)
 3928: 
+3929:         return Block_View(Rack_First_(blocks))
    __Pyx_XDECREF(((PyObject *)__pyx_r));
    __pyx_t_5 = ((PyObject *)__pyx_f_11cbytesparse_2_c_Block_View(__pyx_f_11cbytesparse_2_c_Rack_First_(__pyx_v_blocks))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3929, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_r = ((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_t_5);
    __pyx_t_5 = 0;
    goto __pyx_L0;
 3930: 
 3931:     else:
+3932:         raise ValueError('non-contiguous data within range')
  /*else*/ {
    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 3932, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_Raise(__pyx_t_5, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __PYX_ERR(0, 3932, __pyx_L1_error)
  }
 3933: 
 3934: 
+3935: cdef Memory_* Memory_Copy(const Memory_* that) except NULL:
static Memory_ *__pyx_f_11cbytesparse_2_c_Memory_Copy(Memory_ const *__pyx_v_that) {
  Rack_ *__pyx_v_blocks;
  Memory_ *__pyx_v_memory;
  Memory_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Copy", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_Copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3936:     cdef:
+3937:         Rack_* blocks = Rack_Copy(that.blocks)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Copy(__pyx_v_that->blocks); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 3937, __pyx_L1_error)
  __pyx_v_blocks = __pyx_t_1;
+3938:         Memory_* memory = NULL
  __pyx_v_memory = NULL;
 3939: 
+3940:     memory = <Memory_*>PyMem_Calloc(Memory_HEADING, 1)
  __pyx_v_memory = ((Memory_ *)__pyx_f_11cbytesparse_2_c_PyMem_Calloc(Memory_HEADING, 1));
+3941:     if memory == NULL:
  __pyx_t_2 = ((__pyx_v_memory == NULL) != 0);
  if (unlikely(__pyx_t_2)) {
/* … */
  }
+3942:         blocks = Rack_Free(blocks)
    __pyx_v_blocks = __pyx_f_11cbytesparse_2_c_Rack_Free(__pyx_v_blocks);
+3943:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 3943, __pyx_L1_error)
 3944: 
+3945:     memory.blocks = blocks
  __pyx_v_memory->blocks = __pyx_v_blocks;
+3946:     memory.trim_start = that.trim_start
  __pyx_t_3 = __pyx_v_that->trim_start;
  __pyx_v_memory->trim_start = __pyx_t_3;
+3947:     memory.trim_endex = that.trim_endex
  __pyx_t_3 = __pyx_v_that->trim_endex;
  __pyx_v_memory->trim_endex = __pyx_t_3;
+3948:     memory.trim_start_ = that.trim_start_
  __pyx_t_2 = __pyx_v_that->trim_start_;
  __pyx_v_memory->trim_start_ = __pyx_t_2;
+3949:     memory.trim_endex_ = that.trim_endex_
  __pyx_t_2 = __pyx_v_that->trim_endex_;
  __pyx_v_memory->trim_endex_ = __pyx_t_2;
+3950:     return memory
  __pyx_r = __pyx_v_memory;
  goto __pyx_L0;
 3951: 
 3952: 
+3953: cdef bint Memory_Contiguous(const Memory_* that) nogil:
static int __pyx_f_11cbytesparse_2_c_Memory_Contiguous(Memory_ const *__pyx_v_that) {
  Rack_ *__pyx_v_blocks;
  size_t __pyx_v_block_count;
  addr_t __pyx_v_start;
  addr_t __pyx_v_endex;
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 3954:     cdef:
+3955:         Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
+3956:         size_t block_count = Rack_Length(blocks)
  __pyx_v_block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
 3957:         addr_t start
 3958:         addr_t endex
 3959: 
+3960:     if not block_count:
  __pyx_t_2 = ((!(__pyx_v_block_count != 0)) != 0);
  if (__pyx_t_2) {
/* … */
  }
+3961:         start = that.trim_start
    __pyx_t_3 = __pyx_v_that->trim_start;
    __pyx_v_start = __pyx_t_3;
+3962:         endex = that.trim_endex
    __pyx_t_3 = __pyx_v_that->trim_endex;
    __pyx_v_endex = __pyx_t_3;
+3963:         if that.trim_start_ and that.trim_endex_ and start < endex - 1:
    __pyx_t_4 = (__pyx_v_that->trim_start_ != 0);
    if (__pyx_t_4) {
    } else {
      __pyx_t_2 = __pyx_t_4;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_4 = (__pyx_v_that->trim_endex_ != 0);
    if (__pyx_t_4) {
    } else {
      __pyx_t_2 = __pyx_t_4;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_4 = ((__pyx_v_start < (__pyx_v_endex - 1)) != 0);
    __pyx_t_2 = __pyx_t_4;
    __pyx_L5_bool_binop_done:;
    if (__pyx_t_2) {
/* … */
    }
+3964:             return False
      __pyx_r = 0;
      goto __pyx_L0;
+3965:         return True
    __pyx_r = 1;
    goto __pyx_L0;
 3966: 
+3967:     elif block_count == 1:
  __pyx_t_2 = ((__pyx_v_block_count == 1) != 0);
  if (__pyx_t_2) {
/* … */
  }
+3968:         start = that.trim_start
    __pyx_t_3 = __pyx_v_that->trim_start;
    __pyx_v_start = __pyx_t_3;
+3969:         if that.trim_start_:
    __pyx_t_2 = (__pyx_v_that->trim_start_ != 0);
    if (__pyx_t_2) {
/* … */
    }
+3970:             if start != Block_Start(Rack_First__(blocks)):
      __pyx_t_2 = ((__pyx_v_start != __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_f_11cbytesparse_2_c_Rack_First__(__pyx_v_blocks))) != 0);
      if (__pyx_t_2) {
/* … */
      }
+3971:                 return False
        __pyx_r = 0;
        goto __pyx_L0;
+3972:         endex = that.trim_endex
    __pyx_t_3 = __pyx_v_that->trim_endex;
    __pyx_v_endex = __pyx_t_3;
+3973:         if that.trim_endex_:
    __pyx_t_2 = (__pyx_v_that->trim_endex_ != 0);
    if (__pyx_t_2) {
/* … */
    }
+3974:             if endex != Block_Endex(Rack_Last__(blocks)):
      __pyx_t_2 = ((__pyx_v_endex != __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_f_11cbytesparse_2_c_Rack_Last__(__pyx_v_blocks))) != 0);
      if (__pyx_t_2) {
/* … */
      }
+3975:                 return False
        __pyx_r = 0;
        goto __pyx_L0;
+3976:         return True
    __pyx_r = 1;
    goto __pyx_L0;
 3977: 
+3978:     return False
  __pyx_r = 0;
  goto __pyx_L0;
 3979: 
 3980: 
+3981: cdef object Memory_GetTrimStart(const Memory_* that):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_GetTrimStart(Memory_ const *__pyx_v_that) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_GetTrimStart", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Memory_GetTrimStart", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+3982:     return that.trim_start if that.trim_start_ else None
  __Pyx_XDECREF(__pyx_r);
  if ((__pyx_v_that->trim_start_ != 0)) {
    __pyx_t_2 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_that->trim_start); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 3982, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_1 = Py_None;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 3983: 
 3984: 
+3985: cdef vint Memory_SetTrimStart(Memory_* that, object trim_start) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_SetTrimStart(Memory_ *__pyx_v_that, PyObject *__pyx_v_trim_start) {
  addr_t __pyx_v_trim_start_;
  addr_t __pyx_v_trim_endex_;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_SetTrimStart", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_SetTrimStart", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 3986:     cdef:
 3987:         addr_t trim_start_
 3988:         addr_t trim_endex_
 3989: 
+3990:     if trim_start is None:
  __pyx_t_1 = (__pyx_v_trim_start == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+3991:         trim_start_ = 0
    __pyx_v_trim_start_ = 0;
+3992:         that.trim_start_ = False
    __pyx_v_that->trim_start_ = 0;
 3993:     else:
+3994:         trim_start_ = <addr_t>trim_start
  /*else*/ {
    __pyx_t_3 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_trim_start); if (unlikely((__pyx_t_3 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 3994, __pyx_L1_error)
    __pyx_v_trim_start_ = ((addr_t)__pyx_t_3);
+3995:         that.trim_start_ = True
    __pyx_v_that->trim_start_ = 1;
  }
  __pyx_L3:;
 3996: 
+3997:     trim_endex_ = that.trim_endex
  __pyx_t_3 = __pyx_v_that->trim_endex;
  __pyx_v_trim_endex_ = __pyx_t_3;
+3998:     if that.trim_start_ and that.trim_endex_ and trim_endex_ < trim_start_:
  __pyx_t_1 = (__pyx_v_that->trim_start_ != 0);
  if (__pyx_t_1) {
  } else {
    __pyx_t_2 = __pyx_t_1;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_1 = (__pyx_v_that->trim_endex_ != 0);
  if (__pyx_t_1) {
  } else {
    __pyx_t_2 = __pyx_t_1;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_1 = ((__pyx_v_trim_endex_ < __pyx_v_trim_start_) != 0);
  __pyx_t_2 = __pyx_t_1;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+3999:         that.trim_endex = trim_endex_ = trim_start_
    __pyx_v_that->trim_endex = __pyx_v_trim_start_;
    __pyx_v_trim_endex_ = __pyx_v_trim_start_;
 4000: 
+4001:     that.trim_start = trim_start_
  __pyx_v_that->trim_start = __pyx_v_trim_start_;
+4002:     if that.trim_start_:
  __pyx_t_2 = (__pyx_v_that->trim_start_ != 0);
  if (__pyx_t_2) {
/* … */
  }
+4003:         Memory_Crop_(that, trim_start_, trim_endex_, None)
    __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Crop_(__pyx_v_that, __pyx_v_trim_start_, __pyx_v_trim_endex_, ((PyObject*)Py_None)); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4003, __pyx_L1_error)
 4004: 
 4005: 
+4006: cdef object Memory_GetTrimEndex(const Memory_* that):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_GetTrimEndex(Memory_ const *__pyx_v_that) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_GetTrimEndex", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Memory_GetTrimEndex", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4007:     return that.trim_endex if that.trim_endex_ else None
  __Pyx_XDECREF(__pyx_r);
  if ((__pyx_v_that->trim_endex_ != 0)) {
    __pyx_t_2 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_that->trim_endex); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4007, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_1 = Py_None;
  }
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 4008: 
 4009: 
+4010: cdef vint Memory_SetTrimEndex(Memory_* that, object trim_endex) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_SetTrimEndex(Memory_ *__pyx_v_that, PyObject *__pyx_v_trim_endex) {
  addr_t __pyx_v_trim_start_;
  addr_t __pyx_v_trim_endex_;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_SetTrimEndex", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_SetTrimEndex", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4011:     cdef:
 4012:         addr_t trim_start_
 4013:         addr_t trim_endex_
 4014: 
+4015:     if trim_endex is None:
  __pyx_t_1 = (__pyx_v_trim_endex == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+4016:         trim_endex_ = ADDR_MAX
    __pyx_v_trim_endex_ = ADDR_MAX;
+4017:         that.trim_endex_ = False
    __pyx_v_that->trim_endex_ = 0;
 4018:     else:
+4019:         trim_endex_ = <addr_t>trim_endex
  /*else*/ {
    __pyx_t_3 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_trim_endex); if (unlikely((__pyx_t_3 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4019, __pyx_L1_error)
    __pyx_v_trim_endex_ = ((addr_t)__pyx_t_3);
+4020:         that.trim_endex_ = True
    __pyx_v_that->trim_endex_ = 1;
  }
  __pyx_L3:;
 4021: 
+4022:     trim_start_ = that.trim_start
  __pyx_t_3 = __pyx_v_that->trim_start;
  __pyx_v_trim_start_ = __pyx_t_3;
+4023:     if that.trim_start_ and that.trim_endex_ and trim_endex_ < trim_start_:
  __pyx_t_1 = (__pyx_v_that->trim_start_ != 0);
  if (__pyx_t_1) {
  } else {
    __pyx_t_2 = __pyx_t_1;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_1 = (__pyx_v_that->trim_endex_ != 0);
  if (__pyx_t_1) {
  } else {
    __pyx_t_2 = __pyx_t_1;
    goto __pyx_L5_bool_binop_done;
  }
  __pyx_t_1 = ((__pyx_v_trim_endex_ < __pyx_v_trim_start_) != 0);
  __pyx_t_2 = __pyx_t_1;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+4024:         that.trim_start = trim_start_ = trim_endex_
    __pyx_v_that->trim_start = __pyx_v_trim_endex_;
    __pyx_v_trim_start_ = __pyx_v_trim_endex_;
 4025: 
+4026:     that.trim_endex = trim_endex_
  __pyx_v_that->trim_endex = __pyx_v_trim_endex_;
+4027:     if that.trim_endex_:
  __pyx_t_2 = (__pyx_v_that->trim_endex_ != 0);
  if (__pyx_t_2) {
/* … */
  }
+4028:         Memory_Crop_(that, trim_start_, trim_endex_, None)
    __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Crop_(__pyx_v_that, __pyx_v_trim_start_, __pyx_v_trim_endex_, ((PyObject*)Py_None)); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4028, __pyx_L1_error)
 4029: 
 4030: 
+4031: cdef object Memory_GetTrimSpan(const Memory_* that):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_GetTrimSpan(Memory_ const *__pyx_v_that) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_GetTrimSpan", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Memory_GetTrimSpan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4032:     return (that.trim_start if that.trim_start_ else None,
  __Pyx_XDECREF(__pyx_r);
  if ((__pyx_v_that->trim_start_ != 0)) {
    __pyx_t_2 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_that->trim_start); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4032, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_1 = Py_None;
  }
/* … */
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4032, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
+4033:             that.trim_endex if that.trim_endex_ else None)
  if ((__pyx_v_that->trim_endex_ != 0)) {
    __pyx_t_3 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_that->trim_endex); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4033, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __pyx_t_3;
    __pyx_t_3 = 0;
  } else {
    __Pyx_INCREF(Py_None);
    __pyx_t_2 = Py_None;
  }
 4034: 
 4035: 
+4036: cdef vint Memory_SetTrimSpan(Memory_* that, object span) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_SetTrimSpan(Memory_ *__pyx_v_that, PyObject *__pyx_v_span) {
  PyObject *__pyx_v_trim_start = NULL;
  PyObject *__pyx_v_trim_endex = NULL;
  addr_t __pyx_v_trim_start_;
  addr_t __pyx_v_trim_endex_;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_SetTrimSpan", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Memory_SetTrimSpan", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_trim_start);
  __Pyx_XDECREF(__pyx_v_trim_endex);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4037:     trim_start, trim_endex = span
  if ((likely(PyTuple_CheckExact(__pyx_v_span))) || (PyList_CheckExact(__pyx_v_span))) {
    PyObject* sequence = __pyx_v_span;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 4037, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4037, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4037, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
  } else {
    Py_ssize_t index = -1;
    __pyx_t_3 = PyObject_GetIter(__pyx_v_span); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4037, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = Py_TYPE(__pyx_t_3)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < 0) __PYX_ERR(0, 4037, __pyx_L1_error)
    __pyx_t_4 = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 4037, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_trim_start = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_trim_endex = __pyx_t_2;
  __pyx_t_2 = 0;
 4038: 
+4039:     if trim_start is None:
  __pyx_t_5 = (__pyx_v_trim_start == Py_None);
  __pyx_t_6 = (__pyx_t_5 != 0);
  if (__pyx_t_6) {
/* … */
    goto __pyx_L5;
  }
+4040:         trim_start_ = 0
    __pyx_v_trim_start_ = 0;
+4041:         that.trim_start_ = False
    __pyx_v_that->trim_start_ = 0;
 4042:     else:
+4043:         trim_start_ = <addr_t>trim_start
  /*else*/ {
    __pyx_t_7 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_trim_start); if (unlikely((__pyx_t_7 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4043, __pyx_L1_error)
    __pyx_v_trim_start_ = ((addr_t)__pyx_t_7);
+4044:         that.trim_start_ = True
    __pyx_v_that->trim_start_ = 1;
  }
  __pyx_L5:;
 4045: 
+4046:     if trim_endex is None:
  __pyx_t_6 = (__pyx_v_trim_endex == Py_None);
  __pyx_t_5 = (__pyx_t_6 != 0);
  if (__pyx_t_5) {
/* … */
    goto __pyx_L6;
  }
+4047:         trim_endex_ = ADDR_MAX
    __pyx_v_trim_endex_ = ADDR_MAX;
+4048:         that.trim_endex_ = False
    __pyx_v_that->trim_endex_ = 0;
 4049:     else:
+4050:         trim_endex_ = <addr_t>trim_endex
  /*else*/ {
    __pyx_t_7 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_trim_endex); if (unlikely((__pyx_t_7 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4050, __pyx_L1_error)
    __pyx_v_trim_endex_ = ((addr_t)__pyx_t_7);
+4051:         that.trim_endex_ = True
    __pyx_v_that->trim_endex_ = 1;
  }
  __pyx_L6:;
 4052: 
+4053:     if that.trim_start_ and that.trim_endex_ and trim_endex_ < trim_start_:
  __pyx_t_6 = (__pyx_v_that->trim_start_ != 0);
  if (__pyx_t_6) {
  } else {
    __pyx_t_5 = __pyx_t_6;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_6 = (__pyx_v_that->trim_endex_ != 0);
  if (__pyx_t_6) {
  } else {
    __pyx_t_5 = __pyx_t_6;
    goto __pyx_L8_bool_binop_done;
  }
  __pyx_t_6 = ((__pyx_v_trim_endex_ < __pyx_v_trim_start_) != 0);
  __pyx_t_5 = __pyx_t_6;
  __pyx_L8_bool_binop_done:;
  if (__pyx_t_5) {
/* … */
  }
+4054:         trim_endex_ = trim_start_
    __pyx_v_trim_endex_ = __pyx_v_trim_start_;
 4055: 
+4056:     that.trim_start = trim_start_
  __pyx_v_that->trim_start = __pyx_v_trim_start_;
+4057:     that.trim_endex = trim_endex_
  __pyx_v_that->trim_endex = __pyx_v_trim_endex_;
+4058:     if that.trim_start_ or that.trim_endex_:
  __pyx_t_6 = (__pyx_v_that->trim_start_ != 0);
  if (!__pyx_t_6) {
  } else {
    __pyx_t_5 = __pyx_t_6;
    goto __pyx_L12_bool_binop_done;
  }
  __pyx_t_6 = (__pyx_v_that->trim_endex_ != 0);
  __pyx_t_5 = __pyx_t_6;
  __pyx_L12_bool_binop_done:;
  if (__pyx_t_5) {
/* … */
  }
+4059:         Memory_Crop_(that, trim_start_, trim_endex_, None)
    __pyx_t_8 = __pyx_f_11cbytesparse_2_c_Memory_Crop_(__pyx_v_that, __pyx_v_trim_start_, __pyx_v_trim_endex_, ((PyObject*)Py_None)); if (unlikely(__pyx_t_8 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4059, __pyx_L1_error)
 4060: 
 4061: 
+4062: cdef addr_t Memory_Start(const Memory_* that) nogil:
static addr_t __pyx_f_11cbytesparse_2_c_Memory_Start(Memory_ const *__pyx_v_that) {
  Rack_ const *__pyx_v_blocks;
  addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 4063:     cdef:
 4064:         const Rack_* blocks
 4065: 
+4066:     if not that.trim_start_:
  __pyx_t_1 = ((!(__pyx_v_that->trim_start_ != 0)) != 0);
  if (__pyx_t_1) {
/* … */
  }
 4067:         # Return actual
+4068:         blocks = that.blocks
    __pyx_t_2 = __pyx_v_that->blocks;
    __pyx_v_blocks = __pyx_t_2;
+4069:         if Rack_Length(blocks):
    __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks) != 0);
    if (__pyx_t_1) {
/* … */
    }
+4070:             return Block_Start(Rack_First__(blocks))
      __pyx_r = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_f_11cbytesparse_2_c_Rack_First__(__pyx_v_blocks));
      goto __pyx_L0;
 4071:         else:
+4072:             return 0
    /*else*/ {
      __pyx_r = 0;
      goto __pyx_L0;
    }
 4073:     else:
+4074:         return that.trim_start
  /*else*/ {
    __pyx_r = __pyx_v_that->trim_start;
    goto __pyx_L0;
  }
 4075: 
 4076: 
+4077: cdef addr_t Memory_Endex(const Memory_* that) nogil:
static addr_t __pyx_f_11cbytesparse_2_c_Memory_Endex(Memory_ const *__pyx_v_that) {
  Rack_ const *__pyx_v_blocks;
  addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 4078:     cdef:
 4079:         const Rack_* blocks
 4080: 
+4081:     if not that.trim_endex_:
  __pyx_t_1 = ((!(__pyx_v_that->trim_endex_ != 0)) != 0);
  if (__pyx_t_1) {
/* … */
  }
 4082:         # Return actual
+4083:         blocks = that.blocks
    __pyx_t_2 = __pyx_v_that->blocks;
    __pyx_v_blocks = __pyx_t_2;
+4084:         if Rack_Length(blocks):
    __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks) != 0);
    if (__pyx_t_1) {
/* … */
    }
+4085:             return Block_Endex(Rack_Last__(blocks))
      __pyx_r = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_f_11cbytesparse_2_c_Rack_Last__(__pyx_v_blocks));
      goto __pyx_L0;
 4086:         else:
+4087:             return Memory_Start(that)
    /*else*/ {
      __pyx_r = __pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_v_that);
      goto __pyx_L0;
    }
 4088:     else:
+4089:         return that.trim_endex
  /*else*/ {
    __pyx_r = __pyx_v_that->trim_endex;
    goto __pyx_L0;
  }
 4090: 
 4091: 
+4092: cdef (addr_t, addr_t) Memory_Span(const Memory_* that) nogil:
static __pyx_ctuple_addr_t__and_addr_t __pyx_f_11cbytesparse_2_c_Memory_Span(Memory_ const *__pyx_v_that) {
  __pyx_ctuple_addr_t__and_addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+4093:     return Memory_Start(that), Memory_Endex(that)
  __pyx_t_1.f0 = __pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_v_that);
  __pyx_t_1.f1 = __pyx_f_11cbytesparse_2_c_Memory_Endex(__pyx_v_that);
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 4094: 
 4095: 
+4096: cdef object Memory_Endin(const Memory_* that):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_Endin(Memory_ const *__pyx_v_that) {
  Rack_ const *__pyx_v_blocks;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Endin", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Endin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4097:     cdef:
 4098:         const Rack_* blocks
 4099: 
+4100:     if not that.trim_endex_:
  __pyx_t_1 = ((!(__pyx_v_that->trim_endex_ != 0)) != 0);
  if (__pyx_t_1) {
/* … */
  }
 4101:         # Return actual
+4102:         blocks = that.blocks
    __pyx_t_2 = __pyx_v_that->blocks;
    __pyx_v_blocks = __pyx_t_2;
+4103:         if Rack_Length(blocks):
    __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks) != 0);
    if (__pyx_t_1) {
/* … */
    }
+4104:             return <object>Block_Endex(Rack_Last__(blocks)) - 1
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_3 = __Pyx_PyInt_From_uint_fast64_t(__pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_f_11cbytesparse_2_c_Rack_Last__(__pyx_v_blocks))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4104, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyInt_SubtractObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4104, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_r = __pyx_t_4;
      __pyx_t_4 = 0;
      goto __pyx_L0;
 4105:         else:
+4106:             return <object>Memory_Start(that) - 1
    /*else*/ {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_4 = __Pyx_PyInt_From_uint_fast64_t(__pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_v_that)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4106, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_3 = __Pyx_PyInt_SubtractObjC(__pyx_t_4, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4106, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_r = __pyx_t_3;
      __pyx_t_3 = 0;
      goto __pyx_L0;
    }
 4107:     else:
+4108:         return <object>that.trim_endex - 1
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_that->trim_endex); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4108, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyInt_SubtractObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4108, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
  }
 4109: 
 4110: 
+4111: cdef addr_t Memory_ContentStart(const Memory_* that) nogil:
static addr_t __pyx_f_11cbytesparse_2_c_Memory_ContentStart(Memory_ const *__pyx_v_that) {
  Rack_ const *__pyx_v_blocks;
  addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 4112:     cdef:
+4113:         const Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
 4114: 
+4115:     if Rack_Length(blocks):
  __pyx_t_2 = (__pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks) != 0);
  if (__pyx_t_2) {
/* … */
  }
+4116:         return Block_Start(Rack_First__(blocks))
    __pyx_r = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_f_11cbytesparse_2_c_Rack_First__(__pyx_v_blocks));
    goto __pyx_L0;
+4117:     elif not that.trim_start_:
  __pyx_t_2 = ((!(__pyx_v_that->trim_start_ != 0)) != 0);
  if (__pyx_t_2) {
/* … */
  }
+4118:         return 0
    __pyx_r = 0;
    goto __pyx_L0;
 4119:     else:
+4120:         return that.trim_start
  /*else*/ {
    __pyx_r = __pyx_v_that->trim_start;
    goto __pyx_L0;
  }
 4121: 
 4122: 
+4123: cdef addr_t Memory_ContentEndex(const Memory_* that) nogil:
static addr_t __pyx_f_11cbytesparse_2_c_Memory_ContentEndex(Memory_ const *__pyx_v_that) {
  Rack_ const *__pyx_v_blocks;
  addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 4124:     cdef:
+4125:         const Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
 4126: 
+4127:     if Rack_Length(blocks):
  __pyx_t_2 = (__pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks) != 0);
  if (__pyx_t_2) {
/* … */
  }
+4128:         return Block_Endex(Rack_Last__(blocks))
    __pyx_r = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_f_11cbytesparse_2_c_Rack_Last__(__pyx_v_blocks));
    goto __pyx_L0;
+4129:     elif not that.trim_start_:
  __pyx_t_2 = ((!(__pyx_v_that->trim_start_ != 0)) != 0);
  if (__pyx_t_2) {
/* … */
  }
+4130:         return 0  # default to start
    __pyx_r = 0;
    goto __pyx_L0;
 4131:     else:
+4132:         return that.trim_start  # default to start
  /*else*/ {
    __pyx_r = __pyx_v_that->trim_start;
    goto __pyx_L0;
  }
 4133: 
 4134: 
+4135: cdef (addr_t, addr_t) Memory_ContentSpan(const Memory_* that) nogil:
static __pyx_ctuple_addr_t__and_addr_t __pyx_f_11cbytesparse_2_c_Memory_ContentSpan(Memory_ const *__pyx_v_that) {
  __pyx_ctuple_addr_t__and_addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+4136:     return Memory_ContentStart(that), Memory_ContentEndex(that)
  __pyx_t_1.f0 = __pyx_f_11cbytesparse_2_c_Memory_ContentStart(__pyx_v_that);
  __pyx_t_1.f1 = __pyx_f_11cbytesparse_2_c_Memory_ContentEndex(__pyx_v_that);
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 4137: 
 4138: 
+4139: cdef object Memory_ContentEndin(const Memory_* that):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_ContentEndin(Memory_ const *__pyx_v_that) {
  Rack_ const *__pyx_v_blocks;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_ContentEndin", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cbytesparse._c.Memory_ContentEndin", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4140:     cdef:
+4141:         const Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
 4142: 
+4143:     if Rack_Length(blocks):
  __pyx_t_2 = (__pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks) != 0);
  if (__pyx_t_2) {
/* … */
  }
+4144:         return <object>Block_Endex(Rack_Last__(blocks)) - 1
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyInt_From_uint_fast64_t(__pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_f_11cbytesparse_2_c_Rack_Last__(__pyx_v_blocks))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4144, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyInt_SubtractObjC(__pyx_t_3, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4144, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
+4145:     elif not that.trim_start_:  # default to start-1
  __pyx_t_2 = ((!(__pyx_v_that->trim_start_ != 0)) != 0);
  if (__pyx_t_2) {
/* … */
  }
+4146:         return -1
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_int_neg_1);
    __pyx_r = __pyx_int_neg_1;
    goto __pyx_L0;
 4147:     else:
+4148:         return <object>that.trim_start - 1  # default to start-1
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_that->trim_start); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4148, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyInt_SubtractObjC(__pyx_t_4, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4148, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }
 4149: 
 4150: 
+4151: cdef addr_t Memory_ContentSize(const Memory_* that) nogil:
static addr_t __pyx_f_11cbytesparse_2_c_Memory_ContentSize(Memory_ const *__pyx_v_that) {
  Rack_ const *__pyx_v_blocks;
  size_t __pyx_v_block_index;
  Block_ const *__pyx_v_block;
  addr_t __pyx_v_content_size;
  addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 4152:     cdef:
+4153:         const Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
 4154:         size_t block_index
 4155:         const Block_* block
+4156:         addr_t content_size = 0
  __pyx_v_content_size = 0;
 4157: 
+4158:     for block_index in range(Rack_Length(blocks)):
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
  __pyx_t_3 = __pyx_t_2;
  for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
    __pyx_v_block_index = __pyx_t_4;
+4159:         block = Rack_Get__(blocks, block_index)
    __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+4160:         content_size += Block_Length(block)
    __pyx_v_content_size = (__pyx_v_content_size + __pyx_f_11cbytesparse_2_c_Block_Length(__pyx_v_block));
  }
+4161:     return content_size
  __pyx_r = __pyx_v_content_size;
  goto __pyx_L0;
 4162: 
 4163: 
+4164: cdef size_t Memory_ContentParts(const Memory_* that) nogil:
static size_t __pyx_f_11cbytesparse_2_c_Memory_ContentParts(Memory_ const *__pyx_v_that) {
  size_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+4165:     return Rack_Length(that.blocks)
  __pyx_r = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_that->blocks);
  goto __pyx_L0;
 4166: 
 4167: 
+4168: cdef vint Memory_Validate(const Memory_* that) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Validate(Memory_ const *__pyx_v_that) {
  Rack_ const *__pyx_v_blocks;
  size_t __pyx_v_block_count;
  addr_t __pyx_v_start;
  addr_t __pyx_v_endex;
  addr_t __pyx_v_previous_endex;
  size_t __pyx_v_block_index;
  Block_ const *__pyx_v_block;
  addr_t __pyx_v_block_start;
  addr_t __pyx_v_block_endex;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Validate", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Validate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4169:     cdef:
+4170:         const Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
+4171:         size_t block_count = Rack_Length(blocks)
  __pyx_v_block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
 4172: 
 4173:         addr_t start
 4174:         addr_t endex
+4175:         addr_t previous_endex = 0
  __pyx_v_previous_endex = 0;
 4176: 
 4177:         size_t block_index
 4178:         const Block_* block
 4179:         addr_t block_start
 4180:         addr_t block_endex
 4181: 
+4182:     start, endex = Memory_Bound(that, None, None)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_Bound(__pyx_v_that, Py_None, Py_None); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4182, __pyx_L1_error)
  __pyx_t_3 = __pyx_t_2.f0;
  __pyx_t_4 = __pyx_t_2.f1;
  __pyx_v_start = __pyx_t_3;
  __pyx_v_endex = __pyx_t_4;
+4183:     block_count = Rack_Length(blocks)
  __pyx_v_block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
 4184: 
+4185:     if block_count:
  __pyx_t_5 = (__pyx_v_block_count != 0);
  if (__pyx_t_5) {
/* … */
    goto __pyx_L3;
  }
+4186:         if endex <= start:
    __pyx_t_5 = ((__pyx_v_endex <= __pyx_v_start) != 0);
    if (unlikely(__pyx_t_5)) {
/* … */
    }
+4187:             raise ValueError('invalid bounds')
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4187, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_Raise(__pyx_t_6, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __PYX_ERR(0, 4187, __pyx_L1_error)
/* … */
  __pyx_tuple__21 = PyTuple_Pack(1, __pyx_kp_u_invalid_bounds); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 4187, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__21);
  __Pyx_GIVEREF(__pyx_tuple__21);
 4188: 
+4189:         for block_index in range(block_count):
    __pyx_t_7 = __pyx_v_block_count;
    __pyx_t_8 = __pyx_t_7;
    for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
      __pyx_v_block_index = __pyx_t_9;
+4190:             block = Rack_Get__(blocks, block_index)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+4191:             block_start = Block_Start(block)
      __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+4192:             block_endex = Block_Endex(block)
      __pyx_v_block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
 4193: 
+4194:             if block_index:  # skip first
      __pyx_t_5 = (__pyx_v_block_index != 0);
      if (__pyx_t_5) {
/* … */
      }
+4195:                 if block_start <= previous_endex:
        __pyx_t_5 = ((__pyx_v_block_start <= __pyx_v_previous_endex) != 0);
        if (unlikely(__pyx_t_5)) {
/* … */
        }
+4196:                     raise ValueError('invalid block interleaving')
          __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4196, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_6);
          __Pyx_Raise(__pyx_t_6, 0, 0, 0);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __PYX_ERR(0, 4196, __pyx_L1_error)
/* … */
  __pyx_tuple__22 = PyTuple_Pack(1, __pyx_kp_u_invalid_block_interleaving); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 4196, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__22);
  __Pyx_GIVEREF(__pyx_tuple__22);
 4197: 
+4198:             if block_endex <= block_start:
      __pyx_t_5 = ((__pyx_v_block_endex <= __pyx_v_block_start) != 0);
      if (unlikely(__pyx_t_5)) {
/* … */
      }
+4199:                 raise ValueError('invalid block data size')
        __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4199, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_Raise(__pyx_t_6, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __PYX_ERR(0, 4199, __pyx_L1_error)
 4200: 
+4201:             if block_start < start or endex < block_endex:
      __pyx_t_10 = ((__pyx_v_block_start < __pyx_v_start) != 0);
      if (!__pyx_t_10) {
      } else {
        __pyx_t_5 = __pyx_t_10;
        goto __pyx_L11_bool_binop_done;
      }
      __pyx_t_10 = ((__pyx_v_endex < __pyx_v_block_endex) != 0);
      __pyx_t_5 = __pyx_t_10;
      __pyx_L11_bool_binop_done:;
      if (unlikely(__pyx_t_5)) {
/* … */
      }
+4202:                 raise ValueError('invalid block bounds')
        __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4202, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_Raise(__pyx_t_6, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __PYX_ERR(0, 4202, __pyx_L1_error)
/* … */
  __pyx_tuple__23 = PyTuple_Pack(1, __pyx_kp_u_invalid_block_bounds); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(0, 4202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__23);
  __Pyx_GIVEREF(__pyx_tuple__23);
 4203: 
+4204:             previous_endex = block_endex
      __pyx_v_previous_endex = __pyx_v_block_endex;
    }
 4205: 
 4206:     else:
+4207:         if endex < start:
  /*else*/ {
    __pyx_t_5 = ((__pyx_v_endex < __pyx_v_start) != 0);
    if (unlikely(__pyx_t_5)) {
/* … */
    }
  }
  __pyx_L3:;
+4208:             raise ValueError('invalid bounds')
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 4208, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_Raise(__pyx_t_6, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __PYX_ERR(0, 4208, __pyx_L1_error)
 4209: 
 4210: 
+4211: cdef (addr_t, addr_t) Memory_Bound_(const Memory_* that, addr_t start, addr_t endex,
static __pyx_ctuple_addr_t__and_addr_t __pyx_f_11cbytesparse_2_c_Memory_Bound_(Memory_ const *__pyx_v_that, addr_t __pyx_v_start, addr_t __pyx_v_endex, int __pyx_v_start_, int __pyx_v_endex_) {
  addr_t __pyx_v_trim_start;
  addr_t __pyx_v_trim_endex;
  __pyx_ctuple_addr_t__and_addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
 4212:                                     bint start_, bint endex_) nogil:
 4213:     cdef:
 4214:         addr_t trim_start
 4215:         addr_t trim_endex
 4216: 
+4217:     trim_start = that.trim_start
  __pyx_t_1 = __pyx_v_that->trim_start;
  __pyx_v_trim_start = __pyx_t_1;
+4218:     trim_endex = that.trim_endex
  __pyx_t_1 = __pyx_v_that->trim_endex;
  __pyx_v_trim_endex = __pyx_t_1;
 4219: 
+4220:     if not start_:
  __pyx_t_2 = ((!(__pyx_v_start_ != 0)) != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+4221:         if not that.trim_start_:
    __pyx_t_2 = ((!(__pyx_v_that->trim_start_ != 0)) != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L4;
    }
+4222:             if Rack_Length(that.blocks):
      __pyx_t_2 = (__pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_that->blocks) != 0);
      if (__pyx_t_2) {
/* … */
        goto __pyx_L5;
      }
+4223:                 start = Block_Start(Rack_First__(that.blocks))
        __pyx_v_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_f_11cbytesparse_2_c_Rack_First__(__pyx_v_that->blocks));
 4224:             else:
+4225:                 start = 0
      /*else*/ {
        __pyx_v_start = 0;
      }
      __pyx_L5:;
 4226:         else:
+4227:             start = trim_start
    /*else*/ {
      __pyx_v_start = __pyx_v_trim_start;
    }
    __pyx_L4:;
 4228:     else:
+4229:         if that.trim_start_:
  /*else*/ {
    __pyx_t_2 = (__pyx_v_that->trim_start_ != 0);
    if (__pyx_t_2) {
/* … */
    }
+4230:             if start < trim_start:
      __pyx_t_2 = ((__pyx_v_start < __pyx_v_trim_start) != 0);
      if (__pyx_t_2) {
/* … */
      }
+4231:                 start = trim_start
        __pyx_v_start = __pyx_v_trim_start;
+4232:         if endex_:
    __pyx_t_2 = (__pyx_v_endex_ != 0);
    if (__pyx_t_2) {
/* … */
    }
  }
  __pyx_L3:;
+4233:             if endex < start:
      __pyx_t_2 = ((__pyx_v_endex < __pyx_v_start) != 0);
      if (__pyx_t_2) {
/* … */
      }
+4234:                 endex = start
        __pyx_v_endex = __pyx_v_start;
 4235: 
+4236:     if not endex_:
  __pyx_t_2 = ((!(__pyx_v_endex_ != 0)) != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L10;
  }
+4237:         if not that.trim_endex_:
    __pyx_t_2 = ((!(__pyx_v_that->trim_endex_ != 0)) != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L11;
    }
+4238:             if Rack_Length(that.blocks):
      __pyx_t_2 = (__pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_that->blocks) != 0);
      if (__pyx_t_2) {
/* … */
        goto __pyx_L12;
      }
+4239:                 endex = Block_Endex(Rack_Last__(that.blocks))
        __pyx_v_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_f_11cbytesparse_2_c_Rack_Last__(__pyx_v_that->blocks));
 4240:             else:
+4241:                 endex = start
      /*else*/ {
        __pyx_v_endex = __pyx_v_start;
      }
      __pyx_L12:;
 4242:         else:
+4243:             endex = trim_endex
    /*else*/ {
      __pyx_v_endex = __pyx_v_trim_endex;
    }
    __pyx_L11:;
 4244:     else:
+4245:         if that.trim_endex_:
  /*else*/ {
    __pyx_t_2 = (__pyx_v_that->trim_endex_ != 0);
    if (__pyx_t_2) {
/* … */
    }
+4246:             if endex > trim_endex:
      __pyx_t_2 = ((__pyx_v_endex > __pyx_v_trim_endex) != 0);
      if (__pyx_t_2) {
/* … */
      }
+4247:                 endex = trim_endex
        __pyx_v_endex = __pyx_v_trim_endex;
+4248:         if start > endex:
    __pyx_t_2 = ((__pyx_v_start > __pyx_v_endex) != 0);
    if (__pyx_t_2) {
/* … */
    }
  }
  __pyx_L10:;
+4249:             start = endex
      __pyx_v_start = __pyx_v_endex;
 4250: 
+4251:     return start, endex
  __pyx_t_3.f0 = __pyx_v_start;
  __pyx_t_3.f1 = __pyx_v_endex;
  __pyx_r = __pyx_t_3;
  goto __pyx_L0;
 4252: 
 4253: 
+4254: cdef (addr_t, addr_t) Memory_Bound(const Memory_* that, object start, object endex) except *:
static __pyx_ctuple_addr_t__and_addr_t __pyx_f_11cbytesparse_2_c_Memory_Bound(Memory_ const *__pyx_v_that, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  int __pyx_v_start__;
  int __pyx_v_endex__;
  addr_t __pyx_v_start_;
  addr_t __pyx_v_endex_;
  __pyx_ctuple_addr_t__and_addr_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Bound", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_Bound", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_pretend_to_initialize(&__pyx_r);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4255:     cdef:
+4256:         bint start__ = start is not None
  __pyx_t_1 = (__pyx_v_start != Py_None);
  __pyx_v_start__ = __pyx_t_1;
+4257:         bint endex__ = endex is not None
  __pyx_t_1 = (__pyx_v_endex != Py_None);
  __pyx_v_endex__ = __pyx_t_1;
+4258:         addr_t start_ = <addr_t>start if start__ else 0
  if ((__pyx_v_start__ != 0)) {
    __pyx_t_3 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_start); if (unlikely((__pyx_t_3 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4258, __pyx_L1_error)
    __pyx_t_2 = ((addr_t)__pyx_t_3);
  } else {
    __pyx_t_2 = 0;
  }
  __pyx_v_start_ = __pyx_t_2;
+4259:         addr_t endex_ = <addr_t>endex if endex__ else start_
  if ((__pyx_v_endex__ != 0)) {
    __pyx_t_3 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_endex); if (unlikely((__pyx_t_3 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4259, __pyx_L1_error)
    __pyx_t_2 = ((addr_t)__pyx_t_3);
  } else {
    __pyx_t_2 = __pyx_v_start_;
  }
  __pyx_v_endex_ = __pyx_t_2;
 4260: 
+4261:     return Memory_Bound_(that, start_, endex_, start__, endex__)
  __pyx_r = __pyx_f_11cbytesparse_2_c_Memory_Bound_(__pyx_v_that, __pyx_v_start_, __pyx_v_endex_, __pyx_v_start__, __pyx_v_endex__);
  goto __pyx_L0;
 4262: 
 4263: 
+4264: cdef int Memory_Peek_(const Memory_* that, addr_t address) except -2:
static int __pyx_f_11cbytesparse_2_c_Memory_Peek_(Memory_ const *__pyx_v_that, addr_t __pyx_v_address) {
  addr_t __pyx_v_address_;
  Py_ssize_t __pyx_v_block_index;
  Block_ const *__pyx_v_block;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Peek_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_Peek_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4265:     cdef:
+4266:         addr_t address_ = address
  __pyx_v_address_ = __pyx_v_address;
 4267:         ssize_t block_index
 4268:         const Block_* block
 4269: 
+4270:     block_index = Rack_IndexAt(that.blocks, address_)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_IndexAt(__pyx_v_that->blocks, __pyx_v_address_); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 4270, __pyx_L1_error)
  __pyx_v_block_index = __pyx_t_1;
+4271:     if block_index < 0:
  __pyx_t_2 = ((__pyx_v_block_index < 0) != 0);
  if (__pyx_t_2) {
/* … */
  }
+4272:         return -1
    __pyx_r = -1;
    goto __pyx_L0;
 4273:     else:
+4274:         block = Rack_Get__(that.blocks, <size_t>block_index)
  /*else*/ {
    __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_that->blocks, ((size_t)__pyx_v_block_index));
+4275:         return Block_Get__(block, address_ - Block_Start(block))
    __pyx_r = __pyx_f_11cbytesparse_2_c_Block_Get__(__pyx_v_block, (__pyx_v_address_ - __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block)));
    goto __pyx_L0;
  }
 4276: 
 4277: 
+4278: cdef object Memory_Peek(const Memory_* that, object address):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_Peek(Memory_ const *__pyx_v_that, PyObject *__pyx_v_address) {
  int __pyx_v_value;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Peek", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Peek", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4279:     cdef:
 4280:         int value
 4281: 
+4282:     value = Memory_Peek_(that, <addr_t>address)
  __pyx_t_1 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_address); if (unlikely((__pyx_t_1 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4282, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_Peek_(__pyx_v_that, ((addr_t)__pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-2))) __PYX_ERR(0, 4282, __pyx_L1_error)
  __pyx_v_value = __pyx_t_2;
+4283:     return None if value < 0 else value
  __Pyx_XDECREF(__pyx_r);
  if (((__pyx_v_value < 0) != 0)) {
    __Pyx_INCREF(Py_None);
    __pyx_t_3 = Py_None;
  } else {
    __pyx_t_4 = __Pyx_PyInt_From_int(__pyx_v_value); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 4284: 
 4285: 
+4286: cdef int Memory_PokeNone_(Memory_* that, addr_t address) except -2:
static int __pyx_f_11cbytesparse_2_c_Memory_PokeNone_(Memory_ *__pyx_v_that, addr_t __pyx_v_address) {
  int __pyx_v_value;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_PokeNone_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_PokeNone_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4287:     cdef:
 4288:         int value
 4289: 
 4290:     # Standard clear method
+4291:     value = Memory_Peek_(that, address)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Peek_(__pyx_v_that, __pyx_v_address); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 4291, __pyx_L1_error)
  __pyx_v_value = __pyx_t_1;
+4292:     Memory_Erase__(that, address, address + 1, False, False)  # clear
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_address, (__pyx_v_address + 1), 0, 0); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4292, __pyx_L1_error)
+4293:     return value
  __pyx_r = __pyx_v_value;
  goto __pyx_L0;
 4294: 
 4295: 
+4296: cdef vint Memory_PokeNone__(Memory_* that, addr_t address) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_PokeNone__(Memory_ *__pyx_v_that, addr_t __pyx_v_address) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_PokeNone__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_PokeNone__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4297:     # Standard clear method
+4298:     Memory_Erase__(that, address, address + 1, False, False)  # clear
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_address, (__pyx_v_address + 1), 0, 0); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4298, __pyx_L1_error)
 4299: 
 4300: 
+4301: cdef int Memory_Poke_(Memory_* that, addr_t address, byte_t item) except -2:
static int __pyx_f_11cbytesparse_2_c_Memory_Poke_(Memory_ *__pyx_v_that, addr_t __pyx_v_address, byte_t __pyx_v_item) {
  Rack_ *__pyx_v_blocks;
  size_t __pyx_v_block_count;
  size_t __pyx_v_block_index;
  Block_ *__pyx_v_block;
  addr_t __pyx_v_block_start;
  addr_t __pyx_v_block_endex;
  Block_ *__pyx_v_block2;
  addr_t __pyx_v_block_start2;
  int __pyx_v_value;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Poke_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_Poke_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4302:     cdef:
+4303:         Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
+4304:         size_t block_count = Rack_Length(blocks)
  __pyx_v_block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
 4305:         size_t block_index
 4306:         Block_* block
 4307:         addr_t block_start
 4308:         addr_t block_endex
 4309:         Block_* block2
 4310:         addr_t block_start2
 4311:         int value
 4312: 
+4313:     block_index = Rack_IndexEndex(blocks, address) - 1
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_IndexEndex(__pyx_v_blocks, __pyx_v_address); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 4313, __pyx_L1_error)
  __pyx_v_block_index = (__pyx_t_2 - 1);
 4314: 
+4315:     if block_index < block_count:
  __pyx_t_3 = ((__pyx_v_block_index < __pyx_v_block_count) != 0);
  if (__pyx_t_3) {
/* … */
  }
+4316:         block = Rack_Get__(blocks, block_index)
    __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+4317:         block_start = Block_Start(block)
    __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+4318:         block_endex = Block_Endex(block)
    __pyx_v_block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
 4319: 
+4320:         if block_start <= address < block_endex:
    __pyx_t_3 = (__pyx_v_block_start <= __pyx_v_address);
    if (__pyx_t_3) {
      __pyx_t_3 = (__pyx_v_address < __pyx_v_block_endex);
    }
    __pyx_t_4 = (__pyx_t_3 != 0);
    if (__pyx_t_4) {
/* … */
    }
 4321:             # Address within existing block, update directly
+4322:             address -= block_start
      __pyx_v_address = (__pyx_v_address - __pyx_v_block_start);
+4323:             value = Block_Get__(block, <size_t>address)
      __pyx_v_value = __pyx_f_11cbytesparse_2_c_Block_Get__(__pyx_v_block, ((size_t)__pyx_v_address));
+4324:             Block_Set__(block, <size_t>address, item)
      (void)(__pyx_f_11cbytesparse_2_c_Block_Set__(__pyx_v_block, ((size_t)__pyx_v_address), __pyx_v_item));
+4325:             return value
      __pyx_r = __pyx_v_value;
      goto __pyx_L0;
 4326: 
+4327:         elif address == block_endex:
    __pyx_t_4 = ((__pyx_v_address == __pyx_v_block_endex) != 0);
    if (__pyx_t_4) {
/* … */
    }
 4328:             # Address just after the end of the block, append
+4329:             block = Block_Append(block, item)
      __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Block_Append(__pyx_v_block, __pyx_v_item); if (unlikely(__pyx_t_5 == ((Block_ *)NULL))) __PYX_ERR(0, 4329, __pyx_L1_error)
      __pyx_v_block = __pyx_t_5;
+4330:             Rack_Set__(blocks, block_index, block)  # update pointer
      (void)(__pyx_f_11cbytesparse_2_c_Rack_Set__(__pyx_v_blocks, __pyx_v_block_index, __pyx_v_block));
 4331: 
+4332:             block_index += 1
      __pyx_v_block_index = (__pyx_v_block_index + 1);
+4333:             if block_index < block_count:
      __pyx_t_4 = ((__pyx_v_block_index < __pyx_v_block_count) != 0);
      if (__pyx_t_4) {
/* … */
      }
+4334:                 block2 = Rack_Get__(blocks, block_index)
        __pyx_v_block2 = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+4335:                 block_start2 = Block_Start(block2)
        __pyx_v_block_start2 = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block2);
 4336: 
+4337:                 if block_endex + 1 == block_start2:
        __pyx_t_4 = (((__pyx_v_block_endex + 1) == __pyx_v_block_start2) != 0);
        if (__pyx_t_4) {
/* … */
        }
 4338:                     # Merge with the following contiguous block
+4339:                     block = Block_Extend(block, block2)
          __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Block_Extend(__pyx_v_block, __pyx_v_block2); if (unlikely(__pyx_t_5 == ((Block_ *)NULL))) __PYX_ERR(0, 4339, __pyx_L1_error)
          __pyx_v_block = __pyx_t_5;
+4340:                     Rack_Set__(blocks, block_index - 1, block)  # update pointer
          (void)(__pyx_f_11cbytesparse_2_c_Rack_Set__(__pyx_v_blocks, (__pyx_v_block_index - 1), __pyx_v_block));
+4341:                     that.blocks = blocks = Rack_Pop_(blocks, block_index, NULL)
          __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Pop_(__pyx_v_blocks, __pyx_v_block_index, NULL); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 4341, __pyx_L1_error)
          __pyx_v_that->blocks = __pyx_t_1;
          __pyx_v_blocks = __pyx_t_1;
+4342:             return -1
      __pyx_r = -1;
      goto __pyx_L0;
 4343: 
 4344:         else:
+4345:             block_index += 1
    /*else*/ {
      __pyx_v_block_index = (__pyx_v_block_index + 1);
+4346:             if block_index < block_count:
      __pyx_t_4 = ((__pyx_v_block_index < __pyx_v_block_count) != 0);
      if (__pyx_t_4) {
/* … */
      }
    }
+4347:                 block = Rack_Get__(blocks, block_index)
        __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+4348:                 block_start = Block_Start(block)
        __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
 4349: 
+4350:                 if address + 1 == block_start:
        __pyx_t_4 = (((__pyx_v_address + 1) == __pyx_v_block_start) != 0);
        if (__pyx_t_4) {
/* … */
        }
 4351:                     # Prepend to the next block
+4352:                     block = Block_AppendLeft(block, item)
          __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Block_AppendLeft(__pyx_v_block, __pyx_v_item); if (unlikely(__pyx_t_5 == ((Block_ *)NULL))) __PYX_ERR(0, 4352, __pyx_L1_error)
          __pyx_v_block = __pyx_t_5;
+4353:                     Rack_Set__(blocks, block_index, block)  # update pointer
          (void)(__pyx_f_11cbytesparse_2_c_Rack_Set__(__pyx_v_blocks, __pyx_v_block_index, __pyx_v_block));
+4354:                     block.address -= 1  # update address
          __pyx_v_block->address = (__pyx_v_block->address - 1);
+4355:                     return -1
          __pyx_r = -1;
          goto __pyx_L0;
 4356: 
 4357:     # There is no faster way than the standard block writing method
+4358:     Memory_Erase__(that, address, address + 1, False, True)  # insert
  __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_address, (__pyx_v_address + 1), 0, 1); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4358, __pyx_L1_error)
+4359:     Memory_Insert__(that, address, 1, &item, False)
  __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_Insert__(__pyx_v_that, __pyx_v_address, 1, (&__pyx_v_item), 0); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4359, __pyx_L1_error)
 4360: 
+4361:     Memory_Crop_(that, that.trim_start, that.trim_endex, None)
  __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_Crop_(__pyx_v_that, __pyx_v_that->trim_start, __pyx_v_that->trim_endex, ((PyObject*)Py_None)); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4361, __pyx_L1_error)
+4362:     return -1
  __pyx_r = -1;
  goto __pyx_L0;
 4363: 
 4364: 
+4365: cdef object Memory_Poke(Memory_* that, object address, object item):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_Poke(Memory_ *__pyx_v_that, PyObject *__pyx_v_address, PyObject *__pyx_v_item) {
  addr_t __pyx_v_address_;
  int __pyx_v_value;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Poke", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Poke", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4366:     cdef:
+4367:         addr_t address_ = <addr_t>address
  __pyx_t_1 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_address); if (unlikely((__pyx_t_1 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4367, __pyx_L1_error)
  __pyx_v_address_ = ((addr_t)__pyx_t_1);
 4368:         int value
 4369: 
+4370:     if item is None:
  __pyx_t_2 = (__pyx_v_item == Py_None);
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L3;
  }
+4371:         value = Memory_PokeNone_(that, address_)
    __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_PokeNone_(__pyx_v_that, __pyx_v_address_); if (unlikely(__pyx_t_4 == ((int)-2))) __PYX_ERR(0, 4371, __pyx_L1_error)
    __pyx_v_value = __pyx_t_4;
 4372:     else:
+4373:         if isinstance(item, int):
  /*else*/ {
    __pyx_t_3 = PyInt_Check(__pyx_v_item); 
    __pyx_t_2 = (__pyx_t_3 != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L4;
    }
+4374:             value = Memory_Poke_(that, address_, <byte_t>item)
      __pyx_t_5 = __Pyx_PyInt_As_byte_t(__pyx_v_item); if (unlikely((__pyx_t_5 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4374, __pyx_L1_error)
      __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Poke_(__pyx_v_that, __pyx_v_address_, ((byte_t)__pyx_t_5)); if (unlikely(__pyx_t_4 == ((int)-2))) __PYX_ERR(0, 4374, __pyx_L1_error)
      __pyx_v_value = __pyx_t_4;
 4375:         else:
+4376:             if len(item) != 1:
    /*else*/ {
      __pyx_t_6 = PyObject_Length(__pyx_v_item); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(0, 4376, __pyx_L1_error)
      __pyx_t_2 = ((__pyx_t_6 != 1) != 0);
      if (unlikely(__pyx_t_2)) {
/* … */
      }
+4377:                 raise ValueError('expecting single item')
        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4377, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_Raise(__pyx_t_7, 0, 0, 0);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __PYX_ERR(0, 4377, __pyx_L1_error)
+4378:             value = Memory_Poke_(that, address_, <byte_t>item[0])
      __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_item, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 4378, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_5 = __Pyx_PyInt_As_byte_t(__pyx_t_7); if (unlikely((__pyx_t_5 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4378, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Poke_(__pyx_v_that, __pyx_v_address_, ((byte_t)__pyx_t_5)); if (unlikely(__pyx_t_4 == ((int)-2))) __PYX_ERR(0, 4378, __pyx_L1_error)
      __pyx_v_value = __pyx_t_4;
    }
    __pyx_L4:;
  }
  __pyx_L3:;
 4379: 
+4380:     return None if value < 0 else value
  __Pyx_XDECREF(__pyx_r);
  if (((__pyx_v_value < 0) != 0)) {
    __Pyx_INCREF(Py_None);
    __pyx_t_7 = Py_None;
  } else {
    __pyx_t_8 = __Pyx_PyInt_From_int(__pyx_v_value); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 4380, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_7 = __pyx_t_8;
    __pyx_t_8 = 0;
  }
  __pyx_r = __pyx_t_7;
  __pyx_t_7 = 0;
  goto __pyx_L0;
 4381: 
 4382: 
+4383: cdef Memory_* Memory_Extract__(const Memory_* that, addr_t start, addr_t endex,
static Memory_ *__pyx_f_11cbytesparse_2_c_Memory_Extract__(Memory_ const *__pyx_v_that, addr_t __pyx_v_start, addr_t __pyx_v_endex, size_t __pyx_v_pattern_size, byte_t const *__pyx_v_pattern_ptr, saddr_t __pyx_v_step, int __pyx_v_bound) {
  Rack_ const *__pyx_v_blocks1;
  size_t __pyx_v_block_count;
  size_t __pyx_v_block_index;
  size_t __pyx_v_block_index_start;
  size_t __pyx_v_block_index_endex;
  Memory_ *__pyx_v_memory;
  Rack_ *__pyx_v_blocks2;
  Block_ *__pyx_v_block2;
  addr_t __pyx_v_offset;
  Block_ *__pyx_v_pattern;
  int __pyx_v_value;
  CYTHON_UNUSED saddr_t __pyx_v_skip;
  Rover_ *__pyx_v_rover;
  Block_ *__pyx_v_block1;
  Memory_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Extract__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Extract__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4384:                                size_t pattern_size, const byte_t* pattern_ptr,
 4385:                                saddr_t step, bint bound) except NULL:
 4386:     cdef:
+4387:         const Rack_* blocks1 = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks1 = __pyx_t_1;
+4388:         size_t block_count = Rack_Length(blocks1)
  __pyx_v_block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks1);
 4389:         size_t block_index
 4390:         size_t block_index_start
 4391:         size_t block_index_endex
+4392:         Memory_* memory = Memory_Alloc()
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_Alloc(); if (unlikely(__pyx_t_2 == ((Memory_ *)NULL))) __PYX_ERR(0, 4392, __pyx_L1_error)
  __pyx_v_memory = __pyx_t_2;
 4393:         Rack_* blocks2
 4394:         Block_* block2
 4395:         addr_t offset
+4396:         Block_* pattern = NULL
  __pyx_v_pattern = NULL;
 4397:         int value
 4398:         saddr_t skip
+4399:         Rover_* rover = NULL
  __pyx_v_rover = NULL;
 4400: 
+4401:     if step == 1:
  __pyx_t_3 = ((__pyx_v_step == 1) != 0);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L3;
  }
+4402:         if start < endex and block_count:
    __pyx_t_4 = ((__pyx_v_start < __pyx_v_endex) != 0);
    if (__pyx_t_4) {
    } else {
      __pyx_t_3 = __pyx_t_4;
      goto __pyx_L5_bool_binop_done;
    }
    __pyx_t_4 = (__pyx_v_block_count != 0);
    __pyx_t_3 = __pyx_t_4;
    __pyx_L5_bool_binop_done:;
    if (__pyx_t_3) {
/* … */
      goto __pyx_L4;
    }
+4403:             block_index_start = Rack_IndexStart(blocks1, start)
      __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Rack_IndexStart(__pyx_v_blocks1, __pyx_v_start); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 4403, __pyx_L1_error)
      __pyx_v_block_index_start = __pyx_t_5;
+4404:             block_index_endex = Rack_IndexEndex(blocks1, endex)
      __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Rack_IndexEndex(__pyx_v_blocks1, __pyx_v_endex); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 4404, __pyx_L1_error)
      __pyx_v_block_index_endex = __pyx_t_5;
 4405:         else:
+4406:             block_index_start = 0
    /*else*/ {
      __pyx_v_block_index_start = 0;
+4407:             block_index_endex = 0
      __pyx_v_block_index_endex = 0;
    }
    __pyx_L4:;
 4408: 
 4409:         # Reserve slots to clone blocks
+4410:         blocks2 = memory.blocks
    __pyx_t_1 = __pyx_v_memory->blocks;
    __pyx_v_blocks2 = __pyx_t_1;
+4411:         block_count = block_index_endex - block_index_start
    __pyx_v_block_count = (__pyx_v_block_index_endex - __pyx_v_block_index_start);
+4412:         memory.blocks = blocks2 = Rack_Reserve_(blocks2, 0, block_count)
    __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Reserve_(__pyx_v_blocks2, 0, __pyx_v_block_count); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 4412, __pyx_L1_error)
    __pyx_v_memory->blocks = __pyx_t_1;
    __pyx_v_blocks2 = __pyx_t_1;
+4413:         try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L12_try_end;
      __pyx_L7_error:;
/* … */
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      goto __pyx_L1_error;
      __pyx_L12_try_end:;
    }
 4414:             # Clone blocks into the new memory
+4415:             for block_index in range(block_count):
        __pyx_t_9 = __pyx_v_block_count;
        __pyx_t_10 = __pyx_t_9;
        for (__pyx_t_11 = 0; __pyx_t_11 < __pyx_t_10; __pyx_t_11+=1) {
          __pyx_v_block_index = __pyx_t_11;
+4416:                 block1 = Rack_Get__(blocks1, block_index_start + block_index)
          __pyx_v_block1 = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks1, (__pyx_v_block_index_start + __pyx_v_block_index));
+4417:                 block2 = Block_Copy(block1)
          __pyx_t_12 = __pyx_f_11cbytesparse_2_c_Block_Copy(__pyx_v_block1); if (unlikely(__pyx_t_12 == ((Block_ *)NULL))) __PYX_ERR(0, 4417, __pyx_L7_error)
          __pyx_v_block2 = __pyx_t_12;
+4418:                 Rack_Set__(blocks2, block_index, block2)
          (void)(__pyx_f_11cbytesparse_2_c_Rack_Set__(__pyx_v_blocks2, __pyx_v_block_index, __pyx_v_block2));
        }
+4419:         except:
      /*except:*/ {
        __Pyx_AddTraceback("cbytesparse._c.Memory_Extract__", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15) < 0) __PYX_ERR(0, 4419, __pyx_L9_except_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_GOTREF(__pyx_t_15);
+4420:             memory.blocks = blocks2 = Rack_Clear(blocks2)  # orphan
        __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Clear(__pyx_v_blocks2); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 4420, __pyx_L9_except_error)
        __pyx_v_memory->blocks = __pyx_t_1;
        __pyx_v_blocks2 = __pyx_t_1;
+4421:             raise
        __Pyx_GIVEREF(__pyx_t_13);
        __Pyx_GIVEREF(__pyx_t_14);
        __Pyx_XGIVEREF(__pyx_t_15);
        __Pyx_ErrRestoreWithState(__pyx_t_13, __pyx_t_14, __pyx_t_15);
        __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0; 
        __PYX_ERR(0, 4421, __pyx_L9_except_error)
      }
      __pyx_L9_except_error:;
 4422: 
 4423:         # Trim data in excess
+4424:         Memory_Crop_(memory, start, endex, None)
    __pyx_t_16 = __pyx_f_11cbytesparse_2_c_Memory_Crop_(__pyx_v_memory, __pyx_v_start, __pyx_v_endex, ((PyObject*)Py_None)); if (unlikely(__pyx_t_16 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4424, __pyx_L1_error)
 4425: 
+4426:         if pattern_size and pattern_ptr:
    __pyx_t_4 = (__pyx_v_pattern_size != 0);
    if (__pyx_t_4) {
    } else {
      __pyx_t_3 = __pyx_t_4;
      goto __pyx_L18_bool_binop_done;
    }
    __pyx_t_4 = (__pyx_v_pattern_ptr != 0);
    __pyx_t_3 = __pyx_t_4;
    __pyx_L18_bool_binop_done:;
    if (__pyx_t_3) {
/* … */
    }
+4427:             pattern = Block_Create(0, pattern_size, pattern_ptr)
      __pyx_t_12 = __pyx_f_11cbytesparse_2_c_Block_Create(0, __pyx_v_pattern_size, __pyx_v_pattern_ptr); if (unlikely(__pyx_t_12 == ((Block_ *)NULL))) __PYX_ERR(0, 4427, __pyx_L1_error)
      __pyx_v_pattern = __pyx_t_12;
+4428:             try:
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        goto __pyx_L25_try_end;
        __pyx_L20_error:;
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
/* … */
        __Pyx_XGIVEREF(__pyx_t_8);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_ExceptionReset(__pyx_t_8, __pyx_t_7, __pyx_t_6);
        goto __pyx_L1_error;
        __pyx_L25_try_end:;
      }
+4429:                 Memory_Flood_(memory, start, endex, &pattern, None)
          __pyx_t_16 = __pyx_f_11cbytesparse_2_c_Memory_Flood_(__pyx_v_memory, __pyx_v_start, __pyx_v_endex, (&__pyx_v_pattern), ((PyObject*)Py_None)); if (unlikely(__pyx_t_16 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4429, __pyx_L20_error)
+4430:             except:
        /*except:*/ {
          __Pyx_AddTraceback("cbytesparse._c.Memory_Extract__", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_15, &__pyx_t_14, &__pyx_t_13) < 0) __PYX_ERR(0, 4430, __pyx_L22_except_error)
          __Pyx_GOTREF(__pyx_t_15);
          __Pyx_GOTREF(__pyx_t_14);
          __Pyx_GOTREF(__pyx_t_13);
+4431:                 Block_Free(pattern)  # orphan
          (void)(__pyx_f_11cbytesparse_2_c_Block_Free(__pyx_v_pattern));
+4432:                 raise
          __Pyx_GIVEREF(__pyx_t_15);
          __Pyx_GIVEREF(__pyx_t_14);
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_ErrRestoreWithState(__pyx_t_15, __pyx_t_14, __pyx_t_13);
          __pyx_t_15 = 0; __pyx_t_14 = 0; __pyx_t_13 = 0; 
          __PYX_ERR(0, 4432, __pyx_L22_except_error)
        }
        __pyx_L22_except_error:;
 4433:     else:
+4434:         if step > 1:
  /*else*/ {
    __pyx_t_3 = ((__pyx_v_step > 1) != 0);
    if (__pyx_t_3) {
/* … */
    }
  }
  __pyx_L3:;
+4435:             block2 = NULL
      __pyx_v_block2 = NULL;
+4436:             offset = start
      __pyx_v_offset = __pyx_v_start;
+4437:             rover = Rover_Create(that, start, endex, pattern_size, pattern_ptr, True, False)
      __pyx_t_17 = __pyx_f_11cbytesparse_2_c_Rover_Create(__pyx_v_that, __pyx_v_start, __pyx_v_endex, __pyx_v_pattern_size, __pyx_v_pattern_ptr, 1, 0); if (unlikely(__pyx_t_17 == ((Rover_ *)NULL))) __PYX_ERR(0, 4437, __pyx_L1_error)
      __pyx_v_rover = __pyx_t_17;
+4438:             try:
      /*try:*/ {
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          goto __pyx_L37_try_end;
          __pyx_L32_error:;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
/* … */
          __Pyx_XGIVEREF(__pyx_t_6);
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
          goto __pyx_L30_error;
          __pyx_L33_exception_handled:;
          __Pyx_XGIVEREF(__pyx_t_6);
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
          __pyx_L37_try_end:;
        }
      }
+4439:                 while True:
            while (1) {
+4440:                     value = Rover_Next_(rover)
              __pyx_t_18 = __pyx_f_11cbytesparse_2_c_Rover_Next_(__pyx_v_rover); if (unlikely(__pyx_t_18 == ((int)-2))) __PYX_ERR(0, 4440, __pyx_L32_error)
              __pyx_v_value = __pyx_t_18;
+4441:                     if value < 0:
              __pyx_t_3 = ((__pyx_v_value < 0) != 0);
              if (__pyx_t_3) {
/* … */
                goto __pyx_L40;
              }
+4442:                         if block2:
                __pyx_t_3 = (__pyx_v_block2 != 0);
                if (__pyx_t_3) {
/* … */
                }
+4443:                             memory.blocks = Rack_Append(memory.blocks, block2)
                  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Append(__pyx_v_memory->blocks, __pyx_v_block2); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 4443, __pyx_L32_error)
                  __pyx_v_memory->blocks = __pyx_t_1;
+4444:                             block2 = NULL
                  __pyx_v_block2 = NULL;
 4445:                     else:
+4446:                         if not block2:
              /*else*/ {
                __pyx_t_3 = ((!(__pyx_v_block2 != 0)) != 0);
                if (__pyx_t_3) {
/* … */
                }
+4447:                             block2 = Block_Alloc(offset, 0, False)
                  __pyx_t_12 = __pyx_f_11cbytesparse_2_c_Block_Alloc(__pyx_v_offset, 0, 0); if (unlikely(__pyx_t_12 == ((Block_ *)NULL))) __PYX_ERR(0, 4447, __pyx_L32_error)
                  __pyx_v_block2 = __pyx_t_12;
+4448:                         block2 = Block_Append(block2, <byte_t>value)
                __pyx_t_12 = __pyx_f_11cbytesparse_2_c_Block_Append(__pyx_v_block2, ((byte_t)__pyx_v_value)); if (unlikely(__pyx_t_12 == ((Block_ *)NULL))) __PYX_ERR(0, 4448, __pyx_L32_error)
                __pyx_v_block2 = __pyx_t_12;
              }
              __pyx_L40:;
 4449: 
+4450:                     offset += 1
              __pyx_v_offset = (__pyx_v_offset + 1);
+4451:                     for skip in range(step - 1):
              __pyx_t_19 = (__pyx_v_step - 1);
              __pyx_t_20 = __pyx_t_19;
              for (__pyx_t_21 = 0; __pyx_t_21 < __pyx_t_20; __pyx_t_21+=1) {
                __pyx_v_skip = __pyx_t_21;
+4452:                         Rover_Next_(rover)
                __pyx_t_18 = __pyx_f_11cbytesparse_2_c_Rover_Next_(__pyx_v_rover); if (unlikely(__pyx_t_18 == ((int)-2))) __PYX_ERR(0, 4452, __pyx_L32_error)
              }
            }
+4453:             except StopIteration:
          __pyx_t_18 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_StopIteration);
          if (__pyx_t_18) {
            __Pyx_AddTraceback("cbytesparse._c.Memory_Extract__", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15) < 0) __PYX_ERR(0, 4453, __pyx_L34_except_error)
            __Pyx_GOTREF(__pyx_t_13);
            __Pyx_GOTREF(__pyx_t_14);
            __Pyx_GOTREF(__pyx_t_15);
+4454:                 if block2:
            __pyx_t_3 = (__pyx_v_block2 != 0);
            if (__pyx_t_3) {
/* … */
            }
            __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
            __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
            __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
            goto __pyx_L33_exception_handled;
          }
          goto __pyx_L34_except_error;
          __pyx_L34_except_error:;
+4455:                     memory.blocks = Rack_Append(memory.blocks, block2)
              __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Append(__pyx_v_memory->blocks, __pyx_v_block2); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 4455, __pyx_L34_except_error)
              __pyx_v_memory->blocks = __pyx_t_1;
+4456:                     block2 = NULL
              __pyx_v_block2 = NULL;
 4457:             finally:
+4458:                 block2 = Block_Free(block2)  # orphan
      /*finally:*/ {
        /*normal exit:*/{
          __pyx_v_block2 = __pyx_f_11cbytesparse_2_c_Block_Free(__pyx_v_block2);
/* … */
            __pyx_v_block2 = __pyx_f_11cbytesparse_2_c_Block_Free(__pyx_v_block2);
+4459:                 rover = Rover_Free(rover)
          __pyx_t_17 = __pyx_f_11cbytesparse_2_c_Rover_Free(__pyx_v_rover); if (unlikely(__pyx_t_17 == ((Rover_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 4459, __pyx_L1_error)
          __pyx_v_rover = __pyx_t_17;
          goto __pyx_L31;
        }
        __pyx_L30_error:;
        /*exception exit:*/{
          __Pyx_PyThreadState_declare
          __Pyx_PyThreadState_assign
          __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0;
          __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
          __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
          __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
          if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_24, &__pyx_t_25, &__pyx_t_26);
          if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_7, &__pyx_t_6);
          __Pyx_XGOTREF(__pyx_t_8);
          __Pyx_XGOTREF(__pyx_t_7);
          __Pyx_XGOTREF(__pyx_t_6);
          __Pyx_XGOTREF(__pyx_t_24);
          __Pyx_XGOTREF(__pyx_t_25);
          __Pyx_XGOTREF(__pyx_t_26);
          __pyx_t_18 = __pyx_lineno; __pyx_t_22 = __pyx_clineno; __pyx_t_23 = __pyx_filename;
          {
/* … */
            __pyx_t_17 = __pyx_f_11cbytesparse_2_c_Rover_Free(__pyx_v_rover); if (unlikely(__pyx_t_17 == ((Rover_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 4459, __pyx_L49_error)
            __pyx_v_rover = __pyx_t_17;
          }
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_XGIVEREF(__pyx_t_25);
            __Pyx_XGIVEREF(__pyx_t_26);
            __Pyx_ExceptionReset(__pyx_t_24, __pyx_t_25, __pyx_t_26);
          }
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_XGIVEREF(__pyx_t_6);
          __Pyx_ErrRestore(__pyx_t_8, __pyx_t_7, __pyx_t_6);
          __pyx_t_8 = 0; __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0;
          __pyx_lineno = __pyx_t_18; __pyx_clineno = __pyx_t_22; __pyx_filename = __pyx_t_23;
          goto __pyx_L1_error;
          __pyx_L49_error:;
          if (PY_MAJOR_VERSION >= 3) {
            __Pyx_XGIVEREF(__pyx_t_24);
            __Pyx_XGIVEREF(__pyx_t_25);
            __Pyx_XGIVEREF(__pyx_t_26);
            __Pyx_ExceptionReset(__pyx_t_24, __pyx_t_25, __pyx_t_26);
          }
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_24 = 0; __pyx_t_25 = 0; __pyx_t_26 = 0;
          goto __pyx_L1_error;
        }
        __pyx_L31:;
      }
 4460: 
+4461:             if bound:
      __pyx_t_3 = (__pyx_v_bound != 0);
      if (__pyx_t_3) {
/* … */
      }
+4462:                 endex = offset
        __pyx_v_endex = __pyx_v_offset;
+4463:     if bound:
  __pyx_t_3 = (__pyx_v_bound != 0);
  if (__pyx_t_3) {
/* … */
  }
+4464:         memory.trim_start_ = True
    __pyx_v_memory->trim_start_ = 1;
+4465:         memory.trim_endex_ = True
    __pyx_v_memory->trim_endex_ = 1;
+4466:         memory.trim_start = start
    __pyx_v_memory->trim_start = __pyx_v_start;
+4467:         memory.trim_endex = endex
    __pyx_v_memory->trim_endex = __pyx_v_endex;
 4468: 
+4469:     return memory
  __pyx_r = __pyx_v_memory;
  goto __pyx_L0;
 4470: 
 4471: 
+4472: cdef object Memory_Extract_(const Memory_* that, addr_t start, addr_t endex,
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_Extract_(Memory_ const *__pyx_v_that, addr_t __pyx_v_start, addr_t __pyx_v_endex, size_t __pyx_v_pattern_size, byte_t const *__pyx_v_pattern_ptr, saddr_t __pyx_v_step, int __pyx_v_bound) {
  Memory_ *__pyx_v_memory_;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Extract_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Extract_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4473:                             size_t pattern_size, const byte_t* pattern_ptr,
 4474:                             saddr_t step, bint bound):
 4475:     cdef:
+4476:         Memory_* memory_ = Memory_Extract__(that, start, endex, pattern_size, pattern_ptr, step, bound)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Extract__(__pyx_v_that, __pyx_v_start, __pyx_v_endex, __pyx_v_pattern_size, __pyx_v_pattern_ptr, __pyx_v_step, __pyx_v_bound); if (unlikely(__pyx_t_1 == ((Memory_ *)NULL))) __PYX_ERR(0, 4476, __pyx_L1_error)
  __pyx_v_memory_ = __pyx_t_1;
 4477: 
+4478:     return Memory_AsObject(memory_)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = ((PyObject *)__pyx_f_11cbytesparse_2_c_Memory_AsObject(__pyx_v_memory_)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 4478, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 4479: 
 4480: 
+4481: cdef object Memory_Extract(const Memory_* that, object start, object endex,
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_Extract(Memory_ const *__pyx_v_that, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_pattern, PyObject *__pyx_v_step, int __pyx_v_bound) {
  addr_t __pyx_v_start_;
  addr_t __pyx_v_endex_;
  __Pyx_memviewslice __pyx_v_pattern_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  byte_t __pyx_v_pattern_value;
  size_t __pyx_v_pattern_size;
  byte_t const *__pyx_v_pattern_ptr;
  saddr_t __pyx_v_step_;
  int __pyx_v_bound_;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Extract", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Extract", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_pattern_view, 1);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4482:                            object pattern, object step, bint bound):
 4483:     cdef:
 4484:         addr_t start_
 4485:         addr_t endex_
 4486:         const byte_t[:] pattern_view
 4487:         byte_t pattern_value
 4488:         size_t pattern_size
 4489:         const byte_t* pattern_ptr
+4490:         saddr_t step_ = <saddr_t>1 if step is None else <saddr_t>step
  __pyx_t_2 = (__pyx_v_step == Py_None);
  if ((__pyx_t_2 != 0)) {
    __pyx_t_1 = ((saddr_t)1);
  } else {
    __pyx_t_3 = __Pyx_PyInt_As_int_fast64_t(__pyx_v_step); if (unlikely((__pyx_t_3 == ((saddr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4490, __pyx_L1_error)
    __pyx_t_1 = ((saddr_t)__pyx_t_3);
  }
  __pyx_v_step_ = __pyx_t_1;
+4491:         bint bound_ = <bint>bound
  __pyx_v_bound_ = (__pyx_v_bound != 0);
 4492: 
+4493:     if pattern is None:
  __pyx_t_2 = (__pyx_v_pattern == Py_None);
  __pyx_t_4 = (__pyx_t_2 != 0);
  if (__pyx_t_4) {
/* … */
    goto __pyx_L3;
  }
+4494:         pattern_size = 0
    __pyx_v_pattern_size = 0;
+4495:         pattern_ptr = NULL
    __pyx_v_pattern_ptr = NULL;
 4496: 
+4497:     elif isinstance(pattern, int):
  __pyx_t_4 = PyInt_Check(__pyx_v_pattern); 
  __pyx_t_2 = (__pyx_t_4 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L3;
  }
+4498:         pattern_value = <byte_t>pattern
    __pyx_t_5 = __Pyx_PyInt_As_byte_t(__pyx_v_pattern); if (unlikely((__pyx_t_5 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4498, __pyx_L1_error)
    __pyx_v_pattern_value = ((byte_t)__pyx_t_5);
+4499:         pattern_size = 1
    __pyx_v_pattern_size = 1;
+4500:         pattern_ptr = &pattern_value
    __pyx_v_pattern_ptr = (&__pyx_v_pattern_value);
 4501: 
 4502:     else:
+4503:         pattern_view = pattern
  /*else*/ {
    __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(__pyx_v_pattern, 0); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 4503, __pyx_L1_error)
    __pyx_v_pattern_view = __pyx_t_6;
    __pyx_t_6.memview = NULL;
    __pyx_t_6.data = NULL;
+4504:         pattern_size = len(pattern_view)
    __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_pattern_view); 
    __pyx_v_pattern_size = __pyx_t_7;
 4505:         with cython.boundscheck(False):
+4506:             pattern_ptr = &pattern_view[0]
    __pyx_t_8 = 0;
    if (__pyx_t_8 < 0) __pyx_t_8 += __pyx_v_pattern_view.shape[0];
    __pyx_v_pattern_ptr = (&(*((byte_t const  *) ( /* dim=0 */ (__pyx_v_pattern_view.data + __pyx_t_8 * __pyx_v_pattern_view.strides[0]) ))));
  }
  __pyx_L3:;
 4507: 
+4508:     start_, endex_ = Memory_Bound(that, start, endex)
  __pyx_t_9 = __pyx_f_11cbytesparse_2_c_Memory_Bound(__pyx_v_that, __pyx_v_start, __pyx_v_endex); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4508, __pyx_L1_error)
  __pyx_t_10 = __pyx_t_9.f0;
  __pyx_t_11 = __pyx_t_9.f1;
  __pyx_v_start_ = __pyx_t_10;
  __pyx_v_endex_ = __pyx_t_11;
+4509:     return Memory_Extract_(that, start_, endex_, pattern_size, pattern_ptr, step_, bound_)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_12 = __pyx_f_11cbytesparse_2_c_Memory_Extract_(__pyx_v_that, __pyx_v_start_, __pyx_v_endex_, __pyx_v_pattern_size, __pyx_v_pattern_ptr, __pyx_v_step_, __pyx_v_bound_); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 4509, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_r = __pyx_t_12;
  __pyx_t_12 = 0;
  goto __pyx_L0;
 4510: 
 4511: 
+4512: cdef vint Memory_ShiftLeft_(Memory_* that, addr_t offset, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_ShiftLeft_(Memory_ *__pyx_v_that, addr_t __pyx_v_offset, PyObject *__pyx_v_backups) {
  Rack_ *__pyx_v_blocks;
  size_t __pyx_v_block_index;
  Block_ *__pyx_v_block;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_ShiftLeft_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_ShiftLeft_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4513:     cdef:
+4514:         Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
 4515:         size_t block_index
 4516:         Block_* block
 4517: 
+4518:     if offset and Rack_Length(blocks):
  __pyx_t_3 = (__pyx_v_offset != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks) != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+4519:         Memory_PretrimStart_(that, ADDR_MAX, offset, backups)
    __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_PretrimStart_(__pyx_v_that, ADDR_MAX, __pyx_v_offset, __pyx_v_backups); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4519, __pyx_L1_error)
+4520:         blocks = that.blocks
    __pyx_t_1 = __pyx_v_that->blocks;
    __pyx_v_blocks = __pyx_t_1;
 4521: 
+4522:         for block_index in range(Rack_Length(blocks)):
    __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
    __pyx_t_6 = __pyx_t_5;
    for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
      __pyx_v_block_index = __pyx_t_7;
+4523:             block = Rack_Get__(blocks, block_index)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+4524:             block.address -= offset
      __pyx_v_block->address = (__pyx_v_block->address - __pyx_v_offset);
    }
 4525: 
 4526: 
+4527: cdef vint Memory_ShiftRight_(Memory_* that, addr_t offset, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_ShiftRight_(Memory_ *__pyx_v_that, addr_t __pyx_v_offset, PyObject *__pyx_v_backups) {
  Rack_ *__pyx_v_blocks;
  size_t __pyx_v_block_index;
  Block_ *__pyx_v_block;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_ShiftRight_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_ShiftRight_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4528:     cdef:
+4529:         Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
 4530:         size_t block_index
 4531:         Block_* block
 4532: 
+4533:     if offset and Rack_Length(blocks):
  __pyx_t_3 = (__pyx_v_offset != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks) != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+4534:         Memory_PretrimEndex_(that, ADDR_MIN, offset, backups)
    __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_PretrimEndex_(__pyx_v_that, ADDR_MIN, __pyx_v_offset, __pyx_v_backups); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4534, __pyx_L1_error)
+4535:         blocks = that.blocks
    __pyx_t_1 = __pyx_v_that->blocks;
    __pyx_v_blocks = __pyx_t_1;
 4536: 
+4537:         for block_index in range(Rack_Length(blocks)):
    __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
    __pyx_t_6 = __pyx_t_5;
    for (__pyx_t_7 = 0; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
      __pyx_v_block_index = __pyx_t_7;
+4538:             block = Rack_Get__(blocks, block_index)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+4539:             block.address += offset
      __pyx_v_block->address = (__pyx_v_block->address + __pyx_v_offset);
    }
 4540: 
 4541: 
+4542: cdef vint Memory_Shift(Memory_* that, object offset, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Shift(Memory_ *__pyx_v_that, PyObject *__pyx_v_offset, PyObject *__pyx_v_backups) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Shift", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Shift", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4543:     if offset < 0:
  __pyx_t_1 = PyObject_RichCompare(__pyx_v_offset, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4543, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 4543, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_2) {
/* … */
  }
+4544:         return Memory_ShiftLeft_(that, <addr_t>-offset, backups)
    __pyx_t_1 = PyNumber_Negative(__pyx_v_offset); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 4544, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyInt_As_uint_fast64_t(__pyx_t_1); if (unlikely((__pyx_t_3 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4544, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_ShiftLeft_(__pyx_v_that, ((addr_t)__pyx_t_3), __pyx_v_backups); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4544, __pyx_L1_error)
    __pyx_r = __pyx_t_4;
    goto __pyx_L0;
 4545:     else:
+4546:         return Memory_ShiftRight_(that, <addr_t>offset, backups)
  /*else*/ {
    __pyx_t_3 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_offset); if (unlikely((__pyx_t_3 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4546, __pyx_L1_error)
    __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_ShiftRight_(__pyx_v_that, ((addr_t)__pyx_t_3), __pyx_v_backups); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4546, __pyx_L1_error)
    __pyx_r = __pyx_t_4;
    goto __pyx_L0;
  }
 4547: 
 4548: 
+4549: cdef vint Memory_Reserve_(Memory_* that, addr_t address, addr_t size, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Reserve_(Memory_ *__pyx_v_that, addr_t __pyx_v_address, addr_t __pyx_v_size, PyObject *__pyx_v_backups) {
  addr_t __pyx_v_offset;
  Rack_ *__pyx_v_blocks;
  size_t __pyx_v_block_count;
  size_t __pyx_v_block_index;
  Block_ *__pyx_v_block;
  addr_t __pyx_v_block_start;
  Block_ *__pyx_v_block2;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Reserve_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Reserve_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4550:     cdef:
 4551:         addr_t offset
+4552:         Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
 4553:         size_t block_count
 4554:         size_t block_index
 4555:         Block_* block
 4556:         addr_t block_start
 4557:         Block_* block2
 4558: 
+4559:     if size and Rack_Length(blocks):
  __pyx_t_3 = (__pyx_v_size != 0);
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks) != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {
/* … */
  }
+4560:         Memory_PretrimEndex_(that, address, size, backups)
    __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_PretrimEndex_(__pyx_v_that, __pyx_v_address, __pyx_v_size, __pyx_v_backups); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4560, __pyx_L1_error)
 4561: 
+4562:         block_index = Rack_IndexStart(blocks, address)
    __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Rack_IndexStart(__pyx_v_blocks, __pyx_v_address); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 4562, __pyx_L1_error)
    __pyx_v_block_index = __pyx_t_5;
+4563:         block_count = Rack_Length(blocks)
    __pyx_v_block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
 4564: 
+4565:         if block_index < block_count:
    __pyx_t_2 = ((__pyx_v_block_index < __pyx_v_block_count) != 0);
    if (__pyx_t_2) {
/* … */
    }
+4566:             block = Rack_Get_(blocks, block_index)
      __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Rack_Get_(__pyx_v_blocks, __pyx_v_block_index); if (unlikely(__pyx_t_6 == ((Block_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 4566, __pyx_L1_error)
      __pyx_v_block = __pyx_t_6;
+4567:             block_start = Block_Start(block)
      __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
 4568: 
+4569:             if address > block_start:
      __pyx_t_2 = ((__pyx_v_address > __pyx_v_block_start) != 0);
      if (__pyx_t_2) {
/* … */
      }
 4570:                 # Split into two blocks, reserving emptiness
+4571:                 CheckAddSizeU(block_count, 1)  # ensure free slot
        __pyx_t_4 = __pyx_f_11cbytesparse_2_c_CheckAddSizeU(__pyx_v_block_count, 1); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4571, __pyx_L1_error)
+4572:                 offset = address - block_start
        __pyx_v_offset = (__pyx_v_address - __pyx_v_block_start);
+4573:                 block2 = Block_GetSlice_(block, offset, SIZE_HMAX)
        __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Block_GetSlice_(__pyx_v_block, __pyx_v_offset, SIZE_HMAX); if (unlikely(__pyx_t_6 == ((Block_ *)NULL))) __PYX_ERR(0, 4573, __pyx_L1_error)
        __pyx_v_block2 = __pyx_t_6;
+4574:                 try:
        {
          /*try:*/ {
/* … */
          }
          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
          __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
          __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
          goto __pyx_L13_try_end;
          __pyx_L8_error:;
/* … */
          __Pyx_XGIVEREF(__pyx_t_7);
          __Pyx_XGIVEREF(__pyx_t_8);
          __Pyx_XGIVEREF(__pyx_t_9);
          __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
          goto __pyx_L1_error;
          __pyx_L13_try_end:;
        }
+4575:                     block = Block_DelSlice_(block, offset, SIZE_HMAX)
            __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Block_DelSlice_(__pyx_v_block, __pyx_v_offset, SIZE_HMAX); if (unlikely(__pyx_t_6 == ((Block_ *)NULL))) __PYX_ERR(0, 4575, __pyx_L8_error)
            __pyx_v_block = __pyx_t_6;
 4576: 
+4577:                     Rack_Set__(blocks, block_index, block)  # update pointer
            (void)(__pyx_f_11cbytesparse_2_c_Rack_Set__(__pyx_v_blocks, __pyx_v_block_index, __pyx_v_block));
+4578:                     block_index += 1
            __pyx_v_block_index = (__pyx_v_block_index + 1);
 4579: 
+4580:                     CheckAddAddrU(address, size)
            __pyx_t_4 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_address, __pyx_v_size); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4580, __pyx_L8_error)
+4581:                     block2.address = address + size
            __pyx_v_block2->address = (__pyx_v_address + __pyx_v_size);
+4582:                     that.blocks = blocks = Rack_Insert(blocks, block_index, block2)
            __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Insert(__pyx_v_blocks, __pyx_v_block_index, __pyx_v_block2); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 4582, __pyx_L8_error)
            __pyx_v_that->blocks = __pyx_t_1;
            __pyx_v_blocks = __pyx_t_1;
+4583:                 except:
          /*except:*/ {
            __Pyx_AddTraceback("cbytesparse._c.Memory_Reserve_", __pyx_clineno, __pyx_lineno, __pyx_filename);
            if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0) __PYX_ERR(0, 4583, __pyx_L10_except_error)
            __Pyx_GOTREF(__pyx_t_10);
            __Pyx_GOTREF(__pyx_t_11);
            __Pyx_GOTREF(__pyx_t_12);
+4584:                     block2 = Block_Free(block2)  # orphan
            __pyx_v_block2 = __pyx_f_11cbytesparse_2_c_Block_Free(__pyx_v_block2);
+4585:                     raise
            __Pyx_GIVEREF(__pyx_t_10);
            __Pyx_GIVEREF(__pyx_t_11);
            __Pyx_XGIVEREF(__pyx_t_12);
            __Pyx_ErrRestoreWithState(__pyx_t_10, __pyx_t_11, __pyx_t_12);
            __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; 
            __PYX_ERR(0, 4585, __pyx_L10_except_error)
          }
          __pyx_L10_except_error:;
+4586:                 block_index += 1
        __pyx_v_block_index = (__pyx_v_block_index + 1);
 4587: 
+4588:             for block_index in range(block_index, Rack_Length(blocks)):
      __pyx_t_13 = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
      __pyx_t_14 = __pyx_t_13;
      for (__pyx_t_15 = __pyx_v_block_index; __pyx_t_15 < __pyx_t_14; __pyx_t_15+=1) {
        __pyx_v_block_index = __pyx_t_15;
+4589:                 block = Rack_Get_(blocks, block_index)
        __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Rack_Get_(__pyx_v_blocks, __pyx_v_block_index); if (unlikely(__pyx_t_6 == ((Block_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 4589, __pyx_L1_error)
        __pyx_v_block = __pyx_t_6;
+4590:                 block.address += size
        __pyx_v_block->address = (__pyx_v_block->address + __pyx_v_size);
      }
 4591: 
 4592: 
+4593: cdef vint Memory_Reserve(Memory_* that, object address, object size, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Reserve(Memory_ *__pyx_v_that, PyObject *__pyx_v_address, PyObject *__pyx_v_size, PyObject *__pyx_v_backups) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Reserve", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_Reserve", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4594:     Memory_Reserve_(that, <addr_t>address, <addr_t>size, backups)
  __pyx_t_1 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_address); if (unlikely((__pyx_t_1 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4594, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_size); if (unlikely((__pyx_t_2 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4594, __pyx_L1_error)
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Memory_Reserve_(__pyx_v_that, ((addr_t)__pyx_t_1), ((addr_t)__pyx_t_2), __pyx_v_backups); if (unlikely(__pyx_t_3 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4594, __pyx_L1_error)
 4595: 
 4596: 
+4597: cdef vint Memory_Insert__(Memory_* that, addr_t address, size_t size, const byte_t* buffer,
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Insert__(Memory_ *__pyx_v_that, addr_t __pyx_v_address, size_t __pyx_v_size, byte_t const *__pyx_v_buffer, int __pyx_v_shift_after) {
  Rack_ *__pyx_v_blocks;
  size_t __pyx_v_block_index;
  Block_ *__pyx_v_block;
  addr_t __pyx_v_block_start;
  addr_t __pyx_v_block_endex;
  Block_ *__pyx_v_block2;
  addr_t __pyx_v_block_start2;
  size_t __pyx_v_offset;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Insert__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Insert__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4598:                           bint shift_after) except -1:
 4599:     cdef:
 4600:         Rack_* blocks
 4601:         size_t block_index
 4602:         Block_* block
 4603:         addr_t block_start
 4604:         addr_t block_endex
 4605:         Block_* block2
 4606:         addr_t block_start2
 4607:         size_t offset
 4608: 
+4609:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+4610:         blocks = that.blocks
    __pyx_t_2 = __pyx_v_that->blocks;
    __pyx_v_blocks = __pyx_t_2;
+4611:         block_index = Rack_IndexStart(blocks, address)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_IndexStart(__pyx_v_blocks, __pyx_v_address); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 4611, __pyx_L1_error)
    __pyx_v_block_index = __pyx_t_3;
 4612: 
+4613:         if block_index:
    __pyx_t_1 = (__pyx_v_block_index != 0);
    if (__pyx_t_1) {
/* … */
    }
+4614:             block = Rack_Get_(blocks, block_index - 1)
      __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Rack_Get_(__pyx_v_blocks, (__pyx_v_block_index - 1)); if (unlikely(__pyx_t_4 == ((Block_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 4614, __pyx_L1_error)
      __pyx_v_block = __pyx_t_4;
+4615:             block_start = Block_Start(block)
      __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+4616:             block_endex = Block_Endex(block)
      __pyx_v_block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
 4617: 
+4618:             if block_endex == address:
      __pyx_t_1 = ((__pyx_v_block_endex == __pyx_v_address) != 0);
      if (__pyx_t_1) {
/* … */
      }
 4619:                 # Extend previous block
+4620:                 block = Block_Extend_(block, size, buffer)
        __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Block_Extend_(__pyx_v_block, __pyx_v_size, __pyx_v_buffer); if (unlikely(__pyx_t_4 == ((Block_ *)NULL))) __PYX_ERR(0, 4620, __pyx_L1_error)
        __pyx_v_block = __pyx_t_4;
+4621:                 Rack_Set__(blocks, block_index - 1, block)  # update pointer
        (void)(__pyx_f_11cbytesparse_2_c_Rack_Set__(__pyx_v_blocks, (__pyx_v_block_index - 1), __pyx_v_block));
 4622: 
 4623:                 # Shift blocks after
+4624:                 if shift_after:
        __pyx_t_1 = (__pyx_v_shift_after != 0);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L6;
        }
+4625:                     for block_index in range(block_index, Rack_Length(blocks)):
          __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
          __pyx_t_6 = __pyx_t_5;
          for (__pyx_t_7 = __pyx_v_block_index; __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
            __pyx_v_block_index = __pyx_t_7;
+4626:                         block = Rack_Get_(blocks, block_index)
            __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Rack_Get_(__pyx_v_blocks, __pyx_v_block_index); if (unlikely(__pyx_t_4 == ((Block_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 4626, __pyx_L1_error)
            __pyx_v_block = __pyx_t_4;
+4627:                         CheckAddAddrU(block.address, size)
            __pyx_t_8 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_block->address, __pyx_v_size); if (unlikely(__pyx_t_8 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4627, __pyx_L1_error)
+4628:                         block.address += size
            __pyx_v_block->address = (__pyx_v_block->address + __pyx_v_size);
          }
 4629:                 else:
+4630:                     block_index += 1
        /*else*/ {
          __pyx_v_block_index = (__pyx_v_block_index + 1);
+4631:                     if block_index < Rack_Length(blocks):
          __pyx_t_1 = ((__pyx_v_block_index < __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks)) != 0);
          if (__pyx_t_1) {
/* … */
          }
        }
        __pyx_L6:;
+4632:                         CheckAddAddrU(block_endex, size)
            __pyx_t_8 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_block_endex, __pyx_v_size); if (unlikely(__pyx_t_8 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4632, __pyx_L1_error)
+4633:                         block_endex += size
            __pyx_v_block_endex = (__pyx_v_block_endex + __pyx_v_size);
 4634: 
+4635:                         block2 = Rack_Get_(blocks, block_index)
            __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Rack_Get_(__pyx_v_blocks, __pyx_v_block_index); if (unlikely(__pyx_t_4 == ((Block_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 4635, __pyx_L1_error)
            __pyx_v_block2 = __pyx_t_4;
+4636:                         block_start2 = Block_Start(block2)
            __pyx_v_block_start2 = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block2);
 4637: 
 4638:                         # Merge with next block
+4639:                         if block_endex == block_start2:
            __pyx_t_1 = ((__pyx_v_block_endex == __pyx_v_block_start2) != 0);
            if (__pyx_t_1) {
/* … */
            }
+4640:                             block = Block_Extend(block, block2)
              __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Block_Extend(__pyx_v_block, __pyx_v_block2); if (unlikely(__pyx_t_4 == ((Block_ *)NULL))) __PYX_ERR(0, 4640, __pyx_L1_error)
              __pyx_v_block = __pyx_t_4;
+4641:                             Rack_Set__(blocks, block_index - 1, block)  # update pointer
              (void)(__pyx_f_11cbytesparse_2_c_Rack_Set__(__pyx_v_blocks, (__pyx_v_block_index - 1), __pyx_v_block));
+4642:                             that.blocks = blocks = Rack_Pop_(blocks, block_index, NULL)
              __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_Pop_(__pyx_v_blocks, __pyx_v_block_index, NULL); if (unlikely(__pyx_t_2 == ((Rack_ *)NULL))) __PYX_ERR(0, 4642, __pyx_L1_error)
              __pyx_v_that->blocks = __pyx_t_2;
              __pyx_v_blocks = __pyx_t_2;
+4643:                 return 0
        __pyx_r = 0;
        goto __pyx_L0;
 4644: 
+4645:         if block_index < Rack_Length(blocks):
    __pyx_t_1 = ((__pyx_v_block_index < __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks)) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L11;
    }
+4646:             block = Rack_Get_(blocks, block_index)
      __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Rack_Get_(__pyx_v_blocks, __pyx_v_block_index); if (unlikely(__pyx_t_4 == ((Block_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 4646, __pyx_L1_error)
      __pyx_v_block = __pyx_t_4;
+4647:             block_start = Block_Start(block)
      __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
 4648: 
+4649:             if address < block_start:
      __pyx_t_1 = ((__pyx_v_address < __pyx_v_block_start) != 0);
      if (__pyx_t_1) {
/* … */
        goto __pyx_L12;
      }
+4650:                 if shift_after:
        __pyx_t_1 = (__pyx_v_shift_after != 0);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L13;
        }
 4651:                     # Insert a standalone block before
+4652:                     block = Block_Create(address, size, buffer)
          __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Block_Create(__pyx_v_address, __pyx_v_size, __pyx_v_buffer); if (unlikely(__pyx_t_4 == ((Block_ *)NULL))) __PYX_ERR(0, 4652, __pyx_L1_error)
          __pyx_v_block = __pyx_t_4;
+4653:                     try:
          {
            /*try:*/ {
/* … */
            }
            __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
            __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
            __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
            goto __pyx_L19_try_end;
            __pyx_L14_error:;
/* … */
            __Pyx_XGIVEREF(__pyx_t_9);
            __Pyx_XGIVEREF(__pyx_t_10);
            __Pyx_XGIVEREF(__pyx_t_11);
            __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
            goto __pyx_L1_error;
            __pyx_L19_try_end:;
          }
+4654:                         that.blocks = blocks = Rack_Insert(blocks, block_index, block)
              __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_Insert(__pyx_v_blocks, __pyx_v_block_index, __pyx_v_block); if (unlikely(__pyx_t_2 == ((Rack_ *)NULL))) __PYX_ERR(0, 4654, __pyx_L14_error)
              __pyx_v_that->blocks = __pyx_t_2;
              __pyx_v_blocks = __pyx_t_2;
+4655:                     except:
            /*except:*/ {
              __Pyx_AddTraceback("cbytesparse._c.Memory_Insert__", __pyx_clineno, __pyx_lineno, __pyx_filename);
              if (__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0) __PYX_ERR(0, 4655, __pyx_L16_except_error)
              __Pyx_GOTREF(__pyx_t_12);
              __Pyx_GOTREF(__pyx_t_13);
              __Pyx_GOTREF(__pyx_t_14);
+4656:                         Block_Free(block)  # orphan
              (void)(__pyx_f_11cbytesparse_2_c_Block_Free(__pyx_v_block));
+4657:                         raise
              __Pyx_GIVEREF(__pyx_t_12);
              __Pyx_GIVEREF(__pyx_t_13);
              __Pyx_XGIVEREF(__pyx_t_14);
              __Pyx_ErrRestoreWithState(__pyx_t_12, __pyx_t_13, __pyx_t_14);
              __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; 
              __PYX_ERR(0, 4657, __pyx_L16_except_error)
            }
            __pyx_L16_except_error:;
 4658:                 else:
+4659:                     CheckAddAddrU(address, size)
        /*else*/ {
          __pyx_t_8 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_address, __pyx_v_size); if (unlikely(__pyx_t_8 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4659, __pyx_L1_error)
+4660:                     if address + size == block_start:
          __pyx_t_1 = (((__pyx_v_address + __pyx_v_size) == __pyx_v_block_start) != 0);
          if (__pyx_t_1) {
/* … */
            goto __pyx_L22;
          }
 4661:                         # Merge with next block
+4662:                         block = Rack_Get_(blocks, block_index)
            __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Rack_Get_(__pyx_v_blocks, __pyx_v_block_index); if (unlikely(__pyx_t_4 == ((Block_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 4662, __pyx_L1_error)
            __pyx_v_block = __pyx_t_4;
+4663:                         block.address = address
            __pyx_v_block->address = __pyx_v_address;
+4664:                         block = Block_ExtendLeft_(block, size, buffer)
            __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Block_ExtendLeft_(__pyx_v_block, __pyx_v_size, __pyx_v_buffer); if (unlikely(__pyx_t_4 == ((Block_ *)NULL))) __PYX_ERR(0, 4664, __pyx_L1_error)
            __pyx_v_block = __pyx_t_4;
+4665:                         Rack_Set__(blocks, block_index, block)  # update pointer
            (void)(__pyx_f_11cbytesparse_2_c_Rack_Set__(__pyx_v_blocks, __pyx_v_block_index, __pyx_v_block));
 4666:                     else:
 4667:                         # Insert a standalone block before
+4668:                         block = Block_Create(address, size, buffer)
          /*else*/ {
            __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Block_Create(__pyx_v_address, __pyx_v_size, __pyx_v_buffer); if (unlikely(__pyx_t_4 == ((Block_ *)NULL))) __PYX_ERR(0, 4668, __pyx_L1_error)
            __pyx_v_block = __pyx_t_4;
+4669:                         try:
            {
              /*try:*/ {
/* … */
              }
              __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
              __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
              __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
              goto __pyx_L28_try_end;
              __pyx_L23_error:;
              __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
              __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
              __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
/* … */
              __Pyx_XGIVEREF(__pyx_t_11);
              __Pyx_XGIVEREF(__pyx_t_10);
              __Pyx_XGIVEREF(__pyx_t_9);
              __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_10, __pyx_t_9);
              goto __pyx_L1_error;
              __pyx_L28_try_end:;
            }
          }
          __pyx_L22:;
        }
        __pyx_L13:;
+4670:                             that.blocks = blocks = Rack_Insert(blocks, block_index, block)
                __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_Insert(__pyx_v_blocks, __pyx_v_block_index, __pyx_v_block); if (unlikely(__pyx_t_2 == ((Rack_ *)NULL))) __PYX_ERR(0, 4670, __pyx_L23_error)
                __pyx_v_that->blocks = __pyx_t_2;
                __pyx_v_blocks = __pyx_t_2;
+4671:                         except:
              /*except:*/ {
                __Pyx_AddTraceback("cbytesparse._c.Memory_Insert__", __pyx_clineno, __pyx_lineno, __pyx_filename);
                if (__Pyx_GetException(&__pyx_t_14, &__pyx_t_13, &__pyx_t_12) < 0) __PYX_ERR(0, 4671, __pyx_L25_except_error)
                __Pyx_GOTREF(__pyx_t_14);
                __Pyx_GOTREF(__pyx_t_13);
                __Pyx_GOTREF(__pyx_t_12);
+4672:                             Block_Free(block)  # orphan
                (void)(__pyx_f_11cbytesparse_2_c_Block_Free(__pyx_v_block));
+4673:                             raise
                __Pyx_GIVEREF(__pyx_t_14);
                __Pyx_GIVEREF(__pyx_t_13);
                __Pyx_XGIVEREF(__pyx_t_12);
                __Pyx_ErrRestoreWithState(__pyx_t_14, __pyx_t_13, __pyx_t_12);
                __pyx_t_14 = 0; __pyx_t_13 = 0; __pyx_t_12 = 0; 
                __PYX_ERR(0, 4673, __pyx_L25_except_error)
              }
              __pyx_L25_except_error:;
 4674:             else:
 4675:                 # Insert buffer into the current block
+4676:                 CheckSubAddrU(address, block_start)
      /*else*/ {
        __pyx_t_8 = __pyx_f_11cbytesparse_2_c_CheckSubAddrU(__pyx_v_address, __pyx_v_block_start); if (unlikely(__pyx_t_8 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4676, __pyx_L1_error)
+4677:                 CheckAddrToSizeU(address - block_start)
        __pyx_t_8 = __pyx_f_11cbytesparse_2_c_CheckAddrToSizeU((__pyx_v_address - __pyx_v_block_start)); if (unlikely(__pyx_t_8 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4677, __pyx_L1_error)
+4678:                 offset = <size_t>(address - block_start)
        __pyx_v_offset = ((size_t)(__pyx_v_address - __pyx_v_block_start));
+4679:                 block = Block_Reserve_(block, offset, size, False)
        __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Block_Reserve_(__pyx_v_block, __pyx_v_offset, __pyx_v_size, 0); if (unlikely(__pyx_t_4 == ((Block_ *)NULL))) __PYX_ERR(0, 4679, __pyx_L1_error)
        __pyx_v_block = __pyx_t_4;
+4680:                 block = Block_Write_(block, offset, size, buffer)
        __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Block_Write_(__pyx_v_block, __pyx_v_offset, __pyx_v_size, __pyx_v_buffer); if (unlikely(__pyx_t_4 == ((Block_ *)NULL))) __PYX_ERR(0, 4680, __pyx_L1_error)
        __pyx_v_block = __pyx_t_4;
+4681:                 Rack_Set__(blocks, block_index, block)  # update pointer
        (void)(__pyx_f_11cbytesparse_2_c_Rack_Set__(__pyx_v_blocks, __pyx_v_block_index, __pyx_v_block));
      }
      __pyx_L12:;
 4682: 
 4683:             # Shift blocks after
+4684:             if shift_after:
      __pyx_t_1 = (__pyx_v_shift_after != 0);
      if (__pyx_t_1) {
/* … */
      }
+4685:                 for block_index in range(block_index + 1, Rack_Length(blocks)):
        __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
        __pyx_t_6 = __pyx_t_5;
        for (__pyx_t_7 = (__pyx_v_block_index + 1); __pyx_t_7 < __pyx_t_6; __pyx_t_7+=1) {
          __pyx_v_block_index = __pyx_t_7;
+4686:                     block = Rack_Get__(blocks, block_index)
          __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+4687:                     CheckAddAddrU(block.address, size)
          __pyx_t_8 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_block->address, __pyx_v_size); if (unlikely(__pyx_t_8 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4687, __pyx_L1_error)
+4688:                     block.address += size
          __pyx_v_block->address = (__pyx_v_block->address + __pyx_v_size);
        }
 4689: 
 4690:         else:
 4691:             # Append a standalone block after
+4692:             block = Block_Create(address, size, buffer)
    /*else*/ {
      __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Block_Create(__pyx_v_address, __pyx_v_size, __pyx_v_buffer); if (unlikely(__pyx_t_4 == ((Block_ *)NULL))) __PYX_ERR(0, 4692, __pyx_L1_error)
      __pyx_v_block = __pyx_t_4;
+4693:             try:
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
        goto __pyx_L39_try_end;
        __pyx_L34_error:;
        __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
        __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
        __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
/* … */
        __Pyx_XGIVEREF(__pyx_t_9);
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
        goto __pyx_L1_error;
        __pyx_L39_try_end:;
      }
    }
    __pyx_L11:;
+4694:                 that.blocks = blocks = Rack_Append(blocks, block)
          __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_Append(__pyx_v_blocks, __pyx_v_block); if (unlikely(__pyx_t_2 == ((Rack_ *)NULL))) __PYX_ERR(0, 4694, __pyx_L34_error)
          __pyx_v_that->blocks = __pyx_t_2;
          __pyx_v_blocks = __pyx_t_2;
+4695:             except:
        /*except:*/ {
          __Pyx_AddTraceback("cbytesparse._c.Memory_Insert__", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_12, &__pyx_t_13, &__pyx_t_14) < 0) __PYX_ERR(0, 4695, __pyx_L36_except_error)
          __Pyx_GOTREF(__pyx_t_12);
          __Pyx_GOTREF(__pyx_t_13);
          __Pyx_GOTREF(__pyx_t_14);
+4696:                 Block_Free(block)  # orphan
          (void)(__pyx_f_11cbytesparse_2_c_Block_Free(__pyx_v_block));
+4697:                 raise
          __Pyx_GIVEREF(__pyx_t_12);
          __Pyx_GIVEREF(__pyx_t_13);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_ErrRestoreWithState(__pyx_t_12, __pyx_t_13, __pyx_t_14);
          __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; 
          __PYX_ERR(0, 4697, __pyx_L36_except_error)
        }
        __pyx_L36_except_error:;
 4698: 
 4699: 
+4700: cdef vint Memory_Erase__(Memory_* that, addr_t start, addr_t endex, bint shift_after, bint merge_deletion) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Erase__(Memory_ *__pyx_v_that, addr_t __pyx_v_start, addr_t __pyx_v_endex, int __pyx_v_shift_after, int __pyx_v_merge_deletion) {
  addr_t __pyx_v_size;
  addr_t __pyx_v_offset;
  Rack_ *__pyx_v_blocks;
  size_t __pyx_v_block_index;
  size_t __pyx_v_inner_start;
  size_t __pyx_v_inner_endex;
  Block_ *__pyx_v_block;
  addr_t __pyx_v_block_start;
  addr_t __pyx_v_block_endex;
  Block_ *__pyx_v_block2;
  addr_t __pyx_v_block_start2;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Erase__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Erase__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4701:     cdef:
 4702:         addr_t size
 4703:         addr_t offset
 4704: 
+4705:         Rack_* blocks = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks = __pyx_t_1;
 4706:         size_t block_index
 4707:         size_t inner_start
 4708:         size_t inner_endex
 4709: 
+4710:         Block_* block = NULL
  __pyx_v_block = NULL;
 4711:         addr_t block_start
 4712:         addr_t block_endex
 4713: 
+4714:         Block_* block2 = NULL
  __pyx_v_block2 = NULL;
 4715:         addr_t block_start2
 4716: 
+4717:     if endex > start:
  __pyx_t_2 = ((__pyx_v_endex > __pyx_v_start) != 0);
  if (__pyx_t_2) {
/* … */
  }
+4718:         size = endex - start
    __pyx_v_size = (__pyx_v_endex - __pyx_v_start);
+4719:         block_index = Rack_IndexStart(blocks, start)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_IndexStart(__pyx_v_blocks, __pyx_v_start); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 4719, __pyx_L1_error)
    __pyx_v_block_index = __pyx_t_3;
 4720: 
 4721:         # Delete final/inner part of deletion start block
+4722:         if block_index < Rack_Length(blocks):
    __pyx_t_2 = ((__pyx_v_block_index < __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks)) != 0);
    if (__pyx_t_2) {
/* … */
    }
+4723:             block = Rack_Get__(blocks, block_index)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+4724:             block_start = Block_Start(block)
      __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+4725:             if start > block_start:
      __pyx_t_2 = ((__pyx_v_start > __pyx_v_block_start) != 0);
      if (__pyx_t_2) {
/* … */
      }
+4726:                 if shift_after:
        __pyx_t_2 = (__pyx_v_shift_after != 0);
        if (__pyx_t_2) {
/* … */
          goto __pyx_L6;
        }
+4727:                     CheckAddrToSizeU(start - block_start)
          __pyx_t_4 = __pyx_f_11cbytesparse_2_c_CheckAddrToSizeU((__pyx_v_start - __pyx_v_block_start)); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4727, __pyx_L1_error)
+4728:                     CheckAddrToSizeU(endex - block_start)
          __pyx_t_4 = __pyx_f_11cbytesparse_2_c_CheckAddrToSizeU((__pyx_v_endex - __pyx_v_block_start)); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4728, __pyx_L1_error)
+4729:                     block = Block_DelSlice_(block, start - block_start, endex - block_start)
          __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Block_DelSlice_(__pyx_v_block, (__pyx_v_start - __pyx_v_block_start), (__pyx_v_endex - __pyx_v_block_start)); if (unlikely(__pyx_t_5 == ((Block_ *)NULL))) __PYX_ERR(0, 4729, __pyx_L1_error)
          __pyx_v_block = __pyx_t_5;
+4730:                     Rack_Set__(blocks, block_index, block)  # update pointer
          (void)(__pyx_f_11cbytesparse_2_c_Rack_Set__(__pyx_v_blocks, __pyx_v_block_index, __pyx_v_block));
 4731:                 else:
+4732:                     try:
        /*else*/ {
          {
            /*try:*/ {
/* … */
            }
            __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
            __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
            __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
            goto __pyx_L12_try_end;
            __pyx_L7_error:;
/* … */
            __Pyx_XGIVEREF(__pyx_t_6);
            __Pyx_XGIVEREF(__pyx_t_7);
            __Pyx_XGIVEREF(__pyx_t_8);
            __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
            goto __pyx_L1_error;
            __pyx_L12_try_end:;
          }
        }
        __pyx_L6:;
+4733:                         CheckAddrToSizeU(start - block_start)
              __pyx_t_4 = __pyx_f_11cbytesparse_2_c_CheckAddrToSizeU((__pyx_v_start - __pyx_v_block_start)); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4733, __pyx_L7_error)
+4734:                         block = Block_GetSlice_(block, 0, start - block_start)
              __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Block_GetSlice_(__pyx_v_block, 0, (__pyx_v_start - __pyx_v_block_start)); if (unlikely(__pyx_t_5 == ((Block_ *)NULL))) __PYX_ERR(0, 4734, __pyx_L7_error)
              __pyx_v_block = __pyx_t_5;
+4735:                         block.address = block_start
              __pyx_v_block->address = __pyx_v_block_start;
+4736:                         that.blocks = blocks = Rack_Insert_(blocks, block_index, block)
              __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_Insert_(__pyx_v_blocks, __pyx_v_block_index, __pyx_v_block); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 4736, __pyx_L7_error)
              __pyx_v_that->blocks = __pyx_t_1;
              __pyx_v_blocks = __pyx_t_1;
+4737:                     except:
            /*except:*/ {
              __Pyx_AddTraceback("cbytesparse._c.Memory_Erase__", __pyx_clineno, __pyx_lineno, __pyx_filename);
              if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_10, &__pyx_t_11) < 0) __PYX_ERR(0, 4737, __pyx_L9_except_error)
              __Pyx_GOTREF(__pyx_t_9);
              __Pyx_GOTREF(__pyx_t_10);
              __Pyx_GOTREF(__pyx_t_11);
+4738:                         block = Block_Free(block)  # orphan
              __pyx_v_block = __pyx_f_11cbytesparse_2_c_Block_Free(__pyx_v_block);
+4739:                         raise
              __Pyx_GIVEREF(__pyx_t_9);
              __Pyx_GIVEREF(__pyx_t_10);
              __Pyx_XGIVEREF(__pyx_t_11);
              __Pyx_ErrRestoreWithState(__pyx_t_9, __pyx_t_10, __pyx_t_11);
              __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; 
              __PYX_ERR(0, 4739, __pyx_L9_except_error)
            }
            __pyx_L9_except_error:;
+4740:                 block_index += 1  # skip this from inner part
        __pyx_v_block_index = (__pyx_v_block_index + 1);
 4741: 
 4742:         # Delete initial part of deletion end block
+4743:         inner_start = block_index
    __pyx_v_inner_start = __pyx_v_block_index;
+4744:         for block_index in range(block_index, Rack_Length(blocks)):
    __pyx_t_12 = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
    __pyx_t_13 = __pyx_t_12;
    for (__pyx_t_14 = __pyx_v_block_index; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
      __pyx_v_block_index = __pyx_t_14;
+4745:             block = Rack_Get__(blocks, block_index)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
 4746: 
+4747:             block_start = Block_Start(block)
      __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+4748:             if endex <= block_start:
      __pyx_t_2 = ((__pyx_v_endex <= __pyx_v_block_start) != 0);
      if (__pyx_t_2) {
/* … */
      }
+4749:                 break  # inner ends before here
        goto __pyx_L16_break;
 4750: 
+4751:             block_endex = Block_Endex(block)
      __pyx_v_block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
+4752:             if endex < block_endex:
      __pyx_t_2 = ((__pyx_v_endex < __pyx_v_block_endex) != 0);
      if (__pyx_t_2) {
/* … */
      }
    }
    /*else*/ {
+4753:                 offset = endex - block_start
        __pyx_v_offset = (__pyx_v_endex - __pyx_v_block_start);
+4754:                 CheckAddrToSizeU(offset)
        __pyx_t_4 = __pyx_f_11cbytesparse_2_c_CheckAddrToSizeU(__pyx_v_offset); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4754, __pyx_L1_error)
+4755:                 CheckAddAddrU(block.address, offset)
        __pyx_t_4 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_block->address, __pyx_v_offset); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4755, __pyx_L1_error)
+4756:                 block = Block_DelSlice_(block, 0, <size_t>offset)
        __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Block_DelSlice_(__pyx_v_block, 0, ((size_t)__pyx_v_offset)); if (unlikely(__pyx_t_5 == ((Block_ *)NULL))) __PYX_ERR(0, 4756, __pyx_L1_error)
        __pyx_v_block = __pyx_t_5;
+4757:                 block.address += offset  # update address
        __pyx_v_block->address = (__pyx_v_block->address + __pyx_v_offset);
+4758:                 Rack_Set__(blocks, block_index, block)  # update pointer
        (void)(__pyx_f_11cbytesparse_2_c_Rack_Set__(__pyx_v_blocks, __pyx_v_block_index, __pyx_v_block));
+4759:                 break  # inner ends before here
        goto __pyx_L16_break;
 4760:         else:
+4761:             block_index = Rack_Length(blocks)
      __pyx_v_block_index = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
    }
    __pyx_L16_break:;
+4762:         inner_endex = block_index
    __pyx_v_inner_endex = __pyx_v_block_index;
 4763: 
+4764:         if merge_deletion:
    __pyx_t_2 = (__pyx_v_merge_deletion != 0);
    if (__pyx_t_2) {
/* … */
    }
 4765:             # Check if inner deletion can be merged
+4766:             if inner_start and inner_endex < Rack_Length(blocks):
      __pyx_t_15 = (__pyx_v_inner_start != 0);
      if (__pyx_t_15) {
      } else {
        __pyx_t_2 = __pyx_t_15;
        goto __pyx_L21_bool_binop_done;
      }
      __pyx_t_15 = ((__pyx_v_inner_endex < __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks)) != 0);
      __pyx_t_2 = __pyx_t_15;
      __pyx_L21_bool_binop_done:;
      if (__pyx_t_2) {
/* … */
      }
+4767:                 block = Rack_Get__(blocks, inner_start - 1)
        __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, (__pyx_v_inner_start - 1));
+4768:                 block_endex = Block_Endex(block)
        __pyx_v_block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
 4769: 
+4770:                 block2 = Rack_Get__(blocks, inner_endex)
        __pyx_v_block2 = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_inner_endex);
+4771:                 block_start2 = Block_Start(block2)
        __pyx_v_block_start2 = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block2);
 4772: 
+4773:                 if block_endex + size == block_start2:
        __pyx_t_2 = (((__pyx_v_block_endex + __pyx_v_size) == __pyx_v_block_start2) != 0);
        if (__pyx_t_2) {
/* … */
        }
+4774:                     block = Block_Extend(block, block2)  # merge deletion boundaries
          __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Block_Extend(__pyx_v_block, __pyx_v_block2); if (unlikely(__pyx_t_5 == ((Block_ *)NULL))) __PYX_ERR(0, 4774, __pyx_L1_error)
          __pyx_v_block = __pyx_t_5;
+4775:                     Rack_Set__(blocks, inner_start - 1, block)  # update pointer
          (void)(__pyx_f_11cbytesparse_2_c_Rack_Set__(__pyx_v_blocks, (__pyx_v_inner_start - 1), __pyx_v_block));
+4776:                     inner_endex += 1  # add to inner deletion
          __pyx_v_inner_endex = (__pyx_v_inner_endex + 1);
+4777:                     block_index += 1  # skip address update
          __pyx_v_block_index = (__pyx_v_block_index + 1);
 4778: 
+4779:         if shift_after:
    __pyx_t_2 = (__pyx_v_shift_after != 0);
    if (__pyx_t_2) {
/* … */
    }
 4780:             # Shift blocks after deletion
+4781:             for block_index in range(block_index, Rack_Length(blocks)):
      __pyx_t_12 = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
      __pyx_t_13 = __pyx_t_12;
      for (__pyx_t_14 = __pyx_v_block_index; __pyx_t_14 < __pyx_t_13; __pyx_t_14+=1) {
        __pyx_v_block_index = __pyx_t_14;
+4782:                 block = Rack_Get__(blocks, block_index)
        __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+4783:                 CheckSubAddrU(block.address, size)
        __pyx_t_4 = __pyx_f_11cbytesparse_2_c_CheckSubAddrU(__pyx_v_block->address, __pyx_v_size); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4783, __pyx_L1_error)
+4784:                 block.address -= size  # update address
        __pyx_v_block->address = (__pyx_v_block->address - __pyx_v_size);
      }
 4785: 
 4786:         # Delete inner full blocks
+4787:         if inner_start < inner_endex:
    __pyx_t_2 = ((__pyx_v_inner_start < __pyx_v_inner_endex) != 0);
    if (__pyx_t_2) {
/* … */
    }
+4788:             that.blocks = blocks = Rack_DelSlice_(blocks, inner_start, inner_endex)
      __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rack_DelSlice_(__pyx_v_blocks, __pyx_v_inner_start, __pyx_v_inner_endex); if (unlikely(__pyx_t_1 == ((Rack_ *)NULL))) __PYX_ERR(0, 4788, __pyx_L1_error)
      __pyx_v_that->blocks = __pyx_t_1;
      __pyx_v_blocks = __pyx_t_1;
 4789: 
 4790: 
+4791: cdef vint Memory_InsertSame_(Memory_* that, addr_t address, Memory_* data, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_InsertSame_(Memory_ *__pyx_v_that, CYTHON_UNUSED addr_t __pyx_v_address, Memory_ *__pyx_v_data, PyObject *__pyx_v_backups) {
  addr_t __pyx_v_data_start;
  addr_t __pyx_v_data_endex;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_InsertSame_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_InsertSame_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4792:     cdef:
 4793:         addr_t data_start
 4794:         addr_t data_endex
 4795: 
+4796:     data_start = Memory_Start(data)
  __pyx_v_data_start = __pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_v_data);
+4797:     data_endex = Memory_Endex(data)
  __pyx_v_data_endex = __pyx_f_11cbytesparse_2_c_Memory_Endex(__pyx_v_data);
 4798: 
+4799:     if data_start < data_endex:
  __pyx_t_1 = ((__pyx_v_data_start < __pyx_v_data_endex) != 0);
  if (__pyx_t_1) {
/* … */
  }
+4800:         Memory_Reserve_(that, data_start, data_endex, backups)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_Reserve_(__pyx_v_that, __pyx_v_data_start, __pyx_v_data_endex, __pyx_v_backups); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4800, __pyx_L1_error)
+4801:         Memory_WriteSame_(that, data_start, data, False, backups)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_WriteSame_(__pyx_v_that, __pyx_v_data_start, __pyx_v_data, 0, __pyx_v_backups); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4801, __pyx_L1_error)
 4802: 
 4803: 
+4804: cdef vint Memory_InsertRaw_(Memory_* that, addr_t address, size_t data_size, const byte_t* data_ptr,
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_InsertRaw_(Memory_ *__pyx_v_that, addr_t __pyx_v_address, size_t __pyx_v_data_size, byte_t const *__pyx_v_data_ptr, CYTHON_UNUSED PyObject *__pyx_v_backups) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_InsertRaw_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_InsertRaw_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4805:                             list backups) except -1:
+4806:     Memory_Insert__(that, address, data_size, data_ptr, True)  # TODO: backups
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Insert__(__pyx_v_that, __pyx_v_address, __pyx_v_data_size, __pyx_v_data_ptr, 1); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4806, __pyx_L1_error)
 4807: 
+4808:     if data_size:
  __pyx_t_2 = (__pyx_v_data_size != 0);
  if (__pyx_t_2) {
/* … */
  }
+4809:         Memory_Crop_(that, that.trim_start, that.trim_endex, None)  # TODO: pre-trimming
    __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Crop_(__pyx_v_that, __pyx_v_that->trim_start, __pyx_v_that->trim_endex, ((PyObject*)Py_None)); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4809, __pyx_L1_error)
 4810: 
 4811: 
+4812: cdef vint Memory_Insert(Memory_* that, object address, object data, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Insert(Memory_ *__pyx_v_that, PyObject *__pyx_v_address, PyObject *__pyx_v_data, PyObject *__pyx_v_backups) {
  addr_t __pyx_v_address_;
  __Pyx_memviewslice __pyx_v_data_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  byte_t __pyx_v_data_value;
  size_t __pyx_v_data_size;
  byte_t const *__pyx_v_data_ptr;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Insert", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Insert", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_data_view, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4813:     cdef:
+4814:         addr_t address_ = <addr_t>address
  __pyx_t_1 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_address); if (unlikely((__pyx_t_1 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4814, __pyx_L1_error)
  __pyx_v_address_ = ((addr_t)__pyx_t_1);
 4815:         const byte_t[:] data_view
 4816:         byte_t data_value
 4817:         size_t data_size
 4818:         const byte_t* data_ptr
 4819: 
+4820:     if isinstance(data, Memory):
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_data, __pyx_ptype_11cbytesparse_2_c_Memory); 
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L3;
  }
+4821:         Memory_InsertSame_(that, address_, (<Memory>data)._, backups)
    __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_InsertSame_(__pyx_v_that, __pyx_v_address_, ((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_data)->_, __pyx_v_backups); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4821, __pyx_L1_error)
 4822: 
 4823:     else:
+4824:         if isinstance(data, int):
  /*else*/ {
    __pyx_t_3 = PyInt_Check(__pyx_v_data); 
    __pyx_t_2 = (__pyx_t_3 != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L4;
    }
+4825:             data_value = <byte_t>data
      __pyx_t_5 = __Pyx_PyInt_As_byte_t(__pyx_v_data); if (unlikely((__pyx_t_5 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4825, __pyx_L1_error)
      __pyx_v_data_value = ((byte_t)__pyx_t_5);
+4826:             data_size = 1
      __pyx_v_data_size = 1;
+4827:             data_ptr = &data_value
      __pyx_v_data_ptr = (&__pyx_v_data_value);
 4828:         else:
+4829:             data_view = data
    /*else*/ {
      __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(__pyx_v_data, 0); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 4829, __pyx_L1_error)
      __pyx_v_data_view = __pyx_t_6;
      __pyx_t_6.memview = NULL;
      __pyx_t_6.data = NULL;
+4830:             data_size = len(data_view)
      __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_data_view); 
      __pyx_v_data_size = __pyx_t_7;
 4831:             with cython.boundscheck(False):
+4832:                 data_ptr = &data_view[0]
      __pyx_t_8 = 0;
      if (__pyx_t_8 < 0) __pyx_t_8 += __pyx_v_data_view.shape[0];
      __pyx_v_data_ptr = (&(*((byte_t const  *) ( /* dim=0 */ (__pyx_v_data_view.data + __pyx_t_8 * __pyx_v_data_view.strides[0]) ))));
    }
    __pyx_L4:;
 4833: 
+4834:         Memory_InsertRaw_(that, address_, data_size, data_ptr, backups)
    __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_InsertRaw_(__pyx_v_that, __pyx_v_address_, __pyx_v_data_size, __pyx_v_data_ptr, __pyx_v_backups); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4834, __pyx_L1_error)
  }
  __pyx_L3:;
 4835: 
 4836: 
+4837: cdef vint Memory_Delete_(Memory_* that, addr_t start, addr_t endex, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Delete_(Memory_ *__pyx_v_that, addr_t __pyx_v_start, addr_t __pyx_v_endex, PyObject *__pyx_v_backups) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Delete_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Delete_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4838:     if start < endex:
  __pyx_t_1 = ((__pyx_v_start < __pyx_v_endex) != 0);
  if (__pyx_t_1) {
/* … */
  }
+4839:         if backups is not None:
    __pyx_t_1 = (__pyx_v_backups != ((PyObject*)Py_None));
    __pyx_t_2 = (__pyx_t_1 != 0);
    if (__pyx_t_2) {
/* … */
    }
+4840:             backups.append(Memory_Extract_(that, start, endex, 0, NULL, 1, True))
      if (unlikely(__pyx_v_backups == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
        __PYX_ERR(0, 4840, __pyx_L1_error)
      }
      __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Memory_Extract_(__pyx_v_that, __pyx_v_start, __pyx_v_endex, 0, NULL, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4840, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_backups, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4840, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 4841: 
+4842:         Memory_Erase__(that, start, endex, True, True)  # delete
    __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_start, __pyx_v_endex, 1, 1); if (unlikely(__pyx_t_5 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4842, __pyx_L1_error)
 4843: 
 4844: 
+4845: cdef vint Memory_Delete(Memory_* that, object start, object endex, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Delete(Memory_ *__pyx_v_that, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_backups) {
  addr_t __pyx_v_start_;
  addr_t __pyx_v_endex_;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Delete", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_Delete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4846:     cdef:
 4847:         addr_t start_
 4848:         addr_t endex_
 4849: 
+4850:     start_, endex_ = Memory_Bound(that, start, endex)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Bound(__pyx_v_that, __pyx_v_start, __pyx_v_endex); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4850, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_1.f0;
  __pyx_t_3 = __pyx_t_1.f1;
  __pyx_v_start_ = __pyx_t_2;
  __pyx_v_endex_ = __pyx_t_3;
+4851:     Memory_Delete_(that, start_, endex_, backups)
  __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Delete_(__pyx_v_that, __pyx_v_start_, __pyx_v_endex_, __pyx_v_backups); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4851, __pyx_L1_error)
 4852: 
 4853: 
+4854: cdef vint Memory_Clear_(Memory_* that, addr_t start, addr_t endex, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Clear_(Memory_ *__pyx_v_that, addr_t __pyx_v_start, addr_t __pyx_v_endex, PyObject *__pyx_v_backups) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Clear_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Clear_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+4855:     if start < endex:
  __pyx_t_1 = ((__pyx_v_start < __pyx_v_endex) != 0);
  if (__pyx_t_1) {
/* … */
  }
+4856:         if backups is not None:
    __pyx_t_1 = (__pyx_v_backups != ((PyObject*)Py_None));
    __pyx_t_2 = (__pyx_t_1 != 0);
    if (__pyx_t_2) {
/* … */
    }
+4857:             backups.append(Memory_Extract_(that, start, endex, 0, NULL, 1, True))
      if (unlikely(__pyx_v_backups == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
        __PYX_ERR(0, 4857, __pyx_L1_error)
      }
      __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Memory_Extract_(__pyx_v_that, __pyx_v_start, __pyx_v_endex, 0, NULL, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4857, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_backups, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4857, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 4858: 
+4859:         Memory_Erase__(that, start, endex, False, False)  # clear
    __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_start, __pyx_v_endex, 0, 0); if (unlikely(__pyx_t_5 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4859, __pyx_L1_error)
 4860: 
 4861: 
+4862: cdef vint Memory_Clear(Memory_* that, object start, object endex, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Clear(Memory_ *__pyx_v_that, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_backups) {
  addr_t __pyx_v_start_;
  addr_t __pyx_v_endex_;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Clear", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_Clear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4863:     cdef:
 4864:         addr_t start_
 4865:         addr_t endex_
 4866: 
+4867:     start_, endex_ = Memory_Bound(that, start, endex)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Bound(__pyx_v_that, __pyx_v_start, __pyx_v_endex); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4867, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_1.f0;
  __pyx_t_3 = __pyx_t_1.f1;
  __pyx_v_start_ = __pyx_t_2;
  __pyx_v_endex_ = __pyx_t_3;
+4868:     Memory_Clear_(that, start_, endex_, backups)
  __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Clear_(__pyx_v_that, __pyx_v_start_, __pyx_v_endex_, __pyx_v_backups); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4868, __pyx_L1_error)
 4869: 
 4870: 
+4871: cdef vint Memory_PretrimStart_(Memory_* that, addr_t endex_max, addr_t size, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_PretrimStart_(Memory_ *__pyx_v_that, addr_t __pyx_v_endex_max, addr_t __pyx_v_size, PyObject *__pyx_v_backups) {
  addr_t __pyx_v_trim_start;
  addr_t __pyx_v_endex;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_PretrimStart_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cbytesparse._c.Memory_PretrimStart_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4872:     cdef:
 4873:         addr_t trim_start
 4874:         addr_t endex
 4875: 
+4876:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+4877:         trim_start = that.trim_start if that.trim_start_ else ADDR_MIN
    if ((__pyx_v_that->trim_start_ != 0)) {
      __pyx_t_2 = __pyx_v_that->trim_start;
    } else {
      __pyx_t_2 = ADDR_MIN;
    }
    __pyx_v_trim_start = __pyx_t_2;
+4878:         if CannotAddAddrU(trim_start, size):
    __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotAddAddrU(__pyx_v_trim_start, __pyx_v_size) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L4;
    }
+4879:             endex = ADDR_MAX
      __pyx_v_endex = ADDR_MAX;
 4880:         else:
+4881:             endex = trim_start + size
    /*else*/ {
      __pyx_v_endex = (__pyx_v_trim_start + __pyx_v_size);
    }
    __pyx_L4:;
 4882: 
+4883:         if endex > endex_max:
    __pyx_t_1 = ((__pyx_v_endex > __pyx_v_endex_max) != 0);
    if (__pyx_t_1) {
/* … */
    }
+4884:             endex = endex_max
      __pyx_v_endex = __pyx_v_endex_max;
 4885: 
+4886:         if backups is not None:
    __pyx_t_1 = (__pyx_v_backups != ((PyObject*)Py_None));
    __pyx_t_3 = (__pyx_t_1 != 0);
    if (__pyx_t_3) {
/* … */
    }
+4887:             backups.append(Memory_Extract_(that, 0, endex, 0, NULL, 1, True))
      if (unlikely(__pyx_v_backups == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
        __PYX_ERR(0, 4887, __pyx_L1_error)
      }
      __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Extract_(__pyx_v_that, 0, __pyx_v_endex, 0, NULL, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4887, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_backups, __pyx_t_4); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 4887, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 4888: 
+4889:         Memory_Erase__(that, ADDR_MIN, endex, False, False)  # clear
    __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, ADDR_MIN, __pyx_v_endex, 0, 0); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4889, __pyx_L1_error)
 4890: 
 4891: 
+4892: cdef vint Memory_PretrimStart(Memory_* that, object endex_max, object size, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_PretrimStart(Memory_ *__pyx_v_that, PyObject *__pyx_v_endex_max, PyObject *__pyx_v_size, PyObject *__pyx_v_backups) {
  addr_t __pyx_v_endex_max_;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_PretrimStart", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_PretrimStart", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4893:         cdef:
+4894:             addr_t endex_max_ = ADDR_MAX if endex_max is None else <addr_t>endex_max
  __pyx_t_2 = (__pyx_v_endex_max == Py_None);
  if ((__pyx_t_2 != 0)) {
    __pyx_t_1 = ADDR_MAX;
  } else {
    __pyx_t_3 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_endex_max); if (unlikely((__pyx_t_3 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4894, __pyx_L1_error)
    __pyx_t_1 = ((addr_t)__pyx_t_3);
  }
  __pyx_v_endex_max_ = __pyx_t_1;
 4895: 
+4896:         Memory_PretrimStart_(that, endex_max_, <addr_t>size, backups)
  __pyx_t_1 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_size); if (unlikely((__pyx_t_1 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4896, __pyx_L1_error)
  __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_PretrimStart_(__pyx_v_that, __pyx_v_endex_max_, ((addr_t)__pyx_t_1), __pyx_v_backups); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4896, __pyx_L1_error)
 4897: 
 4898: 
+4899: cdef vint Memory_PretrimEndex_(Memory_* that, addr_t start_min, addr_t size, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_PretrimEndex_(Memory_ *__pyx_v_that, addr_t __pyx_v_start_min, addr_t __pyx_v_size, PyObject *__pyx_v_backups) {
  addr_t __pyx_v_trim_endex;
  addr_t __pyx_v_start;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_PretrimEndex_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cbytesparse._c.Memory_PretrimEndex_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4900:     cdef:
 4901:         addr_t trim_endex
 4902:         addr_t start
 4903: 
+4904:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+4905:         trim_endex = that.trim_endex if that.trim_endex_ else ADDR_MAX
    if ((__pyx_v_that->trim_endex_ != 0)) {
      __pyx_t_2 = __pyx_v_that->trim_endex;
    } else {
      __pyx_t_2 = ADDR_MAX;
    }
    __pyx_v_trim_endex = __pyx_t_2;
+4906:         if CannotSubAddrU(trim_endex, size):
    __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotSubAddrU(__pyx_v_trim_endex, __pyx_v_size) != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L4;
    }
+4907:             start = ADDR_MIN
      __pyx_v_start = ADDR_MIN;
 4908:         else:
+4909:             start = trim_endex - size
    /*else*/ {
      __pyx_v_start = (__pyx_v_trim_endex - __pyx_v_size);
    }
    __pyx_L4:;
 4910: 
+4911:         if start < start_min:
    __pyx_t_1 = ((__pyx_v_start < __pyx_v_start_min) != 0);
    if (__pyx_t_1) {
/* … */
    }
+4912:             start = start_min
      __pyx_v_start = __pyx_v_start_min;
 4913: 
+4914:         if backups is not None:
    __pyx_t_1 = (__pyx_v_backups != ((PyObject*)Py_None));
    __pyx_t_3 = (__pyx_t_1 != 0);
    if (__pyx_t_3) {
/* … */
    }
+4915:             backups.append(Memory_Extract_(that, start, ADDR_MAX, 0, NULL, 1, True))
      if (unlikely(__pyx_v_backups == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
        __PYX_ERR(0, 4915, __pyx_L1_error)
      }
      __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Extract_(__pyx_v_that, __pyx_v_start, ADDR_MAX, 0, NULL, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4915, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_backups, __pyx_t_4); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 4915, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 4916: 
+4917:         Memory_Erase__(that, start, ADDR_MAX, False, False)  # clear
    __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_start, ADDR_MAX, 0, 0); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4917, __pyx_L1_error)
 4918: 
 4919: 
+4920: cdef vint Memory_PretrimEndex(Memory_* that, object start_min, object size, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_PretrimEndex(Memory_ *__pyx_v_that, PyObject *__pyx_v_start_min, PyObject *__pyx_v_size, PyObject *__pyx_v_backups) {
  addr_t __pyx_v_start_min_;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_PretrimEndex", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_PretrimEndex", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4921:         cdef:
+4922:             addr_t start_min_ = ADDR_MIN if start_min is None else <addr_t>start_min
  __pyx_t_2 = (__pyx_v_start_min == Py_None);
  if ((__pyx_t_2 != 0)) {
    __pyx_t_1 = ADDR_MIN;
  } else {
    __pyx_t_3 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_start_min); if (unlikely((__pyx_t_3 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4922, __pyx_L1_error)
    __pyx_t_1 = ((addr_t)__pyx_t_3);
  }
  __pyx_v_start_min_ = __pyx_t_1;
 4923: 
+4924:         Memory_PretrimEndex_(that, start_min_, <addr_t>size, backups)
  __pyx_t_1 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_size); if (unlikely((__pyx_t_1 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 4924, __pyx_L1_error)
  __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_PretrimEndex_(__pyx_v_that, __pyx_v_start_min_, ((addr_t)__pyx_t_1), __pyx_v_backups); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4924, __pyx_L1_error)
 4925: 
 4926: 
+4927: cdef vint Memory_Crop_(Memory_* that, addr_t start, addr_t endex, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Crop_(Memory_ *__pyx_v_that, addr_t __pyx_v_start, addr_t __pyx_v_endex, PyObject *__pyx_v_backups) {
  addr_t __pyx_v_block_start;
  addr_t __pyx_v_block_endex;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Crop_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Crop_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4928:     cdef:
 4929:         addr_t block_start
 4930:         addr_t block_endex
 4931: 
 4932:     # Trim blocks exceeding before memory start
+4933:     if Rack_Length(that.blocks):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_that->blocks) != 0);
  if (__pyx_t_1) {
/* … */
  }
+4934:         block_start = Block_Start(Rack_First_(that.blocks))
    __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_f_11cbytesparse_2_c_Rack_First_(__pyx_v_that->blocks));
 4935: 
+4936:         if block_start < start:
    __pyx_t_1 = ((__pyx_v_block_start < __pyx_v_start) != 0);
    if (__pyx_t_1) {
/* … */
    }
+4937:             if backups is not None:
      __pyx_t_1 = (__pyx_v_backups != ((PyObject*)Py_None));
      __pyx_t_2 = (__pyx_t_1 != 0);
      if (__pyx_t_2) {
/* … */
      }
+4938:                 backups.append(Memory_Extract_(that, block_start, start, 0, NULL, 1, True))
        if (unlikely(__pyx_v_backups == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
          __PYX_ERR(0, 4938, __pyx_L1_error)
        }
        __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Memory_Extract_(__pyx_v_that, __pyx_v_block_start, __pyx_v_start, 0, NULL, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4938, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_backups, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4938, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 4939: 
+4940:             Memory_Erase__(that, block_start, start, False, False)  # clear
      __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_block_start, __pyx_v_start, 0, 0); if (unlikely(__pyx_t_5 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4940, __pyx_L1_error)
 4941: 
 4942:     # Trim blocks exceeding after memory end
+4943:     if Rack_Length(that.blocks):
  __pyx_t_2 = (__pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_that->blocks) != 0);
  if (__pyx_t_2) {
/* … */
  }
+4944:         block_endex = Block_Endex(Rack_Last_(that.blocks))
    __pyx_v_block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_f_11cbytesparse_2_c_Rack_Last_(__pyx_v_that->blocks));
 4945: 
+4946:         if endex < block_endex:
    __pyx_t_2 = ((__pyx_v_endex < __pyx_v_block_endex) != 0);
    if (__pyx_t_2) {
/* … */
    }
+4947:             if backups is not None:
      __pyx_t_2 = (__pyx_v_backups != ((PyObject*)Py_None));
      __pyx_t_1 = (__pyx_t_2 != 0);
      if (__pyx_t_1) {
/* … */
      }
+4948:                 backups.append(Memory_Extract_(that, endex, block_endex, 0, NULL, 1, True))
        if (unlikely(__pyx_v_backups == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
          __PYX_ERR(0, 4948, __pyx_L1_error)
        }
        __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Memory_Extract_(__pyx_v_that, __pyx_v_endex, __pyx_v_block_endex, 0, NULL, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 4948, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_backups, __pyx_t_3); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 4948, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 4949: 
+4950:             Memory_Erase__(that, endex, block_endex, False, False)  # clear
      __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_endex, __pyx_v_block_endex, 0, 0); if (unlikely(__pyx_t_5 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4950, __pyx_L1_error)
 4951: 
 4952: 
+4953: cdef vint Memory_Crop(Memory_* that, object start, object endex, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Crop(Memory_ *__pyx_v_that, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_backups) {
  addr_t __pyx_v_start_;
  addr_t __pyx_v_endex_;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Crop", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_Crop", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4954:     cdef:
 4955:         addr_t start_
 4956:         addr_t endex_
 4957: 
+4958:     start_, endex_ = Memory_Bound(that, start, endex)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Bound(__pyx_v_that, __pyx_v_start, __pyx_v_endex); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 4958, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_1.f0;
  __pyx_t_3 = __pyx_t_1.f1;
  __pyx_v_start_ = __pyx_t_2;
  __pyx_v_endex_ = __pyx_t_3;
+4959:     Memory_Crop_(that, start_, endex_, backups)
  __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Crop_(__pyx_v_that, __pyx_v_start_, __pyx_v_endex_, __pyx_v_backups); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4959, __pyx_L1_error)
 4960: 
 4961: 
+4962: cdef vint Memory_WriteSame_(Memory_* that, addr_t address, const Memory_* data, bint clear, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_WriteSame_(Memory_ *__pyx_v_that, addr_t __pyx_v_address, Memory_ const *__pyx_v_data, int __pyx_v_clear, PyObject *__pyx_v_backups) {
  addr_t __pyx_v_data_start;
  addr_t __pyx_v_data_endex;
  addr_t __pyx_v_size;
  Rack_ const *__pyx_v_blocks;
  size_t __pyx_v_block_index;
  Block_ const *__pyx_v_block;
  addr_t __pyx_v_block_start;
  addr_t __pyx_v_block_endex;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_WriteSame_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cbytesparse._c.Memory_WriteSame_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 4963:     cdef:
 4964:         addr_t data_start
 4965:         addr_t data_endex
 4966:         addr_t size
 4967:         const Rack_* blocks
 4968:         size_t block_index
 4969:         const Block_* block
 4970:         addr_t block_start
 4971:         addr_t block_endex
 4972: 
+4973:     data_start = Memory_Start(data)
  __pyx_v_data_start = __pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_v_data);
+4974:     data_endex = Memory_Endex(data)
  __pyx_v_data_endex = __pyx_f_11cbytesparse_2_c_Memory_Endex(__pyx_v_data);
+4975:     size = data_endex - data_start
  __pyx_v_size = (__pyx_v_data_endex - __pyx_v_data_start);
+4976:     blocks = data.blocks
  __pyx_t_1 = __pyx_v_data->blocks;
  __pyx_v_blocks = __pyx_t_1;
 4977: 
+4978:     if size:
  __pyx_t_2 = (__pyx_v_size != 0);
  if (__pyx_t_2) {
/* … */
  }
+4979:         if clear:
    __pyx_t_2 = (__pyx_v_clear != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L4;
    }
 4980:             # Clear anything between source data boundaries
+4981:             if backups is not None:
      __pyx_t_2 = (__pyx_v_backups != ((PyObject*)Py_None));
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
/* … */
      }
+4982:                 backups.append(Memory_Extract_(that, data_start, data_endex, 0, NULL, 1, True))
        if (unlikely(__pyx_v_backups == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
          __PYX_ERR(0, 4982, __pyx_L1_error)
        }
        __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Extract_(__pyx_v_that, __pyx_v_data_start, __pyx_v_data_endex, 0, NULL, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 4982, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_4);
        __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_backups, __pyx_t_4); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 4982, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 4983: 
+4984:             Memory_Erase__(that, data_start, data_endex, False, False)  # clear
      __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_data_start, __pyx_v_data_endex, 0, 0); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4984, __pyx_L1_error)
 4985: 
 4986:         else:
 4987:             # Clear only overwritten ranges
+4988:             for block_index in range(Rack_Length(blocks)):
    /*else*/ {
      __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
      __pyx_t_8 = __pyx_t_7;
      for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
        __pyx_v_block_index = __pyx_t_9;
+4989:                 block = Rack_Get__(blocks, block_index)
        __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
 4990: 
+4991:                 block_start = Block_Start(block)
        __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+4992:                 CheckAddAddrU(block_start, address)
        __pyx_t_6 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_block_start, __pyx_v_address); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4992, __pyx_L1_error)
+4993:                 block_start += address
        __pyx_v_block_start = (__pyx_v_block_start + __pyx_v_address);
 4994: 
+4995:                 block_endex = Block_Endex(block)
        __pyx_v_block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
+4996:                 CheckAddAddrU(block_endex, address)
        __pyx_t_6 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_block_endex, __pyx_v_address); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 4996, __pyx_L1_error)
+4997:                 block_endex += address
        __pyx_v_block_endex = (__pyx_v_block_endex + __pyx_v_address);
 4998: 
+4999:                 if backups is not None:
        __pyx_t_3 = (__pyx_v_backups != ((PyObject*)Py_None));
        __pyx_t_2 = (__pyx_t_3 != 0);
        if (__pyx_t_2) {
/* … */
        }
+5000:                     backups.append(Memory_Extract_(that, block_start, block_endex, 0, NULL, 1, True))
          if (unlikely(__pyx_v_backups == Py_None)) {
            PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
            __PYX_ERR(0, 5000, __pyx_L1_error)
          }
          __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_Extract_(__pyx_v_that, __pyx_v_block_start, __pyx_v_block_endex, 0, NULL, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5000, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_backups, __pyx_t_4); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 5000, __pyx_L1_error)
          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 5001: 
+5002:                 Memory_Erase__(that, block_start, block_endex, False, False)  # clear
        __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_block_start, __pyx_v_block_endex, 0, 0); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5002, __pyx_L1_error)
      }
    }
    __pyx_L4:;
 5003: 
+5004:         for block_index in range(Rack_Length(blocks)):
    __pyx_t_7 = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
    __pyx_t_8 = __pyx_t_7;
    for (__pyx_t_9 = 0; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
      __pyx_v_block_index = __pyx_t_9;
+5005:             block = Rack_Get__(blocks, block_index)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+5006:             block_start = Block_Start(block)
      __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+5007:             CheckAddAddrU(block_start, address)
      __pyx_t_6 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_block_start, __pyx_v_address); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5007, __pyx_L1_error)
+5008:             Memory_Insert__(that, block_start + address, Block_Length(block), Block_At__(block, 0), False)  # insert
      __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_Insert__(__pyx_v_that, (__pyx_v_block_start + __pyx_v_address), __pyx_f_11cbytesparse_2_c_Block_Length(__pyx_v_block), __pyx_f_11cbytesparse_2_c_Block_At__(__pyx_v_block, 0), 0); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5008, __pyx_L1_error)
    }
 5009: 
+5010:         Memory_Crop_(that, that.trim_start, that.trim_endex, None)  # FIXME: prevent after-cropping; trim while writing
    __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_Crop_(__pyx_v_that, __pyx_v_that->trim_start, __pyx_v_that->trim_endex, ((PyObject*)Py_None)); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5010, __pyx_L1_error)
 5011: 
 5012: 
+5013: cdef vint Memory_WriteRaw_(Memory_* that, addr_t address, size_t data_size, const byte_t* data_ptr,
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_WriteRaw_(Memory_ *__pyx_v_that, addr_t __pyx_v_address, size_t __pyx_v_data_size, byte_t const *__pyx_v_data_ptr, PyObject *__pyx_v_backups) {
  addr_t __pyx_v_size;
  addr_t __pyx_v_start;
  addr_t __pyx_v_endex;
  addr_t __pyx_v_trim_start;
  addr_t __pyx_v_trim_endex;
  addr_t __pyx_v_offset;
  Rack_ *__pyx_v_blocks;
  size_t __pyx_v_block_count;
  Block_ *__pyx_v_block;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_WriteRaw_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("cbytesparse._c.Memory_WriteRaw_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5014:                            list backups) except -1:
 5015:     cdef:
+5016:         addr_t size = data_size
  __pyx_v_size = __pyx_v_data_size;
 5017:         addr_t start
 5018:         addr_t endex
 5019:         addr_t trim_start
 5020:         addr_t trim_endex
 5021:         addr_t offset
 5022:         Rack_* blocks
 5023:         size_t block_count
 5024:         Block_* block
 5025: 
+5026:     if CannotAddAddrU(address, size):
  __pyx_t_1 = (__pyx_f_11cbytesparse_2_c_CannotAddAddrU(__pyx_v_address, __pyx_v_size) != 0);
  if (__pyx_t_1) {
/* … */
  }
+5027:         size = ADDR_MAX - address
    __pyx_v_size = (ADDR_MAX - __pyx_v_address);
 5028: 
+5029:     if size:
  __pyx_t_1 = (__pyx_v_size != 0);
  if (__pyx_t_1) {
/* … */
  }
+5030:         start = address
    __pyx_v_start = __pyx_v_address;
+5031:         endex = start + size
    __pyx_v_endex = (__pyx_v_start + __pyx_v_size);
 5032: 
+5033:         trim_endex = that.trim_endex if that.trim_endex_ else ADDR_MAX
    if ((__pyx_v_that->trim_endex_ != 0)) {
      __pyx_t_2 = __pyx_v_that->trim_endex;
    } else {
      __pyx_t_2 = ADDR_MAX;
    }
    __pyx_v_trim_endex = __pyx_t_2;
+5034:         if start >= trim_endex:
    __pyx_t_1 = ((__pyx_v_start >= __pyx_v_trim_endex) != 0);
    if (__pyx_t_1) {
/* … */
    }
+5035:             return 0
      __pyx_r = 0;
      goto __pyx_L0;
+5036:         elif endex > trim_endex:
    __pyx_t_1 = ((__pyx_v_endex > __pyx_v_trim_endex) != 0);
    if (__pyx_t_1) {
/* … */
    }
+5037:             size -= endex - trim_endex
      __pyx_v_size = (__pyx_v_size - (__pyx_v_endex - __pyx_v_trim_endex));
+5038:             endex = start + size
      __pyx_v_endex = (__pyx_v_start + __pyx_v_size);
 5039: 
+5040:         trim_start = that.trim_start if that.trim_start_ else ADDR_MIN
    if ((__pyx_v_that->trim_start_ != 0)) {
      __pyx_t_2 = __pyx_v_that->trim_start;
    } else {
      __pyx_t_2 = ADDR_MIN;
    }
    __pyx_v_trim_start = __pyx_t_2;
+5041:         if endex <= trim_start:
    __pyx_t_1 = ((__pyx_v_endex <= __pyx_v_trim_start) != 0);
    if (__pyx_t_1) {
/* … */
    }
+5042:             return 0
      __pyx_r = 0;
      goto __pyx_L0;
+5043:         elif trim_start > start:
    __pyx_t_1 = ((__pyx_v_trim_start > __pyx_v_start) != 0);
    if (__pyx_t_1) {
/* … */
    }
+5044:             offset = trim_start - start
      __pyx_v_offset = (__pyx_v_trim_start - __pyx_v_start);
+5045:             size -= offset
      __pyx_v_size = (__pyx_v_size - __pyx_v_offset);
+5046:             start += offset
      __pyx_v_start = (__pyx_v_start + __pyx_v_offset);
+5047:             endex = start + size
      __pyx_v_endex = (__pyx_v_start + __pyx_v_size);
+5048:             data_ptr += offset
      __pyx_v_data_ptr = (__pyx_v_data_ptr + __pyx_v_offset);
 5049: 
+5050:         CheckAddrToSizeU(size)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_CheckAddrToSizeU(__pyx_v_size); if (unlikely(__pyx_t_3 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5050, __pyx_L1_error)
+5051:         if backups is not None:
    __pyx_t_1 = (__pyx_v_backups != ((PyObject*)Py_None));
    __pyx_t_4 = (__pyx_t_1 != 0);
    if (__pyx_t_4) {
/* … */
    }
+5052:             backups.append(Memory_Extract_(that, start, endex, 0, NULL, 1, True))
      if (unlikely(__pyx_v_backups == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
        __PYX_ERR(0, 5052, __pyx_L1_error)
      }
      __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Memory_Extract_(__pyx_v_that, __pyx_v_start, __pyx_v_endex, 0, NULL, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5052, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_backups, __pyx_t_5); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 5052, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 5053: 
+5054:         blocks = that.blocks
    __pyx_t_7 = __pyx_v_that->blocks;
    __pyx_v_blocks = __pyx_t_7;
+5055:         block_count = Rack_Length(blocks)
    __pyx_v_block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
+5056:         if block_count:
    __pyx_t_4 = (__pyx_v_block_count != 0);
    if (__pyx_t_4) {
/* … */
    }
+5057:             block = Rack_Get__(blocks, block_count - 1)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, (__pyx_v_block_count - 1));
+5058:             if start == Block_Endex(block):
      __pyx_t_4 = ((__pyx_v_start == __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block)) != 0);
      if (__pyx_t_4) {
/* … */
      }
+5059:                 block = Block_Extend_(block, <size_t>size, data_ptr)  # might be faster
        __pyx_t_8 = __pyx_f_11cbytesparse_2_c_Block_Extend_(__pyx_v_block, ((size_t)__pyx_v_size), __pyx_v_data_ptr); if (unlikely(__pyx_t_8 == ((Block_ *)NULL))) __PYX_ERR(0, 5059, __pyx_L1_error)
        __pyx_v_block = __pyx_t_8;
+5060:                 Rack_Set__(blocks, block_count - 1, block)  # update pointer
        (void)(__pyx_f_11cbytesparse_2_c_Rack_Set__(__pyx_v_blocks, (__pyx_v_block_count - 1), __pyx_v_block));
+5061:                 return 0
        __pyx_r = 0;
        goto __pyx_L0;
 5062: 
+5063:         if size == 1:
    __pyx_t_4 = ((__pyx_v_size == 1) != 0);
    if (__pyx_t_4) {
/* … */
      goto __pyx_L10;
    }
+5064:             Memory_Poke_(that, start, data_ptr[0])  # might be faster
      __pyx_t_9 = __pyx_f_11cbytesparse_2_c_Memory_Poke_(__pyx_v_that, __pyx_v_start, (__pyx_v_data_ptr[0])); if (unlikely(__pyx_t_9 == ((int)-2))) __PYX_ERR(0, 5064, __pyx_L1_error)
 5065:         else:
+5066:             Memory_Erase__(that, start, endex, False, True)  # insert
    /*else*/ {
      __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_start, __pyx_v_endex, 0, 1); if (unlikely(__pyx_t_3 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5066, __pyx_L1_error)
+5067:             Memory_Insert__(that, start, <size_t>size, data_ptr, False)
      __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Memory_Insert__(__pyx_v_that, __pyx_v_start, ((size_t)__pyx_v_size), __pyx_v_data_ptr, 0); if (unlikely(__pyx_t_3 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5067, __pyx_L1_error)
    }
    __pyx_L10:;
 5068: 
 5069: 
+5070: cdef vint Memory_Write(Memory_* that, object address, object data, bint clear, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Write(Memory_ *__pyx_v_that, PyObject *__pyx_v_address, PyObject *__pyx_v_data, int __pyx_v_clear, PyObject *__pyx_v_backups) {
  addr_t __pyx_v_address_;
  __Pyx_memviewslice __pyx_v_data_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  byte_t __pyx_v_data_value;
  size_t __pyx_v_data_size;
  byte_t const *__pyx_v_data_ptr;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Write", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_6, 1);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Write", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_data_view, 1);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5071:     cdef:
+5072:         addr_t address_ = <addr_t>address
  __pyx_t_1 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_address); if (unlikely((__pyx_t_1 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 5072, __pyx_L1_error)
  __pyx_v_address_ = ((addr_t)__pyx_t_1);
 5073:         const byte_t[:] data_view
 5074:         byte_t data_value
 5075:         size_t data_size
 5076:         const byte_t* data_ptr
 5077: 
+5078:     if isinstance(data, Memory):
  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_data, __pyx_ptype_11cbytesparse_2_c_Memory); 
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {
/* … */
    goto __pyx_L3;
  }
+5079:         Memory_WriteSame_(that, address_, (<Memory>data)._, <bint>clear, backups)
    __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_WriteSame_(__pyx_v_that, __pyx_v_address_, ((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_data)->_, (__pyx_v_clear != 0), __pyx_v_backups); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5079, __pyx_L1_error)
 5080: 
 5081:     else:
+5082:         if isinstance(data, int):
  /*else*/ {
    __pyx_t_3 = PyInt_Check(__pyx_v_data); 
    __pyx_t_2 = (__pyx_t_3 != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L4;
    }
+5083:             data_value = <byte_t>data
      __pyx_t_5 = __Pyx_PyInt_As_byte_t(__pyx_v_data); if (unlikely((__pyx_t_5 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 5083, __pyx_L1_error)
      __pyx_v_data_value = ((byte_t)__pyx_t_5);
+5084:             data_size = 1
      __pyx_v_data_size = 1;
+5085:             data_ptr = &data_value
      __pyx_v_data_ptr = (&__pyx_v_data_value);
 5086:         else:
+5087:             data_view = data
    /*else*/ {
      __pyx_t_6 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(__pyx_v_data, 0); if (unlikely(!__pyx_t_6.memview)) __PYX_ERR(0, 5087, __pyx_L1_error)
      __pyx_v_data_view = __pyx_t_6;
      __pyx_t_6.memview = NULL;
      __pyx_t_6.data = NULL;
+5088:             data_size = len(data_view)
      __pyx_t_7 = __Pyx_MemoryView_Len(__pyx_v_data_view); 
      __pyx_v_data_size = __pyx_t_7;
 5089:             with cython.boundscheck(False):
+5090:                 data_ptr = &data_view[0]
      __pyx_t_8 = 0;
      if (__pyx_t_8 < 0) __pyx_t_8 += __pyx_v_data_view.shape[0];
      __pyx_v_data_ptr = (&(*((byte_t const  *) ( /* dim=0 */ (__pyx_v_data_view.data + __pyx_t_8 * __pyx_v_data_view.strides[0]) ))));
    }
    __pyx_L4:;
 5091: 
+5092:         Memory_WriteRaw_(that, address_, data_size, data_ptr, backups)
    __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Memory_WriteRaw_(__pyx_v_that, __pyx_v_address_, __pyx_v_data_size, __pyx_v_data_ptr, __pyx_v_backups); if (unlikely(__pyx_t_4 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5092, __pyx_L1_error)
  }
  __pyx_L3:;
 5093: 
 5094: 
+5095: cdef vint Memory_Fill_(Memory_* that, addr_t start, addr_t endex, Block_** pattern,
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Fill_(Memory_ *__pyx_v_that, addr_t __pyx_v_start, addr_t __pyx_v_endex, Block_ **__pyx_v_pattern, PyObject *__pyx_v_backups, addr_t __pyx_v_start_) {
  size_t __pyx_v_offset;
  size_t __pyx_v_size;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Fill_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Fill_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5096:                        list backups, addr_t start_) except -1:
 5097:     cdef:
 5098:         size_t offset
 5099:         size_t size
 5100: 
+5101:     if start < endex:
  __pyx_t_1 = ((__pyx_v_start < __pyx_v_endex) != 0);
  if (__pyx_t_1) {
/* … */
  }
+5102:         CheckAddrToSizeU(endex - start)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_CheckAddrToSizeU((__pyx_v_endex - __pyx_v_start)); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5102, __pyx_L1_error)
+5103:         if not Block_Length(pattern[0]):
    __pyx_t_1 = ((!(__pyx_f_11cbytesparse_2_c_Block_Length((__pyx_v_pattern[0])) != 0)) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+5104:             raise ValueError('non-empty pattern required')
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5104, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_Raise(__pyx_t_3, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __PYX_ERR(0, 5104, __pyx_L1_error)
/* … */
  __pyx_tuple__24 = PyTuple_Pack(1, __pyx_kp_u_non_empty_pattern_required); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 5104, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__24);
  __Pyx_GIVEREF(__pyx_tuple__24);
 5105: 
+5106:         if start > start_:
    __pyx_t_1 = ((__pyx_v_start > __pyx_v_start_) != 0);
    if (__pyx_t_1) {
/* … */
    }
+5107:             offset = start - start_
      __pyx_v_offset = (__pyx_v_start - __pyx_v_start_);
+5108:             CheckAddrToSizeU(offset)
      __pyx_t_2 = __pyx_f_11cbytesparse_2_c_CheckAddrToSizeU(__pyx_v_offset); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5108, __pyx_L1_error)
+5109:             Block_RotateLeft_(pattern[0], <size_t>offset)
      __pyx_f_11cbytesparse_2_c_Block_RotateLeft_((__pyx_v_pattern[0]), ((size_t)__pyx_v_offset));
 5110: 
 5111:         # Resize the pattern to the target range
+5112:         size = <size_t>(endex - start)
    __pyx_v_size = ((size_t)(__pyx_v_endex - __pyx_v_start));
+5113:         pattern[0] = Block_RepeatToSize(pattern[0], size)
    __pyx_t_4 = __pyx_f_11cbytesparse_2_c_Block_RepeatToSize((__pyx_v_pattern[0]), __pyx_v_size); if (unlikely(__pyx_t_4 == ((Block_ *)NULL))) __PYX_ERR(0, 5113, __pyx_L1_error)
    (__pyx_v_pattern[0]) = __pyx_t_4;
 5114: 
+5115:         if backups is not None:
    __pyx_t_1 = (__pyx_v_backups != ((PyObject*)Py_None));
    __pyx_t_5 = (__pyx_t_1 != 0);
    if (__pyx_t_5) {
/* … */
    }
+5116:             backups.append(Memory_Extract_(that, start, endex, 0, NULL, 1, True))
      if (unlikely(__pyx_v_backups == Py_None)) {
        PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
        __PYX_ERR(0, 5116, __pyx_L1_error)
      }
      __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Memory_Extract_(__pyx_v_that, __pyx_v_start, __pyx_v_endex, 0, NULL, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5116, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_backups, __pyx_t_3); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(0, 5116, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 5117: 
 5118:         # Standard write method
+5119:         Memory_Erase__(that, start, endex, False, True)  # insert
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_Erase__(__pyx_v_that, __pyx_v_start, __pyx_v_endex, 0, 1); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5119, __pyx_L1_error)
+5120:         Memory_Insert__(that, start, size, Block_At__(pattern[0], 0), False)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_Insert__(__pyx_v_that, __pyx_v_start, __pyx_v_size, __pyx_f_11cbytesparse_2_c_Block_At__((__pyx_v_pattern[0]), 0), 0); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5120, __pyx_L1_error)
 5121: 
 5122: 
+5123: cdef vint Memory_Fill(Memory_* that, object start, object endex, object pattern, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Fill(Memory_ *__pyx_v_that, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_pattern, PyObject *__pyx_v_backups) {
  addr_t __pyx_v_start__;
  addr_t __pyx_v_start_;
  addr_t __pyx_v_endex_;
  Block_ *__pyx_v_pattern_;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Fill", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory_Fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5124:         cdef:
 5125:             addr_t start__
 5126:             addr_t start_
 5127:             addr_t endex_
+5128:             Block_* pattern_ = NULL
  __pyx_v_pattern_ = NULL;
 5129: 
+5130:         start_, endex_ = Memory_Bound(that, start, endex)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Bound(__pyx_v_that, __pyx_v_start, __pyx_v_endex); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5130, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_1.f0;
  __pyx_t_3 = __pyx_t_1.f1;
  __pyx_v_start_ = __pyx_t_2;
  __pyx_v_endex_ = __pyx_t_3;
+5131:         if start_ < endex_:
  __pyx_t_4 = ((__pyx_v_start_ < __pyx_v_endex_) != 0);
  if (__pyx_t_4) {
/* … */
  }
+5132:             pattern_ = Block_FromObject(0, pattern, False)  # size checked later on
    __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Block_FromObject(0, __pyx_v_pattern, 0); if (unlikely(__pyx_t_5 == ((Block_ *)NULL))) __PYX_ERR(0, 5132, __pyx_L1_error)
    __pyx_v_pattern_ = __pyx_t_5;
+5133:             try:
    /*try:*/ {
+5134:                 start__ = Memory_Start(that) if start is None else <addr_t>start
      __pyx_t_4 = (__pyx_v_start == Py_None);
      if ((__pyx_t_4 != 0)) {
        __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_v_that);
      } else {
        __pyx_t_2 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_start); if (unlikely((__pyx_t_2 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 5134, __pyx_L5_error)
        __pyx_t_3 = ((addr_t)__pyx_t_2);
      }
      __pyx_v_start__ = __pyx_t_3;
+5135:                 Memory_Fill_(that, start_, endex_, &pattern_, backups, start__)
      __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_Fill_(__pyx_v_that, __pyx_v_start_, __pyx_v_endex_, (&__pyx_v_pattern_), __pyx_v_backups, __pyx_v_start__); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5135, __pyx_L5_error)
    }
 5136:             finally:
+5137:                 Block_Free(pattern_)  # orphan
    /*finally:*/ {
      /*normal exit:*/{
        (void)(__pyx_f_11cbytesparse_2_c_Block_Free(__pyx_v_pattern_));
        goto __pyx_L6;
      }
      __pyx_L5_error:;
      /*exception exit:*/{
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
        if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_13, &__pyx_t_14, &__pyx_t_15);
        if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0)) __Pyx_ErrFetch(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
        __Pyx_XGOTREF(__pyx_t_10);
        __Pyx_XGOTREF(__pyx_t_11);
        __Pyx_XGOTREF(__pyx_t_12);
        __Pyx_XGOTREF(__pyx_t_13);
        __Pyx_XGOTREF(__pyx_t_14);
        __Pyx_XGOTREF(__pyx_t_15);
        __pyx_t_7 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_9 = __pyx_filename;
        {
          (void)(__pyx_f_11cbytesparse_2_c_Block_Free(__pyx_v_pattern_));
        }
        if (PY_MAJOR_VERSION >= 3) {
          __Pyx_XGIVEREF(__pyx_t_13);
          __Pyx_XGIVEREF(__pyx_t_14);
          __Pyx_XGIVEREF(__pyx_t_15);
          __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_14, __pyx_t_15);
        }
        __Pyx_XGIVEREF(__pyx_t_10);
        __Pyx_XGIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ErrRestore(__pyx_t_10, __pyx_t_11, __pyx_t_12);
        __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; __pyx_t_15 = 0;
        __pyx_lineno = __pyx_t_7; __pyx_clineno = __pyx_t_8; __pyx_filename = __pyx_t_9;
        goto __pyx_L1_error;
      }
      __pyx_L6:;
    }
 5138: 
 5139: 
+5140: cdef vint Memory_Flood_(Memory_* that, addr_t start, addr_t endex, Block_** pattern, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Flood_(Memory_ *__pyx_v_that, addr_t __pyx_v_start, addr_t __pyx_v_endex, Block_ **__pyx_v_pattern, PyObject *__pyx_v_backups) {
  Rack_ *__pyx_v_blocks;
  Block_ const *__pyx_v_block;
  addr_t __pyx_v_block_start;
  addr_t __pyx_v_block_endex;
  size_t __pyx_v_block_index_start;
  size_t __pyx_v_block_index_endex;
  addr_t __pyx_v_offset;
  PyObject *__pyx_v_gap_start = NULL;
  PyObject *__pyx_v_gap_endex = NULL;
  size_t __pyx_v_size;
  size_t __pyx_v_block_index;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Flood_", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Flood_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_gap_start);
  __Pyx_XDECREF(__pyx_v_gap_endex);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5141:     cdef:
 5142:         Rack_* blocks
 5143:         const Block_* block
 5144:         addr_t block_start
 5145:         addr_t block_endex
 5146:         size_t block_index_start
 5147:         size_t block_index_endex
 5148:         addr_t offset
 5149: 
+5150:     if start < endex:
  __pyx_t_1 = ((__pyx_v_start < __pyx_v_endex) != 0);
  if (__pyx_t_1) {
/* … */
  }
+5151:         blocks = that.blocks
    __pyx_t_2 = __pyx_v_that->blocks;
    __pyx_v_blocks = __pyx_t_2;
+5152:         block_index_start = Rack_IndexStart(blocks, start)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_IndexStart(__pyx_v_blocks, __pyx_v_start); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 5152, __pyx_L1_error)
    __pyx_v_block_index_start = __pyx_t_3;
 5153: 
 5154:         # Check if touching previous block
+5155:         if block_index_start:
    __pyx_t_1 = (__pyx_v_block_index_start != 0);
    if (__pyx_t_1) {
/* … */
    }
+5156:             block = Rack_Get__(blocks, block_index_start - 1)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, (__pyx_v_block_index_start - 1));
+5157:             block_start = Block_Start(block)
      __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+5158:             block_endex = Block_Endex(block)
      __pyx_v_block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
+5159:             if block_endex == start:
      __pyx_t_1 = ((__pyx_v_block_endex == __pyx_v_start) != 0);
      if (__pyx_t_1) {
/* … */
      }
+5160:                 block_index_start -= 1
        __pyx_v_block_index_start = (__pyx_v_block_index_start - 1);
 5161: 
 5162:         # Manage block near start
+5163:         if block_index_start < Rack_Length(blocks):
    __pyx_t_1 = ((__pyx_v_block_index_start < __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks)) != 0);
    if (__pyx_t_1) {
/* … */
    }
+5164:             block = Rack_Get__(blocks, block_index_start)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index_start);
+5165:             block_start = Block_Start(block)
      __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+5166:             block_endex = Block_Endex(block)
      __pyx_v_block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
 5167: 
+5168:             if block_start <= start and endex <= block_endex:
      __pyx_t_4 = ((__pyx_v_block_start <= __pyx_v_start) != 0);
      if (__pyx_t_4) {
      } else {
        __pyx_t_1 = __pyx_t_4;
        goto __pyx_L8_bool_binop_done;
      }
      __pyx_t_4 = ((__pyx_v_endex <= __pyx_v_block_endex) != 0);
      __pyx_t_1 = __pyx_t_4;
      __pyx_L8_bool_binop_done:;
      if (__pyx_t_1) {
/* … */
      }
+5169:                 return 0  # no emptiness to flood
        __pyx_r = 0;
        goto __pyx_L0;
 5170: 
+5171:             if block_start < start:
      __pyx_t_1 = ((__pyx_v_block_start < __pyx_v_start) != 0);
      if (__pyx_t_1) {
/* … */
      }
+5172:                 offset = start - block_start
        __pyx_v_offset = (__pyx_v_start - __pyx_v_block_start);
+5173:                 CheckAddrToSizeU(offset)
        __pyx_t_5 = __pyx_f_11cbytesparse_2_c_CheckAddrToSizeU(__pyx_v_offset); if (unlikely(__pyx_t_5 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5173, __pyx_L1_error)
+5174:                 Block_RotateRight_(pattern[0], <size_t>offset)
        __pyx_f_11cbytesparse_2_c_Block_RotateRight_((__pyx_v_pattern[0]), ((size_t)__pyx_v_offset));
+5175:                 start = block_start
        __pyx_v_start = __pyx_v_block_start;
 5176: 
 5177:         # Manage block near end
+5178:         block_index_endex = Rack_IndexEndex(blocks, endex)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_IndexEndex(__pyx_v_blocks, __pyx_v_endex); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 5178, __pyx_L1_error)
    __pyx_v_block_index_endex = __pyx_t_3;
+5179:         if block_index_start < block_index_endex:
    __pyx_t_1 = ((__pyx_v_block_index_start < __pyx_v_block_index_endex) != 0);
    if (__pyx_t_1) {
/* … */
    }
+5180:             block = Rack_Get__(blocks, block_index_endex - 1)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, (__pyx_v_block_index_endex - 1));
+5181:             block_start = Block_Start(block)
      __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+5182:             block_endex = Block_Endex(block)
      __pyx_v_block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
+5183:             if endex < block_endex:
      __pyx_t_1 = ((__pyx_v_endex < __pyx_v_block_endex) != 0);
      if (__pyx_t_1) {
/* … */
      }
+5184:                 endex = block_endex
        __pyx_v_endex = __pyx_v_block_endex;
 5185: 
+5186:         CheckAddrToSizeU(endex - start)
    __pyx_t_5 = __pyx_f_11cbytesparse_2_c_CheckAddrToSizeU((__pyx_v_endex - __pyx_v_start)); if (unlikely(__pyx_t_5 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5186, __pyx_L1_error)
+5187:         if not Block_Length(pattern[0]):
    __pyx_t_1 = ((!(__pyx_f_11cbytesparse_2_c_Block_Length((__pyx_v_pattern[0])) != 0)) != 0);
    if (unlikely(__pyx_t_1)) {
/* … */
    }
+5188:             raise ValueError('non-empty pattern required')
      __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5188, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_Raise(__pyx_t_6, 0, 0, 0);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      __PYX_ERR(0, 5188, __pyx_L1_error)
 5189: 
+5190:         if backups is not None:
    __pyx_t_1 = (__pyx_v_backups != ((PyObject*)Py_None));
    __pyx_t_4 = (__pyx_t_1 != 0);
    if (__pyx_t_4) {
/* … */
    }
+5191:             for gap_start, gap_endex in Memory_AsObject(that).gaps(start, endex):
      __pyx_t_7 = ((PyObject *)__pyx_f_11cbytesparse_2_c_Memory_AsObject(__pyx_v_that)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5191, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_gaps); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5191, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_start); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5191, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_9 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_endex); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5191, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = NULL;
      __pyx_t_11 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_10)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_10);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
          __pyx_t_11 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_8)) {
        PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_7, __pyx_t_9};
        __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5191, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
        PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_t_7, __pyx_t_9};
        __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_11, 2+__pyx_t_11); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5191, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      } else
      #endif
      {
        __pyx_t_12 = PyTuple_New(2+__pyx_t_11); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5191, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        if (__pyx_t_10) {
          __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10); __pyx_t_10 = NULL;
        }
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_11, __pyx_t_7);
        __Pyx_GIVEREF(__pyx_t_9);
        PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_11, __pyx_t_9);
        __pyx_t_7 = 0;
        __pyx_t_9 = 0;
        __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_12, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5191, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      if (likely(PyList_CheckExact(__pyx_t_6)) || PyTuple_CheckExact(__pyx_t_6)) {
        __pyx_t_8 = __pyx_t_6; __Pyx_INCREF(__pyx_t_8); __pyx_t_13 = 0;
        __pyx_t_14 = NULL;
      } else {
        __pyx_t_13 = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5191, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_14 = Py_TYPE(__pyx_t_8)->tp_iternext; if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 5191, __pyx_L1_error)
      }
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
      for (;;) {
        if (likely(!__pyx_t_14)) {
          if (likely(PyList_CheckExact(__pyx_t_8))) {
            if (__pyx_t_13 >= PyList_GET_SIZE(__pyx_t_8)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_6 = PyList_GET_ITEM(__pyx_t_8, __pyx_t_13); __Pyx_INCREF(__pyx_t_6); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 5191, __pyx_L1_error)
            #else
            __pyx_t_6 = PySequence_ITEM(__pyx_t_8, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5191, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            #endif
          } else {
            if (__pyx_t_13 >= PyTuple_GET_SIZE(__pyx_t_8)) break;
            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
            __pyx_t_6 = PyTuple_GET_ITEM(__pyx_t_8, __pyx_t_13); __Pyx_INCREF(__pyx_t_6); __pyx_t_13++; if (unlikely(0 < 0)) __PYX_ERR(0, 5191, __pyx_L1_error)
            #else
            __pyx_t_6 = PySequence_ITEM(__pyx_t_8, __pyx_t_13); __pyx_t_13++; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5191, __pyx_L1_error)
            __Pyx_GOTREF(__pyx_t_6);
            #endif
          }
        } else {
          __pyx_t_6 = __pyx_t_14(__pyx_t_8);
          if (unlikely(!__pyx_t_6)) {
            PyObject* exc_type = PyErr_Occurred();
            if (exc_type) {
              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
              else __PYX_ERR(0, 5191, __pyx_L1_error)
            }
            break;
          }
          __Pyx_GOTREF(__pyx_t_6);
        }
        if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
          PyObject* sequence = __pyx_t_6;
          Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
          if (unlikely(size != 2)) {
            if (size > 2) __Pyx_RaiseTooManyValuesError(2);
            else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
            __PYX_ERR(0, 5191, __pyx_L1_error)
          }
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          if (likely(PyTuple_CheckExact(sequence))) {
            __pyx_t_12 = PyTuple_GET_ITEM(sequence, 0); 
            __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
          } else {
            __pyx_t_12 = PyList_GET_ITEM(sequence, 0); 
            __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
          }
          __Pyx_INCREF(__pyx_t_12);
          __Pyx_INCREF(__pyx_t_9);
          #else
          __pyx_t_12 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 5191, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5191, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_9);
          #endif
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        } else {
          Py_ssize_t index = -1;
          __pyx_t_7 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5191, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_7);
          __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
          __pyx_t_15 = Py_TYPE(__pyx_t_7)->tp_iternext;
          index = 0; __pyx_t_12 = __pyx_t_15(__pyx_t_7); if (unlikely(!__pyx_t_12)) goto __pyx_L17_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_12);
          index = 1; __pyx_t_9 = __pyx_t_15(__pyx_t_7); if (unlikely(!__pyx_t_9)) goto __pyx_L17_unpacking_failed;
          __Pyx_GOTREF(__pyx_t_9);
          if (__Pyx_IternextUnpackEndCheck(__pyx_t_15(__pyx_t_7), 2) < 0) __PYX_ERR(0, 5191, __pyx_L1_error)
          __pyx_t_15 = NULL;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          goto __pyx_L18_unpacking_done;
          __pyx_L17_unpacking_failed:;
          __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
          __pyx_t_15 = NULL;
          if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
          __PYX_ERR(0, 5191, __pyx_L1_error)
          __pyx_L18_unpacking_done:;
        }
        __Pyx_XDECREF_SET(__pyx_v_gap_start, __pyx_t_12);
        __pyx_t_12 = 0;
        __Pyx_XDECREF_SET(__pyx_v_gap_endex, __pyx_t_9);
        __pyx_t_9 = 0;
/* … */
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+5192:                 backups.append(Memory(start=gap_start, endex=gap_endex))
        if (unlikely(__pyx_v_backups == Py_None)) {
          PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "append");
          __PYX_ERR(0, 5192, __pyx_L1_error)
        }
        __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5192, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_6);
        if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_start, __pyx_v_gap_start) < 0) __PYX_ERR(0, 5192, __pyx_L1_error)
        if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_endex, __pyx_v_gap_endex) < 0) __PYX_ERR(0, 5192, __pyx_L1_error)
        __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory), __pyx_empty_tuple, __pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 5192, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
        __pyx_t_16 = __Pyx_PyList_Append(__pyx_v_backups, __pyx_t_9); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 5192, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 5193: 
+5194:         size = <size_t>(endex - start)
    __pyx_v_size = ((size_t)(__pyx_v_endex - __pyx_v_start));
+5195:         pattern[0] = Block_RepeatToSize(pattern[0], size)
    __pyx_t_17 = __pyx_f_11cbytesparse_2_c_Block_RepeatToSize((__pyx_v_pattern[0]), __pyx_v_size); if (unlikely(__pyx_t_17 == ((Block_ *)NULL))) __PYX_ERR(0, 5195, __pyx_L1_error)
    (__pyx_v_pattern[0]) = __pyx_t_17;
+5196:         pattern[0].address = start
    (__pyx_v_pattern[0])->address = __pyx_v_start;
 5197: 
+5198:         for block_index in range(block_index_start, block_index_endex):
    __pyx_t_18 = __pyx_v_block_index_endex;
    __pyx_t_19 = __pyx_t_18;
    for (__pyx_t_20 = __pyx_v_block_index_start; __pyx_t_20 < __pyx_t_19; __pyx_t_20+=1) {
      __pyx_v_block_index = __pyx_t_20;
+5199:             block = Rack_Get__(blocks, block_index)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+5200:             offset = Block_Start(block) - start
      __pyx_v_offset = (__pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block) - __pyx_v_start);
 5201:             # CheckAddrToSizeU(offset)  # implied
+5202:             pattern[0] = Block_Write_(pattern[0], <size_t>offset, Block_Length(block), Block_At__(block, 0))
      __pyx_t_17 = __pyx_f_11cbytesparse_2_c_Block_Write_((__pyx_v_pattern[0]), ((size_t)__pyx_v_offset), __pyx_f_11cbytesparse_2_c_Block_Length(__pyx_v_block), __pyx_f_11cbytesparse_2_c_Block_At__(__pyx_v_block, 0)); if (unlikely(__pyx_t_17 == ((Block_ *)NULL))) __PYX_ERR(0, 5202, __pyx_L1_error)
      (__pyx_v_pattern[0]) = __pyx_t_17;
    }
 5203: 
+5204:         that.blocks = blocks = Rack_DelSlice_(blocks, block_index_start, block_index_endex)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_DelSlice_(__pyx_v_blocks, __pyx_v_block_index_start, __pyx_v_block_index_endex); if (unlikely(__pyx_t_2 == ((Rack_ *)NULL))) __PYX_ERR(0, 5204, __pyx_L1_error)
    __pyx_v_that->blocks = __pyx_t_2;
    __pyx_v_blocks = __pyx_t_2;
+5205:         that.blocks = blocks = Rack_Insert_(blocks, block_index_start, pattern[0])
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_Insert_(__pyx_v_blocks, __pyx_v_block_index_start, (__pyx_v_pattern[0])); if (unlikely(__pyx_t_2 == ((Rack_ *)NULL))) __PYX_ERR(0, 5205, __pyx_L1_error)
    __pyx_v_that->blocks = __pyx_t_2;
    __pyx_v_blocks = __pyx_t_2;
 5206: 
 5207: 
+5208: cdef vint Memory_Flood(Memory_* that, object start, object endex, object pattern, list backups) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Memory_Flood(Memory_ *__pyx_v_that, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_pattern, PyObject *__pyx_v_backups) {
  addr_t __pyx_v_start_;
  addr_t __pyx_v_endex_;
  Block_ *__pyx_v_pattern_;
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_Flood", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("cbytesparse._c.Memory_Flood", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5209:         cdef:
 5210:             addr_t start_
 5211:             addr_t endex_
+5212:             Block_* pattern_ = NULL
  __pyx_v_pattern_ = NULL;
 5213: 
+5214:         start_, endex_ = Memory_Bound(that, start, endex)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Bound(__pyx_v_that, __pyx_v_start, __pyx_v_endex); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 5214, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_1.f0;
  __pyx_t_3 = __pyx_t_1.f1;
  __pyx_v_start_ = __pyx_t_2;
  __pyx_v_endex_ = __pyx_t_3;
+5215:         if start_ < endex_:
  __pyx_t_4 = ((__pyx_v_start_ < __pyx_v_endex_) != 0);
  if (__pyx_t_4) {
/* … */
  }
+5216:             pattern_ = Block_FromObject(0, pattern, False)  # size checked later on
    __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Block_FromObject(0, __pyx_v_pattern, 0); if (unlikely(__pyx_t_5 == ((Block_ *)NULL))) __PYX_ERR(0, 5216, __pyx_L1_error)
    __pyx_v_pattern_ = __pyx_t_5;
+5217:             try:
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      goto __pyx_L9_try_end;
      __pyx_L4_error:;
/* … */
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ExceptionReset(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      goto __pyx_L1_error;
      __pyx_L9_try_end:;
    }
+5218:                 Memory_Flood_(that, start_, endex_, &pattern_, backups)
        __pyx_t_9 = __pyx_f_11cbytesparse_2_c_Memory_Flood_(__pyx_v_that, __pyx_v_start_, __pyx_v_endex_, (&__pyx_v_pattern_), __pyx_v_backups); if (unlikely(__pyx_t_9 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5218, __pyx_L4_error)
+5219:             except:
      /*except:*/ {
        __Pyx_AddTraceback("cbytesparse._c.Memory_Flood", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0) __PYX_ERR(0, 5219, __pyx_L6_except_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_GOTREF(__pyx_t_11);
        __Pyx_GOTREF(__pyx_t_12);
+5220:                 Block_Free(pattern_)  # orphan
        (void)(__pyx_f_11cbytesparse_2_c_Block_Free(__pyx_v_pattern_));
+5221:                 raise
        __Pyx_GIVEREF(__pyx_t_10);
        __Pyx_GIVEREF(__pyx_t_11);
        __Pyx_XGIVEREF(__pyx_t_12);
        __Pyx_ErrRestoreWithState(__pyx_t_10, __pyx_t_11, __pyx_t_12);
        __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0; 
        __PYX_ERR(0, 5221, __pyx_L6_except_error)
      }
      __pyx_L6_except_error:;
 5222: 
 5223: 
+5224: cdef list Memory_AsViews(const Memory_* that):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_AsViews(Memory_ const *__pyx_v_that) {
  Rack_ const *__pyx_v_blocks1;
  size_t __pyx_v_block_count;
  size_t __pyx_v_block_index;
  Block_ *__pyx_v_block;
  CYTHON_UNUSED size_t __pyx_v_size;
  __Pyx_memviewslice __pyx_v_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_blocks2 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_AsViews", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(((PyObject *)__pyx_t_7));
  __Pyx_XDECREF(__pyx_t_8);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("cbytesparse._c.Memory_AsViews", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_view, 1);
  __Pyx_XDECREF(__pyx_v_blocks2);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5225:     cdef:
+5226:         const Rack_* blocks1 = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks1 = __pyx_t_1;
+5227:         size_t block_count = Rack_Length(blocks1)
  __pyx_v_block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks1);
 5228:         size_t block_index
+5229:         Block_* block = NULL
  __pyx_v_block = NULL;
 5230:         size_t size
 5231:         const byte_t[:] view
+5232:         list blocks2 = []
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5232, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_blocks2 = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
 5233: 
+5234:     for block_index in range(block_count):
  __pyx_t_3 = __pyx_v_block_count;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_block_index = __pyx_t_5;
+5235:         block = Rack_Get__(blocks1, block_index)
    __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks1, __pyx_v_block_index);
+5236:         size = Block_Length(block)
    __pyx_v_size = __pyx_f_11cbytesparse_2_c_Block_Length(__pyx_v_block);
+5237:         view = <const byte_t[:size]>Block_At__(block, 0)
    __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Block_At__(__pyx_v_block, 0);
    if (!__pyx_t_6) {
      PyErr_SetString(PyExc_ValueError,"Cannot create cython.array from NULL pointer");
      __PYX_ERR(0, 5237, __pyx_L1_error)
    }
    __pyx_t_8 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_nn_byte_t__const__); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5237, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = Py_BuildValue((char*) "("  __PYX_BUILD_PY_SSIZE_T  ")", ((Py_ssize_t)__pyx_v_size)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5237, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = __pyx_array_new(__pyx_t_2, sizeof(byte_t const ), PyBytes_AS_STRING(__pyx_t_8), (char *) "c", (char *) __pyx_t_6);
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5237, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(((PyObject *)__pyx_t_7), 0); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 5237, __pyx_L1_error)
    __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_view, 1);
    __pyx_v_view = __pyx_t_9;
    __pyx_t_9.memview = NULL;
    __pyx_t_9.data = NULL;
+5238:         blocks2.append([Block_Start(block), view])
    __pyx_t_8 = __Pyx_PyInt_From_uint_fast64_t(__pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5238, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_view, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn_byte_t__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5238, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_10 = PyList_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5238, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_8);
    PyList_SET_ITEM(__pyx_t_10, 0, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_2);
    PyList_SET_ITEM(__pyx_t_10, 1, __pyx_t_2);
    __pyx_t_8 = 0;
    __pyx_t_2 = 0;
    __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_blocks2, __pyx_t_10); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 5238, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
+5239:     return blocks2
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_blocks2);
  __pyx_r = __pyx_v_blocks2;
  goto __pyx_L0;
 5240: 
 5241: 
+5242: cdef list Memory_ToBlocks(const Memory_* that):
static PyObject *__pyx_f_11cbytesparse_2_c_Memory_ToBlocks(Memory_ const *__pyx_v_that) {
  Rack_ const *__pyx_v_blocks1;
  size_t __pyx_v_block_count;
  size_t __pyx_v_block_index;
  Block_ *__pyx_v_block;
  CYTHON_UNUSED size_t __pyx_v_size;
  __Pyx_memviewslice __pyx_v_view = { 0, 0, { 0 }, { 0 }, { 0 } };
  PyObject *__pyx_v_blocks2 = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Memory_ToBlocks", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(((PyObject *)__pyx_t_7));
  __Pyx_XDECREF(__pyx_t_8);
  __PYX_XDEC_MEMVIEW(&__pyx_t_9, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("cbytesparse._c.Memory_ToBlocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __PYX_XDEC_MEMVIEW(&__pyx_v_view, 1);
  __Pyx_XDECREF(__pyx_v_blocks2);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5243:     cdef:
+5244:         const Rack_* blocks1 = that.blocks
  __pyx_t_1 = __pyx_v_that->blocks;
  __pyx_v_blocks1 = __pyx_t_1;
+5245:         size_t block_count = Rack_Length(blocks1)
  __pyx_v_block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks1);
 5246:         size_t block_index
+5247:         Block_* block = NULL
  __pyx_v_block = NULL;
 5248:         size_t size
 5249:         const byte_t[:] view
+5250:         list blocks2 = []
  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5250, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_blocks2 = ((PyObject*)__pyx_t_2);
  __pyx_t_2 = 0;
 5251: 
+5252:     for block_index in range(block_count):
  __pyx_t_3 = __pyx_v_block_count;
  __pyx_t_4 = __pyx_t_3;
  for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
    __pyx_v_block_index = __pyx_t_5;
+5253:         block = Rack_Get__(blocks1, block_index)
    __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks1, __pyx_v_block_index);
+5254:         size = Block_Length(block)
    __pyx_v_size = __pyx_f_11cbytesparse_2_c_Block_Length(__pyx_v_block);
+5255:         view = <const byte_t[:size]>Block_At__(block, 0)
    __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Block_At__(__pyx_v_block, 0);
    if (!__pyx_t_6) {
      PyErr_SetString(PyExc_ValueError,"Cannot create cython.array from NULL pointer");
      __PYX_ERR(0, 5255, __pyx_L1_error)
    }
    __pyx_t_8 = __pyx_format_from_typeinfo(&__Pyx_TypeInfo_nn_byte_t__const__); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5255, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = Py_BuildValue((char*) "("  __PYX_BUILD_PY_SSIZE_T  ")", ((Py_ssize_t)__pyx_v_size)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5255, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_7 = __pyx_array_new(__pyx_t_2, sizeof(byte_t const ), PyBytes_AS_STRING(__pyx_t_8), (char *) "c", (char *) __pyx_t_6);
    if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 5255, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_9 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(((PyObject *)__pyx_t_7), 0); if (unlikely(!__pyx_t_9.memview)) __PYX_ERR(0, 5255, __pyx_L1_error)
    __Pyx_DECREF(((PyObject *)__pyx_t_7)); __pyx_t_7 = 0;
    __PYX_XDEC_MEMVIEW(&__pyx_v_view, 1);
    __pyx_v_view = __pyx_t_9;
    __pyx_t_9.memview = NULL;
    __pyx_t_9.data = NULL;
+5256:         blocks2.append([Block_Start(block), bytearray(view)])
    __pyx_t_8 = __Pyx_PyInt_From_uint_fast64_t(__pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 5256, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_view, 1, (PyObject *(*)(char *)) __pyx_memview_get_nn_byte_t__const__, (int (*)(char *, PyObject *)) NULL, 0);; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5256, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_10 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyByteArray_Type)), __pyx_t_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 5256, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5256, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_8);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_t_8);
    __Pyx_GIVEREF(__pyx_t_10);
    PyList_SET_ITEM(__pyx_t_2, 1, __pyx_t_10);
    __pyx_t_8 = 0;
    __pyx_t_10 = 0;
    __pyx_t_11 = __Pyx_PyList_Append(__pyx_v_blocks2, __pyx_t_2); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(0, 5256, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
+5257:     return blocks2
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_blocks2);
  __pyx_r = __pyx_v_blocks2;
  goto __pyx_L0;
 5258: 
 5259: 
 5260: # =====================================================================================================================
 5261: 
+5262: cdef Rover_* Rover_Alloc() except NULL:
static Rover_ *__pyx_f_11cbytesparse_2_c_Rover_Alloc(void) {
  Rover_ *__pyx_v_that;
  Rover_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rover_Alloc", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rover_Alloc", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5263:     cdef:
+5264:         Rover_* that = <Rover_*>PyMem_Calloc(Rover_HEADING, 1)
  __pyx_v_that = ((Rover_ *)__pyx_f_11cbytesparse_2_c_PyMem_Calloc(Rover_HEADING, 1));
 5265: 
+5266:     if that == NULL:
  __pyx_t_1 = ((__pyx_v_that == NULL) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+5267:         raise MemoryError()
    PyErr_NoMemory(); __PYX_ERR(0, 5267, __pyx_L1_error)
+5268:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 5269: 
 5270: 
+5271: cdef Rover_* Rover_Free(Rover_* that) except? NULL:
static Rover_ *__pyx_f_11cbytesparse_2_c_Rover_Free(Rover_ *__pyx_v_that) {
  Rover_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rover_Free", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Rover_Free", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+5272:     if that:
  __pyx_t_1 = (__pyx_v_that != 0);
  if (__pyx_t_1) {
/* … */
  }
+5273:         Rover_Dispose(that)
    __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rover_Dispose(__pyx_v_that); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5273, __pyx_L1_error)
+5274:         PyMem_Free(that)
    PyMem_Free(__pyx_v_that);
+5275:     return NULL
  __pyx_r = NULL;
  goto __pyx_L0;
 5276: 
 5277: 
+5278: cdef Rover_* Rover_Create(
static Rover_ *__pyx_f_11cbytesparse_2_c_Rover_Create(Memory_ const *__pyx_v_memory, addr_t __pyx_v_start, addr_t __pyx_v_endex, size_t __pyx_v_pattern_size, byte_t const *__pyx_v_pattern_data, int __pyx_v_forward, int __pyx_v_infinite) {
  Block_ *__pyx_v_block;
  addr_t __pyx_v_offset;
  size_t __pyx_v_pattern_offset;
  Rover_ *__pyx_v_that;
  Rover_ *__pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rover_Create", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("cbytesparse._c.Rover_Create", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5279:     const Memory_* memory,
 5280:     addr_t start,
 5281:     addr_t endex,
 5282:     size_t pattern_size,
 5283:     const byte_t* pattern_data,
 5284:     bint forward,
 5285:     bint infinite,
 5286: ) except NULL:
 5287:     cdef:
+5288:         Block_* block = NULL
  __pyx_v_block = NULL;
 5289:         addr_t offset
 5290:         size_t pattern_offset
 5291: 
+5292:     if forward:
  __pyx_t_1 = (__pyx_v_forward != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L3;
  }
+5293:         if endex < start:
    __pyx_t_1 = ((__pyx_v_endex < __pyx_v_start) != 0);
    if (__pyx_t_1) {
/* … */
    }
+5294:             endex = start
      __pyx_v_endex = __pyx_v_start;
 5295:     else:
+5296:         if start > endex:
  /*else*/ {
    __pyx_t_1 = ((__pyx_v_start > __pyx_v_endex) != 0);
    if (__pyx_t_1) {
/* … */
    }
  }
  __pyx_L3:;
+5297:             start = endex
      __pyx_v_start = __pyx_v_endex;
 5298: 
+5299:     if (not pattern_data) != (not pattern_size):
  __pyx_t_1 = (((!(__pyx_v_pattern_data != 0)) != (!(__pyx_v_pattern_size != 0))) != 0);
  if (unlikely(__pyx_t_1)) {
/* … */
  }
+5300:         raise ValueError('non-empty pattern required')
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5300, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_Raise(__pyx_t_2, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __PYX_ERR(0, 5300, __pyx_L1_error)
+5301:     pattern_offset = pattern_size - 1  if pattern_size and not forward else 0
  __pyx_t_4 = (__pyx_v_pattern_size != 0);
  if (__pyx_t_4) {
  } else {
    __pyx_t_1 = __pyx_t_4;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_4 = ((!(__pyx_v_forward != 0)) != 0);
  __pyx_t_1 = __pyx_t_4;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_1) {
    __pyx_t_3 = (__pyx_v_pattern_size - 1);
  } else {
    __pyx_t_3 = 0;
  }
  __pyx_v_pattern_offset = __pyx_t_3;
 5302: 
+5303:     that = Rover_Alloc()
  __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Rover_Alloc(); if (unlikely(__pyx_t_5 == ((Rover_ *)NULL))) __PYX_ERR(0, 5303, __pyx_L1_error)
  __pyx_v_that = __pyx_t_5;
 5304: 
+5305:     that.forward = forward
  __pyx_v_that->forward = __pyx_v_forward;
+5306:     that.infinite = infinite
  __pyx_v_that->infinite = __pyx_v_infinite;
+5307:     that.start = start
  __pyx_v_that->start = __pyx_v_start;
+5308:     that.endex = endex
  __pyx_v_that->endex = __pyx_v_endex;
+5309:     that.address = start if forward else endex
  if ((__pyx_v_forward != 0)) {
    __pyx_t_6 = __pyx_v_start;
  } else {
    __pyx_t_6 = __pyx_v_endex;
  }
  __pyx_v_that->address = __pyx_t_6;
 5310: 
+5311:     that.pattern_size = pattern_size
  __pyx_v_that->pattern_size = __pyx_v_pattern_size;
+5312:     that.pattern_data = &pattern_data[pattern_offset]
  __pyx_v_that->pattern_data = (&(__pyx_v_pattern_data[__pyx_v_pattern_offset]));
+5313:     that.pattern_offset = pattern_offset
  __pyx_v_that->pattern_offset = __pyx_v_pattern_offset;
 5314: 
+5315:     that.memory = memory
  __pyx_v_that->memory = __pyx_v_memory;
+5316:     that.block_count = Rack_Length(memory.blocks)
  __pyx_v_that->block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_memory->blocks);
 5317: 
+5318:     try:
  {
    /*try:*/ {
/* … */
    }
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    goto __pyx_L14_try_end;
    __pyx_L9_error:;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_7);
    __Pyx_XGIVEREF(__pyx_t_8);
    __Pyx_XGIVEREF(__pyx_t_9);
    __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_8, __pyx_t_9);
    goto __pyx_L1_error;
    __pyx_L14_try_end:;
  }
+5319:         if that.block_count:
      __pyx_t_1 = (__pyx_v_that->block_count != 0);
      if (__pyx_t_1) {
/* … */
      }
+5320:             if forward:
        __pyx_t_1 = (__pyx_v_forward != 0);
        if (__pyx_t_1) {
/* … */
          goto __pyx_L16;
        }
+5321:                 that.block_index = Rack_IndexStart(memory.blocks, start)
          __pyx_t_10 = __pyx_f_11cbytesparse_2_c_Rack_IndexStart(__pyx_v_memory->blocks, __pyx_v_start); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 5321, __pyx_L9_error)
          __pyx_v_that->block_index = __pyx_t_10;
+5322:                 if that.block_index < that.block_count:
          __pyx_t_1 = ((__pyx_v_that->block_index < __pyx_v_that->block_count) != 0);
          if (__pyx_t_1) {
/* … */
          }
+5323:                     block = Rack_Get_(memory.blocks, that.block_index)
            __pyx_t_11 = __pyx_f_11cbytesparse_2_c_Rack_Get_(__pyx_v_memory->blocks, __pyx_v_that->block_index); if (unlikely(__pyx_t_11 == ((Block_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 5323, __pyx_L9_error)
            __pyx_v_block = __pyx_t_11;
+5324:                     that.block_start = Block_Start(block)
            __pyx_v_that->block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+5325:                     that.block_endex = Block_Endex(block)
            __pyx_v_that->block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
 5326: 
+5327:                     offset = start if start >= that.block_start else that.block_start
            if (((__pyx_v_start >= __pyx_v_that->block_start) != 0)) {
              __pyx_t_6 = __pyx_v_start;
            } else {
              __pyx_t_6 = __pyx_v_that->block_start;
            }
            __pyx_v_offset = __pyx_t_6;
+5328:                     if offset > that.block_endex:
            __pyx_t_1 = ((__pyx_v_offset > __pyx_v_that->block_endex) != 0);
            if (__pyx_t_1) {
/* … */
            }
+5329:                         offset = that.block_endex
              __pyx_t_6 = __pyx_v_that->block_endex;
              __pyx_v_offset = __pyx_t_6;
+5330:                     offset -= that.block_start
            __pyx_v_offset = (__pyx_v_offset - __pyx_v_that->block_start);
+5331:                     CheckAddrToSizeU(offset)
            __pyx_t_12 = __pyx_f_11cbytesparse_2_c_CheckAddrToSizeU(__pyx_v_offset); if (unlikely(__pyx_t_12 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5331, __pyx_L9_error)
 5332: 
+5333:                     block = Block_Acquire(block)
            __pyx_t_11 = __pyx_f_11cbytesparse_2_c_Block_Acquire(__pyx_v_block); if (unlikely(__pyx_t_11 == ((Block_ *)NULL))) __PYX_ERR(0, 5333, __pyx_L9_error)
            __pyx_v_block = __pyx_t_11;
+5334:                     that.block = block
            __pyx_v_that->block = __pyx_v_block;
+5335:                     that.block_ptr = Block_At__(block, <size_t>offset)
            __pyx_v_that->block_ptr = __pyx_f_11cbytesparse_2_c_Block_At__(__pyx_v_block, ((size_t)__pyx_v_offset));
 5336: 
 5337:             else:
+5338:                 that.block_index = Rack_IndexEndex(memory.blocks, endex)
        /*else*/ {
          __pyx_t_10 = __pyx_f_11cbytesparse_2_c_Rack_IndexEndex(__pyx_v_memory->blocks, __pyx_v_endex); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 5338, __pyx_L9_error)
          __pyx_v_that->block_index = __pyx_t_10;
+5339:                 if that.block_index:
          __pyx_t_1 = (__pyx_v_that->block_index != 0);
          if (__pyx_t_1) {
/* … */
          }
        }
        __pyx_L16:;
+5340:                     block = Rack_Get_(memory.blocks, that.block_index - 1)
            __pyx_t_11 = __pyx_f_11cbytesparse_2_c_Rack_Get_(__pyx_v_memory->blocks, (__pyx_v_that->block_index - 1)); if (unlikely(__pyx_t_11 == ((Block_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 5340, __pyx_L9_error)
            __pyx_v_block = __pyx_t_11;
+5341:                     that.block_start = Block_Start(block)
            __pyx_v_that->block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+5342:                     that.block_endex = Block_Endex(block)
            __pyx_v_that->block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
 5343: 
+5344:                     offset = endex if endex >= that.block_start else that.block_start
            if (((__pyx_v_endex >= __pyx_v_that->block_start) != 0)) {
              __pyx_t_6 = __pyx_v_endex;
            } else {
              __pyx_t_6 = __pyx_v_that->block_start;
            }
            __pyx_v_offset = __pyx_t_6;
+5345:                     if offset > that.block_endex:
            __pyx_t_1 = ((__pyx_v_offset > __pyx_v_that->block_endex) != 0);
            if (__pyx_t_1) {
/* … */
            }
+5346:                         offset = that.block_endex
              __pyx_t_6 = __pyx_v_that->block_endex;
              __pyx_v_offset = __pyx_t_6;
+5347:                     offset -= that.block_start
            __pyx_v_offset = (__pyx_v_offset - __pyx_v_that->block_start);
+5348:                     CheckAddrToSizeU(offset)
            __pyx_t_12 = __pyx_f_11cbytesparse_2_c_CheckAddrToSizeU(__pyx_v_offset); if (unlikely(__pyx_t_12 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 5348, __pyx_L9_error)
 5349: 
+5350:                     block = Block_Acquire(block)
            __pyx_t_11 = __pyx_f_11cbytesparse_2_c_Block_Acquire(__pyx_v_block); if (unlikely(__pyx_t_11 == ((Block_ *)NULL))) __PYX_ERR(0, 5350, __pyx_L9_error)
            __pyx_v_block = __pyx_t_11;
+5351:                     that.block = block
            __pyx_v_that->block = __pyx_v_block;
+5352:                     that.block_ptr = Block_At__(block, <size_t>offset)
            __pyx_v_that->block_ptr = __pyx_f_11cbytesparse_2_c_Block_At__(__pyx_v_block, ((size_t)__pyx_v_offset));
+5353:     except:
    /*except:*/ {
      __Pyx_AddTraceback("cbytesparse._c.Rover_Create", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_13, &__pyx_t_14) < 0) __PYX_ERR(0, 5353, __pyx_L11_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_13);
      __Pyx_GOTREF(__pyx_t_14);
+5354:         that = Rover_Free(that)
      __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Rover_Free(__pyx_v_that); if (unlikely(__pyx_t_5 == ((Rover_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 5354, __pyx_L11_except_error)
      __pyx_v_that = __pyx_t_5;
+5355:         raise
      __Pyx_GIVEREF(__pyx_t_2);
      __Pyx_GIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_14);
      __Pyx_ErrRestoreWithState(__pyx_t_2, __pyx_t_13, __pyx_t_14);
      __pyx_t_2 = 0; __pyx_t_13 = 0; __pyx_t_14 = 0; 
      __PYX_ERR(0, 5355, __pyx_L11_except_error)
    }
    __pyx_L11_except_error:;
 5356: 
+5357:     return that
  __pyx_r = __pyx_v_that;
  goto __pyx_L0;
 5358: 
 5359: 
+5360: cdef addr_t Rover_Length(const Rover_* that) nogil:
static addr_t __pyx_f_11cbytesparse_2_c_Rover_Length(Rover_ const *__pyx_v_that) {
  addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+5361:     return that.endex - that.start
  __pyx_r = (__pyx_v_that->endex - __pyx_v_that->start);
  goto __pyx_L0;
 5362: 
 5363: 
+5364: cdef bint Rover_HasNext(const Rover_* that) nogil:
static int __pyx_f_11cbytesparse_2_c_Rover_HasNext(Rover_ const *__pyx_v_that) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+5365:     if that.forward:
  __pyx_t_1 = (__pyx_v_that->forward != 0);
  if (__pyx_t_1) {
/* … */
  }
+5366:         return that.address < that.endex
    __pyx_r = (__pyx_v_that->address < __pyx_v_that->endex);
    goto __pyx_L0;
 5367:     else:
+5368:         return that.address > that.start
  /*else*/ {
    __pyx_r = (__pyx_v_that->address > __pyx_v_that->start);
    goto __pyx_L0;
  }
 5369: 
 5370: 
+5371: cdef int Rover_Next_(Rover_* that) except -2:
static int __pyx_f_11cbytesparse_2_c_Rover_Next_(Rover_ *__pyx_v_that) {
  Block_ *__pyx_v_block;
  int __pyx_v_value;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rover_Next_", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("cbytesparse._c.Rover_Next_", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -2;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5372:     cdef:
+5373:         Block_* block = NULL
  __pyx_v_block = NULL;
+5374:         int value = -1
  __pyx_v_value = -1;
 5375: 
+5376:     try:
  {
    /*try:*/ {
/* … */
    }
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
/* … */
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L1_error;
    __pyx_L7_try_return:;
    __Pyx_XGIVEREF(__pyx_t_1);
    __Pyx_XGIVEREF(__pyx_t_2);
    __Pyx_XGIVEREF(__pyx_t_3);
    __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
    goto __pyx_L0;
  }
+5377:         if that.forward:
      __pyx_t_4 = (__pyx_v_that->forward != 0);
      if (__pyx_t_4) {
/* … */
        goto __pyx_L9;
      }
+5378:             while True:  # loop to move to the next block when necessary
        while (1) {
+5379:                 if that.address < that.endex:
          __pyx_t_4 = ((__pyx_v_that->address < __pyx_v_that->endex) != 0);
          if (__pyx_t_4) {
/* … */
          }
+5380:                     if that.block_index < that.block_count:
            __pyx_t_4 = ((__pyx_v_that->block_index < __pyx_v_that->block_count) != 0);
            if (__pyx_t_4) {
/* … */
            }
+5381:                         if that.address < that.block_start:
              __pyx_t_4 = ((__pyx_v_that->address < __pyx_v_that->block_start) != 0);
              if (__pyx_t_4) {
/* … */
              }
+5382:                             that.address += 1
                __pyx_v_that->address = (__pyx_v_that->address + 1);
+5383:                             if that.pattern_size:
                __pyx_t_4 = (__pyx_v_that->pattern_size != 0);
                if (__pyx_t_4) {
/* … */
                  goto __pyx_L15;
                }
+5384:                                 value = <int><unsigned>that.pattern_data[that.pattern_offset]
                  __pyx_v_value = ((int)((unsigned int)(__pyx_v_that->pattern_data[__pyx_v_that->pattern_offset])));
 5385:                             else:
+5386:                                 value = -1
                /*else*/ {
                  __pyx_v_value = -1;
                }
                __pyx_L15:;
+5387:                             break
                goto __pyx_L11_break;
 5388: 
+5389:                         elif that.address < that.block_endex:
              __pyx_t_4 = ((__pyx_v_that->address < __pyx_v_that->block_endex) != 0);
              if (__pyx_t_4) {
/* … */
              }
+5390:                             that.address += 1
                __pyx_v_that->address = (__pyx_v_that->address + 1);
+5391:                             value = that.block_ptr[0]
                __pyx_v_value = (__pyx_v_that->block_ptr[0]);
+5392:                             that.block_ptr += 1
                __pyx_v_that->block_ptr = (__pyx_v_that->block_ptr + 1);
+5393:                             break
                goto __pyx_L11_break;
 5394: 
 5395:                         else:
+5396:                             that.block_index += 1
              /*else*/ {
                __pyx_v_that->block_index = (__pyx_v_that->block_index + 1);
+5397:                             if that.block_index < that.block_count:
                __pyx_t_4 = ((__pyx_v_that->block_index < __pyx_v_that->block_count) != 0);
                if (__pyx_t_4) {
/* … */
                }
+5398:                                 that.block = Block_Release(that.block)
                  __pyx_v_that->block = __pyx_f_11cbytesparse_2_c_Block_Release(__pyx_v_that->block);
+5399:                                 that.block = NULL
                  __pyx_v_that->block = NULL;
+5400:                                 block = Rack_Get_(that.memory.blocks, that.block_index)
                  __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Rack_Get_(__pyx_v_that->memory->blocks, __pyx_v_that->block_index); if (unlikely(__pyx_t_5 == ((Block_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 5400, __pyx_L3_error)
                  __pyx_v_block = __pyx_t_5;
+5401:                                 block = Block_Acquire(block)
                  __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Block_Acquire(__pyx_v_block); if (unlikely(__pyx_t_5 == ((Block_ *)NULL))) __PYX_ERR(0, 5401, __pyx_L3_error)
                  __pyx_v_block = __pyx_t_5;
+5402:                                 that.block = block
                  __pyx_v_that->block = __pyx_v_block;
+5403:                                 that.block_start = Block_Start(block)
                  __pyx_v_that->block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+5404:                                 that.block_endex = Block_Endex(block)
                  __pyx_v_that->block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
+5405:                                 that.block_ptr = Block_At_(block, 0)
                  __pyx_v_that->block_ptr = __pyx_f_11cbytesparse_2_c_Block_At_(__pyx_v_block, 0);
+5406:                             continue
                goto __pyx_L10_continue;
              }
 5407:                     else:
+5408:                         that.address += 1
            /*else*/ {
              __pyx_v_that->address = (__pyx_v_that->address + 1);
+5409:                         if that.pattern_size:
              __pyx_t_4 = (__pyx_v_that->pattern_size != 0);
              if (__pyx_t_4) {
/* … */
                goto __pyx_L17;
              }
+5410:                             value = <int><unsigned>that.pattern_data[that.pattern_offset]
                __pyx_v_value = ((int)((unsigned int)(__pyx_v_that->pattern_data[__pyx_v_that->pattern_offset])));
 5411:                         else:
+5412:                             value = -1
              /*else*/ {
                __pyx_v_value = -1;
              }
              __pyx_L17:;
+5413:                         break
              goto __pyx_L11_break;
            }
 5414: 
+5415:                 elif that.infinite:
          __pyx_t_4 = (__pyx_v_that->infinite != 0);
          if (likely(__pyx_t_4)) {
/* … */
            goto __pyx_L12;
          }
+5416:                     if that.pattern_size:
            __pyx_t_4 = (__pyx_v_that->pattern_size != 0);
            if (__pyx_t_4) {
/* … */
              goto __pyx_L18;
            }
+5417:                         value = <int><unsigned>that.pattern_data[that.pattern_offset]
              __pyx_v_value = ((int)((unsigned int)(__pyx_v_that->pattern_data[__pyx_v_that->pattern_offset])));
 5418:                     else:
+5419:                         value = -1
            /*else*/ {
              __pyx_v_value = -1;
            }
            __pyx_L18:;
 5420: 
 5421:                 else:
+5422:                     raise StopIteration()
          /*else*/ {
            __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_builtin_StopIteration); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5422, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_Raise(__pyx_t_6, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __PYX_ERR(0, 5422, __pyx_L3_error)
          }
          __pyx_L12:;
          __pyx_L10_continue:;
        }
        __pyx_L11_break:;
 5423:         else:
+5424:             while True:  # loop to move to the next block when necessary
      /*else*/ {
        while (1) {
+5425:                 if that.address > that.start:
          __pyx_t_4 = ((__pyx_v_that->address > __pyx_v_that->start) != 0);
          if (__pyx_t_4) {
/* … */
          }
+5426:                     if that.block_index:
            __pyx_t_4 = (__pyx_v_that->block_index != 0);
            if (__pyx_t_4) {
/* … */
            }
+5427:                         if that.address > that.block_endex:
              __pyx_t_4 = ((__pyx_v_that->address > __pyx_v_that->block_endex) != 0);
              if (__pyx_t_4) {
/* … */
              }
+5428:                             that.address -= 1
                __pyx_v_that->address = (__pyx_v_that->address - 1);
+5429:                             if that.pattern_size:
                __pyx_t_4 = (__pyx_v_that->pattern_size != 0);
                if (__pyx_t_4) {
/* … */
                  goto __pyx_L24;
                }
+5430:                                 value = <int><unsigned>that.pattern_data[that.pattern_offset]
                  __pyx_v_value = ((int)((unsigned int)(__pyx_v_that->pattern_data[__pyx_v_that->pattern_offset])));
 5431:                             else:
+5432:                                 value = -1
                /*else*/ {
                  __pyx_v_value = -1;
                }
                __pyx_L24:;
+5433:                             break
                goto __pyx_L20_break;
 5434: 
+5435:                         elif that.address > that.block_start:
              __pyx_t_4 = ((__pyx_v_that->address > __pyx_v_that->block_start) != 0);
              if (__pyx_t_4) {
/* … */
              }
+5436:                             that.address -= 1
                __pyx_v_that->address = (__pyx_v_that->address - 1);
+5437:                             that.block_ptr -= 1
                __pyx_v_that->block_ptr = (__pyx_v_that->block_ptr - 1);
+5438:                             value = that.block_ptr[0]
                __pyx_v_value = (__pyx_v_that->block_ptr[0]);
+5439:                             break
                goto __pyx_L20_break;
 5440: 
 5441:                         else:
+5442:                             that.block_index -= 1
              /*else*/ {
                __pyx_v_that->block_index = (__pyx_v_that->block_index - 1);
+5443:                             if that.block_index:
                __pyx_t_4 = (__pyx_v_that->block_index != 0);
                if (__pyx_t_4) {
/* … */
                }
+5444:                                 that.block = Block_Release(that.block)
                  __pyx_v_that->block = __pyx_f_11cbytesparse_2_c_Block_Release(__pyx_v_that->block);
+5445:                                 that.block = NULL
                  __pyx_v_that->block = NULL;
+5446:                                 block = Rack_Get_(that.memory.blocks, that.block_index - 1)
                  __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Rack_Get_(__pyx_v_that->memory->blocks, (__pyx_v_that->block_index - 1)); if (unlikely(__pyx_t_5 == ((Block_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 5446, __pyx_L3_error)
                  __pyx_v_block = __pyx_t_5;
+5447:                                 block = Block_Acquire(block)
                  __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Block_Acquire(__pyx_v_block); if (unlikely(__pyx_t_5 == ((Block_ *)NULL))) __PYX_ERR(0, 5447, __pyx_L3_error)
                  __pyx_v_block = __pyx_t_5;
+5448:                                 that.block = block
                  __pyx_v_that->block = __pyx_v_block;
+5449:                                 that.block_start = Block_Start(block)
                  __pyx_v_that->block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+5450:                                 that.block_endex = Block_Endex(block)
                  __pyx_v_that->block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
+5451:                                 that.block_ptr = Block_At__(block, Block_Length(block))
                  __pyx_v_that->block_ptr = __pyx_f_11cbytesparse_2_c_Block_At__(__pyx_v_block, __pyx_f_11cbytesparse_2_c_Block_Length(__pyx_v_block));
+5452:                             value = -1
                __pyx_v_value = -1;
+5453:                             continue
                goto __pyx_L19_continue;
              }
 5454:                     else:
+5455:                         that.address -= 1
            /*else*/ {
              __pyx_v_that->address = (__pyx_v_that->address - 1);
+5456:                         if that.pattern_size:
              __pyx_t_4 = (__pyx_v_that->pattern_size != 0);
              if (__pyx_t_4) {
/* … */
                goto __pyx_L26;
              }
+5457:                             value = <int><unsigned>that.pattern_data[that.pattern_offset]
                __pyx_v_value = ((int)((unsigned int)(__pyx_v_that->pattern_data[__pyx_v_that->pattern_offset])));
 5458:                         else:
+5459:                             value = -1
              /*else*/ {
                __pyx_v_value = -1;
              }
              __pyx_L26:;
+5460:                         break
              goto __pyx_L20_break;
            }
 5461: 
+5462:                 elif that.infinite:
          __pyx_t_4 = (__pyx_v_that->infinite != 0);
          if (likely(__pyx_t_4)) {
/* … */
            goto __pyx_L21;
          }
+5463:                     if that.pattern_size:
            __pyx_t_4 = (__pyx_v_that->pattern_size != 0);
            if (__pyx_t_4) {
/* … */
              goto __pyx_L27;
            }
+5464:                         value = <int><unsigned>that.pattern_data[that.pattern_offset]
              __pyx_v_value = ((int)((unsigned int)(__pyx_v_that->pattern_data[__pyx_v_that->pattern_offset])));
 5465:                     else:
+5466:                         value = -1
            /*else*/ {
              __pyx_v_value = -1;
            }
            __pyx_L27:;
 5467: 
 5468:                 else:
+5469:                     raise StopIteration()
          /*else*/ {
            __pyx_t_6 = __Pyx_PyObject_CallNoArg(__pyx_builtin_StopIteration); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5469, __pyx_L3_error)
            __Pyx_GOTREF(__pyx_t_6);
            __Pyx_Raise(__pyx_t_6, 0, 0, 0);
            __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
            __PYX_ERR(0, 5469, __pyx_L3_error)
          }
          __pyx_L21:;
          __pyx_L19_continue:;
        }
        __pyx_L20_break:;
      }
      __pyx_L9:;
 5470: 
+5471:         if that.pattern_size:
      __pyx_t_4 = (__pyx_v_that->pattern_size != 0);
      if (__pyx_t_4) {
/* … */
      }
+5472:             if that.forward:
        __pyx_t_4 = (__pyx_v_that->forward != 0);
        if (__pyx_t_4) {
/* … */
          goto __pyx_L29;
        }
+5473:                 if that.pattern_offset < that.pattern_size - 1:
          __pyx_t_4 = ((__pyx_v_that->pattern_offset < (__pyx_v_that->pattern_size - 1)) != 0);
          if (__pyx_t_4) {
/* … */
            goto __pyx_L30;
          }
+5474:                     that.pattern_offset += 1
            __pyx_v_that->pattern_offset = (__pyx_v_that->pattern_offset + 1);
 5475:                 else:
+5476:                     that.pattern_offset = 0
          /*else*/ {
            __pyx_v_that->pattern_offset = 0;
          }
          __pyx_L30:;
 5477:             else:
+5478:                 if that.pattern_offset > 0:
        /*else*/ {
          __pyx_t_4 = ((__pyx_v_that->pattern_offset > 0) != 0);
          if (__pyx_t_4) {
/* … */
            goto __pyx_L31;
          }
+5479:                     that.pattern_offset -= 1
            __pyx_v_that->pattern_offset = (__pyx_v_that->pattern_offset - 1);
 5480:                 else:
+5481:                     that.pattern_offset = that.pattern_size - 1
          /*else*/ {
            __pyx_v_that->pattern_offset = (__pyx_v_that->pattern_size - 1);
          }
          __pyx_L31:;
        }
        __pyx_L29:;
 5482: 
+5483:         return value
      __pyx_r = __pyx_v_value;
      goto __pyx_L7_try_return;
 5484: 
+5485:     except:
    /*except:*/ {
      __Pyx_AddTraceback("cbytesparse._c.Rover_Next_", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_7, &__pyx_t_8) < 0) __PYX_ERR(0, 5485, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_6);
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GOTREF(__pyx_t_8);
+5486:         that.block = Block_Release(that.block)  # preempt
      __pyx_v_that->block = __pyx_f_11cbytesparse_2_c_Block_Release(__pyx_v_that->block);
+5487:         raise
      __Pyx_GIVEREF(__pyx_t_6);
      __Pyx_GIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_8);
      __Pyx_ErrRestoreWithState(__pyx_t_6, __pyx_t_7, __pyx_t_8);
      __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_8 = 0; 
      __PYX_ERR(0, 5487, __pyx_L5_except_error)
    }
    __pyx_L5_except_error:;
 5488: 
 5489: 
+5490: cdef object Rover_Next(Rover_* that):
static PyObject *__pyx_f_11cbytesparse_2_c_Rover_Next(Rover_ *__pyx_v_that) {
  int __pyx_v_value;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rover_Next", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Rover_Next", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5491:     cdef:
+5492:         int value = Rover_Next_(that)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Rover_Next_(__pyx_v_that); if (unlikely(__pyx_t_1 == ((int)-2))) __PYX_ERR(0, 5492, __pyx_L1_error)
  __pyx_v_value = __pyx_t_1;
 5493: 
+5494:     return None if value < 0 else <object>value
  __Pyx_XDECREF(__pyx_r);
  if (((__pyx_v_value < 0) != 0)) {
    __Pyx_INCREF(Py_None);
    __pyx_t_2 = Py_None;
  } else {
    __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5494, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(((PyObject *)__pyx_t_3));
    __pyx_t_2 = __pyx_t_3;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 5495: 
 5496: 
+5497: cdef vint Rover_Dispose(Rover_* that) except -1:
static __pyx_t_11cbytesparse_2_c_vint __pyx_f_11cbytesparse_2_c_Rover_Dispose(Rover_ *__pyx_v_that) {
  __pyx_t_11cbytesparse_2_c_vint __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("Rover_Dispose", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
+5498:     that.address = that.endex if that.forward else that.start
  if ((__pyx_v_that->forward != 0)) {
    __pyx_t_1 = __pyx_v_that->endex;
  } else {
    __pyx_t_1 = __pyx_v_that->start;
  }
  __pyx_v_that->address = __pyx_t_1;
+5499:     that.block = Block_Release(that.block)
  __pyx_v_that->block = __pyx_f_11cbytesparse_2_c_Block_Release(__pyx_v_that->block);
+5500:     that.memory = NULL
  __pyx_v_that->memory = NULL;
 5501: 
 5502: 
+5503: cdef bint Rover_Forward(const Rover_* that) nogil:
static int __pyx_f_11cbytesparse_2_c_Rover_Forward(Rover_ const *__pyx_v_that) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+5504:     return that.forward
  __pyx_r = __pyx_v_that->forward;
  goto __pyx_L0;
 5505: 
 5506: 
+5507: cdef bint Rover_Infinite(const Rover_* that) nogil:
static int __pyx_f_11cbytesparse_2_c_Rover_Infinite(Rover_ const *__pyx_v_that) {
  int __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+5508:     return that.infinite
  __pyx_r = __pyx_v_that->infinite;
  goto __pyx_L0;
 5509: 
 5510: 
+5511: cdef addr_t Rover_Address(const Rover_* that) nogil:
static addr_t __pyx_f_11cbytesparse_2_c_Rover_Address(Rover_ const *__pyx_v_that) {
  addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+5512:     return that.address
  __pyx_r = __pyx_v_that->address;
  goto __pyx_L0;
 5513: 
 5514: 
+5515: cdef addr_t Rover_Start(const Rover_* that) nogil:
static addr_t __pyx_f_11cbytesparse_2_c_Rover_Start(Rover_ const *__pyx_v_that) {
  addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+5516:     return that.start
  __pyx_r = __pyx_v_that->start;
  goto __pyx_L0;
 5517: 
 5518: 
+5519: cdef addr_t Rover_Endex(const Rover_* that) nogil:
static addr_t __pyx_f_11cbytesparse_2_c_Rover_Endex(Rover_ const *__pyx_v_that) {
  addr_t __pyx_r;
/* … */
  /* function exit code */
  __pyx_L0:;
  return __pyx_r;
}
+5520:     return that.endex
  __pyx_r = __pyx_v_that->endex;
  goto __pyx_L0;
 5521: 
 5522: 
 5523: # =====================================================================================================================
 5524: 
 5525: cdef class Memory:
 5526:     r"""Virtual memory.
 5527: 
 5528:     This class is a handy wrapper around `blocks`, so that it can behave mostly
 5529:     like a :obj:`bytearray`, but on sparse chunks of data.
 5530: 
 5531:     Please look at examples of each method to get a glimpse of the features of
 5532:     this class.
 5533: 
 5534:     On creation, at most one of `memory`, `blocks`, or `data` can be specified.
 5535: 
 5536:     The Cython implementation limits the address range to that of the integral
 5537:     type ``uint_fast64_t``.
 5538: 
 5539:     Attributes:
 5540:         _blocks (list of blocks):
 5541:             A sequence of spaced blocks, sorted by address.
 5542: 
 5543:         _trim_start (int):
 5544:             Memory trimming start address. Any data before this address is
 5545:             automatically discarded; disabled if ``None``.
 5546: 
 5547:         _trim_endex (int):
 5548:             Memory trimming exclusive end address. Any data at or after this
 5549:             address is automatically discarded; disabled if ``None``.
 5550: 
 5551:     Arguments:
 5552:         start (int):
 5553:             Optional memory start address.
 5554:             Anything before will be trimmed away.
 5555: 
 5556:         endex (int):
 5557:             Optional memory exclusive end address.
 5558:             Anything at or after it will be trimmed away.
 5559: 
 5560:     Raises:
 5561:         :obj:`ValueError`: More than one of `memory`, `data`, and `blocks`.
 5562: 
 5563:     Examples:
 5564:         >>> memory = Memory()
 5565:         >>> memory._blocks
 5566:         []
 5567: 
 5568:         >>> memory = Memory.from_bytes(b'Hello, World!', offset=5)
 5569:         >>> memory._blocks
 5570:         [[5, b'Hello, World!']]
 5571:     """
 5572: 
+5573:     def __cinit__(self):
/* Python wrapper */
static int __pyx_pw_11cbytesparse_2_c_6Memory_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_11cbytesparse_2_c_6Memory_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
    __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return -1;}
  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__cinit__", 0))) return -1;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory___cinit__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11cbytesparse_2_c_6Memory___cinit__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__cinit__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5574:         r"""Cython constructor."""
+5575:         self._ = NULL
  __pyx_v_self->_ = NULL;
 5576: 
+5577:     def __dealloc__(self):
/* Python wrapper */
static void __pyx_pw_11cbytesparse_2_c_6Memory_3__dealloc__(PyObject *__pyx_v_self); /*proto*/
static void __pyx_pw_11cbytesparse_2_c_6Memory_3__dealloc__(PyObject *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
  __pyx_pf_11cbytesparse_2_c_6Memory_2__dealloc__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

static void __pyx_pf_11cbytesparse_2_c_6Memory_2__dealloc__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__dealloc__", 0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_WriteUnraisable("cbytesparse._c.Memory.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
}
 5578:         r"""Cython deallocation method."""
+5579:         self._ = Memory_Free(self._)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Free(__pyx_v_self->_); if (unlikely(__pyx_t_1 == ((Memory_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 5579, __pyx_L1_error)
  __pyx_v_self->_ = __pyx_t_1;
 5580: 
+5581:     def __init__(
/* Python wrapper */
static int __pyx_pw_11cbytesparse_2_c_6Memory_5__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_11cbytesparse_2_c_6Memory_5__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_start,&__pyx_n_s_endex,0};
    PyObject* values[2] = {0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11cbytesparse_2_c_6Memory_4__init__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5582:         self: Memory,
+5583:         start: Optional[Address] = None,
    values[0] = ((PyObject *)Py_None);
+5584:         endex: Optional[Address] = None,
    values[1] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 5581, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_start = values[0];
    __pyx_v_endex = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5581, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_4__init__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_start, __pyx_v_endex);
 5585:     ):
 5586: 
+5587:         self._ = Memory_Create(NULL, None, None, None, start, endex, False, False)
  __pyx_t_1 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(Py_None, 0); if (unlikely(!__pyx_t_1.memview)) __PYX_ERR(0, 5587, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_Create(NULL, __pyx_t_1, Py_None, Py_None, __pyx_v_start, __pyx_v_endex, 0, 0); if (unlikely(__pyx_t_2 == ((Memory_ *)NULL))) __PYX_ERR(0, 5587, __pyx_L1_error)
  __PYX_XDEC_MEMVIEW(&__pyx_t_1, 1);
  __pyx_t_1.memview = NULL;
  __pyx_t_1.data = NULL;
  __pyx_v_self->_ = __pyx_t_2;
 5588: 
+5589:     @classmethod
  __pyx_t_5 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5589, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_from_blocks, __pyx_t_5) < 0) __PYX_ERR(0, 5590, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
+5590:     def from_blocks(
/* Python wrapper */
static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pw_11cbytesparse_2_c_6Memory_7from_blocks(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_6from_blocks[] = "Memory.from_blocks(type cls: Type[Memory], blocks: BlockList, offset: Address = 0, start: Optional[Address] = None, endex: Optional[Address] = None, copy: bool = True, validate: bool = True) -> Memory\nCreates a virtual memory from blocks.\n\n        Arguments:\n            blocks (list of blocks):\n                A sequence of non-overlapping blocks, sorted by address.\n\n            offset (int):\n                Some address offset applied to all the blocks.\n\n            start (int):\n                Optional memory start address.\n                Anything before will be trimmed away.\n\n            endex (int):\n                Optional memory exclusive end address.\n                Anything at or after it will be trimmed away.\n\n            copy (bool):\n                Forces copy of provided input data.\n\n            validate (bool):\n                Validates the resulting :obj:`Memory` object.\n\n        Raises:\n            :obj:`ValueError`: Some requirements are not satisfied.\n\n        Examples:\n            +---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |\n            +===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |   |   |   |   |\n            +---+---+---+---+---+---+---+---+---+\n            |   |   |   |   |   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+\n\n            >>> blocks = [[1, b'ABC'], [5, b'xyz']]\n            >>> memory = Memory.from_blocks(blocks)\n            >>> memory._blocks\n            [[1, b'ABC'], [5, b'xyz']]\n            >>> memory = Memory.from_blocks(blocks, offset=3)\n            >>> memory._blocks\n            [[4, b'ABC'], [8, b'xyz']]\n\n            ~~~\n\n            >>> # Loads data from an Intel HEX record file\n            >>> # NOTE: Record files typically require collapsing!\n            >>> import hexrec.records as hr\n            >>> blocks = hr.load_blocks('records.hex')\n            >>> memory = Memory.from_blocks(col""lapse_blocks(blocks))\n            >>> memory\n                ...\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_7from_blocks = {"from_blocks", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_7from_blocks, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_6from_blocks};
static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pw_11cbytesparse_2_c_6Memory_7from_blocks(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_blocks = 0;
  PyObject *__pyx_v_offset = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_v_copy = 0;
  PyObject *__pyx_v_validate = 0;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("from_blocks (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_blocks,&__pyx_n_s_offset,&__pyx_n_s_start,&__pyx_n_s_endex,&__pyx_n_s_copy,&__pyx_n_s_validate,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    values[1] = ((PyObject *)__pyx_int_0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pf_11cbytesparse_2_c_6Memory_6from_blocks(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_blocks, PyObject *__pyx_v_offset, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_copy, PyObject *__pyx_v_validate) {
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_memory = 0;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("from_blocks", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.from_blocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_memory);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__71 = PyTuple_Pack(8, __pyx_n_s_cls, __pyx_n_s_blocks, __pyx_n_s_offset, __pyx_n_s_start, __pyx_n_s_endex, __pyx_n_s_copy, __pyx_n_s_validate, __pyx_n_s_memory); if (unlikely(!__pyx_tuple__71)) __PYX_ERR(0, 5590, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__71);
  __Pyx_GIVEREF(__pyx_tuple__71);
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5590, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
/* … */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_7from_blocks, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_from_blocks, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__72)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5590, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_1, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_from_blocks, __pyx_t_1) < 0) __PYX_ERR(0, 5590, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
/* … */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory, __pyx_n_s_from_blocks); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5590, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_codeobj__72 = (PyObject*)__Pyx_PyCode_New(7, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__71, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_from_blocks, 5590, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__72)) __PYX_ERR(0, 5590, __pyx_L1_error)
+5591:         cls: Type[Memory],
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5591, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_3, ((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5591, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_cls, __pyx_t_1) < 0) __PYX_ERR(0, 5590, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5592:         blocks: BlockList,
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_BlockList); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5592, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_blocks, __pyx_t_1) < 0) __PYX_ERR(0, 5590, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5593:         offset: Address = 0,
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5593, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_offset, __pyx_t_1) < 0) __PYX_ERR(0, 5590, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5594:         start: Optional[Address] = None,
    values[2] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Optional); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_start, __pyx_t_6) < 0) __PYX_ERR(0, 5590, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+5595:         endex: Optional[Address] = None,
    values[3] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5595, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5595, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5595, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_endex, __pyx_t_1) < 0) __PYX_ERR(0, 5590, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5596:         copy: bool = True,
    values[4] = ((PyObject *)Py_True);
/* … */
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_copy, ((PyObject*)&PyBool_Type)) < 0) __PYX_ERR(0, 5590, __pyx_L1_error)
+5597:         validate: bool = True,
    values[5] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_blocks)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_copy);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_validate);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "from_blocks") < 0)) __PYX_ERR(0, 5590, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_blocks = values[0];
    __pyx_v_offset = values[1];
    __pyx_v_start = values[2];
    __pyx_v_endex = values[3];
    __pyx_v_copy = values[4];
    __pyx_v_validate = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("from_blocks", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5590, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.from_blocks", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_6from_blocks(((PyTypeObject*)__pyx_v_cls), __pyx_v_blocks, __pyx_v_offset, __pyx_v_start, __pyx_v_endex, __pyx_v_copy, __pyx_v_validate);
/* … */
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_validate, ((PyObject*)&PyBool_Type)) < 0) __PYX_ERR(0, 5590, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 5590, __pyx_L1_error)
 5598:     ) -> Memory:
 5599:         r"""Creates a virtual memory from blocks.
 5600: 
 5601:         Arguments:
 5602:             blocks (list of blocks):
 5603:                 A sequence of non-overlapping blocks, sorted by address.
 5604: 
 5605:             offset (int):
 5606:                 Some address offset applied to all the blocks.
 5607: 
 5608:             start (int):
 5609:                 Optional memory start address.
 5610:                 Anything before will be trimmed away.
 5611: 
 5612:             endex (int):
 5613:                 Optional memory exclusive end address.
 5614:                 Anything at or after it will be trimmed away.
 5615: 
 5616:             copy (bool):
 5617:                 Forces copy of provided input data.
 5618: 
 5619:             validate (bool):
 5620:                 Validates the resulting :obj:`Memory` object.
 5621: 
 5622:         Raises:
 5623:             :obj:`ValueError`: Some requirements are not satisfied.
 5624: 
 5625:         Examples:
 5626:             +---+---+---+---+---+---+---+---+---+
 5627:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 5628:             +===+===+===+===+===+===+===+===+===+
 5629:             |   |[A | B | C]|   |   |   |   |   |
 5630:             +---+---+---+---+---+---+---+---+---+
 5631:             |   |   |   |   |   |[x | y | z]|   |
 5632:             +---+---+---+---+---+---+---+---+---+
 5633: 
 5634:             >>> blocks = [[1, b'ABC'], [5, b'xyz']]
 5635:             >>> memory = Memory.from_blocks(blocks)
 5636:             >>> memory._blocks
 5637:             [[1, b'ABC'], [5, b'xyz']]
 5638:             >>> memory = Memory.from_blocks(blocks, offset=3)
 5639:             >>> memory._blocks
 5640:             [[4, b'ABC'], [8, b'xyz']]
 5641: 
 5642:             ~~~
 5643: 
 5644:             >>> # Loads data from an Intel HEX record file
 5645:             >>> # NOTE: Record files typically require collapsing!
 5646:             >>> import hexrec.records as hr
 5647:             >>> blocks = hr.load_blocks('records.hex')
 5648:             >>> memory = Memory.from_blocks(collapse_blocks(blocks))
 5649:             >>> memory
 5650:                 ...
 5651:         """
 5652:         cdef:
+5653:             Memory memory = Memory()
  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5653, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_memory = ((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_t_1);
  __pyx_t_1 = 0;
 5654: 
+5655:         memory._ = Memory_Free(memory._)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_Free(__pyx_v_memory->_); if (unlikely(__pyx_t_2 == ((Memory_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 5655, __pyx_L1_error)
  __pyx_v_memory->_ = __pyx_t_2;
+5656:         memory._ = Memory_Create(NULL, None, offset, blocks, start, endex, copy, validate)
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(Py_None, 0); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 5656, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_copy); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5656, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_validate); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5656, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_Create(NULL, __pyx_t_3, __pyx_v_offset, __pyx_v_blocks, __pyx_v_start, __pyx_v_endex, __pyx_t_4, __pyx_t_5); if (unlikely(__pyx_t_2 == ((Memory_ *)NULL))) __PYX_ERR(0, 5656, __pyx_L1_error)
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __pyx_v_memory->_ = __pyx_t_2;
+5657:         return memory
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_memory));
  __pyx_r = __pyx_v_memory;
  goto __pyx_L0;
 5658: 
+5659:     @classmethod
  __pyx_t_5 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5659, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_from_bytes, __pyx_t_5) < 0) __PYX_ERR(0, 5660, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
+5660:     def from_bytes(
/* Python wrapper */
static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pw_11cbytesparse_2_c_6Memory_9from_bytes(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_8from_bytes[] = "Memory.from_bytes(type cls: Type[Memory], data: AnyBytes, offset: Address = 0, start: Optional[Address] = None, endex: Optional[Address] = None, copy: bool = True, validate: bool = True) -> Memory\nCreates a virtual memory from a byte-like chunk.\n\n        Arguments:\n            data (byte-like data):\n                A byte-like chunk of data (e.g. :obj:`bytes`,\n                :obj:`bytearray`, :obj:`memoryview`).\n\n            offset (int):\n                Start address of the block of data.\n\n            start (int):\n                Optional memory start address.\n                Anything before will be trimmed away.\n\n            endex (int):\n                Optional memory exclusive end address.\n                Anything at or after it will be trimmed away.\n\n            copy (bool):\n                Forces copy of provided input data into the underlying data\n                structure.\n\n            validate (bool):\n                Validates the resulting :obj:`Memory` object.\n\n        Raises:\n            :obj:`ValueError`: Some requirements are not satisfied.\n\n        Examples:\n            >>> memory = Memory.from_bytes(b'')\n            >>> memory._blocks\n            []\n\n            ~~~\n\n            +---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |\n            +===+===+===+===+===+===+===+===+===+\n            |   |   |[A | B | C | x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_bytes(b'ABCxyz', 2)\n            >>> memory._blocks\n            [[2, b'ABCxyz']]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_9from_bytes = {"from_bytes", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_9from_bytes, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_8from_bytes};
static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pw_11cbytesparse_2_c_6Memory_9from_bytes(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_data = 0;
  PyObject *__pyx_v_offset = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_v_copy = 0;
  PyObject *__pyx_v_validate = 0;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("from_bytes (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_data,&__pyx_n_s_offset,&__pyx_n_s_start,&__pyx_n_s_endex,&__pyx_n_s_copy,&__pyx_n_s_validate,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    values[1] = ((PyObject *)__pyx_int_0);
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pf_11cbytesparse_2_c_6Memory_8from_bytes(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_data, PyObject *__pyx_v_offset, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_copy, PyObject *__pyx_v_validate) {
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_memory = 0;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("from_bytes", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.from_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_memory);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__73 = PyTuple_Pack(8, __pyx_n_s_cls, __pyx_n_s_data, __pyx_n_s_offset, __pyx_n_s_start, __pyx_n_s_endex, __pyx_n_s_copy, __pyx_n_s_validate, __pyx_n_s_memory); if (unlikely(!__pyx_tuple__73)) __PYX_ERR(0, 5660, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__73);
  __Pyx_GIVEREF(__pyx_tuple__73);
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5660, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
/* … */
  __pyx_t_3 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_9from_bytes, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_from_bytes, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__74)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5660, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_3, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_from_bytes, __pyx_t_3) < 0) __PYX_ERR(0, 5660, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
/* … */
  __Pyx_GetNameInClass(__pyx_t_3, (PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory, __pyx_n_s_from_bytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5660, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_codeobj__74 = (PyObject*)__Pyx_PyCode_New(7, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__73, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_from_bytes, 5660, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__74)) __PYX_ERR(0, 5660, __pyx_L1_error)
+5661:         cls: Type[Memory],
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Type); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5661, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_1, ((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5661, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_cls, __pyx_t_3) < 0) __PYX_ERR(0, 5660, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+5662:         data: AnyBytes,
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5662, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_data, __pyx_t_3) < 0) __PYX_ERR(0, 5660, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+5663:         offset: Address = 0,
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5663, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_offset, __pyx_t_3) < 0) __PYX_ERR(0, 5660, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+5664:         start: Optional[Address] = None,
    values[2] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Optional); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5664, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5664, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5664, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_start, __pyx_t_6) < 0) __PYX_ERR(0, 5660, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+5665:         endex: Optional[Address] = None,
    values[3] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5665, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5665, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5665, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_endex, __pyx_t_3) < 0) __PYX_ERR(0, 5660, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+5666:         copy: bool = True,
    values[4] = ((PyObject *)Py_True);
/* … */
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_copy, ((PyObject*)&PyBool_Type)) < 0) __PYX_ERR(0, 5660, __pyx_L1_error)
+5667:         validate: bool = True,
    values[5] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_data)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_copy);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_validate);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "from_bytes") < 0)) __PYX_ERR(0, 5660, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_data = values[0];
    __pyx_v_offset = values[1];
    __pyx_v_start = values[2];
    __pyx_v_endex = values[3];
    __pyx_v_copy = values[4];
    __pyx_v_validate = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("from_bytes", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5660, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.from_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_8from_bytes(((PyTypeObject*)__pyx_v_cls), __pyx_v_data, __pyx_v_offset, __pyx_v_start, __pyx_v_endex, __pyx_v_copy, __pyx_v_validate);
/* … */
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_validate, ((PyObject*)&PyBool_Type)) < 0) __PYX_ERR(0, 5660, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 5660, __pyx_L1_error)
 5668:     ) -> Memory:
 5669:         r"""Creates a virtual memory from a byte-like chunk.
 5670: 
 5671:         Arguments:
 5672:             data (byte-like data):
 5673:                 A byte-like chunk of data (e.g. :obj:`bytes`,
 5674:                 :obj:`bytearray`, :obj:`memoryview`).
 5675: 
 5676:             offset (int):
 5677:                 Start address of the block of data.
 5678: 
 5679:             start (int):
 5680:                 Optional memory start address.
 5681:                 Anything before will be trimmed away.
 5682: 
 5683:             endex (int):
 5684:                 Optional memory exclusive end address.
 5685:                 Anything at or after it will be trimmed away.
 5686: 
 5687:             copy (bool):
 5688:                 Forces copy of provided input data into the underlying data
 5689:                 structure.
 5690: 
 5691:             validate (bool):
 5692:                 Validates the resulting :obj:`Memory` object.
 5693: 
 5694:         Raises:
 5695:             :obj:`ValueError`: Some requirements are not satisfied.
 5696: 
 5697:         Examples:
 5698:             >>> memory = Memory.from_bytes(b'')
 5699:             >>> memory._blocks
 5700:             []
 5701: 
 5702:             ~~~
 5703: 
 5704:             +---+---+---+---+---+---+---+---+---+
 5705:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 5706:             +===+===+===+===+===+===+===+===+===+
 5707:             |   |   |[A | B | C | x | y | z]|   |
 5708:             +---+---+---+---+---+---+---+---+---+
 5709: 
 5710:             >>> memory = Memory.from_bytes(b'ABCxyz', 2)
 5711:             >>> memory._blocks
 5712:             [[2, b'ABCxyz']]
 5713:         """
 5714:         cdef:
+5715:             Memory memory = Memory()
  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_memory = ((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_t_1);
  __pyx_t_1 = 0;
 5716: 
+5717:         memory._ = Memory_Free(memory._)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_Free(__pyx_v_memory->_); if (unlikely(__pyx_t_2 == ((Memory_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 5717, __pyx_L1_error)
  __pyx_v_memory->_ = __pyx_t_2;
+5718:         memory._ = Memory_Create(NULL, data, offset, None, start, endex, copy, validate)
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(__pyx_v_data, 0); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 5718, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_copy); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5718, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_validate); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5718, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_Create(NULL, __pyx_t_3, __pyx_v_offset, Py_None, __pyx_v_start, __pyx_v_endex, __pyx_t_4, __pyx_t_5); if (unlikely(__pyx_t_2 == ((Memory_ *)NULL))) __PYX_ERR(0, 5718, __pyx_L1_error)
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __pyx_v_memory->_ = __pyx_t_2;
+5719:         return memory
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_memory));
  __pyx_r = __pyx_v_memory;
  goto __pyx_L0;
 5720: 
+5721:     @classmethod
  __pyx_t_5 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5721, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_from_memory, __pyx_t_5) < 0) __PYX_ERR(0, 5722, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
+5722:     def from_memory(
/* Python wrapper */
static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pw_11cbytesparse_2_c_6Memory_11from_memory(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_10from_memory[] = "Memory.from_memory(type cls: Type[Memory], Memory memory: Memory, offset: Address = 0, start: Optional[Address] = None, endex: Optional[Address] = None, copy: bool = True, validate: bool = True) -> Memory\nCreates a virtual memory from another one.\n\n        Arguments:\n            memory (Memory):\n                A :obj:`Memory` to copy data from.\n\n            offset (int):\n                Some address offset applied to all the blocks.\n\n            start (int):\n                Optional memory start address.\n                Anything before will be trimmed away.\n\n            endex (int):\n                Optional memory exclusive end address.\n                Anything at or after it will be trimmed away.\n\n            copy (bool):\n                Forces copy of provided input data into the underlying data\n                structure.\n\n            validate (bool):\n                Validates the resulting :obj:`Memory` object.\n\n        Raises:\n            :obj:`ValueError`: Some requirements are not satisfied.\n\n        Examples:\n            >>> memory1 = Memory.from_bytes(b'ABC', 5)\n            >>> memory2 = Memory.from_memory(memory1)\n            >>> memory2._blocks\n            [[5, b'ABC]]\n            >>> memory1 == memory2\n            True\n            >>> memory1 is memory2\n            False\n            >>> memory1._blocks is memory2._blocks\n            False\n\n            ~~~\n\n            >>> memory1 = Memory.from_bytes(b'ABC', 10)\n            >>> memory2 = Memory.from_memory(memory1, -3)\n            >>> memory2._blocks\n            [[7, b'ABC]]\n            >>> memory1 == memory2\n            False\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_11from_memory = {"from_memory", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_11from_memory, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_10from_memory};
static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pw_11cbytesparse_2_c_6Memory_11from_memory(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_memory = 0;
  PyObject *__pyx_v_offset = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_v_copy = 0;
  PyObject *__pyx_v_validate = 0;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("from_memory (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_memory,&__pyx_n_s_offset,&__pyx_n_s_start,&__pyx_n_s_endex,&__pyx_n_s_copy,&__pyx_n_s_validate,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    values[1] = ((PyObject *)__pyx_int_0);
/* … */
  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pf_11cbytesparse_2_c_6Memory_10from_memory(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_memory, PyObject *__pyx_v_offset, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_copy, PyObject *__pyx_v_validate) {
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_memory_ = 0;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("from_memory", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.from_memory", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_memory_);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__75 = PyTuple_Pack(8, __pyx_n_s_cls, __pyx_n_s_memory, __pyx_n_s_offset, __pyx_n_s_start, __pyx_n_s_endex, __pyx_n_s_copy, __pyx_n_s_validate, __pyx_n_s_memory_2); if (unlikely(!__pyx_tuple__75)) __PYX_ERR(0, 5722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__75);
  __Pyx_GIVEREF(__pyx_tuple__75);
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
/* … */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_11from_memory, __Pyx_CYFUNCTION_CLASSMETHOD | __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_from_memory, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__76)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_1, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_from_memory, __pyx_t_1) < 0) __PYX_ERR(0, 5722, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
/* … */
  __Pyx_GetNameInClass(__pyx_t_1, (PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory, __pyx_n_s_from_memory); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5722, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_codeobj__76 = (PyObject*)__Pyx_PyCode_New(7, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__75, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_from_memory, 5722, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__76)) __PYX_ERR(0, 5722, __pyx_L1_error)
+5723:         cls: Type[Memory],
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Type); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5723, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_3, ((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5723, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_cls, __pyx_t_1) < 0) __PYX_ERR(0, 5722, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_memory, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 5722, __pyx_L1_error)
 5724:         memory: Memory,
+5725:         offset: Address = 0,
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5725, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_offset, __pyx_t_1) < 0) __PYX_ERR(0, 5722, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5726:         start: Optional[Address] = None,
    values[2] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Optional); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5726, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5726, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5726, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_start, __pyx_t_6) < 0) __PYX_ERR(0, 5722, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+5727:         endex: Optional[Address] = None,
    values[3] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_endex, __pyx_t_1) < 0) __PYX_ERR(0, 5722, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5728:         copy: bool = True,
    values[4] = ((PyObject *)Py_True);
/* … */
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_copy, ((PyObject*)&PyBool_Type)) < 0) __PYX_ERR(0, 5722, __pyx_L1_error)
+5729:         validate: bool = True,
    values[5] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_memory)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_copy);
          if (value) { values[4] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_validate);
          if (value) { values[5] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "from_memory") < 0)) __PYX_ERR(0, 5722, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_memory = ((struct __pyx_obj_11cbytesparse_2_c_Memory *)values[0]);
    __pyx_v_offset = values[1];
    __pyx_v_start = values[2];
    __pyx_v_endex = values[3];
    __pyx_v_copy = values[4];
    __pyx_v_validate = values[5];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("from_memory", 0, 1, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5722, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.from_memory", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_memory), __pyx_ptype_11cbytesparse_2_c_Memory, 1, "memory", 0))) __PYX_ERR(0, 5724, __pyx_L1_error)
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_10from_memory(((PyTypeObject*)__pyx_v_cls), __pyx_v_memory, __pyx_v_offset, __pyx_v_start, __pyx_v_endex, __pyx_v_copy, __pyx_v_validate);
/* … */
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_validate, ((PyObject*)&PyBool_Type)) < 0) __PYX_ERR(0, 5722, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 5722, __pyx_L1_error)
 5730:     ) -> Memory:
 5731:         r"""Creates a virtual memory from another one.
 5732: 
 5733:         Arguments:
 5734:             memory (Memory):
 5735:                 A :obj:`Memory` to copy data from.
 5736: 
 5737:             offset (int):
 5738:                 Some address offset applied to all the blocks.
 5739: 
 5740:             start (int):
 5741:                 Optional memory start address.
 5742:                 Anything before will be trimmed away.
 5743: 
 5744:             endex (int):
 5745:                 Optional memory exclusive end address.
 5746:                 Anything at or after it will be trimmed away.
 5747: 
 5748:             copy (bool):
 5749:                 Forces copy of provided input data into the underlying data
 5750:                 structure.
 5751: 
 5752:             validate (bool):
 5753:                 Validates the resulting :obj:`Memory` object.
 5754: 
 5755:         Raises:
 5756:             :obj:`ValueError`: Some requirements are not satisfied.
 5757: 
 5758:         Examples:
 5759:             >>> memory1 = Memory.from_bytes(b'ABC', 5)
 5760:             >>> memory2 = Memory.from_memory(memory1)
 5761:             >>> memory2._blocks
 5762:             [[5, b'ABC]]
 5763:             >>> memory1 == memory2
 5764:             True
 5765:             >>> memory1 is memory2
 5766:             False
 5767:             >>> memory1._blocks is memory2._blocks
 5768:             False
 5769: 
 5770:             ~~~
 5771: 
 5772:             >>> memory1 = Memory.from_bytes(b'ABC', 10)
 5773:             >>> memory2 = Memory.from_memory(memory1, -3)
 5774:             >>> memory2._blocks
 5775:             [[7, b'ABC]]
 5776:             >>> memory1 == memory2
 5777:             False
 5778:         """
 5779:         cdef:
+5780:             Memory memory_ = Memory()
  __pyx_t_1 = __Pyx_PyObject_CallNoArg(((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5780, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_memory_ = ((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_t_1);
  __pyx_t_1 = 0;
 5781: 
+5782:         memory_._ = Memory_Free(memory_._)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_Free(__pyx_v_memory_->_); if (unlikely(__pyx_t_2 == ((Memory_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 5782, __pyx_L1_error)
  __pyx_v_memory_->_ = __pyx_t_2;
+5783:         memory_._ = Memory_Create(memory._, None, offset, None, start, endex, copy, validate)
  __pyx_t_3 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(Py_None, 0); if (unlikely(!__pyx_t_3.memview)) __PYX_ERR(0, 5783, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_copy); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5783, __pyx_L1_error)
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_validate); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 5783, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_Create(__pyx_v_memory->_, __pyx_t_3, __pyx_v_offset, Py_None, __pyx_v_start, __pyx_v_endex, __pyx_t_4, __pyx_t_5); if (unlikely(__pyx_t_2 == ((Memory_ *)NULL))) __PYX_ERR(0, 5783, __pyx_L1_error)
  __PYX_XDEC_MEMVIEW(&__pyx_t_3, 1);
  __pyx_t_3.memview = NULL;
  __pyx_t_3.data = NULL;
  __pyx_v_memory_->_ = __pyx_t_2;
+5784:         return memory_
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_memory_));
  __pyx_r = __pyx_v_memory_;
  goto __pyx_L0;
 5785: 
+5786:     def __repr__(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_13__repr__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_13__repr__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_12__repr__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_12__repr__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  addr_t __pyx_v_start;
  addr_t __pyx_v_endex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__repr__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("cbytesparse._c.Memory.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5787:         self: Memory,
 5788:     ) -> str:
 5789:         cdef:
+5790:             addr_t start = Memory_Start(self._)
  __pyx_v_start = __pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_v_self->_);
+5791:             addr_t endex = Memory_Endex(self._)
  __pyx_v_endex = __pyx_f_11cbytesparse_2_c_Memory_Endex(__pyx_v_self->_);
 5792: 
+5793:         return f'<{type(self).__name__}[0x{start:X}:0x{endex:X}]@0x{id(self):X}>'
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_3 = 127;
  __Pyx_INCREF(__pyx_kp_u__10);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__10);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u__10);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_name); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_FormatSimple(__pyx_t_4, __pyx_empty_unicode); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_3) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_3;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_kp_u_0x);
  __pyx_t_2 += 3;
  __Pyx_GIVEREF(__pyx_kp_u_0x);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_0x);
  __pyx_t_5 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_start); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_Format(__pyx_t_5, __pyx_n_u_X); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_3 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_3) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_3;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u_0x_2);
  __pyx_t_2 += 3;
  __Pyx_GIVEREF(__pyx_kp_u_0x_2);
  PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_0x_2);
  __pyx_t_4 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_endex); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_Format(__pyx_t_4, __pyx_n_u_X); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) > __pyx_t_3) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_5) : __pyx_t_3;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_5);
  __pyx_t_5 = 0;
  __Pyx_INCREF(__pyx_kp_u_0x_3);
  __pyx_t_2 += 4;
  __Pyx_GIVEREF(__pyx_kp_u_0x_3);
  PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_kp_u_0x_3);
  __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = __Pyx_PyObject_Format(__pyx_t_5, __pyx_n_u_X); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_3 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) > __pyx_t_3) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_4) : __pyx_t_3;
  __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_1, 7, __pyx_t_4);
  __pyx_t_4 = 0;
  __Pyx_INCREF(__pyx_kp_u__11);
  __pyx_t_2 += 1;
  __Pyx_GIVEREF(__pyx_kp_u__11);
  PyTuple_SET_ITEM(__pyx_t_1, 8, __pyx_kp_u__11);
  __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 9, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5793, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_r = __pyx_t_4;
  __pyx_t_4 = 0;
  goto __pyx_L0;
 5794: 
+5795:     def __str__(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_15__str__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_14__str__[] = "String representation.\n\n        If :attr:`content_size` is lesser than ``STR_MAX_CONTENT_SIZE``, then\n        the memory is represented as a list of blocks.\n\n        If exceeding, it is equivalent to :meth:`__repr__`.\n\n\n        Returns:\n            str: String representation.\n\n        Example:\n            +---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|\n            +===+===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |   |   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABC'], [7, b'xyz']])\n            >>> memory._blocks\n            'ABCxyz'\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_11cbytesparse_2_c_6Memory_14__str__;
#endif
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_15__str__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_14__str__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_14__str__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  Memory_ *__pyx_v_memory;
  addr_t __pyx_v_size;
  addr_t __pyx_v_start;
  addr_t __pyx_v_endex;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__str__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cbytesparse._c.Memory.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5796:         self: Memory,
 5797:     ) -> str:
 5798:         r"""String representation.
 5799: 
 5800:         If :attr:`content_size` is lesser than ``STR_MAX_CONTENT_SIZE``, then
 5801:         the memory is represented as a list of blocks.
 5802: 
 5803:         If exceeding, it is equivalent to :meth:`__repr__`.
 5804: 
 5805: 
 5806:         Returns:
 5807:             str: String representation.
 5808: 
 5809:         Example:
 5810:             +---+---+---+---+---+---+---+---+---+---+---+
 5811:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|
 5812:             +===+===+===+===+===+===+===+===+===+===+===+
 5813:             |   |[A | B | C]|   |   |   |[x | y | z]|   |
 5814:             +---+---+---+---+---+---+---+---+---+---+---+
 5815: 
 5816:             >>> memory = Memory.from_blocks([[1, b'ABC'], [7, b'xyz']])
 5817:             >>> memory._blocks
 5818:             'ABCxyz'
 5819:         """
 5820:         cdef:
+5821:             Memory_* memory = self._
  __pyx_t_1 = __pyx_v_self->_;
  __pyx_v_memory = __pyx_t_1;
+5822:             addr_t size = Memory_ContentSize(memory)
  __pyx_v_size = __pyx_f_11cbytesparse_2_c_Memory_ContentSize(__pyx_v_memory);
 5823:             addr_t start
 5824:             addr_t endex
 5825: 
+5826:         if size > STR_MAX_CONTENT_SIZE:
  __pyx_t_2 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5826, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_STR_MAX_CONTENT_SIZE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5826, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5826, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 5826, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_5) {
/* … */
  }
+5827:             start = Memory_Start(memory)
    __pyx_v_start = __pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_v_memory);
+5828:             endex = Memory_Endex(memory)
    __pyx_v_endex = __pyx_f_11cbytesparse_2_c_Memory_Endex(__pyx_v_memory);
+5829:             return f'<{type(self).__name__}[0x{start:X}:0x{endex:X}]@0x{id(self):X}>'
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_4 = PyTuple_New(9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = 0;
    __pyx_t_7 = 127;
    __Pyx_INCREF(__pyx_kp_u__10);
    __pyx_t_6 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__10);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_kp_u__10);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))), __pyx_n_s_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_FormatSimple(__pyx_t_3, __pyx_empty_unicode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_7;
    __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_kp_u_0x);
    __pyx_t_6 += 3;
    __Pyx_GIVEREF(__pyx_kp_u_0x);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_kp_u_0x);
    __pyx_t_2 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_start); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_Format(__pyx_t_2, __pyx_n_u_X); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7;
    __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_INCREF(__pyx_kp_u_0x_2);
    __pyx_t_6 += 3;
    __Pyx_GIVEREF(__pyx_kp_u_0x_2);
    PyTuple_SET_ITEM(__pyx_t_4, 4, __pyx_kp_u_0x_2);
    __pyx_t_3 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_endex); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __Pyx_PyObject_Format(__pyx_t_3, __pyx_n_u_X); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_2) : __pyx_t_7;
    __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_4, 5, __pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_kp_u_0x_3);
    __pyx_t_6 += 4;
    __Pyx_GIVEREF(__pyx_kp_u_0x_3);
    PyTuple_SET_ITEM(__pyx_t_4, 6, __pyx_kp_u_0x_3);
    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_Format(__pyx_t_2, __pyx_n_u_X); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_7 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) > __pyx_t_7) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_3) : __pyx_t_7;
    __pyx_t_6 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_4, 7, __pyx_t_3);
    __pyx_t_3 = 0;
    __Pyx_INCREF(__pyx_kp_u__11);
    __pyx_t_6 += 1;
    __Pyx_GIVEREF(__pyx_kp_u__11);
    PyTuple_SET_ITEM(__pyx_t_4, 8, __pyx_kp_u__11);
    __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_4, 9, __pyx_t_6, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5829, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
 5830: 
 5831:         else:
+5832:             return str(Memory_ToBlocks(memory))
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Memory_ToBlocks(__pyx_v_memory); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5832, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyUnicode_Type)), __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 5832, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    goto __pyx_L0;
  }
 5833: 
+5834:     def __bool__(
/* Python wrapper */
static int __pyx_pw_11cbytesparse_2_c_6Memory_17__bool__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_11cbytesparse_2_c_6Memory_17__bool__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_16__bool__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11cbytesparse_2_c_6Memory_16__bool__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bool__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5835:         self: Memory,
 5836:     ) -> bool:
 5837:         r"""Has any items.
 5838: 
 5839:         Returns:
 5840:             bool: Has any items.
 5841: 
 5842:         Examples:
 5843:             >>> memory = Memory()
 5844:             >>> bool(memory)
 5845:             False
 5846: 
 5847:             >>> memory = Memory.from_bytes(b'Hello, World!', offset=5)
 5848:             >>> bool(memory)
 5849:             True
 5850:         """
 5851: 
+5852:         return not Memory_IsEmpty(self._)
  __pyx_r = (!(__pyx_f_11cbytesparse_2_c_Memory_IsEmpty(__pyx_v_self->_) != 0));
  goto __pyx_L0;
 5853: 
+5854:     def __eq__(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_19__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_18__eq__[] = "Equality comparison.\n\n        Arguments:\n            other (Memory):\n                Data to compare with `self`.\n\n                If it is a :obj:`Memory`, all of its blocks must match.\n\n                If it is a :obj:`list`, it is expected that it contains the\n                same blocks as `self`.\n\n                Otherwise, it must match the first stored block, considered\n                equal if also starts at 0.\n\n        Returns:\n            bool: `self` is equal to `other`.\n\n        Examples:\n            >>> data = b'Hello, World!'\n            >>> memory = Memory.from_bytes(data)\n            >>> memory == data\n            True\n            >>> memory.shift(1)\n            >>> memory == data\n            False\n\n            >>> data = b'Hello, World!'\n            >>> memory = Memory.from_bytes(data)\n            >>> memory == [[0, data]]\n            True\n            >>> memory == list(data)\n            False\n            >>> memory.shift(1)\n            >>> memory == [[0, data]]\n            False\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_11cbytesparse_2_c_6Memory_18__eq__;
#endif
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_19__eq__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_18__eq__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_other));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_18__eq__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_other) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__eq__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Memory.__eq__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11cbytesparse_2_c_6Memory_22generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
 5855:         self: Memory,
 5856:         other: Any,
 5857:     ) -> bool:
 5858:         r"""Equality comparison.
 5859: 
 5860:         Arguments:
 5861:             other (Memory):
 5862:                 Data to compare with `self`.
 5863: 
 5864:                 If it is a :obj:`Memory`, all of its blocks must match.
 5865: 
 5866:                 If it is a :obj:`list`, it is expected that it contains the
 5867:                 same blocks as `self`.
 5868: 
 5869:                 Otherwise, it must match the first stored block, considered
 5870:                 equal if also starts at 0.
 5871: 
 5872:         Returns:
 5873:             bool: `self` is equal to `other`.
 5874: 
 5875:         Examples:
 5876:             >>> data = b'Hello, World!'
 5877:             >>> memory = Memory.from_bytes(data)
 5878:             >>> memory == data
 5879:             True
 5880:             >>> memory.shift(1)
 5881:             >>> memory == data
 5882:             False
 5883: 
 5884:             >>> data = b'Hello, World!'
 5885:             >>> memory = Memory.from_bytes(data)
 5886:             >>> memory == [[0, data]]
 5887:             True
 5888:             >>> memory == list(data)
 5889:             False
 5890:             >>> memory.shift(1)
 5891:             >>> memory == [[0, data]]
 5892:             False
 5893:         """
 5894: 
+5895:         return Memory_Eq(self._, other)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Eq(__pyx_v_self->_, __pyx_v_other); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 5895, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5895, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 5896: 
+5897:     def __iter__(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_21__iter__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_20__iter__[] = "Iterates over values.\n\n        Iterates over values between :attr:`start` and :attr:`endex`.\n\n        Yields:\n            int: Value as byte integer, or ``None``.\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_11cbytesparse_2_c_6Memory_20__iter__;
#endif
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_21__iter__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_20__iter__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_20__iter__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct____iter__ *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__", 0);
  __pyx_cur_scope = (struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct____iter__ *)__pyx_tp_new_11cbytesparse_2_c___pyx_scope_struct____iter__(__pyx_ptype_11cbytesparse_2_c___pyx_scope_struct____iter__, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct____iter__ *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5897, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11cbytesparse_2_c_6Memory_22generator, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_iter, __pyx_n_s_Memory___iter, __pyx_n_s_cbytesparse__c); if (unlikely(!gen)) __PYX_ERR(0, 5897, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11cbytesparse_2_c_6Memory_22generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iter__", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5897, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("__iter__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11cbytesparse_2_c_6Memory_25generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct____iter__ {
  PyObject_HEAD
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self;
};

 5898:         self: Memory,
 5899:     ) -> Iterator[Optional[Value]]:
 5900:         r"""Iterates over values.
 5901: 
 5902:         Iterates over values between :attr:`start` and :attr:`endex`.
 5903: 
 5904:         Yields:
 5905:             int: Value as byte integer, or ``None``.
 5906:         """
 5907: 
+5908:         yield from self.values()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_values); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5908, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __Pyx_Generator_Yield_From(__pyx_generator, __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L4_resume_from_yield_from:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5908, __pyx_L1_error)
  } else {
    PyObject* exc_type = __Pyx_PyErr_Occurred();
    if (exc_type) {
      if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
      else __PYX_ERR(0, 5908, __pyx_L1_error)
    }
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 5909: 
+5910:     def __reversed__(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_24__reversed__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_23__reversed__[] = "Memory.__reversed__(self: Memory) -> Iterator[Optional[Value]]\nIterates over values, reversed order.\n\n        Iterates over values between :attr:`start` and :attr:`endex`, in\n        reversed order.\n\n        Yields:\n            int: Value as byte integer, or ``None``.\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_24__reversed__ = {"__reversed__", (PyCFunction)__pyx_pw_11cbytesparse_2_c_6Memory_24__reversed__, METH_NOARGS, __pyx_doc_11cbytesparse_2_c_6Memory_23__reversed__};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_24__reversed__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reversed__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_23__reversed__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_23__reversed__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_1___reversed__ *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reversed__", 0);
  __pyx_cur_scope = (struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_1___reversed__ *)__pyx_tp_new_11cbytesparse_2_c___pyx_scope_struct_1___reversed__(__pyx_ptype_11cbytesparse_2_c___pyx_scope_struct_1___reversed__, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_1___reversed__ *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 5910, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11cbytesparse_2_c_6Memory_25generator1, __pyx_codeobj__25, (PyObject *) __pyx_cur_scope, __pyx_n_s_reversed, __pyx_n_s_Memory___reversed, __pyx_n_s_cbytesparse__c); if (unlikely(!gen)) __PYX_ERR(0, 5910, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.__reversed__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11cbytesparse_2_c_6Memory_25generator1(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reversed__", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5910, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("__reversed__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__77 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__77)) __PYX_ERR(0, 5910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__77);
  __Pyx_GIVEREF(__pyx_tuple__77);
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 5910, __pyx_L1_error)
/* … */
  __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_24__reversed__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory___reversed, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__25)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5910, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_reversed, __pyx_t_6) < 0) __PYX_ERR(0, 5910, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__25 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__77, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_reversed, 5910, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__25)) __PYX_ERR(0, 5910, __pyx_L1_error)
/* … */
struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_1___reversed__ {
  PyObject_HEAD
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self;
};

 5911:         self: Memory,
+5912:     ) -> Iterator[Optional[Value]]:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Iterator); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Optional); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Value); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_t_6) < 0) __PYX_ERR(0, 5910, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 5913:         r"""Iterates over values, reversed order.
 5914: 
 5915:         Iterates over values between :attr:`start` and :attr:`endex`, in
 5916:         reversed order.
 5917: 
 5918:         Yields:
 5919:             int: Value as byte integer, or ``None``.
 5920:         """
 5921: 
+5922:         yield from self.rvalues()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_rvalues); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5922, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __Pyx_Generator_Yield_From(__pyx_generator, __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L4_resume_from_yield_from:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 5922, __pyx_L1_error)
  } else {
    PyObject* exc_type = __Pyx_PyErr_Occurred();
    if (exc_type) {
      if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
      else __PYX_ERR(0, 5922, __pyx_L1_error)
    }
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 5923: 
+5924:     def __add__(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_27__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_27__add__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__add__ (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_self), __pyx_ptype_11cbytesparse_2_c_Memory, 1, "self", 0))) __PYX_ERR(0, 5925, __pyx_L1_error)
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_26__add__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_value));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_26__add__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_value) {
  Memory_ *__pyx_v_memory_;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_memory = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__add__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Memory.__add__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_memory);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5925:         self: Memory,
 5926:         value: Union[AnyBytes, Memory],
 5927:     ) -> Memory:
 5928:         cdef:
+5929:             Memory_* memory_ = Memory_Add(self._, value)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Add(__pyx_v_self->_, __pyx_v_value); if (unlikely(__pyx_t_1 == ((Memory_ *)NULL))) __PYX_ERR(0, 5929, __pyx_L1_error)
  __pyx_v_memory_ = __pyx_t_1;
+5930:             Memory memory = Memory_AsObject(memory_)
  __pyx_t_2 = ((PyObject *)__pyx_f_11cbytesparse_2_c_Memory_AsObject(__pyx_v_memory_)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5930, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_memory = ((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_t_2);
  __pyx_t_2 = 0;
 5931: 
+5932:         return memory
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_memory));
  __pyx_r = ((PyObject *)__pyx_v_memory);
  goto __pyx_L0;
 5933: 
+5934:     def __iadd__(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_29__iadd__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_29__iadd__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iadd__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_28__iadd__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_28__iadd__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_value) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__iadd__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.__iadd__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5935:         self: Memory,
 5936:         value: Union[AnyBytes, Memory],
 5937:     ) -> Memory:
 5938: 
+5939:         Memory_IAdd(self._, value)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_IAdd(__pyx_v_self->_, __pyx_v_value); if (unlikely(__pyx_t_1 == ((Memory_ *)NULL))) __PYX_ERR(0, 5939, __pyx_L1_error)
+5940:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 5941: 
+5942:     def __mul__(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_31__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_times); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_31__mul__(PyObject *__pyx_v_self, PyObject *__pyx_v_times) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__mul__ (wrapper)", 0);
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_self), __pyx_ptype_11cbytesparse_2_c_Memory, 1, "self", 0))) __PYX_ERR(0, 5943, __pyx_L1_error)
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_30__mul__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_times));
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_30__mul__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_times) {
  addr_t __pyx_v_times_;
  Memory_ *__pyx_v_memory_;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_memory = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__mul__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Memory.__mul__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_memory);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5943:         self: Memory,
 5944:         times: int,
 5945:     ) -> Memory:
 5946:         cdef:
+5947:             addr_t times_ = 0 if times < 0 else <addr_t>times
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_times, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5947, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 5947, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {
    __pyx_t_1 = 0;
  } else {
    __pyx_t_4 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_times); if (unlikely((__pyx_t_4 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 5947, __pyx_L1_error)
    __pyx_t_1 = ((addr_t)__pyx_t_4);
  }
  __pyx_v_times_ = __pyx_t_1;
+5948:             Memory_* memory_ = Memory_Mul(self._, times_)
  __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Memory_Mul(__pyx_v_self->_, __pyx_v_times_); if (unlikely(__pyx_t_5 == ((Memory_ *)NULL))) __PYX_ERR(0, 5948, __pyx_L1_error)
  __pyx_v_memory_ = __pyx_t_5;
+5949:             Memory memory = Memory_AsObject(memory_)
  __pyx_t_2 = ((PyObject *)__pyx_f_11cbytesparse_2_c_Memory_AsObject(__pyx_v_memory_)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5949, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_memory = ((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_t_2);
  __pyx_t_2 = 0;
 5950: 
+5951:         return memory
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_memory));
  __pyx_r = ((PyObject *)__pyx_v_memory);
  goto __pyx_L0;
 5952: 
+5953:     def __imul__(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_33__imul__(PyObject *__pyx_v_self, PyObject *__pyx_v_times); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_33__imul__(PyObject *__pyx_v_self, PyObject *__pyx_v_times) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__imul__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_32__imul__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_times));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_32__imul__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_times) {
  addr_t __pyx_v_times_;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__imul__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Memory.__imul__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5954:         self: Memory,
 5955:         times: int,
 5956:     ) -> Memory:
 5957:         cdef:
+5958:             addr_t times_ = 0 if times < 0 else <addr_t>times
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_times, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5958, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 5958, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {
    __pyx_t_1 = 0;
  } else {
    __pyx_t_4 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_times); if (unlikely((__pyx_t_4 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 5958, __pyx_L1_error)
    __pyx_t_1 = ((addr_t)__pyx_t_4);
  }
  __pyx_v_times_ = __pyx_t_1;
 5959: 
+5960:         Memory_IMul(self._, times_)
  __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Memory_IMul(__pyx_v_self->_, __pyx_v_times_); if (unlikely(__pyx_t_5 == ((Memory_ *)NULL))) __PYX_ERR(0, 5960, __pyx_L1_error)
+5961:         return self
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __pyx_r = ((PyObject *)__pyx_v_self);
  goto __pyx_L0;
 5962: 
+5963:     def __len__(
/* Python wrapper */
static Py_ssize_t __pyx_pw_11cbytesparse_2_c_6Memory_35__len__(PyObject *__pyx_v_self); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_34__len__[] = "Actual length.\n\n        Computes the actual length of the stored items, i.e.\n        (:attr:`endex` - :attr:`start`).\n        This will consider any trimmings being active.\n\n        Returns:\n            int: Memory length.\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_11cbytesparse_2_c_6Memory_34__len__;
#endif
static Py_ssize_t __pyx_pw_11cbytesparse_2_c_6Memory_35__len__(PyObject *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_34__len__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static Py_ssize_t __pyx_pf_11cbytesparse_2_c_6Memory_34__len__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  Py_ssize_t __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__len__", 0);
/* … */
  /* function exit code */
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 5964:         self: Memory,
 5965:     ) -> Address:
 5966:         r"""Actual length.
 5967: 
 5968:         Computes the actual length of the stored items, i.e.
 5969:         (:attr:`endex` - :attr:`start`).
 5970:         This will consider any trimmings being active.
 5971: 
 5972:         Returns:
 5973:             int: Memory length.
 5974:         """
 5975: 
+5976:         return Memory_Length(self._)
  __pyx_r = __pyx_f_11cbytesparse_2_c_Memory_Length(__pyx_v_self->_);
  goto __pyx_L0;
 5977: 
+5978:     def ofind(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_37ofind(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_36ofind[] = "Memory.ofind(self: Memory, item: Union[AnyBytes, Value], start: Optional[Address] = None, endex: Optional[Address] = None) -> Optional[Address]\nIndex of an item.\n\n        Arguments:\n            item (items):\n                Value to find. Can be either some byte string or an integer.\n\n            start (int):\n                Inclusive start of the searched range.\n                If ``None``, :attr:`start` is considered.\n\n            endex (int):\n                Exclusive end of the searched range.\n                If ``None``, :attr:`endex` is considered.\n\n        Returns:\n            int: The index of the first item equal to `value`, or ``None``.\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_37ofind = {"ofind", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_37ofind, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_36ofind};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_37ofind(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_item = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ofind (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_item,&__pyx_n_s_start,&__pyx_n_s_endex,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_36ofind(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ofind", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.ofind", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__78 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_item, __pyx_n_s_start, __pyx_n_s_endex); if (unlikely(!__pyx_tuple__78)) __PYX_ERR(0, 5978, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__78);
  __Pyx_GIVEREF(__pyx_tuple__78);
/* … */
  __pyx_t_6 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 5978, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 5978, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_37ofind, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_ofind, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__79)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5978, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_ofind, __pyx_t_5) < 0) __PYX_ERR(0, 5978, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__79 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__78, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_ofind, 5978, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__79)) __PYX_ERR(0, 5978, __pyx_L1_error)
 5979:         self: Memory,
+5980:         item: Union[AnyBytes, Value],
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Union); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 5980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5980, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_item, __pyx_t_1) < 0) __PYX_ERR(0, 5978, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5981:         start: Optional[Address] = None,
    values[1] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Optional); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_start, __pyx_t_5) < 0) __PYX_ERR(0, 5978, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+5982:         endex: Optional[Address] = None,
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ofind") < 0)) __PYX_ERR(0, 5978, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_item = values[0];
    __pyx_v_start = values[1];
    __pyx_v_endex = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("ofind", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 5978, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.ofind", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_36ofind(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_item, __pyx_v_start, __pyx_v_endex);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_endex, __pyx_t_1) < 0) __PYX_ERR(0, 5978, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+5983:     ) -> Optional[Address]:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Optional); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 5983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 5983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 5983, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return, __pyx_t_5) < 0) __PYX_ERR(0, 5978, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 5984:         r"""Index of an item.
 5985: 
 5986:         Arguments:
 5987:             item (items):
 5988:                 Value to find. Can be either some byte string or an integer.
 5989: 
 5990:             start (int):
 5991:                 Inclusive start of the searched range.
 5992:                 If ``None``, :attr:`start` is considered.
 5993: 
 5994:             endex (int):
 5995:                 Exclusive end of the searched range.
 5996:                 If ``None``, :attr:`endex` is considered.
 5997: 
 5998:         Returns:
 5999:             int: The index of the first item equal to `value`, or ``None``.
 6000:         """
 6001: 
+6002:         return Memory_ObjFind(self._, item, start, endex)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_ObjFind(__pyx_v_self->_, __pyx_v_item, __pyx_v_start, __pyx_v_endex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6003: 
+6004:     def rofind(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_39rofind(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_38rofind[] = "Memory.rofind(self: Memory, item: Union[AnyBytes, Value], start: Optional[Address] = None, endex: Optional[Address] = None) -> Optional[Address]\nIndex of an item, reversed search.\n\n        Arguments:\n            item (items):\n                Value to find. Can be either some byte string or an integer.\n\n            start (int):\n                Inclusive start of the searched range.\n                If ``None``, :attr:`start` is considered.\n\n            endex (int):\n                Exclusive end of the searched range.\n                If ``None``, :attr:`endex` is considered.\n\n        Returns:\n            int: The index of the last item equal to `value`, or ``None``.\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_39rofind = {"rofind", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_39rofind, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_38rofind};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_39rofind(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_item = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rofind (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_item,&__pyx_n_s_start,&__pyx_n_s_endex,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_38rofind(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rofind", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.rofind", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__80 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_item, __pyx_n_s_start, __pyx_n_s_endex); if (unlikely(!__pyx_tuple__80)) __PYX_ERR(0, 6004, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__80);
  __Pyx_GIVEREF(__pyx_tuple__80);
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6004, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 6004, __pyx_L1_error)
/* … */
  __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_39rofind, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_rofind, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__81)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6004, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_rofind, __pyx_t_6) < 0) __PYX_ERR(0, 6004, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__81 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__80, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_rofind, 6004, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__81)) __PYX_ERR(0, 6004, __pyx_L1_error)
 6005:         self: Memory,
+6006:         item: Union[AnyBytes, Value],
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Union); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6006, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6006, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6006, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6006, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __pyx_t_3 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6006, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_item, __pyx_t_1) < 0) __PYX_ERR(0, 6004, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6007:         start: Optional[Address] = None,
    values[1] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Optional); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6007, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_start, __pyx_t_6) < 0) __PYX_ERR(0, 6004, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6008:         endex: Optional[Address] = None,
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rofind") < 0)) __PYX_ERR(0, 6004, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_item = values[0];
    __pyx_v_start = values[1];
    __pyx_v_endex = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rofind", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6004, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.rofind", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_38rofind(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_item, __pyx_v_start, __pyx_v_endex);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6008, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6008, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6008, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_endex, __pyx_t_1) < 0) __PYX_ERR(0, 6004, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6009:     ) -> Optional[Address]:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Optional); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6009, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6009, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6009, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_t_6) < 0) __PYX_ERR(0, 6004, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 6010:         r"""Index of an item, reversed search.
 6011: 
 6012:         Arguments:
 6013:             item (items):
 6014:                 Value to find. Can be either some byte string or an integer.
 6015: 
 6016:             start (int):
 6017:                 Inclusive start of the searched range.
 6018:                 If ``None``, :attr:`start` is considered.
 6019: 
 6020:             endex (int):
 6021:                 Exclusive end of the searched range.
 6022:                 If ``None``, :attr:`endex` is considered.
 6023: 
 6024:         Returns:
 6025:             int: The index of the last item equal to `value`, or ``None``.
 6026:         """
 6027: 
+6028:         return Memory_RevObjFind(self._, item, start, endex)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_RevObjFind(__pyx_v_self->_, __pyx_v_item, __pyx_v_start, __pyx_v_endex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6028, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6029: 
+6030:     def find(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_41find(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_40find[] = "Memory.find(self: Memory, item: Union[AnyBytes, Value], start: Optional[Address] = None, endex: Optional[Address] = None) -> Address\nIndex of an item.\n\n        Arguments:\n            item (items):\n                Value to find. Can be either some byte string or an integer.\n\n            start (int):\n                Inclusive start of the searched range.\n                If ``None``, :attr:`endex` is considered.\n\n            endex (int):\n                Exclusive end of the searched range.\n                If ``None``, :attr:`endex` is considered.\n\n        Returns:\n            int: The index of the first item equal to `value`, or -1.\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_41find = {"find", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_41find, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_40find};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_41find(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_item = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("find (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_item,&__pyx_n_s_start,&__pyx_n_s_endex,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_40find(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("find", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.find", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__82 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_item, __pyx_n_s_start, __pyx_n_s_endex); if (unlikely(!__pyx_tuple__82)) __PYX_ERR(0, 6030, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__82);
  __Pyx_GIVEREF(__pyx_tuple__82);
/* … */
  __pyx_t_6 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6030, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 6030, __pyx_L1_error)
/* … */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_41find, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_find, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__83)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6030, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_1, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_find, __pyx_t_1) < 0) __PYX_ERR(0, 6030, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__83 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__82, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_find, 6030, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__83)) __PYX_ERR(0, 6030, __pyx_L1_error)
 6031:         self: Memory,
+6032:         item: Union[AnyBytes, Value],
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Union); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6032, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6032, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6032, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6032, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6032, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_item, __pyx_t_1) < 0) __PYX_ERR(0, 6030, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6033:         start: Optional[Address] = None,
    values[1] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Optional); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6033, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6033, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6033, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_start, __pyx_t_5) < 0) __PYX_ERR(0, 6030, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+6034:         endex: Optional[Address] = None,
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "find") < 0)) __PYX_ERR(0, 6030, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_item = values[0];
    __pyx_v_start = values[1];
    __pyx_v_endex = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("find", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6030, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.find", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_40find(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_item, __pyx_v_start, __pyx_v_endex);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6034, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6034, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6034, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_endex, __pyx_t_1) < 0) __PYX_ERR(0, 6030, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6035:     ) -> Address:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6035, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return, __pyx_t_1) < 0) __PYX_ERR(0, 6030, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 6036:         r"""Index of an item.
 6037: 
 6038:         Arguments:
 6039:             item (items):
 6040:                 Value to find. Can be either some byte string or an integer.
 6041: 
 6042:             start (int):
 6043:                 Inclusive start of the searched range.
 6044:                 If ``None``, :attr:`endex` is considered.
 6045: 
 6046:             endex (int):
 6047:                 Exclusive end of the searched range.
 6048:                 If ``None``, :attr:`endex` is considered.
 6049: 
 6050:         Returns:
 6051:             int: The index of the first item equal to `value`, or -1.
 6052:         """
 6053: 
+6054:         return Memory_Find(self._, item, start, endex)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Find(__pyx_v_self->_, __pyx_v_item, __pyx_v_start, __pyx_v_endex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6054, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6055: 
+6056:     def rfind(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_43rfind(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_42rfind[] = "Memory.rfind(self: Memory, item: Union[AnyBytes, Value], start: Optional[Address] = None, endex: Optional[Address] = None) -> Address\nIndex of an item, reversed search.\n\n        Arguments:\n            item (items):\n                Value to find. Can be either some byte string or an integer.\n\n            start (int):\n                Inclusive start of the searched range.\n                If ``None``, :attr:`start` is considered.\n\n            endex (int):\n                Exclusive end of the searched range.\n                If ``None``, :attr:`endex` is considered.\n\n        Returns:\n            int: The index of the last item equal to `value`, or -1.\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_43rfind = {"rfind", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_43rfind, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_42rfind};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_43rfind(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_item = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rfind (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_item,&__pyx_n_s_start,&__pyx_n_s_endex,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_42rfind(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rfind", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.rfind", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__84 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_item, __pyx_n_s_start, __pyx_n_s_endex); if (unlikely(!__pyx_tuple__84)) __PYX_ERR(0, 6056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__84);
  __Pyx_GIVEREF(__pyx_tuple__84);
/* … */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 6056, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_43rfind, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_rfind, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__85)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_rfind, __pyx_t_5) < 0) __PYX_ERR(0, 6056, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__85 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__84, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_rfind, 6056, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__85)) __PYX_ERR(0, 6056, __pyx_L1_error)
 6057:         self: Memory,
+6058:         item: Union[AnyBytes, Value],
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Union); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6058, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6058, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6058, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6058, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_5);
  __pyx_t_3 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6058, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_item, __pyx_t_5) < 0) __PYX_ERR(0, 6056, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+6059:         start: Optional[Address] = None,
    values[1] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6059, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6059, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6059, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_start, __pyx_t_6) < 0) __PYX_ERR(0, 6056, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6060:         endex: Optional[Address] = None,
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rfind") < 0)) __PYX_ERR(0, 6056, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_item = values[0];
    __pyx_v_start = values[1];
    __pyx_v_endex = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rfind", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6056, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.rfind", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_42rfind(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_item, __pyx_v_start, __pyx_v_endex);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6060, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6060, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6060, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_endex, __pyx_t_5) < 0) __PYX_ERR(0, 6056, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+6061:     ) -> Address:
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Address); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6061, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_return, __pyx_t_5) < 0) __PYX_ERR(0, 6056, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 6062:         r"""Index of an item, reversed search.
 6063: 
 6064:         Arguments:
 6065:             item (items):
 6066:                 Value to find. Can be either some byte string or an integer.
 6067: 
 6068:             start (int):
 6069:                 Inclusive start of the searched range.
 6070:                 If ``None``, :attr:`start` is considered.
 6071: 
 6072:             endex (int):
 6073:                 Exclusive end of the searched range.
 6074:                 If ``None``, :attr:`endex` is considered.
 6075: 
 6076:         Returns:
 6077:             int: The index of the last item equal to `value`, or -1.
 6078:         """
 6079: 
+6080:         return Memory_RevFind(self._, item, start, endex)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_RevFind(__pyx_v_self->_, __pyx_v_item, __pyx_v_start, __pyx_v_endex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6080, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6081: 
+6082:     def index(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_45index(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_44index[] = "Memory.index(self: Memory, item: Union[AnyBytes, Value], start: Optional[Address] = None, endex: Optional[Address] = None) -> Address\nIndex of an item.\n\n        Arguments:\n            item (items):\n                Value to find. Can be either some byte string or an integer.\n\n            start (int):\n                Inclusive start of the searched range.\n                If ``None``, :attr:`start` is considered.\n\n            endex (int):\n                Exclusive end of the searched range.\n                If ``None``, :attr:`endex` is considered.\n\n        Returns:\n            int: The index of the first item equal to `value`.\n\n        Raises:\n            :obj:`ValueError`: Item not found.\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_45index = {"index", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_45index, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_44index};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_45index(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_item = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("index (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_item,&__pyx_n_s_start,&__pyx_n_s_endex,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_44index(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("index", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.index", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__86 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_item, __pyx_n_s_start, __pyx_n_s_endex); if (unlikely(!__pyx_tuple__86)) __PYX_ERR(0, 6082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__86);
  __Pyx_GIVEREF(__pyx_tuple__86);
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 6082, __pyx_L1_error)
/* … */
  __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_45index, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_index, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__87)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6082, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_index, __pyx_t_6) < 0) __PYX_ERR(0, 6082, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__87 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__86, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_index, 6082, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__87)) __PYX_ERR(0, 6082, __pyx_L1_error)
 6083:         self: Memory,
+6084:         item: Union[AnyBytes, Value],
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Union); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Value); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_6);
  __pyx_t_2 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6084, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_item, __pyx_t_6) < 0) __PYX_ERR(0, 6082, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6085:         start: Optional[Address] = None,
    values[1] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6085, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6085, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6085, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_start, __pyx_t_1) < 0) __PYX_ERR(0, 6082, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6086:         endex: Optional[Address] = None,
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "index") < 0)) __PYX_ERR(0, 6082, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_item = values[0];
    __pyx_v_start = values[1];
    __pyx_v_endex = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("index", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6082, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.index", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_44index(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_item, __pyx_v_start, __pyx_v_endex);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Optional); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6086, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6086, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6086, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_endex, __pyx_t_6) < 0) __PYX_ERR(0, 6082, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6087:     ) -> Address:
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Address); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6087, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_t_6) < 0) __PYX_ERR(0, 6082, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 6088:         r"""Index of an item.
 6089: 
 6090:         Arguments:
 6091:             item (items):
 6092:                 Value to find. Can be either some byte string or an integer.
 6093: 
 6094:             start (int):
 6095:                 Inclusive start of the searched range.
 6096:                 If ``None``, :attr:`start` is considered.
 6097: 
 6098:             endex (int):
 6099:                 Exclusive end of the searched range.
 6100:                 If ``None``, :attr:`endex` is considered.
 6101: 
 6102:         Returns:
 6103:             int: The index of the first item equal to `value`.
 6104: 
 6105:         Raises:
 6106:             :obj:`ValueError`: Item not found.
 6107:         """
 6108: 
+6109:         return Memory_Index(self._, item, start, endex)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Index(__pyx_v_self->_, __pyx_v_item, __pyx_v_start, __pyx_v_endex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6109, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6110: 
+6111:     def rindex(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_47rindex(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_46rindex[] = "Memory.rindex(self: Memory, item: Union[AnyBytes, Value], start: Optional[Address] = None, endex: Optional[Address] = None) -> Address\nIndex of an item, reversed search.\n\n        Arguments:\n            item (items):\n                Value to find. Can be either some byte string or an integer.\n\n            start (int):\n                Inclusive start of the searched range.\n                If ``None``, :attr:`start` is considered.\n\n            endex (int):\n                Exclusive end of the searched range.\n                If ``None``, :attr:`endex` is considered.\n\n        Returns:\n            int: The index of the last item equal to `value`.\n\n        Raises:\n            :obj:`ValueError`: Item not found.\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_47rindex = {"rindex", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_47rindex, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_46rindex};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_47rindex(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_item = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rindex (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_item,&__pyx_n_s_start,&__pyx_n_s_endex,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_46rindex(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rindex", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.rindex", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__88 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_item, __pyx_n_s_start, __pyx_n_s_endex); if (unlikely(!__pyx_tuple__88)) __PYX_ERR(0, 6111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__88);
  __Pyx_GIVEREF(__pyx_tuple__88);
/* … */
  __pyx_t_6 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 6111, __pyx_L1_error)
/* … */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_47rindex, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_rindex, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__89)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6111, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_1, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_rindex, __pyx_t_1) < 0) __PYX_ERR(0, 6111, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__89 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__88, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_rindex, 6111, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__89)) __PYX_ERR(0, 6111, __pyx_L1_error)
 6112:         self: Memory,
+6113:         item: Union[AnyBytes, Value],
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Union); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1);
  __pyx_t_3 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6113, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_item, __pyx_t_1) < 0) __PYX_ERR(0, 6111, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6114:         start: Optional[Address] = None,
    values[1] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Optional); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6114, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_start, __pyx_t_5) < 0) __PYX_ERR(0, 6111, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+6115:         endex: Optional[Address] = None,
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rindex") < 0)) __PYX_ERR(0, 6111, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_item = values[0];
    __pyx_v_start = values[1];
    __pyx_v_endex = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rindex", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6111, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.rindex", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_46rindex(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_item, __pyx_v_start, __pyx_v_endex);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_endex, __pyx_t_1) < 0) __PYX_ERR(0, 6111, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6116:     ) -> Address:
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return, __pyx_t_1) < 0) __PYX_ERR(0, 6111, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 6117:         r"""Index of an item, reversed search.
 6118: 
 6119:         Arguments:
 6120:             item (items):
 6121:                 Value to find. Can be either some byte string or an integer.
 6122: 
 6123:             start (int):
 6124:                 Inclusive start of the searched range.
 6125:                 If ``None``, :attr:`start` is considered.
 6126: 
 6127:             endex (int):
 6128:                 Exclusive end of the searched range.
 6129:                 If ``None``, :attr:`endex` is considered.
 6130: 
 6131:         Returns:
 6132:             int: The index of the last item equal to `value`.
 6133: 
 6134:         Raises:
 6135:             :obj:`ValueError`: Item not found.
 6136:         """
 6137: 
+6138:         return Memory_RevIndex(self._, item, start, endex)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_RevIndex(__pyx_v_self->_, __pyx_v_item, __pyx_v_start, __pyx_v_endex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6138, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6139: 
+6140:     def __contains__(
/* Python wrapper */
static int __pyx_pw_11cbytesparse_2_c_6Memory_49__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_48__contains__[] = "Checks if some items are contained.\n\n        Arguments:\n            item (items):\n                Items to find. Can be either some byte string or an integer.\n\n        Returns:\n            bool: Item is contained.\n\n        Example:\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|\n            +===+===+===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |[1 | 2 | 3]|   |[x | y | z]|\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABC'], [5, b'123'], [9, b'xyz']])\n            >>> b'23' in memory\n            True\n            >>> ord('y') in memory\n            True\n            >>> b'$' in memory\n            False\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_11cbytesparse_2_c_6Memory_48__contains__;
#endif
static int __pyx_pw_11cbytesparse_2_c_6Memory_49__contains__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__contains__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_48__contains__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_item));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11cbytesparse_2_c_6Memory_48__contains__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_item) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__contains__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.__contains__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6141:         self: Memory,
 6142:         item: Union[AnyBytes, Value],
 6143:     ) -> bool:
 6144:         r"""Checks if some items are contained.
 6145: 
 6146:         Arguments:
 6147:             item (items):
 6148:                 Items to find. Can be either some byte string or an integer.
 6149: 
 6150:         Returns:
 6151:             bool: Item is contained.
 6152: 
 6153:         Example:
 6154:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6155:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
 6156:             +===+===+===+===+===+===+===+===+===+===+===+===+
 6157:             |   |[A | B | C]|   |[1 | 2 | 3]|   |[x | y | z]|
 6158:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6159: 
 6160:             >>> memory = Memory.from_blocks([[1, b'ABC'], [5, b'123'], [9, b'xyz']])
 6161:             >>> b'23' in memory
 6162:             True
 6163:             >>> ord('y') in memory
 6164:             True
 6165:             >>> b'$' in memory
 6166:             False
 6167:         """
 6168: 
+6169:         return Memory_Contains(self._, item)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Contains(__pyx_v_self->_, __pyx_v_item); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 6169, __pyx_L1_error)
  __pyx_r = __pyx_t_1;
  goto __pyx_L0;
 6170: 
+6171:     def count(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_51count(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_50count[] = "Memory.count(self: Memory, item: Union[AnyBytes, Value], start: Optional[Address] = None, endex: Optional[Address] = None) -> int\nCounts items.\n\n        Arguments:\n            item (items):\n                Reference value to count.\n\n            start (int):\n                Inclusive start of the searched range.\n                If ``None``, :attr:`start` is considered.\n\n            endex (int):\n                Exclusive end of the searched range.\n                If ``None``, :attr:`endex` is considered.\n\n        Returns:\n            int: The number of items equal to `value`.\n\n        Example:\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|\n            +===+===+===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |[B | a | t]|   |[t | a | b]|\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABC'], [5, b'Bat'], [9, b'tab']])\n            >>> memory.count(b'a')\n            2\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_51count = {"count", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_51count, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_50count};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_51count(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_item = 0;
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("count (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_item,&__pyx_n_s_start,&__pyx_n_s_endex,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_50count(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("count", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Memory.count", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__90 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_item, __pyx_n_s_start, __pyx_n_s_endex); if (unlikely(!__pyx_tuple__90)) __PYX_ERR(0, 6171, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__90);
  __Pyx_GIVEREF(__pyx_tuple__90);
/* … */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6171, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 6171, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_51count, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_count, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__91)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6171, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_count, __pyx_t_5) < 0) __PYX_ERR(0, 6171, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__91 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__90, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_count, 6171, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__91)) __PYX_ERR(0, 6171, __pyx_L1_error)
 6172:         self: Memory,
+6173:         item: Union[AnyBytes, Value],
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Union); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
  __pyx_t_2 = 0;
  __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6173, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_item, __pyx_t_5) < 0) __PYX_ERR(0, 6171, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+6174:         start: Optional[Address] = None,
    values[1] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_start, __pyx_t_6) < 0) __PYX_ERR(0, 6171, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6175:         endex: Optional[Address] = None,
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "count") < 0)) __PYX_ERR(0, 6171, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_item = values[0];
    __pyx_v_start = values[1];
    __pyx_v_endex = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("count", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6171, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.count", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_50count(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_item, __pyx_v_start, __pyx_v_endex);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6175, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_endex, __pyx_t_5) < 0) __PYX_ERR(0, 6171, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_return, __pyx_n_u_int) < 0) __PYX_ERR(0, 6171, __pyx_L1_error)
 6176:     ) -> int:
 6177:         r"""Counts items.
 6178: 
 6179:         Arguments:
 6180:             item (items):
 6181:                 Reference value to count.
 6182: 
 6183:             start (int):
 6184:                 Inclusive start of the searched range.
 6185:                 If ``None``, :attr:`start` is considered.
 6186: 
 6187:             endex (int):
 6188:                 Exclusive end of the searched range.
 6189:                 If ``None``, :attr:`endex` is considered.
 6190: 
 6191:         Returns:
 6192:             int: The number of items equal to `value`.
 6193: 
 6194:         Example:
 6195:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6196:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
 6197:             +===+===+===+===+===+===+===+===+===+===+===+===+
 6198:             |   |[A | B | C]|   |[B | a | t]|   |[t | a | b]|
 6199:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6200: 
 6201:             >>> memory = Memory.from_blocks([[1, b'ABC'], [5, b'Bat'], [9, b'tab']])
 6202:             >>> memory.count(b'a')
 6203:             2
 6204:         """
 6205: 
+6206:         return Memory_Count(self._, item, start, endex)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Count(__pyx_v_self->_, __pyx_v_item, __pyx_v_start, __pyx_v_endex); if (unlikely(__pyx_t_1 == ((addr_t)-1LL) && PyErr_Occurred())) __PYX_ERR(0, 6206, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyInt_From_uint_fast64_t(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 6207: 
+6208:     def __getitem__(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_53__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_52__getitem__[] = "Gets data.\n\n        Arguments:\n            key (slice or int):\n                Selection range or address.\n                If it is a :obj:`slice` with bytes-like `step`, the latter is\n                interpreted as the filling pattern.\n\n        Returns:\n            items: Items from the requested range.\n\n        Note:\n            This method is not optimized for a :class:`slice` where its `step`\n            is an integer greater than 1.\n\n        Example:\n            +---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|\n            +===+===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C | D]|   |[$]|   |[x | y | z]|\n            +---+---+---+---+---+---+---+---+---+---+---+\n            |   | 65| 66| 67| 68|   | 36|   |120|121|122|\n            +---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])\n            >>> memory[9]  # -> ord('y') = 121\n            121\n            >>> memory[:3]._blocks\n            [[1, b'AB']]\n            >>> memory[3:10]._blocks\n            [[3, b'CD'], [6, b'$'], [8, b'xy']]\n            >>> bytes(memory[3:10:b'.'])\n            b'CD.$.xy'\n            >>> memory[memory.endex]\n            None\n            >>> bytes(memory[3:10:3])\n            b'C$y'\n            >>> memory[3:10:2]._blocks\n            [[3, b'C'], [6, b'y']]\n            >>> bytes(memory[3:10:2])\n            Traceback (most recent call last):\n                ...\n            ValueError: non-contiguous data within range\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_11cbytesparse_2_c_6Memory_52__getitem__;
#endif
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_53__getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_52__getitem__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_key));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_52__getitem__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_key) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__getitem__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6209:         self: Memory,
 6210:         key: Union[Address, slice],
 6211:     ) -> Any:
 6212:         r"""Gets data.
 6213: 
 6214:         Arguments:
 6215:             key (slice or int):
 6216:                 Selection range or address.
 6217:                 If it is a :obj:`slice` with bytes-like `step`, the latter is
 6218:                 interpreted as the filling pattern.
 6219: 
 6220:         Returns:
 6221:             items: Items from the requested range.
 6222: 
 6223:         Note:
 6224:             This method is not optimized for a :class:`slice` where its `step`
 6225:             is an integer greater than 1.
 6226: 
 6227:         Example:
 6228:             +---+---+---+---+---+---+---+---+---+---+---+
 6229:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|
 6230:             +===+===+===+===+===+===+===+===+===+===+===+
 6231:             |   |[A | B | C | D]|   |[$]|   |[x | y | z]|
 6232:             +---+---+---+---+---+---+---+---+---+---+---+
 6233:             |   | 65| 66| 67| 68|   | 36|   |120|121|122|
 6234:             +---+---+---+---+---+---+---+---+---+---+---+
 6235: 
 6236:             >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])
 6237:             >>> memory[9]  # -> ord('y') = 121
 6238:             121
 6239:             >>> memory[:3]._blocks
 6240:             [[1, b'AB']]
 6241:             >>> memory[3:10]._blocks
 6242:             [[3, b'CD'], [6, b'$'], [8, b'xy']]
 6243:             >>> bytes(memory[3:10:b'.'])
 6244:             b'CD.$.xy'
 6245:             >>> memory[memory.endex]
 6246:             None
 6247:             >>> bytes(memory[3:10:3])
 6248:             b'C$y'
 6249:             >>> memory[3:10:2]._blocks
 6250:             [[3, b'C'], [6, b'y']]
 6251:             >>> bytes(memory[3:10:2])
 6252:             Traceback (most recent call last):
 6253:                 ...
 6254:             ValueError: non-contiguous data within range
 6255:         """
 6256: 
+6257:         return Memory_GetItem(self._, key)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_GetItem(__pyx_v_self->_, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6257, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6258: 
+6259:     def __setitem__(
/* Python wrapper */
static int __pyx_pw_11cbytesparse_2_c_6Memory_55__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_54__setitem__[] = "Sets data.\n\n        Arguments:\n            key (slice or int):\n                Selection range or address.\n\n            value (items):\n                Items to write at the selection address.\n                If `value` is null, the range is cleared.\n\n        Note:\n            This method is not optimized for a :class:`slice` where its `step`\n            is an integer greater than 1.\n\n        Examples:\n            +---+---+---+---+---+---+---+---+---+\n            | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12|\n            +===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+\n            |   |[A]|   |   |   |   |[y | z]|   |\n            +---+---+---+---+---+---+---+---+---+\n            |   |[A | B | C]|   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+\n            |   |[A]|   |[C]|   |   | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+\n            |   |[A | 1 | C]|   |[2 | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[5, b'ABC'], [9, b'xyz']])\n            >>> memory[7:10] = None\n            >>> memory._blocks\n            [[5, b'AB'], [10, b'yz']]\n            >>> memory[7] = b'C'\n            >>> memory[9] = b'x'\n            >>> memory._blocks == [[5, b'ABC'], [9, b'xyz']]\n            True\n            >>> memory[6:12:3] = None\n            >>> memory._blocks\n            [[5, b'A'], [7, b'C'], [10, b'yz']]\n            >>> memory[6:13:3] = b'123'\n            >>> memory._blocks\n            [[5, b'A1C'], [9, b'2yz3']]\n\n            ~~~\n\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|\n            +===+===+===+===+===+===+===+===+===+===+===+===+\n            |   |   |   |   |   |[A | B | C]|   |[x | y | z]|\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            |[$]""|   |[A | B | C]|   |[x | y | z]|   |   |   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            |[$]|   |[A | B | 4 | 5 | 6 | 7 | 8 | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            |[$]|   |[A | B | 4 | 5 | < | > | 8 | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[5, b'ABC'], [9, b'xyz']])\n            >>> memory[0:4] = b'$'\n            >>> memory._blocks\n            [[0, b'$'], [2, b'ABC'], [6, b'xyz']]\n            >>> memory[4:7] = b'45678'\n            >>> memory._blocks\n            [[0, b'$'], [2, b'AB45678yz']]\n            >>> memory[6:8] = b'<>'\n            >>> memory._blocks\n            [[0, b'$'], [2, b'AB45<>8yz']]\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_11cbytesparse_2_c_6Memory_54__setitem__;
#endif
static int __pyx_pw_11cbytesparse_2_c_6Memory_55__setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_54__setitem__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_key), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11cbytesparse_2_c_6Memory_54__setitem__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_key, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setitem__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6260:         self: Memory,
 6261:         key: Union[Address, slice],
 6262:         value: Optional[Union[AnyBytes, Value]],
 6263:     ) -> None:
 6264:         r"""Sets data.
 6265: 
 6266:         Arguments:
 6267:             key (slice or int):
 6268:                 Selection range or address.
 6269: 
 6270:             value (items):
 6271:                 Items to write at the selection address.
 6272:                 If `value` is null, the range is cleared.
 6273: 
 6274:         Note:
 6275:             This method is not optimized for a :class:`slice` where its `step`
 6276:             is an integer greater than 1.
 6277: 
 6278:         Examples:
 6279:             +---+---+---+---+---+---+---+---+---+
 6280:             | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12|
 6281:             +===+===+===+===+===+===+===+===+===+
 6282:             |   |[A | B | C]|   |[x | y | z]|   |
 6283:             +---+---+---+---+---+---+---+---+---+
 6284:             |   |[A]|   |   |   |   |[y | z]|   |
 6285:             +---+---+---+---+---+---+---+---+---+
 6286:             |   |[A | B | C]|   |[x | y | z]|   |
 6287:             +---+---+---+---+---+---+---+---+---+
 6288:             |   |[A]|   |[C]|   |   | y | z]|   |
 6289:             +---+---+---+---+---+---+---+---+---+
 6290:             |   |[A | 1 | C]|   |[2 | y | z]|   |
 6291:             +---+---+---+---+---+---+---+---+---+
 6292: 
 6293:             >>> memory = Memory.from_blocks([[5, b'ABC'], [9, b'xyz']])
 6294:             >>> memory[7:10] = None
 6295:             >>> memory._blocks
 6296:             [[5, b'AB'], [10, b'yz']]
 6297:             >>> memory[7] = b'C'
 6298:             >>> memory[9] = b'x'
 6299:             >>> memory._blocks == [[5, b'ABC'], [9, b'xyz']]
 6300:             True
 6301:             >>> memory[6:12:3] = None
 6302:             >>> memory._blocks
 6303:             [[5, b'A'], [7, b'C'], [10, b'yz']]
 6304:             >>> memory[6:13:3] = b'123'
 6305:             >>> memory._blocks
 6306:             [[5, b'A1C'], [9, b'2yz3']]
 6307: 
 6308:             ~~~
 6309: 
 6310:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6311:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
 6312:             +===+===+===+===+===+===+===+===+===+===+===+===+
 6313:             |   |   |   |   |   |[A | B | C]|   |[x | y | z]|
 6314:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6315:             |[$]|   |[A | B | C]|   |[x | y | z]|   |   |   |
 6316:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6317:             |[$]|   |[A | B | 4 | 5 | 6 | 7 | 8 | y | z]|   |
 6318:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6319:             |[$]|   |[A | B | 4 | 5 | < | > | 8 | y | z]|   |
 6320:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6321: 
 6322:             >>> memory = Memory.from_blocks([[5, b'ABC'], [9, b'xyz']])
 6323:             >>> memory[0:4] = b'$'
 6324:             >>> memory._blocks
 6325:             [[0, b'$'], [2, b'ABC'], [6, b'xyz']]
 6326:             >>> memory[4:7] = b'45678'
 6327:             >>> memory._blocks
 6328:             [[0, b'$'], [2, b'AB45678yz']]
 6329:             >>> memory[6:8] = b'<>'
 6330:             >>> memory._blocks
 6331:             [[0, b'$'], [2, b'AB45<>8yz']]
 6332:         """
 6333: 
+6334:         Memory_SetItem(self._, key, value)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_SetItem(__pyx_v_self->_, __pyx_v_key, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6334, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 6335: 
+6336:     def __delitem__(
/* Python wrapper */
static int __pyx_pw_11cbytesparse_2_c_6Memory_57__delitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_key); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_56__delitem__[] = "Deletes data.\n\n        Arguments:\n            key (slice or int):\n                Deletion range or address.\n\n        Note:\n            This method is not optimized for a :class:`slice` where its `step`\n            is an integer greater than 1.\n\n        Examples:\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|\n            +===+===+===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            |   |[A | B | C | y | z]|   |   |   |   |   |   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])\n            >>> del memory[4:9]\n            >>> memory._blocks\n            [[1, b'ABCyz']]\n\n            ~~~\n\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|\n            +===+===+===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            |   |[A | B | C | D]|   |[$]|   |[x | z]|   |   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            |   |[A | B | D]|   |[$]|   |[x | z]|   |   |   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            |   |[A | D]|   |   |[x]|   |   |   |   |   |   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])\n            >>> del memory[9]\n            >>> memory._blocks\n            [[1, b'ABCD'], [6, b'$'], [8, b'xz']]\n            >>> del memory[3]\n            >>> memory._blocks\n            [[1, b'ABD'], [5, b'$'], [7, b'xz']]\n            >>> del memory[2:10:3]\n            >>> memory._blocks\n       ""     [[1, b'AD'], [5, b'x']]\n        ";
#if CYTHON_COMPILING_IN_CPYTHON
struct wrapperbase __pyx_wrapperbase_11cbytesparse_2_c_6Memory_56__delitem__;
#endif
static int __pyx_pw_11cbytesparse_2_c_6Memory_57__delitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_key) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__delitem__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_56__delitem__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_key));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11cbytesparse_2_c_6Memory_56__delitem__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_key) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__delitem__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.__delitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6337:         self: Memory,
 6338:         key: Union[Address, slice],
 6339:     ) -> None:
 6340:         r"""Deletes data.
 6341: 
 6342:         Arguments:
 6343:             key (slice or int):
 6344:                 Deletion range or address.
 6345: 
 6346:         Note:
 6347:             This method is not optimized for a :class:`slice` where its `step`
 6348:             is an integer greater than 1.
 6349: 
 6350:         Examples:
 6351:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6352:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
 6353:             +===+===+===+===+===+===+===+===+===+===+===+===+
 6354:             |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |
 6355:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6356:             |   |[A | B | C | y | z]|   |   |   |   |   |   |
 6357:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6358: 
 6359:             >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])
 6360:             >>> del memory[4:9]
 6361:             >>> memory._blocks
 6362:             [[1, b'ABCyz']]
 6363: 
 6364:             ~~~
 6365: 
 6366:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6367:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
 6368:             +===+===+===+===+===+===+===+===+===+===+===+===+
 6369:             |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |
 6370:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6371:             |   |[A | B | C | D]|   |[$]|   |[x | z]|   |   |
 6372:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6373:             |   |[A | B | D]|   |[$]|   |[x | z]|   |   |   |
 6374:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6375:             |   |[A | D]|   |   |[x]|   |   |   |   |   |   |
 6376:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6377: 
 6378:             >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])
 6379:             >>> del memory[9]
 6380:             >>> memory._blocks
 6381:             [[1, b'ABCD'], [6, b'$'], [8, b'xz']]
 6382:             >>> del memory[3]
 6383:             >>> memory._blocks
 6384:             [[1, b'ABD'], [5, b'$'], [7, b'xz']]
 6385:             >>> del memory[2:10:3]
 6386:             >>> memory._blocks
 6387:             [[1, b'AD'], [5, b'x']]
 6388:         """
 6389: 
+6390:         Memory_DelItem(self._, key)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_DelItem(__pyx_v_self->_, __pyx_v_key); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 6390, __pyx_L1_error)
 6391: 
+6392:     def append(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_59append(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_58append[] = "Memory.append(self: Memory, item: Union[AnyBytes, Value]) -> None\nAppends a single item.\n\n        Arguments:\n            item (int):\n                Value to append. Can be a single byte string or integer.\n\n        Examples:\n            >>> memory = Memory()\n            >>> memory.append(b'$')\n            >>> memory._blocks\n            [[0, b'$']]\n\n            ~~~\n\n            >>> memory = Memory()\n            >>> memory.append(3)\n            >>> memory._blocks\n            [[0, b'\\x03']]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_59append = {"append", (PyCFunction)__pyx_pw_11cbytesparse_2_c_6Memory_59append, METH_O, __pyx_doc_11cbytesparse_2_c_6Memory_58append};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_59append(PyObject *__pyx_v_self, PyObject *__pyx_v_item) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("append (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_58append(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_item));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_58append(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_item) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("append", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Memory.append", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__92 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_item); if (unlikely(!__pyx_tuple__92)) __PYX_ERR(0, 6392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__92);
  __Pyx_GIVEREF(__pyx_tuple__92);
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 6392, __pyx_L1_error)
/* … */
  __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_59append, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_append, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__93)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_append, __pyx_t_6) < 0) __PYX_ERR(0, 6392, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__93 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__92, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_append, 6392, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__93)) __PYX_ERR(0, 6392, __pyx_L1_error)
 6393:         self: Memory,
+6394:         item: Union[AnyBytes, Value],
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Union); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 6394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Value); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_6);
  __pyx_t_3 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_item, __pyx_t_6) < 0) __PYX_ERR(0, 6392, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+6395:     ) -> None:
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, Py_None) < 0) __PYX_ERR(0, 6392, __pyx_L1_error)
 6396:         r"""Appends a single item.
 6397: 
 6398:         Arguments:
 6399:             item (int):
 6400:                 Value to append. Can be a single byte string or integer.
 6401: 
 6402:         Examples:
 6403:             >>> memory = Memory()
 6404:             >>> memory.append(b'$')
 6405:             >>> memory._blocks
 6406:             [[0, b'$']]
 6407: 
 6408:             ~~~
 6409: 
 6410:             >>> memory = Memory()
 6411:             >>> memory.append(3)
 6412:             >>> memory._blocks
 6413:             [[0, b'\x03']]
 6414:         """
 6415: 
+6416:         return Memory_Append(self._, item)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Append(__pyx_v_self->_, __pyx_v_item); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 6416, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6416, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 6417: 
+6418:     def extend(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_61extend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_60extend[] = "Memory.extend(self: Memory, items: Union[AnyBytes, Memory], offset: Address = 0) -> None\nConcatenates items.\n\n        Equivalent to ``self += items``.\n\n        Arguments:\n            items (items):\n                Items to append at the end of the current virtual space.\n\n                If a :obj:`list`, it is interpreted as a sequence of\n                non-overlapping blocks, sorted by start address.\n\n            offset (int):\n                Optional offset w.r.t. :attr:`content_endex`.\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_61extend = {"extend", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_61extend, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_60extend};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_61extend(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_items = 0;
  PyObject *__pyx_v_offset = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("extend (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_items,&__pyx_n_s_offset,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)__pyx_int_0);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_items)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "extend") < 0)) __PYX_ERR(0, 6418, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_items = values[0];
    __pyx_v_offset = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("extend", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6418, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_60extend(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_items, __pyx_v_offset);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_60extend(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_items, PyObject *__pyx_v_offset) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("extend", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Memory.extend", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__94 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_items, __pyx_n_s_offset); if (unlikely(!__pyx_tuple__94)) __PYX_ERR(0, 6418, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__94);
  __Pyx_GIVEREF(__pyx_tuple__94);
/* … */
  __pyx_t_6 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6418, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 6418, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_61extend, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_extend, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__95)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6418, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_extend, __pyx_t_2) < 0) __PYX_ERR(0, 6418, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__95 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__94, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_extend, 6418, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__95)) __PYX_ERR(0, 6418, __pyx_L1_error)
 6419:         self: Memory,
+6420:         items: Union[AnyBytes, Memory],
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Union); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory));
  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory));
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_items, __pyx_t_2) < 0) __PYX_ERR(0, 6418, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+6421:         offset: Address = 0,
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_offset, __pyx_t_2) < 0) __PYX_ERR(0, 6418, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+6422:     ) -> None:
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return, Py_None) < 0) __PYX_ERR(0, 6418, __pyx_L1_error)
 6423:         r"""Concatenates items.
 6424: 
 6425:         Equivalent to ``self += items``.
 6426: 
 6427:         Arguments:
 6428:             items (items):
 6429:                 Items to append at the end of the current virtual space.
 6430: 
 6431:                 If a :obj:`list`, it is interpreted as a sequence of
 6432:                 non-overlapping blocks, sorted by start address.
 6433: 
 6434:             offset (int):
 6435:                 Optional offset w.r.t. :attr:`content_endex`.
 6436:         """
 6437: 
+6438:         return Memory_Extend(self._, items, offset)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Extend(__pyx_v_self->_, __pyx_v_items, __pyx_v_offset); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 6438, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6438, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 6439: 
+6440:     def pop(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_63pop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_62pop[] = "Memory.pop(self: Memory, address: Optional[Address] = None) -> Optional[Value]\nTakes a value away.\n\n        Arguments:\n            address (int):\n                Address of the byte to pop.\n                If ``None``, the very last byte is popped.\n\n        Return:\n            int: Value at `address`; ``None`` within emptiness.\n\n        Example:\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|\n            +===+===+===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            |   |[A | B | C | D]|   |[$]|   |[x | y]|   |   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            |   |[A | B | D]|   |[$]|   |[x | y]|   |   |   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])\n            >>> memory.pop()  # -> ord('z') = 122\n            122\n            >>> memory.pop(3)  # -> ord('C') = 67\n            67\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_63pop = {"pop", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_63pop, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_62pop};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_63pop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_address = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pop (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_address,0};
    PyObject* values[1] = {0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_62pop(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_address) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("pop", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.pop", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__96 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_address); if (unlikely(!__pyx_tuple__96)) __PYX_ERR(0, 6440, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__96);
  __Pyx_GIVEREF(__pyx_tuple__96);
/* … */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6440, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 6440, __pyx_L1_error)
/* … */
  __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_63pop, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_pop, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__97)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6440, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_pop, __pyx_t_6) < 0) __PYX_ERR(0, 6440, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__97 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__96, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_pop, 6440, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__97)) __PYX_ERR(0, 6440, __pyx_L1_error)
 6441:         self: Memory,
+6442:         address: Optional[Address] = None,
    values[0] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_address);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pop") < 0)) __PYX_ERR(0, 6440, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_address = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("pop", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 6440, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.pop", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_62pop(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_address);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_address, __pyx_t_5) < 0) __PYX_ERR(0, 6440, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+6443:     ) -> Optional[Value]:
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 6443, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6443, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6443, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_t_6) < 0) __PYX_ERR(0, 6440, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 6444:         r"""Takes a value away.
 6445: 
 6446:         Arguments:
 6447:             address (int):
 6448:                 Address of the byte to pop.
 6449:                 If ``None``, the very last byte is popped.
 6450: 
 6451:         Return:
 6452:             int: Value at `address`; ``None`` within emptiness.
 6453: 
 6454:         Example:
 6455:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6456:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
 6457:             +===+===+===+===+===+===+===+===+===+===+===+===+
 6458:             |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |
 6459:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6460:             |   |[A | B | C | D]|   |[$]|   |[x | y]|   |   |
 6461:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6462:             |   |[A | B | D]|   |[$]|   |[x | y]|   |   |   |
 6463:             +---+---+---+---+---+---+---+---+---+---+---+---+
 6464: 
 6465:             >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])
 6466:             >>> memory.pop()  # -> ord('z') = 122
 6467:             122
 6468:             >>> memory.pop(3)  # -> ord('C') = 67
 6469:             67
 6470:         """
 6471: 
+6472:         return Memory_Pop(self._, address)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Pop(__pyx_v_self->_, __pyx_v_address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6472, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6473: 
+6474:     def __bytes__(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_65__bytes__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_64__bytes__[] = "Memory.__bytes__(self: Memory) -> bytes\nCreates a bytes clone.\n\n        Returns:\n            :obj:`bytes`: Cloned data.\n\n        Raises:\n            :obj:`ValueError`: Data not contiguous (see :attr:`contiguous`).\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_65__bytes__ = {"__bytes__", (PyCFunction)__pyx_pw_11cbytesparse_2_c_6Memory_65__bytes__, METH_NOARGS, __pyx_doc_11cbytesparse_2_c_6Memory_64__bytes__};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_65__bytes__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bytes__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_64__bytes__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_64__bytes__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_view = 0;
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__bytes__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Memory.__bytes__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_view);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__98 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_view, __pyx_n_s_result); if (unlikely(!__pyx_tuple__98)) __PYX_ERR(0, 6474, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__98);
  __Pyx_GIVEREF(__pyx_tuple__98);
/* … */
  __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6474, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 6474, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return, __pyx_n_u_bytes_2) < 0) __PYX_ERR(0, 6474, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_65__bytes__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory___bytes, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__99)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6474, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_bytes, __pyx_t_2) < 0) __PYX_ERR(0, 6474, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__99 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__98, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_bytes, 6474, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__99)) __PYX_ERR(0, 6474, __pyx_L1_error)
 6475:         self: Memory,
 6476:     ) -> bytes:
 6477:         r"""Creates a bytes clone.
 6478: 
 6479:         Returns:
 6480:             :obj:`bytes`: Cloned data.
 6481: 
 6482:         Raises:
 6483:             :obj:`ValueError`: Data not contiguous (see :attr:`contiguous`).
 6484:         """
 6485:         cdef:
+6486:             BlockView view = Memory_View(self._)
  __pyx_t_1 = ((PyObject *)__pyx_f_11cbytesparse_2_c_Memory_View(__pyx_v_self->_)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_view = ((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_t_1);
  __pyx_t_1 = 0;
 6487: 
+6488:         result = bytes(view)
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), ((PyObject *)__pyx_v_view)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6488, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_result = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+6489:         view.dispose()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_view), __pyx_n_s_dispose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6489, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6489, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6490:         return result
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_result);
  __pyx_r = __pyx_v_result;
  goto __pyx_L0;
 6491: 
+6492:     def to_bytes(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_67to_bytes(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_66to_bytes[] = "Memory.to_bytes(self: Memory) -> bytes\nCreates a bytes clone.\n\n        Returns:\n            :obj:`bytes`: Cloned data.\n\n        Raises:\n            :obj:`ValueError`: Data not contiguous (see :attr:`contiguous`).\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_67to_bytes = {"to_bytes", (PyCFunction)__pyx_pw_11cbytesparse_2_c_6Memory_67to_bytes, METH_NOARGS, __pyx_doc_11cbytesparse_2_c_6Memory_66to_bytes};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_67to_bytes(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_bytes (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_66to_bytes(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_66to_bytes(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_view = 0;
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_bytes", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Memory.to_bytes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_view);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__100 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_view, __pyx_n_s_result); if (unlikely(!__pyx_tuple__100)) __PYX_ERR(0, 6492, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__100);
  __Pyx_GIVEREF(__pyx_tuple__100);
/* … */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6492, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 6492, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_n_u_bytes_2) < 0) __PYX_ERR(0, 6492, __pyx_L1_error)
  __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_67to_bytes, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_to_bytes, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__101)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6492, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_to_bytes, __pyx_t_6) < 0) __PYX_ERR(0, 6492, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__101 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__100, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_to_bytes, 6492, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__101)) __PYX_ERR(0, 6492, __pyx_L1_error)
 6493:         self: Memory,
 6494:     ) -> bytes:
 6495:         r"""Creates a bytes clone.
 6496: 
 6497:         Returns:
 6498:             :obj:`bytes`: Cloned data.
 6499: 
 6500:         Raises:
 6501:             :obj:`ValueError`: Data not contiguous (see :attr:`contiguous`).
 6502:         """
 6503:         cdef:
+6504:             BlockView view = Memory_View(self._)
  __pyx_t_1 = ((PyObject *)__pyx_f_11cbytesparse_2_c_Memory_View(__pyx_v_self->_)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6504, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_view = ((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_t_1);
  __pyx_t_1 = 0;
 6505: 
+6506:         result = bytes(view)
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), ((PyObject *)__pyx_v_view)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6506, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_result = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+6507:         view.dispose()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_view), __pyx_n_s_dispose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6507, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6508:         return result
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_result);
  __pyx_r = __pyx_v_result;
  goto __pyx_L0;
 6509: 
+6510:     def to_bytearray(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_69to_bytearray(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_68to_bytearray[] = "Memory.to_bytearray(self: Memory) -> bytearray\nCreates a bytearray clone.\n\n        Arguments:\n            copy (bool):\n                Creates a clone of the underlying :obj:`bytearray` data\n                structure.\n\n        Returns:\n            :obj:`bytearray`: Cloned data.\n\n        Raises:\n            :obj:`ValueError`: Data not contiguous (see :attr:`contiguous`).\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_69to_bytearray = {"to_bytearray", (PyCFunction)__pyx_pw_11cbytesparse_2_c_6Memory_69to_bytearray, METH_NOARGS, __pyx_doc_11cbytesparse_2_c_6Memory_68to_bytearray};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_69to_bytearray(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_bytearray (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_68to_bytearray(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_68to_bytearray(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_view = 0;
  PyObject *__pyx_v_result = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_bytearray", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Memory.to_bytearray", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_view);
  __Pyx_XDECREF(__pyx_v_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__102 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_view, __pyx_n_s_result); if (unlikely(!__pyx_tuple__102)) __PYX_ERR(0, 6510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__102);
  __Pyx_GIVEREF(__pyx_tuple__102);
/* … */
  __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 6510, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return, __pyx_n_u_bytearray) < 0) __PYX_ERR(0, 6510, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_69to_bytearray, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_to_bytearray, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__103)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_to_bytearray, __pyx_t_2) < 0) __PYX_ERR(0, 6510, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__103 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__102, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_to_bytearray, 6510, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__103)) __PYX_ERR(0, 6510, __pyx_L1_error)
 6511:         self: Memory,
 6512:     ) -> bytearray:
 6513:         r"""Creates a bytearray clone.
 6514: 
 6515:         Arguments:
 6516:             copy (bool):
 6517:                 Creates a clone of the underlying :obj:`bytearray` data
 6518:                 structure.
 6519: 
 6520:         Returns:
 6521:             :obj:`bytearray`: Cloned data.
 6522: 
 6523:         Raises:
 6524:             :obj:`ValueError`: Data not contiguous (see :attr:`contiguous`).
 6525:         """
 6526:         cdef:
+6527:             BlockView view = Memory_View(self._)
  __pyx_t_1 = ((PyObject *)__pyx_f_11cbytesparse_2_c_Memory_View(__pyx_v_self->_)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6527, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_view = ((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_t_1);
  __pyx_t_1 = 0;
 6528: 
+6529:         result = bytearray(view)
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyByteArray_Type)), ((PyObject *)__pyx_v_view)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6529, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_result = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
+6530:         view.dispose()
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_view), __pyx_n_s_dispose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6530, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6530, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+6531:         return result
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_result);
  __pyx_r = __pyx_v_result;
  goto __pyx_L0;
 6532: 
+6533:     def to_memoryview(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_71to_memoryview(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_70to_memoryview[] = "Memory.to_memoryview(self: Memory) -> memoryview\nCreates a memory view.\n\n        Returns:\n            :obj:`memoryview`: View over data.\n\n        Raises:\n            :obj:`ValueError`: Data not contiguous (see :attr:`contiguous`).\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_71to_memoryview = {"to_memoryview", (PyCFunction)__pyx_pw_11cbytesparse_2_c_6Memory_71to_memoryview, METH_NOARGS, __pyx_doc_11cbytesparse_2_c_6Memory_70to_memoryview};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_71to_memoryview(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_memoryview (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_70to_memoryview(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_70to_memoryview(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  struct __pyx_obj_11cbytesparse_2_c_BlockView *__pyx_v_view = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("to_memoryview", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.to_memoryview", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_view);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__104 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_view); if (unlikely(!__pyx_tuple__104)) __PYX_ERR(0, 6533, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__104);
  __Pyx_GIVEREF(__pyx_tuple__104);
/* … */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6533, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 6533, __pyx_L1_error)
/* … */
  __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_71to_memoryview, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_to_memoryview, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__105)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6533, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_to_memoryview, __pyx_t_6) < 0) __PYX_ERR(0, 6533, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__105 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__104, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_to_memoryview, 6533, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__105)) __PYX_ERR(0, 6533, __pyx_L1_error)
 6534:         self: Memory,
+6535:     ) -> memoryview:
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_memoryview); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6535, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_t_6) < 0) __PYX_ERR(0, 6533, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 6536:         r"""Creates a memory view.
 6537: 
 6538:         Returns:
 6539:             :obj:`memoryview`: View over data.
 6540: 
 6541:         Raises:
 6542:             :obj:`ValueError`: Data not contiguous (see :attr:`contiguous`).
 6543:         """
 6544:         cdef:
+6545:             BlockView view = Memory_View(self._)
  __pyx_t_1 = ((PyObject *)__pyx_f_11cbytesparse_2_c_Memory_View(__pyx_v_self->_)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6545, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_view = ((struct __pyx_obj_11cbytesparse_2_c_BlockView *)__pyx_t_1);
  __pyx_t_1 = 0;
 6546: 
+6547:         return view
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_view));
  __pyx_r = ((PyObject *)__pyx_v_view);
  goto __pyx_L0;
 6548: 
+6549:     def __copy__(
/* Python wrapper */
static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pw_11cbytesparse_2_c_6Memory_73__copy__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_72__copy__[] = "Memory.__copy__(self: Memory) -> Memory\nCreates a shallow copy.\n\n        Note:\n            The Cython implementation actually creates a deep copy.\n\n        Returns:\n            :obj:`Memory`: Shallow copy.\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_73__copy__ = {"__copy__", (PyCFunction)__pyx_pw_11cbytesparse_2_c_6Memory_73__copy__, METH_NOARGS, __pyx_doc_11cbytesparse_2_c_6Memory_72__copy__};
static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pw_11cbytesparse_2_c_6Memory_73__copy__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__copy__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_72__copy__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pf_11cbytesparse_2_c_6Memory_72__copy__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  Memory_ *__pyx_v_memory_;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_memory = 0;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__copy__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Memory.__copy__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_memory);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__106 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_memory_2, __pyx_n_s_memory); if (unlikely(!__pyx_tuple__106)) __PYX_ERR(0, 6549, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__106);
  __Pyx_GIVEREF(__pyx_tuple__106);
/* … */
  __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6549, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 6549, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 6549, __pyx_L1_error)
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_73__copy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory___copy, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__107)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6549, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_copy_2, __pyx_t_2) < 0) __PYX_ERR(0, 6549, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__107 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__106, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_copy_2, 6549, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__107)) __PYX_ERR(0, 6549, __pyx_L1_error)
 6550:         self: Memory,
 6551:     ) -> Memory:
 6552:         r"""Creates a shallow copy.
 6553: 
 6554:         Note:
 6555:             The Cython implementation actually creates a deep copy.
 6556: 
 6557:         Returns:
 6558:             :obj:`Memory`: Shallow copy.
 6559:         """
 6560:         cdef:
+6561:             Memory_* memory_ = Memory_Copy(self._)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Copy(__pyx_v_self->_); if (unlikely(__pyx_t_1 == ((Memory_ *)NULL))) __PYX_ERR(0, 6561, __pyx_L1_error)
  __pyx_v_memory_ = __pyx_t_1;
+6562:             Memory memory = Memory_AsObject(memory_)
  __pyx_t_2 = ((PyObject *)__pyx_f_11cbytesparse_2_c_Memory_AsObject(__pyx_v_memory_)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6562, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_memory = ((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_t_2);
  __pyx_t_2 = 0;
 6563: 
+6564:         return memory
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_memory));
  __pyx_r = __pyx_v_memory;
  goto __pyx_L0;
 6565: 
+6566:     def __deepcopy__(
/* Python wrapper */
static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pw_11cbytesparse_2_c_6Memory_75__deepcopy__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_74__deepcopy__[] = "Memory.__deepcopy__(self: Memory) -> Memory\nCreates a deep copy.\n\n        Returns:\n            :obj:`Memory`: Deep copy.\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_75__deepcopy__ = {"__deepcopy__", (PyCFunction)__pyx_pw_11cbytesparse_2_c_6Memory_75__deepcopy__, METH_NOARGS, __pyx_doc_11cbytesparse_2_c_6Memory_74__deepcopy__};
static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pw_11cbytesparse_2_c_6Memory_75__deepcopy__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__deepcopy__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_74__deepcopy__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pf_11cbytesparse_2_c_6Memory_74__deepcopy__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  Memory_ *__pyx_v_memory_;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_memory = 0;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__deepcopy__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Memory.__deepcopy__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_memory);
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__108 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_memory_2, __pyx_n_s_memory); if (unlikely(!__pyx_tuple__108)) __PYX_ERR(0, 6566, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__108);
  __Pyx_GIVEREF(__pyx_tuple__108);
/* … */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6566, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 6566, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 6566, __pyx_L1_error)
  __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_75__deepcopy__, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory___deepcopy, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__109)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 6566, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_deepcopy, __pyx_t_6) < 0) __PYX_ERR(0, 6566, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__109 = (PyObject*)__Pyx_PyCode_New(1, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__108, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_deepcopy, 6566, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__109)) __PYX_ERR(0, 6566, __pyx_L1_error)
 6567:         self: Memory,
 6568:     ) -> Memory:
 6569:         r"""Creates a deep copy.
 6570: 
 6571:         Returns:
 6572:             :obj:`Memory`: Deep copy.
 6573:         """
 6574:         cdef:
+6575:             Memory_* memory_ = Memory_Copy(self._)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Copy(__pyx_v_self->_); if (unlikely(__pyx_t_1 == ((Memory_ *)NULL))) __PYX_ERR(0, 6575, __pyx_L1_error)
  __pyx_v_memory_ = __pyx_t_1;
+6576:             Memory memory = Memory_AsObject(memory_)
  __pyx_t_2 = ((PyObject *)__pyx_f_11cbytesparse_2_c_Memory_AsObject(__pyx_v_memory_)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 6576, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_memory = ((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_t_2);
  __pyx_t_2 = 0;
 6577: 
+6578:         return memory
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __Pyx_INCREF(((PyObject *)__pyx_v_memory));
  __pyx_r = __pyx_v_memory;
  goto __pyx_L0;
 6579: 
 6580:     @property
+6581:     def contiguous(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_10contiguous_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_10contiguous_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_10contiguous___get__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_10contiguous___get__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.contiguous.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6582:         self: Memory,
 6583:     ) -> bool:
 6584:         r"""bool: Contains contiguous data.
 6585: 
 6586:         The memory is considered to have contiguous data if there is no empty
 6587:         space between blocks.
 6588: 
 6589:         If trimming is defined, there must be no empty space also towards it.
 6590:         """
 6591: 
+6592:         return Memory_Contiguous(self._)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_f_11cbytesparse_2_c_Memory_Contiguous(__pyx_v_self->_)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6592, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6593: 
 6594:     @property
+6595:     def trim_start(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_10trim_start_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_10trim_start_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_10trim_start___get__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_10trim_start___get__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.trim_start.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6596:         self: Memory,
 6597:     ) -> Optional[Address]:
 6598:         r"""int: Trimming start address.
 6599: 
 6600:         Any data before this address is automatically discarded.
 6601:         Disabled if ``None``.
 6602:         """
 6603: 
+6604:         return Memory_GetTrimStart(self._)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_GetTrimStart(__pyx_v_self->_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6604, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6605: 
 6606:     @trim_start.setter
+6607:     def trim_start(
/* Python wrapper */
static int __pyx_pw_11cbytesparse_2_c_6Memory_10trim_start_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_trim_start); /*proto*/
static int __pyx_pw_11cbytesparse_2_c_6Memory_10trim_start_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_trim_start) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_10trim_start_2__set__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_trim_start));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11cbytesparse_2_c_6Memory_10trim_start_2__set__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_trim_start) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.trim_start.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6608:         self: Memory,
 6609:         trim_start: Address,
 6610:     ) -> None:
 6611: 
+6612:         Memory_SetTrimStart(self._, trim_start)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_SetTrimStart(__pyx_v_self->_, __pyx_v_trim_start); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 6612, __pyx_L1_error)
 6613: 
 6614:     @property
+6615:     def trim_endex(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_10trim_endex_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_10trim_endex_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_10trim_endex___get__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_10trim_endex___get__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.trim_endex.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6616:         self: Memory,
 6617:     ) -> Optional[Address]:
 6618:         r"""int: Trimming exclusive end address.
 6619: 
 6620:         Any data at or after this address is automatically discarded.
 6621:         Disabled if ``None``.
 6622:         """
 6623: 
+6624:         return Memory_GetTrimEndex(self._)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_GetTrimEndex(__pyx_v_self->_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6624, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6625: 
 6626:     @trim_endex.setter
+6627:     def trim_endex(
/* Python wrapper */
static int __pyx_pw_11cbytesparse_2_c_6Memory_10trim_endex_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_trim_endex); /*proto*/
static int __pyx_pw_11cbytesparse_2_c_6Memory_10trim_endex_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_trim_endex) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_10trim_endex_2__set__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_trim_endex));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11cbytesparse_2_c_6Memory_10trim_endex_2__set__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_trim_endex) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.trim_endex.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6628:         self: Memory,
 6629:         trim_endex: Address,
 6630:     ) -> None:
 6631: 
+6632:         Memory_SetTrimEndex(self._, trim_endex)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_SetTrimEndex(__pyx_v_self->_, __pyx_v_trim_endex); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 6632, __pyx_L1_error)
 6633: 
 6634:     @property
+6635:     def trim_span(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_9trim_span_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_9trim_span_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_9trim_span___get__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_9trim_span___get__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.trim_span.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6636:         self: Memory,
 6637:     ) -> OpenInterval:
 6638:         r"""tuple of int: Trimming span addresses.
 6639: 
 6640:         A :obj:`tuple` holding :attr:`trim_start` and :attr:`trim_endex`.
 6641:         """
 6642: 
+6643:         return Memory_GetTrimSpan(self._)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_GetTrimSpan(__pyx_v_self->_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6643, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6644: 
 6645:     @trim_span.setter
+6646:     def trim_span(
/* Python wrapper */
static int __pyx_pw_11cbytesparse_2_c_6Memory_9trim_span_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_span); /*proto*/
static int __pyx_pw_11cbytesparse_2_c_6Memory_9trim_span_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_span) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_9trim_span_2__set__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_span));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_11cbytesparse_2_c_6Memory_9trim_span_2__set__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_span) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
/* … */
  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.trim_span.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6647:         self: Memory,
 6648:         span: OpenInterval,
 6649:     ) -> None:
 6650: 
+6651:         Memory_SetTrimSpan(self._, span)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_SetTrimSpan(__pyx_v_self->_, __pyx_v_span); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 6651, __pyx_L1_error)
 6652: 
 6653:     @property
+6654:     def start(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_5start_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_5start_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_5start___get__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_5start___get__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.start.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6655:         self: Memory,
 6656:     ) -> Address:
 6657:         r"""int: Inclusive start address.
 6658: 
 6659:         This property holds the inclusive start address of the virtual space.
 6660:         By default, it is the current minimum inclusive start address of
 6661:         the first stored block.
 6662: 
 6663:         If :attr:`trim_start` not ``None``, that is returned.
 6664: 
 6665:         If the memory has no data and no trimming, 0 is returned.
 6666: 
 6667:         Examples:
 6668:             >>> Memory().start
 6669:             0
 6670: 
 6671:             ~~~
 6672: 
 6673:             +---+---+---+---+---+---+---+---+---+
 6674:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 6675:             +===+===+===+===+===+===+===+===+===+
 6676:             |   |[A | B | C]|   |[x | y | z]|   |
 6677:             +---+---+---+---+---+---+---+---+---+
 6678: 
 6679:             >>> memory = Memory.from_blocks([[1, b'ABC'], [5, b'xyz']])
 6680:             >>> memory.start
 6681:             1
 6682: 
 6683:             ~~~
 6684: 
 6685:             +---+---+---+---+---+---+---+---+---+
 6686:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 6687:             +===+===+===+===+===+===+===+===+===+
 6688:             |   |[[[|   |   |   |[x | y | z]|   |
 6689:             +---+---+---+---+---+---+---+---+---+
 6690: 
 6691:             >>> memory = Memory.from_blocks([[5, b'xyz']], start=1)
 6692:             >>> memory.start
 6693:             1
 6694:         """
 6695: 
+6696:         return Memory_Start(self._)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_uint_fast64_t(__pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_v_self->_)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6696, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6697: 
 6698:     @property
+6699:     def endex(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_5endex_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_5endex_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_5endex___get__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_5endex___get__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.endex.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6700:         self: Memory,
 6701:     ) -> Address:
 6702:         r"""int: Exclusive end address.
 6703: 
 6704:         This property holds the exclusive end address of the virtual space.
 6705:         By default, it is the current maximmum exclusive end address of
 6706:         the last stored block.
 6707: 
 6708:         If  :attr:`trim_endex` not ``None``, that is returned.
 6709: 
 6710:         If the memory has no data and no trimming, :attr:`start` is returned.
 6711: 
 6712:         Examples:
 6713:             >>> Memory().endex
 6714:             0
 6715: 
 6716:             ~~~
 6717: 
 6718:             +---+---+---+---+---+---+---+---+---+
 6719:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 6720:             +===+===+===+===+===+===+===+===+===+
 6721:             |   |[A | B | C]|   |[x | y | z]|   |
 6722:             +---+---+---+---+---+---+---+---+---+
 6723: 
 6724:             >>> memory = Memory.from_blocks([[1, b'ABC'], [5, b'xyz']])
 6725:             >>> memory.endex
 6726:             8
 6727: 
 6728:             ~~~
 6729: 
 6730:             +---+---+---+---+---+---+---+---+---+
 6731:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 6732:             +===+===+===+===+===+===+===+===+===+
 6733:             |   |[A | B | C]|   |   |   |   |)))|
 6734:             +---+---+---+---+---+---+---+---+---+
 6735: 
 6736:             >>> memory = Memory.from_blocks([[1, b'ABC']], endex=8)
 6737:             >>> memory.endex
 6738:             8
 6739:         """
 6740: 
+6741:         return Memory_Endex(self._)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_uint_fast64_t(__pyx_f_11cbytesparse_2_c_Memory_Endex(__pyx_v_self->_)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6741, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6742: 
 6743:     @property
+6744:     def span(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_4span_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_4span_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_4span___get__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_4span___get__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.span.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6745:         self: Memory,
 6746:     ) -> ClosedInterval:
 6747:         r"""tuple of int: Memory address span.
 6748: 
 6749:         A :obj:`tuple` holding both :attr:`start` and :attr:`endex`.
 6750: 
 6751:         Examples:
 6752:             >>> Memory().span
 6753:             (0, 0)
 6754:             >>> Memory(start=1, endex=8).span
 6755:             (1, 8)
 6756: 
 6757:             ~~~
 6758: 
 6759:             +---+---+---+---+---+---+---+---+---+
 6760:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 6761:             +===+===+===+===+===+===+===+===+===+
 6762:             |   |[A | B | C]|   |[x | y | z]|   |
 6763:             +---+---+---+---+---+---+---+---+---+
 6764: 
 6765:             >>> memory = Memory.from_blocks([[1, b'ABC'], [5, b'xyz']])
 6766:             >>> memory.span
 6767:             (1, 8)
 6768:         """
 6769: 
+6770:         return Memory_Span(self._)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_convert__to_py___pyx_ctuple_addr_t__and_addr_t(__pyx_f_11cbytesparse_2_c_Memory_Span(__pyx_v_self->_)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6771: 
 6772:     @property
+6773:     def endin(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_5endin_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_5endin_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_5endin___get__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_5endin___get__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.endin.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6774:         self: Memory,
 6775:     ) -> Address:
 6776:         r"""int: Inclusive end address.
 6777: 
 6778:         This property holds the inclusive end address of the virtual space.
 6779:         By default, it is the current maximmum inclusive end address of
 6780:         the last stored block.
 6781: 
 6782:         If  :attr:`trim_endex` not ``None``, that minus one is returned.
 6783: 
 6784:         If the memory has no data and no trimming, :attr:`start` is returned.
 6785: 
 6786:         Examples:
 6787:             >>> Memory().endin
 6788:             -1
 6789: 
 6790:             ~~~
 6791: 
 6792:             +---+---+---+---+---+---+---+---+---+
 6793:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 6794:             +===+===+===+===+===+===+===+===+===+
 6795:             |   |[A | B | C]|   |[x | y | z]|   |
 6796:             +---+---+---+---+---+---+---+---+---+
 6797: 
 6798:             >>> memory = Memory.from_blocks([[1, b'ABC'], [5, b'xyz']])
 6799:             >>> memory.endin
 6800:             7
 6801: 
 6802:             ~~~
 6803: 
 6804:             +---+---+---+---+---+---+---+---+---+
 6805:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 6806:             +===+===+===+===+===+===+===+===+===+
 6807:             |   |[A | B | C]|   |   |   |   |)))|
 6808:             +---+---+---+---+---+---+---+---+---+
 6809: 
 6810:             >>> memory = Memory.from_blocks([[1, b'ABC']], endex=8)
 6811:             >>> memory.endin
 6812:             7
 6813:         """
 6814: 
+6815:         return Memory_Endin(self._)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Endin(__pyx_v_self->_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6816: 
 6817:     @property
+6818:     def content_start(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_13content_start_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_13content_start_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_13content_start___get__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_13content_start___get__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.content_start.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6819:         self: Memory,
 6820:     ) -> Address:
 6821:         r"""int: Inclusive content start address.
 6822: 
 6823:         This property holds the inclusive start address of the memory content.
 6824:         By default, it is the current minimum inclusive start address of
 6825:         the first stored block.
 6826: 
 6827:         If the memory has no data and no trimming, 0 is returned.
 6828: 
 6829:         Trimming is considered only for an empty memory.
 6830: 
 6831:         Examples:
 6832:             >>> Memory().content_start
 6833:             0
 6834:             >>> Memory(start=1).content_start
 6835:             1
 6836:             >>> Memory(start=1, endex=8).content_start
 6837:             1
 6838: 
 6839:             ~~~
 6840: 
 6841:             +---+---+---+---+---+---+---+---+---+
 6842:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 6843:             +===+===+===+===+===+===+===+===+===+
 6844:             |   |[A | B | C]|   |[x | y | z]|   |
 6845:             +---+---+---+---+---+---+---+---+---+
 6846: 
 6847:             >>> memory = Memory.from_blocks([[1, b'ABC'], [5, b'xyz']])
 6848:             >>> memory.content_start
 6849:             1
 6850: 
 6851:             ~~~
 6852: 
 6853:             +---+---+---+---+---+---+---+---+---+
 6854:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 6855:             +===+===+===+===+===+===+===+===+===+
 6856:             |   |[[[|   |   |   |[x | y | z]|   |
 6857:             +---+---+---+---+---+---+---+---+---+
 6858: 
 6859:             >>> memory = Memory.from_blocks([[5, b'xyz']], start=1)
 6860:             >>> memory.content_start
 6861:             5
 6862:         """
 6863: 
+6864:         return Memory_ContentStart(self._)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_uint_fast64_t(__pyx_f_11cbytesparse_2_c_Memory_ContentStart(__pyx_v_self->_)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6864, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6865: 
 6866:     @property
+6867:     def content_endex(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_13content_endex_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_13content_endex_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_13content_endex___get__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_13content_endex___get__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.content_endex.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6868:         self: Memory,
 6869:     ) -> Address:
 6870:         r"""int: Exclusive content end address.
 6871: 
 6872:         This property holds the exclusive end address of the memory content.
 6873:         By default, it is the current maximmum exclusive end address of
 6874:         the last stored block.
 6875: 
 6876:         If the memory has no data and no trimming, :attr:`start` is returned.
 6877: 
 6878:         Trimming is considered only for an empty memory.
 6879: 
 6880:         Examples:
 6881:             >>> Memory().content_endex
 6882:             0
 6883:             >>> Memory(endex=8).content_endex
 6884:             0
 6885:             >>> Memory(start=1, endex=8).content_endex
 6886:             1
 6887: 
 6888:             ~~~
 6889: 
 6890:             +---+---+---+---+---+---+---+---+---+
 6891:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 6892:             +===+===+===+===+===+===+===+===+===+
 6893:             |   |[A | B | C]|   |[x | y | z]|   |
 6894:             +---+---+---+---+---+---+---+---+---+
 6895: 
 6896:             >>> memory = Memory.from_blocks([[1, b'ABC'], [5, b'xyz']])
 6897:             >>> memory.content_endex
 6898:             8
 6899: 
 6900:             ~~~
 6901: 
 6902:             +---+---+---+---+---+---+---+---+---+
 6903:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 6904:             +===+===+===+===+===+===+===+===+===+
 6905:             |   |[A | B | C]|   |   |   |   |)))|
 6906:             +---+---+---+---+---+---+---+---+---+
 6907: 
 6908:             >>> memory = Memory.from_blocks([[1, b'ABC']], endex=8)
 6909:             >>> memory.content_endex
 6910:             4
 6911:         """
 6912: 
+6913:         return Memory_ContentEndex(self._)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_uint_fast64_t(__pyx_f_11cbytesparse_2_c_Memory_ContentEndex(__pyx_v_self->_)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6913, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6914: 
 6915:     @property
+6916:     def content_span(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_12content_span_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_12content_span_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_12content_span___get__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_12content_span___get__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.content_span.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6917:         self: Memory,
 6918:     ) -> ClosedInterval:
 6919:         r"""tuple of int: Memory content address span.
 6920: 
 6921:         A :attr:`tuple` holding both :attr:`content_start` and
 6922:         :attr:`content_endex`.
 6923: 
 6924:         Examples:
 6925:             >>> Memory().content_span
 6926:             (0, 0)
 6927:             >>> Memory(start=1).content_span
 6928:             (1, 1)
 6929:             >>> Memory(endex=8).content_span
 6930:             (0, 0)
 6931:             >>> Memory(start=1, endex=8).content_span
 6932:             (1, 1)
 6933: 
 6934:             ~~~
 6935: 
 6936:             +---+---+---+---+---+---+---+---+---+
 6937:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 6938:             +===+===+===+===+===+===+===+===+===+
 6939:             |   |[A | B | C]|   |[x | y | z]|   |
 6940:             +---+---+---+---+---+---+---+---+---+
 6941: 
 6942:             >>> memory = Memory.from_blocks([[1, b'ABC'], [5, b'xyz']])
 6943:             >>> memory.content_span
 6944:             (1, 8)
 6945:         """
 6946: 
+6947:         return Memory_ContentSpan(self._)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_convert__to_py___pyx_ctuple_addr_t__and_addr_t(__pyx_f_11cbytesparse_2_c_Memory_ContentSpan(__pyx_v_self->_)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6947, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6948: 
 6949:     @property
+6950:     def content_endin(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_13content_endin_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_13content_endin_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_13content_endin___get__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_13content_endin___get__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.content_endin.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 6951:         self: Memory,
 6952:     ) -> Address:
 6953:         r"""int: Inclusive content end address.
 6954: 
 6955:         This property holds the inclusive end address of the memory content.
 6956:         By default, it is the current maximmum inclusive end address of
 6957:         the last stored block.
 6958: 
 6959:         If the memory has no data and no trimming, :attr:`start` minus one is
 6960:         returned.
 6961: 
 6962:         Trimming is considered only for an empty memory.
 6963: 
 6964:         Examples:
 6965:             >>> Memory().content_endin
 6966:             -1
 6967:             >>> Memory(endex=8).content_endin
 6968:             -1
 6969:             >>> Memory(start=1, endex=8).content_endin
 6970:             0
 6971: 
 6972:             ~~~
 6973: 
 6974:             +---+---+---+---+---+---+---+---+---+
 6975:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 6976:             +===+===+===+===+===+===+===+===+===+
 6977:             |   |[A | B | C]|   |[x | y | z]|   |
 6978:             +---+---+---+---+---+---+---+---+---+
 6979: 
 6980:             >>> memory = Memory.from_blocks([[1, b'ABC'], [5, b'xyz']])
 6981:             >>> memory.content_endin
 6982:             7
 6983: 
 6984:             ~~~
 6985: 
 6986:             +---+---+---+---+---+---+---+---+---+
 6987:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 6988:             +===+===+===+===+===+===+===+===+===+
 6989:             |   |[A | B | C]|   |   |   |   |)))|
 6990:             +---+---+---+---+---+---+---+---+---+
 6991: 
 6992:             >>> memory = Memory.from_blocks([[1, b'ABC']], endex=8)
 6993:             >>> memory.content_endin
 6994:             3
 6995:         """
 6996: 
+6997:         return Memory_ContentEndin(self._)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_ContentEndin(__pyx_v_self->_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 6997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 6998: 
 6999:     @property
+7000:     def content_size(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_12content_size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_12content_size_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_12content_size___get__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_12content_size___get__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.content_size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 7001:         self: Memory,
 7002:     ) -> Address:
 7003:         r"""Actual content size.
 7004: 
 7005:         Returns:
 7006:             int: The sum of all block lengths.
 7007: 
 7008:         Examples:
 7009:             >>> Memory().content_size
 7010:             0
 7011:             >>> Memory(start=1, endex=8).content_size
 7012:             0
 7013: 
 7014:             ~~~
 7015: 
 7016:             +---+---+---+---+---+---+---+---+---+
 7017:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 7018:             +===+===+===+===+===+===+===+===+===+
 7019:             |   |[A | B | C]|   |[x | y | z]|   |
 7020:             +---+---+---+---+---+---+---+---+---+
 7021: 
 7022:             >>> memory = Memory.from_blocks([[1, b'ABC'], [5, b'xyz']])
 7023:             >>> memory.content_size
 7024:             6
 7025: 
 7026:             ~~~
 7027: 
 7028:             +---+---+---+---+---+---+---+---+---+
 7029:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 7030:             +===+===+===+===+===+===+===+===+===+
 7031:             |   |[A | B | C]|   |   |   |   |)))|
 7032:             +---+---+---+---+---+---+---+---+---+
 7033: 
 7034:             >>> memory = Memory.from_blocks([[1, b'ABC']], endex=8)
 7035:             >>> memory.content_size
 7036:             3
 7037:         """
 7038: 
+7039:         return Memory_ContentSize(self._)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_uint_fast64_t(__pyx_f_11cbytesparse_2_c_Memory_ContentSize(__pyx_v_self->_)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7039, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 7040: 
 7041:     @property
+7042:     def content_parts(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_13content_parts_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_13content_parts_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_13content_parts___get__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_13content_parts___get__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.content_parts.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 7043:         self: Memory,
 7044:     ) -> int:
 7045:         r"""Number of blocks.
 7046: 
 7047:         Returns:
 7048:             int: The number of blocks.
 7049: 
 7050:         Examples:
 7051:             >>> Memory().content_parts
 7052:             0
 7053: 
 7054:             ~~~
 7055: 
 7056:             +---+---+---+---+---+---+---+---+---+
 7057:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 7058:             +===+===+===+===+===+===+===+===+===+
 7059:             |   |[A | B | C]|   |[x | y | z]|   |
 7060:             +---+---+---+---+---+---+---+---+---+
 7061: 
 7062:             >>> memory = Memory.from_blocks([[1, b'ABC'], [5, b'xyz']])
 7063:             >>> memory.content_parts
 7064:             2
 7065: 
 7066:             ~~~
 7067: 
 7068:             +---+---+---+---+---+---+---+---+---+
 7069:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 7070:             +===+===+===+===+===+===+===+===+===+
 7071:             |   |[A | B | C]|   |   |   |   |)))|
 7072:             +---+---+---+---+---+---+---+---+---+
 7073: 
 7074:             >>> memory = Memory.from_blocks([[1, b'ABC']], endex=8)
 7075:             >>> memory.content_parts
 7076:             1
 7077:         """
 7078: 
+7079:         return Memory_ContentParts(self._)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_FromSize_t(__pyx_f_11cbytesparse_2_c_Memory_ContentParts(__pyx_v_self->_)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7079, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 7080: 
+7081:     def validate(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_77validate(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_76validate[] = "Memory.validate(self: Memory) -> None\nValidates internal structure.\n\n        It makes sure that all the allocated blocks are sorted by block start\n        address, and that all the blocks are non-overlapping.\n\n        Raises:\n            :obj:`ValueError`: Invalid data detected (see exception message).\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_77validate = {"validate", (PyCFunction)__pyx_pw_11cbytesparse_2_c_6Memory_77validate, METH_NOARGS, __pyx_doc_11cbytesparse_2_c_6Memory_76validate};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_77validate(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_76validate(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_76validate(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("validate", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.validate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__110 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__110)) __PYX_ERR(0, 7081, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__110);
  __Pyx_GIVEREF(__pyx_tuple__110);
/* … */
  __pyx_t_6 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7081, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7081, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_77validate, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_validate, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__111)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7081, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_validate, __pyx_t_2) < 0) __PYX_ERR(0, 7081, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__111 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__110, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_validate, 7081, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__111)) __PYX_ERR(0, 7081, __pyx_L1_error)
 7082:         self: Memory,
+7083:     ) -> None:
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return, Py_None) < 0) __PYX_ERR(0, 7081, __pyx_L1_error)
 7084:         r"""Validates internal structure.
 7085: 
 7086:         It makes sure that all the allocated blocks are sorted by block start
 7087:         address, and that all the blocks are non-overlapping.
 7088: 
 7089:         Raises:
 7090:             :obj:`ValueError`: Invalid data detected (see exception message).
 7091:         """
 7092: 
+7093:         Memory_Validate(self._)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Validate(__pyx_v_self->_); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 7093, __pyx_L1_error)
 7094: 
+7095:     def bound(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_79bound(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_78bound[] = "Memory.bound(self: Memory, start: Optional[Address], endex: Optional[Address]) -> ClosedInterval\nBounds addresses.\n\n        It bounds the given addresses to stay within memory limits.\n        ``None`` is used to ignore a limit for the `start` or `endex`\n        directions.\n\n        In case of stored data, :attr:`content_start` and\n        :attr:`content_endex` are used as bounds.\n\n        In case of trimming limits, :attr:`trim_start` or :attr:`trim_endex`\n        are used as bounds, when not ``None``.\n\n        In case `start` and `endex` are in the wrong order, one clamps\n        the other if present (see the Python implementation for details).\n\n        Returns:\n            tuple of int: Bounded `start` and `endex`, closed interval.\n\n        Examples:\n            >>> Memory().bound()\n            (0, 0)\n            >>> Memory().bound(endex=100)\n            (0, 0)\n\n            ~~~\n\n            +---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |\n            +===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABC'], [5, b'xyz']])\n            >>> memory.bound(0, 30)\n            (1, 8)\n            >>> memory.bound(2, 6)\n            (2, 6)\n            >>> memory.bound(endex=6)\n            (1, 6)\n            >>> memory.bound(start=2)\n            (2, 8)\n\n            ~~~\n\n            +---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |\n            +===+===+===+===+===+===+===+===+===+\n            |   |[[[|   |[A | B | C]|   |   |)))|\n            +---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[3, b'ABC']], start=1, endex=8)\n            >>> memory.bound()\n            (1, 8)\n            >>> memory.bound(0, 30)\n            (1, 8)\n            >>> memory.bound(2, 6)\n            (2, 6"")\n            >>> memory.bound(start=2)\n            (2, 8)\n            >>> memory.bound(endex=6)\n            (1, 6)\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_79bound = {"bound", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_79bound, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_78bound};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_79bound(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bound (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_start,&__pyx_n_s_endex,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("bound", 1, 2, 2, 1); __PYX_ERR(0, 7095, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "bound") < 0)) __PYX_ERR(0, 7095, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_start = values[0];
    __pyx_v_endex = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("bound", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7095, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.bound", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_78bound(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_start, __pyx_v_endex);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_78bound(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("bound", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Memory.bound", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__112 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_start, __pyx_n_s_endex); if (unlikely(!__pyx_tuple__112)) __PYX_ERR(0, 7095, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__112);
  __Pyx_GIVEREF(__pyx_tuple__112);
/* … */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7095, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7095, __pyx_L1_error)
/* … */
  __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_79bound, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_bound, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__113)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7095, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_bound, __pyx_t_6) < 0) __PYX_ERR(0, 7095, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__113 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__112, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_bound, 7095, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__113)) __PYX_ERR(0, 7095, __pyx_L1_error)
 7096:         self: Memory,
+7097:         start: Optional[Address],
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7097, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7097, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7097, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_start, __pyx_t_5) < 0) __PYX_ERR(0, 7095, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+7098:         endex: Optional[Address],
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_endex, __pyx_t_6) < 0) __PYX_ERR(0, 7095, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+7099:     ) -> ClosedInterval:
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_ClosedInterval); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7099, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_t_6) < 0) __PYX_ERR(0, 7095, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 7100:         r"""Bounds addresses.
 7101: 
 7102:         It bounds the given addresses to stay within memory limits.
 7103:         ``None`` is used to ignore a limit for the `start` or `endex`
 7104:         directions.
 7105: 
 7106:         In case of stored data, :attr:`content_start` and
 7107:         :attr:`content_endex` are used as bounds.
 7108: 
 7109:         In case of trimming limits, :attr:`trim_start` or :attr:`trim_endex`
 7110:         are used as bounds, when not ``None``.
 7111: 
 7112:         In case `start` and `endex` are in the wrong order, one clamps
 7113:         the other if present (see the Python implementation for details).
 7114: 
 7115:         Returns:
 7116:             tuple of int: Bounded `start` and `endex`, closed interval.
 7117: 
 7118:         Examples:
 7119:             >>> Memory().bound()
 7120:             (0, 0)
 7121:             >>> Memory().bound(endex=100)
 7122:             (0, 0)
 7123: 
 7124:             ~~~
 7125: 
 7126:             +---+---+---+---+---+---+---+---+---+
 7127:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 7128:             +===+===+===+===+===+===+===+===+===+
 7129:             |   |[A | B | C]|   |[x | y | z]|   |
 7130:             +---+---+---+---+---+---+---+---+---+
 7131: 
 7132:             >>> memory = Memory.from_blocks([[1, b'ABC'], [5, b'xyz']])
 7133:             >>> memory.bound(0, 30)
 7134:             (1, 8)
 7135:             >>> memory.bound(2, 6)
 7136:             (2, 6)
 7137:             >>> memory.bound(endex=6)
 7138:             (1, 6)
 7139:             >>> memory.bound(start=2)
 7140:             (2, 8)
 7141: 
 7142:             ~~~
 7143: 
 7144:             +---+---+---+---+---+---+---+---+---+
 7145:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
 7146:             +===+===+===+===+===+===+===+===+===+
 7147:             |   |[[[|   |[A | B | C]|   |   |)))|
 7148:             +---+---+---+---+---+---+---+---+---+
 7149: 
 7150:             >>> memory = Memory.from_blocks([[3, b'ABC']], start=1, endex=8)
 7151:             >>> memory.bound()
 7152:             (1, 8)
 7153:             >>> memory.bound(0, 30)
 7154:             (1, 8)
 7155:             >>> memory.bound(2, 6)
 7156:             (2, 6)
 7157:             >>> memory.bound(start=2)
 7158:             (2, 8)
 7159:             >>> memory.bound(endex=6)
 7160:             (1, 6)
 7161:         """
 7162: 
+7163:         return Memory_Bound(self._, start, endex)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Bound(__pyx_v_self->_, __pyx_v_start, __pyx_v_endex); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 7163, __pyx_L1_error)
  __pyx_t_2 = __pyx_convert__to_py___pyx_ctuple_addr_t__and_addr_t(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;
 7164: 
+7165:     def _block_index_at(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_81_block_index_at(PyObject *__pyx_v_self, PyObject *__pyx_v_address); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_80_block_index_at[] = "Memory._block_index_at(self: Memory, address: Address) -> Optional[BlockIndex]\nLocates the block enclosing an address.\n\n        Returns the index of the block enclosing the given address.\n\n        Arguments:\n            address (int):\n                Address of the target item.\n\n        Returns:\n            int: Block index if found, ``None`` otherwise.\n\n        Example:\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|\n            +===+===+===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            |   | 0 | 0 | 0 | 0 |   | 1 |   | 2 | 2 | 2 |   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])\n            >>> [memory._block_index_at(i) for i in range(12)]\n            [None, 0, 0, 0, 0, None, 1, None, 2, 2, 2, None]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_81_block_index_at = {"_block_index_at", (PyCFunction)__pyx_pw_11cbytesparse_2_c_6Memory_81_block_index_at, METH_O, __pyx_doc_11cbytesparse_2_c_6Memory_80_block_index_at};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_81_block_index_at(PyObject *__pyx_v_self, PyObject *__pyx_v_address) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_block_index_at (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_80_block_index_at(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_address));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_80_block_index_at(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_address) {
  Py_ssize_t __pyx_v_block_index;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_block_index_at", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("cbytesparse._c.Memory._block_index_at", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__114 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_address, __pyx_n_s_block_index); if (unlikely(!__pyx_tuple__114)) __PYX_ERR(0, 7165, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__114);
  __Pyx_GIVEREF(__pyx_tuple__114);
/* … */
  __pyx_t_6 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7165, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7165, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_81_block_index_at, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory__block_index_at, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__115)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7165, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_block_index_at, __pyx_t_5) < 0) __PYX_ERR(0, 7165, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__115 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__114, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_block_index_at, 7165, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__115)) __PYX_ERR(0, 7165, __pyx_L1_error)
 7166:         self: Memory,
+7167:         address: Address,
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7167, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_address, __pyx_t_2) < 0) __PYX_ERR(0, 7165, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7168:     ) -> Optional[BlockIndex]:
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_BlockIndex); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return, __pyx_t_5) < 0) __PYX_ERR(0, 7165, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 7169:         r"""Locates the block enclosing an address.
 7170: 
 7171:         Returns the index of the block enclosing the given address.
 7172: 
 7173:         Arguments:
 7174:             address (int):
 7175:                 Address of the target item.
 7176: 
 7177:         Returns:
 7178:             int: Block index if found, ``None`` otherwise.
 7179: 
 7180:         Example:
 7181:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7182:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
 7183:             +===+===+===+===+===+===+===+===+===+===+===+===+
 7184:             |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |
 7185:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7186:             |   | 0 | 0 | 0 | 0 |   | 1 |   | 2 | 2 | 2 |   |
 7187:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7188: 
 7189:             >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])
 7190:             >>> [memory._block_index_at(i) for i in range(12)]
 7191:             [None, 0, 0, 0, 0, None, 1, None, 2, 2, 2, None]
 7192:         """
 7193:         cdef:
 7194:             ssize_t block_index
 7195: 
+7196:         block_index = Rack_IndexAt(self._.blocks, address)
  __pyx_t_1 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_address); if (unlikely((__pyx_t_1 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7196, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_IndexAt(__pyx_v_self->_->blocks, __pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 7196, __pyx_L1_error)
  __pyx_v_block_index = __pyx_t_2;
+7197:         return None if block_index < 0 else block_index
  __Pyx_XDECREF(__pyx_r);
  if (((__pyx_v_block_index < 0) != 0)) {
    __Pyx_INCREF(Py_None);
    __pyx_t_3 = Py_None;
  } else {
    __pyx_t_4 = PyInt_FromSsize_t(__pyx_v_block_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7197, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 7198: 
+7199:     def _block_index_start(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_83_block_index_start(PyObject *__pyx_v_self, PyObject *__pyx_v_address); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_82_block_index_start[] = "Memory._block_index_start(self: Memory, address: Address) -> BlockIndex\nLocates the first block inside of an address range.\n\n        Returns the index of the first block whose start address is greater than\n        or equal to `address`.\n\n        Useful to find the initial block index in a ranged search.\n\n        Arguments:\n            address (int):\n                Inclusive start address of the scanned range.\n\n        Returns:\n            int: First block index since `address`.\n\n        Example:\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|\n            +===+===+===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 2 | 2 | 2 | 2 | 3 |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])\n            >>> [memory._block_index_start(i) for i in range(12)]\n            [0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 3]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_83_block_index_start = {"_block_index_start", (PyCFunction)__pyx_pw_11cbytesparse_2_c_6Memory_83_block_index_start, METH_O, __pyx_doc_11cbytesparse_2_c_6Memory_82_block_index_start};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_83_block_index_start(PyObject *__pyx_v_self, PyObject *__pyx_v_address) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_block_index_start (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_82_block_index_start(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_address));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_82_block_index_start(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_address) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_block_index_start", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Memory._block_index_start", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__116 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_address); if (unlikely(!__pyx_tuple__116)) __PYX_ERR(0, 7199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__116);
  __Pyx_GIVEREF(__pyx_tuple__116);
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7199, __pyx_L1_error)
/* … */
  __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_83_block_index_start, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory__block_index_start, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__117)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7199, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_block_index_start, __pyx_t_6) < 0) __PYX_ERR(0, 7199, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__117 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__116, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_block_index_start, 7199, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__117)) __PYX_ERR(0, 7199, __pyx_L1_error)
 7200:         self: Memory,
+7201:         address: Address,
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Address); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_address, __pyx_t_6) < 0) __PYX_ERR(0, 7199, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+7202:     ) -> BlockIndex:
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_BlockIndex); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_t_6) < 0) __PYX_ERR(0, 7199, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 7203:         r"""Locates the first block inside of an address range.
 7204: 
 7205:         Returns the index of the first block whose start address is greater than
 7206:         or equal to `address`.
 7207: 
 7208:         Useful to find the initial block index in a ranged search.
 7209: 
 7210:         Arguments:
 7211:             address (int):
 7212:                 Inclusive start address of the scanned range.
 7213: 
 7214:         Returns:
 7215:             int: First block index since `address`.
 7216: 
 7217:         Example:
 7218:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7219:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
 7220:             +===+===+===+===+===+===+===+===+===+===+===+===+
 7221:             |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |
 7222:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7223:             | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 2 | 2 | 2 | 2 | 3 |
 7224:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7225: 
 7226:             >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])
 7227:             >>> [memory._block_index_start(i) for i in range(12)]
 7228:             [0, 0, 0, 0, 0, 1, 1, 2, 2, 2, 2, 3]
 7229:         """
 7230: 
+7231:         return Rack_IndexStart(self._.blocks, address)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_address); if (unlikely((__pyx_t_1 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7231, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_IndexStart(__pyx_v_self->_->blocks, __pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 7231, __pyx_L1_error)
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7231, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 7232: 
+7233:     def _block_index_endex(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_85_block_index_endex(PyObject *__pyx_v_self, PyObject *__pyx_v_address); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_84_block_index_endex[] = "Memory._block_index_endex(self: Memory, address: Address) -> BlockIndex\nLocates the first block after an address range.\n\n        Returns the index of the first block whose end address is lesser than or\n        equal to `address`.\n\n        Useful to find the termination block index in a ranged search.\n\n        Arguments:\n            address (int):\n                Exclusive end address of the scanned range.\n\n        Returns:\n            int: First block index after `address`.\n\n        Example:\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|\n            +===+===+===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 3 | 3 | 3 | 3 |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])\n            >>> [memory._block_index_endex(i) for i in range(12)]\n            [0, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_85_block_index_endex = {"_block_index_endex", (PyCFunction)__pyx_pw_11cbytesparse_2_c_6Memory_85_block_index_endex, METH_O, __pyx_doc_11cbytesparse_2_c_6Memory_84_block_index_endex};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_85_block_index_endex(PyObject *__pyx_v_self, PyObject *__pyx_v_address) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_block_index_endex (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_84_block_index_endex(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_address));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_84_block_index_endex(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_address) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("_block_index_endex", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("cbytesparse._c.Memory._block_index_endex", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__118 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_address); if (unlikely(!__pyx_tuple__118)) __PYX_ERR(0, 7233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__118);
  __Pyx_GIVEREF(__pyx_tuple__118);
/* … */
  __pyx_t_6 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7233, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_85_block_index_endex, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory__block_index_endex, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__119)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7233, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_block_index_endex, __pyx_t_5) < 0) __PYX_ERR(0, 7233, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__119 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__118, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_block_index_endex, 7233, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__119)) __PYX_ERR(0, 7233, __pyx_L1_error)
 7234:         self: Memory,
+7235:         address: Address,
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Address); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7235, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_address, __pyx_t_5) < 0) __PYX_ERR(0, 7233, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+7236:     ) -> BlockIndex:
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_BlockIndex); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7236, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return, __pyx_t_5) < 0) __PYX_ERR(0, 7233, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 7237:         r"""Locates the first block after an address range.
 7238: 
 7239:         Returns the index of the first block whose end address is lesser than or
 7240:         equal to `address`.
 7241: 
 7242:         Useful to find the termination block index in a ranged search.
 7243: 
 7244:         Arguments:
 7245:             address (int):
 7246:                 Exclusive end address of the scanned range.
 7247: 
 7248:         Returns:
 7249:             int: First block index after `address`.
 7250: 
 7251:         Example:
 7252:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7253:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
 7254:             +===+===+===+===+===+===+===+===+===+===+===+===+
 7255:             |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |
 7256:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7257:             | 0 | 1 | 1 | 1 | 1 | 1 | 2 | 2 | 3 | 3 | 3 | 3 |
 7258:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7259: 
 7260:             >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])
 7261:             >>> [memory._block_index_endex(i) for i in range(12)]
 7262:             [0, 1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3]
 7263:         """
 7264: 
+7265:         return Rack_IndexEndex(self._.blocks, address)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_address); if (unlikely((__pyx_t_1 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7265, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Rack_IndexEndex(__pyx_v_self->_->blocks, __pyx_t_1); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 7265, __pyx_L1_error)
  __pyx_t_3 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7265, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;
 7266: 
+7267:     def peek(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_87peek(PyObject *__pyx_v_self, PyObject *__pyx_v_address); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_86peek[] = "Memory.peek(self: Memory, address: Address) -> Optional[Value]\nGets the item at an address.\n\n        Returns:\n            int: The item at `address`, ``None`` if empty.\n\n        Examples:\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|\n            +===+===+===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])\n            >>> memory.peek(3)  # -> ord('C') = 67\n            67\n            >>> memory.peek(6)  # -> ord('$') = 36\n            36\n            >>> memory.peek(10)  # -> ord('z') = 122\n            122\n            >>> memory.peek(0)\n            None\n            >>> memory.peek(7)\n            None\n            >>> memory.peek(11)\n            None\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_87peek = {"peek", (PyCFunction)__pyx_pw_11cbytesparse_2_c_6Memory_87peek, METH_O, __pyx_doc_11cbytesparse_2_c_6Memory_86peek};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_87peek(PyObject *__pyx_v_self, PyObject *__pyx_v_address) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("peek (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_86peek(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_address));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_86peek(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_address) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("peek", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.peek", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__120 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_address); if (unlikely(!__pyx_tuple__120)) __PYX_ERR(0, 7267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__120);
  __Pyx_GIVEREF(__pyx_tuple__120);
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7267, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_87peek, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_peek, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__121)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_peek, __pyx_t_2) < 0) __PYX_ERR(0, 7267, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__121 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__120, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_peek, 7267, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__121)) __PYX_ERR(0, 7267, __pyx_L1_error)
 7268:         self: Memory,
+7269:         address: Address,
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Address); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7269, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_address, __pyx_t_6) < 0) __PYX_ERR(0, 7267, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+7270:     ) -> Optional[Value]:
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7270, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_t_2) < 0) __PYX_ERR(0, 7267, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 7271:         r"""Gets the item at an address.
 7272: 
 7273:         Returns:
 7274:             int: The item at `address`, ``None`` if empty.
 7275: 
 7276:         Examples:
 7277:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7278:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
 7279:             +===+===+===+===+===+===+===+===+===+===+===+===+
 7280:             |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |
 7281:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7282: 
 7283:             >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])
 7284:             >>> memory.peek(3)  # -> ord('C') = 67
 7285:             67
 7286:             >>> memory.peek(6)  # -> ord('$') = 36
 7287:             36
 7288:             >>> memory.peek(10)  # -> ord('z') = 122
 7289:             122
 7290:             >>> memory.peek(0)
 7291:             None
 7292:             >>> memory.peek(7)
 7293:             None
 7294:             >>> memory.peek(11)
 7295:             None
 7296:         """
 7297: 
+7298:         return Memory_Peek(self._, address)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Peek(__pyx_v_self->_, __pyx_v_address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 7299: 
+7300:     def poke(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_89poke(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_88poke[] = "Memory.poke(self: Memory, address: Address, item: Optional[Union[AnyBytes, Value]]) -> Optional[Value]\nSets the item at an address.\n\n        Arguments:\n            address (int):\n                Address of the target item.\n\n            item (int or byte):\n                Item to set, ``None`` to clear the cell.\n\n        Returns:\n            int: The previous item at `address`, ``None`` if empty.\n\n        Examples:\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|\n            +===+===+===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])\n            >>> memory.poke(3, b'@')  # -> ord('C') = 67\n            67\n            >>> memory.peek(3)  # -> ord('@') = 64\n            64\n            >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])\n            >>> memory.poke(5, '@')\n            None\n            >>> memory.peek(5)  # -> ord('@') = 64\n            64\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_89poke = {"poke", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_89poke, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_88poke};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_89poke(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_address = 0;
  PyObject *__pyx_v_item = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("poke (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_address,&__pyx_n_s_item,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_address)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_item)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("poke", 1, 2, 2, 1); __PYX_ERR(0, 7300, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "poke") < 0)) __PYX_ERR(0, 7300, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_address = values[0];
    __pyx_v_item = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("poke", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7300, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.poke", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_88poke(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_address, __pyx_v_item);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_88poke(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_address, PyObject *__pyx_v_item) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("poke", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory.poke", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__122 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_address, __pyx_n_s_item); if (unlikely(!__pyx_tuple__122)) __PYX_ERR(0, 7300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__122);
  __Pyx_GIVEREF(__pyx_tuple__122);
/* … */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7300, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_89poke, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_poke, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__123)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7300, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_poke, __pyx_t_5) < 0) __PYX_ERR(0, 7300, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__123 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__122, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_poke, 7300, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__123)) __PYX_ERR(0, 7300, __pyx_L1_error)
 7301:         self: Memory,
+7302:         address: Address,
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Address); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7302, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_address, __pyx_t_5) < 0) __PYX_ERR(0, 7300, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+7303:         item: Optional[Union[AnyBytes, Value]],
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Union); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_6 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_item, __pyx_t_4) < 0) __PYX_ERR(0, 7300, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+7304:     ) -> Optional[Value]:
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Optional); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_t_5) < 0) __PYX_ERR(0, 7300, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 7305:         r"""Sets the item at an address.
 7306: 
 7307:         Arguments:
 7308:             address (int):
 7309:                 Address of the target item.
 7310: 
 7311:             item (int or byte):
 7312:                 Item to set, ``None`` to clear the cell.
 7313: 
 7314:         Returns:
 7315:             int: The previous item at `address`, ``None`` if empty.
 7316: 
 7317:         Examples:
 7318:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7319:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
 7320:             +===+===+===+===+===+===+===+===+===+===+===+===+
 7321:             |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |
 7322:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7323: 
 7324:             >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])
 7325:             >>> memory.poke(3, b'@')  # -> ord('C') = 67
 7326:             67
 7327:             >>> memory.peek(3)  # -> ord('@') = 64
 7328:             64
 7329:             >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])
 7330:             >>> memory.poke(5, '@')
 7331:             None
 7332:             >>> memory.peek(5)  # -> ord('@') = 64
 7333:             64
 7334:         """
 7335: 
+7336:         return Memory_Poke(self._, address, item)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Poke(__pyx_v_self->_, __pyx_v_address, __pyx_v_item); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;
 7337: 
+7338:     def extract(
/* Python wrapper */
static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pw_11cbytesparse_2_c_6Memory_91extract(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_90extract[] = "Memory.extract(self: Memory, start: Optional[Address] = None, endex: Optional[Address] = None, pattern: Optional[Union[AnyBytes, Value]] = None, step: Optional[Address] = None, bound: bool = True) -> Memory\nSelects items from a range.\n\n        Arguments:\n            start (int):\n                Inclusive start of the extracted range.\n                If ``None``, :attr:`start` is considered.\n\n            endex (int):\n                Exclusive end of the extracted range.\n                If ``None``, :attr:`endex` is considered.\n\n            pattern (items):\n                Optional pattern of items to fill the emptiness.\n\n            step (int):\n                Optional address stepping between bytes extracted from the\n                range. It has the same meaning of Python's :attr:`slice.step`,\n                but negative steps are ignored.\n                Please note that a `step` greater than 1 could take much more\n                time to process than the default unitary step.\n\n            bound (bool):\n                The selected address range is applied to the resulting memory\n                as its trimming range. This retains information about any\n                initial and final emptiness of that range, which would be lost\n                otherwise.\n\n        Returns:\n            :obj:`Memory`: A copy of the memory from the selected range.\n\n        Examples:\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|\n            +===+===+===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])\n            >>> memory.extract()._blocks\n            [[1, b'ABCD'], [6, b'$'], [8, b'xyz']]\n            >>> memory.extract(2, 9)._blocks\n            [[2, b'BCD'], [6, b'$'],"" [8, b'x']]\n            >>> memory.extract(start=2)._blocks\n            [[2, b'BCD'], [6, b'$'], [8, b'xyz']]\n            >>> memory.extract(endex=9)._blocks\n            [[1, b'ABCD'], [6, b'$'], [8, b'x']]\n            >>> memory.extract(5, 8).span\n            (5, 8)\n            >>> memory.extract(pattern='.')._blocks\n            [[1, b'ABCD.$.xyz']]\n            >>> memory.extract(pattern='.', step=3)._blocks\n            [[1, b'AD.z']]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_91extract = {"extract", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_91extract, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_90extract};
static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pw_11cbytesparse_2_c_6Memory_91extract(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_v_pattern = 0;
  PyObject *__pyx_v_step = 0;
  PyObject *__pyx_v_bound = 0;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("extract (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_start,&__pyx_n_s_endex,&__pyx_n_s_pattern,&__pyx_n_s_step,&__pyx_n_s_bound,0};
    PyObject* values[5] = {0,0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_pf_11cbytesparse_2_c_6Memory_90extract(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_pattern, PyObject *__pyx_v_step, PyObject *__pyx_v_bound) {
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("extract", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("cbytesparse._c.Memory.extract", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__124 = PyTuple_Pack(6, __pyx_n_s_self, __pyx_n_s_start, __pyx_n_s_endex, __pyx_n_s_pattern, __pyx_n_s_step, __pyx_n_s_bound); if (unlikely(!__pyx_tuple__124)) __PYX_ERR(0, 7338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__124);
  __Pyx_GIVEREF(__pyx_tuple__124);
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7338, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_91extract, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_extract, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__125)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7338, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_extract, __pyx_t_2) < 0) __PYX_ERR(0, 7338, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__125 = (PyObject*)__Pyx_PyCode_New(6, 0, 6, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__124, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_extract, 7338, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__125)) __PYX_ERR(0, 7338, __pyx_L1_error)
 7339:         self: Memory,
+7340:         start: Optional[Address] = None,
    values[0] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7340, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_start, __pyx_t_4) < 0) __PYX_ERR(0, 7338, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+7341:         endex: Optional[Address] = None,
    values[1] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Optional); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7341, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_endex, __pyx_t_2) < 0) __PYX_ERR(0, 7338, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7342:         pattern: Optional[Union[AnyBytes, Value]] = None,
    values[2] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Union); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
  __pyx_t_4 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7342, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_pattern, __pyx_t_6) < 0) __PYX_ERR(0, 7338, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+7343:         step: Optional[Address] = None,
    values[3] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7343, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_step, __pyx_t_2) < 0) __PYX_ERR(0, 7338, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7344:         bound: bool = True,
    values[4] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pattern);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_step);
          if (value) { values[3] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bound);
          if (value) { values[4] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "extract") < 0)) __PYX_ERR(0, 7338, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_start = values[0];
    __pyx_v_endex = values[1];
    __pyx_v_pattern = values[2];
    __pyx_v_step = values[3];
    __pyx_v_bound = values[4];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("extract", 0, 0, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7338, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.extract", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_90extract(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_start, __pyx_v_endex, __pyx_v_pattern, __pyx_v_step, __pyx_v_bound);
/* … */
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_bound, ((PyObject*)&PyBool_Type)) < 0) __PYX_ERR(0, 7338, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7338, __pyx_L1_error)
 7345:     ) -> Memory:
 7346:         r"""Selects items from a range.
 7347: 
 7348:         Arguments:
 7349:             start (int):
 7350:                 Inclusive start of the extracted range.
 7351:                 If ``None``, :attr:`start` is considered.
 7352: 
 7353:             endex (int):
 7354:                 Exclusive end of the extracted range.
 7355:                 If ``None``, :attr:`endex` is considered.
 7356: 
 7357:             pattern (items):
 7358:                 Optional pattern of items to fill the emptiness.
 7359: 
 7360:             step (int):
 7361:                 Optional address stepping between bytes extracted from the
 7362:                 range. It has the same meaning of Python's :attr:`slice.step`,
 7363:                 but negative steps are ignored.
 7364:                 Please note that a `step` greater than 1 could take much more
 7365:                 time to process than the default unitary step.
 7366: 
 7367:             bound (bool):
 7368:                 The selected address range is applied to the resulting memory
 7369:                 as its trimming range. This retains information about any
 7370:                 initial and final emptiness of that range, which would be lost
 7371:                 otherwise.
 7372: 
 7373:         Returns:
 7374:             :obj:`Memory`: A copy of the memory from the selected range.
 7375: 
 7376:         Examples:
 7377:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7378:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
 7379:             +===+===+===+===+===+===+===+===+===+===+===+===+
 7380:             |   |[A | B | C | D]|   |[$]|   |[x | y | z]|   |
 7381:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7382: 
 7383:             >>> memory = Memory.from_blocks([[1, b'ABCD'], [6, b'$'], [8, b'xyz']])
 7384:             >>> memory.extract()._blocks
 7385:             [[1, b'ABCD'], [6, b'$'], [8, b'xyz']]
 7386:             >>> memory.extract(2, 9)._blocks
 7387:             [[2, b'BCD'], [6, b'$'], [8, b'x']]
 7388:             >>> memory.extract(start=2)._blocks
 7389:             [[2, b'BCD'], [6, b'$'], [8, b'xyz']]
 7390:             >>> memory.extract(endex=9)._blocks
 7391:             [[1, b'ABCD'], [6, b'$'], [8, b'x']]
 7392:             >>> memory.extract(5, 8).span
 7393:             (5, 8)
 7394:             >>> memory.extract(pattern='.')._blocks
 7395:             [[1, b'ABCD.$.xyz']]
 7396:             >>> memory.extract(pattern='.', step=3)._blocks
 7397:             [[1, b'AD.z']]
 7398:         """
 7399: 
+7400:         return Memory_Extract(self._, start, endex, pattern, step, bound)
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_bound); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7400, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_Extract(__pyx_v_self->_, __pyx_v_start, __pyx_v_endex, __pyx_v_pattern, __pyx_v_step, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7400, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_11cbytesparse_2_c_Memory))))) __PYX_ERR(0, 7400, __pyx_L1_error)
  __pyx_r = ((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;
 7401: 
+7402:     def shift(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_93shift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_92shift[] = "Memory.shift(self: Memory, offset: Address, backups: Optional[MemoryList] = None) -> None\nShifts the items.\n\n        Arguments:\n            offset (int):\n                Signed amount of address shifting.\n\n            backups (list of :obj:`Memory`):\n                Optional output list holding backup copies of the deleted\n                items, before trimming.\n\n        Examples:\n            +---+---+---+---+---+---+---+---+---+---+---+\n            | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12|\n            +===+===+===+===+===+===+===+===+===+===+===+\n            |   |   |   |[A | B | C]|   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+\n            |   |[A | B | C]|   |[x | y | z]|   |   |   |\n            +---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[5, b'ABC'], [9, b'xyz']])\n            >>> memory.shift(-2)\n            >>> memory._blocks\n            [[3, b'ABC'], [7, b'xyz']]\n\n            ~~~\n\n            +---+---+---+---+---+---+---+---+---+---+---+\n            | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12|\n            +===+===+===+===+===+===+===+===+===+===+===+\n            |   |[[[|   |[A | B | C]|   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+\n            |   |[y | z]|   |   |   |   |   |   |   |   |\n            +---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[5, b'ABC'], [9, b'xyz']], start=2)\n            >>> backups = []\n            >>> memory.shift(-7, backups=backups)\n            >>> memory._blocks\n            [[2, b'yz']]\n            >>> len(backups)\n            1\n            >>> backups[0]._blocks\n            [[5, b'ABC'], [9, b'x']]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_93shift = {"shift", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_93shift, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_92shift};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_93shift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_offset = 0;
  PyObject *__pyx_v_backups = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shift (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_offset,&__pyx_n_s_backups,0};
    PyObject* values[2] = {0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_92shift(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_offset, PyObject *__pyx_v_backups) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("shift", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.shift", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__126 = PyTuple_Pack(3, __pyx_n_s_self, __pyx_n_s_offset, __pyx_n_s_backups); if (unlikely(!__pyx_tuple__126)) __PYX_ERR(0, 7402, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__126);
  __Pyx_GIVEREF(__pyx_tuple__126);
/* … */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7402, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7402, __pyx_L1_error)
/* … */
  __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_93shift, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_shift, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__127)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7402, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_shift, __pyx_t_6) < 0) __PYX_ERR(0, 7402, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__127 = (PyObject*)__Pyx_PyCode_New(3, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__126, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_shift, 7402, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__127)) __PYX_ERR(0, 7402, __pyx_L1_error)
 7403:         self: Memory,
+7404:         offset: Address,
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Address); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7404, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_offset, __pyx_t_5) < 0) __PYX_ERR(0, 7402, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+7405:         backups: Optional[MemoryList] = None,
    values[1] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_backups);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "shift") < 0)) __PYX_ERR(0, 7402, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_offset = values[0];
    __pyx_v_backups = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("shift", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7402, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.shift", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_92shift(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_offset, __pyx_v_backups);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7405, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_MemoryList); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7405, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7405, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_backups, __pyx_t_6) < 0) __PYX_ERR(0, 7402, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+7406:     ) -> None:
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, Py_None) < 0) __PYX_ERR(0, 7402, __pyx_L1_error)
 7407:         r"""Shifts the items.
 7408: 
 7409:         Arguments:
 7410:             offset (int):
 7411:                 Signed amount of address shifting.
 7412: 
 7413:             backups (list of :obj:`Memory`):
 7414:                 Optional output list holding backup copies of the deleted
 7415:                 items, before trimming.
 7416: 
 7417:         Examples:
 7418:             +---+---+---+---+---+---+---+---+---+---+---+
 7419:             | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12|
 7420:             +===+===+===+===+===+===+===+===+===+===+===+
 7421:             |   |   |   |[A | B | C]|   |[x | y | z]|   |
 7422:             +---+---+---+---+---+---+---+---+---+---+---+
 7423:             |   |[A | B | C]|   |[x | y | z]|   |   |   |
 7424:             +---+---+---+---+---+---+---+---+---+---+---+
 7425: 
 7426:             >>> memory = Memory.from_blocks([[5, b'ABC'], [9, b'xyz']])
 7427:             >>> memory.shift(-2)
 7428:             >>> memory._blocks
 7429:             [[3, b'ABC'], [7, b'xyz']]
 7430: 
 7431:             ~~~
 7432: 
 7433:             +---+---+---+---+---+---+---+---+---+---+---+
 7434:             | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12|
 7435:             +===+===+===+===+===+===+===+===+===+===+===+
 7436:             |   |[[[|   |[A | B | C]|   |[x | y | z]|   |
 7437:             +---+---+---+---+---+---+---+---+---+---+---+
 7438:             |   |[y | z]|   |   |   |   |   |   |   |   |
 7439:             +---+---+---+---+---+---+---+---+---+---+---+
 7440: 
 7441:             >>> memory = Memory.from_blocks([[5, b'ABC'], [9, b'xyz']], start=2)
 7442:             >>> backups = []
 7443:             >>> memory.shift(-7, backups=backups)
 7444:             >>> memory._blocks
 7445:             [[2, b'yz']]
 7446:             >>> len(backups)
 7447:             1
 7448:             >>> backups[0]._blocks
 7449:             [[5, b'ABC'], [9, b'x']]
 7450:         """
 7451: 
+7452:         Memory_Shift(self._, offset, backups)
  if (!(likely(PyList_CheckExact(__pyx_v_backups))||((__pyx_v_backups) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_backups)->tp_name), 0))) __PYX_ERR(0, 7452, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Shift(__pyx_v_self->_, __pyx_v_offset, ((PyObject*)__pyx_v_backups)); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 7452, __pyx_L1_error)
 7453: 
+7454:     def reserve(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_95reserve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_94reserve[] = "Memory.reserve(self: Memory, address: Address, size: Address, backups: Optional[MemoryList] = None) -> None\nInserts emptiness.\n\n        Reserves emptiness at the provided address.\n\n        Arguments:\n            address (int):\n                Start address of the emptiness to insert.\n\n            size (int):\n                Size of the emptiness to insert.\n\n            backups (list of :obj:`Memory`):\n                Optional output list holding backup copies of the deleted\n                items, before trimming.\n\n        Examples:\n            +---+---+---+---+---+---+---+---+---+---+---+\n            | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12|\n            +===+===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |[x | y | z]|   |   |   |\n            +---+---+---+---+---+---+---+---+---+---+---+\n            |   |[A]|   |   | B | C]|   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[3, b'ABC'], [7, b'xyz']])\n            >>> memory.reserve(4, 2)\n            >>> memory._blocks\n            [[2, b'A'], [6, b'BC'], [9, b'xyz']]\n\n            ~~~\n\n            +---+---+---+---+---+---+---+---+---+---+---+\n            | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12|\n            +===+===+===+===+===+===+===+===+===+===+===+\n            |   |   |   |[A | B | C]|   |[x | y | z]|)))|\n            +---+---+---+---+---+---+---+---+---+---+---+\n            |   |   |   |   |   |   |   |   |[A | B]|)))|\n            +---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[5, b'ABC'], [9, b'xyz']], endex=12)\n            >>> backups = []\n            >>> memory.reserve(5, 5, backups=backups)\n            >>> memory._blocks\n            [[10, b'AB']]\n            >>> len(backups)\n            1\n            >>> backups[0]._blocks\n            [[7, b'C'], [9, b'xyz']]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_95reserve = {"reserve", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_95reserve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_94reserve};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_95reserve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_address = 0;
  PyObject *__pyx_v_size = 0;
  PyObject *__pyx_v_backups = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reserve (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_address,&__pyx_n_s_size,&__pyx_n_s_backups,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_94reserve(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_address, PyObject *__pyx_v_size, PyObject *__pyx_v_backups) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("reserve", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.reserve", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__128 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_address, __pyx_n_s_size, __pyx_n_s_backups); if (unlikely(!__pyx_tuple__128)) __PYX_ERR(0, 7454, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__128);
  __Pyx_GIVEREF(__pyx_tuple__128);
/* … */
  __pyx_t_6 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7454, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7454, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_95reserve, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_reserve, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__129)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7454, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_reserve, __pyx_t_5) < 0) __PYX_ERR(0, 7454, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__129 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__128, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_reserve, 7454, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__129)) __PYX_ERR(0, 7454, __pyx_L1_error)
 7455:         self: Memory,
+7456:         address: Address,
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7456, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_address, __pyx_t_2) < 0) __PYX_ERR(0, 7454, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7457:         size: Address,
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7457, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_size, __pyx_t_2) < 0) __PYX_ERR(0, 7454, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7458:         backups: Optional[MemoryList] = None,
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_address)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("reserve", 0, 2, 3, 1); __PYX_ERR(0, 7454, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_backups);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "reserve") < 0)) __PYX_ERR(0, 7454, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_address = values[0];
    __pyx_v_size = values[1];
    __pyx_v_backups = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("reserve", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7454, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.reserve", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_94reserve(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_address, __pyx_v_size, __pyx_v_backups);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7458, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_MemoryList); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7458, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7458, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_backups, __pyx_t_5) < 0) __PYX_ERR(0, 7454, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+7459:     ) -> None:
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return, Py_None) < 0) __PYX_ERR(0, 7454, __pyx_L1_error)
 7460:         r"""Inserts emptiness.
 7461: 
 7462:         Reserves emptiness at the provided address.
 7463: 
 7464:         Arguments:
 7465:             address (int):
 7466:                 Start address of the emptiness to insert.
 7467: 
 7468:             size (int):
 7469:                 Size of the emptiness to insert.
 7470: 
 7471:             backups (list of :obj:`Memory`):
 7472:                 Optional output list holding backup copies of the deleted
 7473:                 items, before trimming.
 7474: 
 7475:         Examples:
 7476:             +---+---+---+---+---+---+---+---+---+---+---+
 7477:             | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12|
 7478:             +===+===+===+===+===+===+===+===+===+===+===+
 7479:             |   |[A | B | C]|   |[x | y | z]|   |   |   |
 7480:             +---+---+---+---+---+---+---+---+---+---+---+
 7481:             |   |[A]|   |   | B | C]|   |[x | y | z]|   |
 7482:             +---+---+---+---+---+---+---+---+---+---+---+
 7483: 
 7484:             >>> memory = Memory.from_blocks([[3, b'ABC'], [7, b'xyz']])
 7485:             >>> memory.reserve(4, 2)
 7486:             >>> memory._blocks
 7487:             [[2, b'A'], [6, b'BC'], [9, b'xyz']]
 7488: 
 7489:             ~~~
 7490: 
 7491:             +---+---+---+---+---+---+---+---+---+---+---+
 7492:             | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12|
 7493:             +===+===+===+===+===+===+===+===+===+===+===+
 7494:             |   |   |   |[A | B | C]|   |[x | y | z]|)))|
 7495:             +---+---+---+---+---+---+---+---+---+---+---+
 7496:             |   |   |   |   |   |   |   |   |[A | B]|)))|
 7497:             +---+---+---+---+---+---+---+---+---+---+---+
 7498: 
 7499:             >>> memory = Memory.from_blocks([[5, b'ABC'], [9, b'xyz']], endex=12)
 7500:             >>> backups = []
 7501:             >>> memory.reserve(5, 5, backups=backups)
 7502:             >>> memory._blocks
 7503:             [[10, b'AB']]
 7504:             >>> len(backups)
 7505:             1
 7506:             >>> backups[0]._blocks
 7507:             [[7, b'C'], [9, b'xyz']]
 7508:         """
 7509: 
+7510:         Memory_Reserve(self._, address, size, backups)
  if (!(likely(PyList_CheckExact(__pyx_v_backups))||((__pyx_v_backups) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_backups)->tp_name), 0))) __PYX_ERR(0, 7510, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Reserve(__pyx_v_self->_, __pyx_v_address, __pyx_v_size, ((PyObject*)__pyx_v_backups)); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 7510, __pyx_L1_error)
 7511: 
+7512:     def insert(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_97insert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_96insert[] = "Memory.insert(self: Memory, address: Address, data: Union[AnyBytes, Value, Memory], backups: Optional[MemoryList] = None) -> None\nInserts data.\n\n        Inserts data, moving existing items after the insertion address by the\n        size of the inserted data.\n\n        Arguments::\n            address (int):\n                Address of the insertion point.\n\n            data (bytes):\n                Data to insert.\n\n            backups (list of :obj:`Memory`):\n                Optional output list holding backup copies of the deleted\n                items, before trimming.\n\n        Example:\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|\n            +===+===+===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |   |[x | y | z]|   |   |   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            |   |[A | B | C]|   |   |[x | y | z]|   |[$]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n            |   |[A | B | C]|   |   |[x | y | 1 | z]|   |[$]|\n            +---+---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])\n            >>> memory.insert(10, b'$')\n            >>> memory._blocks\n            [[1, b'ABC'], [6, b'xyz'], [10, b'$']]\n            >>> memory.insert(8, b'1')\n            >>> memory._blocks\n            [[1, b'ABC'], [6, b'xy1z'], [11, b'$']]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_97insert = {"insert", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_97insert, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_96insert};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_97insert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_address = 0;
  PyObject *__pyx_v_data = 0;
  PyObject *__pyx_v_backups = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("insert (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_address,&__pyx_n_s_data,&__pyx_n_s_backups,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_96insert(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_address, PyObject *__pyx_v_data, PyObject *__pyx_v_backups) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("insert", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.insert", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__130 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_address, __pyx_n_s_data, __pyx_n_s_backups); if (unlikely(!__pyx_tuple__130)) __PYX_ERR(0, 7512, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__130);
  __Pyx_GIVEREF(__pyx_tuple__130);
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7512, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7512, __pyx_L1_error)
/* … */
  __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_97insert, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_insert, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__131)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7512, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_insert, __pyx_t_6) < 0) __PYX_ERR(0, 7512, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__131 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__130, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_insert, 7512, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__131)) __PYX_ERR(0, 7512, __pyx_L1_error)
 7513:         self: Memory,
+7514:         address: Address,
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Address); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7514, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_address, __pyx_t_6) < 0) __PYX_ERR(0, 7512, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+7515:         data: Union[AnyBytes, Value, Memory],
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Union); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory));
  PyTuple_SET_ITEM(__pyx_t_3, 2, ((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory));
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7515, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_data, __pyx_t_2) < 0) __PYX_ERR(0, 7512, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7516:         backups: Optional[MemoryList] = None,
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_address)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_data)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("insert", 0, 2, 3, 1); __PYX_ERR(0, 7512, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_backups);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insert") < 0)) __PYX_ERR(0, 7512, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_address = values[0];
    __pyx_v_data = values[1];
    __pyx_v_backups = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("insert", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7512, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.insert", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_96insert(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_address, __pyx_v_data, __pyx_v_backups);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7516, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_MemoryList); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7516, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7516, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_backups, __pyx_t_6) < 0) __PYX_ERR(0, 7512, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+7517:     ) -> None:
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, Py_None) < 0) __PYX_ERR(0, 7512, __pyx_L1_error)
 7518:         r"""Inserts data.
 7519: 
 7520:         Inserts data, moving existing items after the insertion address by the
 7521:         size of the inserted data.
 7522: 
 7523:         Arguments::
 7524:             address (int):
 7525:                 Address of the insertion point.
 7526: 
 7527:             data (bytes):
 7528:                 Data to insert.
 7529: 
 7530:             backups (list of :obj:`Memory`):
 7531:                 Optional output list holding backup copies of the deleted
 7532:                 items, before trimming.
 7533: 
 7534:         Example:
 7535:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7536:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11|
 7537:             +===+===+===+===+===+===+===+===+===+===+===+===+
 7538:             |   |[A | B | C]|   |   |[x | y | z]|   |   |   |
 7539:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7540:             |   |[A | B | C]|   |   |[x | y | z]|   |[$]|   |
 7541:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7542:             |   |[A | B | C]|   |   |[x | y | 1 | z]|   |[$]|
 7543:             +---+---+---+---+---+---+---+---+---+---+---+---+
 7544: 
 7545:             >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])
 7546:             >>> memory.insert(10, b'$')
 7547:             >>> memory._blocks
 7548:             [[1, b'ABC'], [6, b'xyz'], [10, b'$']]
 7549:             >>> memory.insert(8, b'1')
 7550:             >>> memory._blocks
 7551:             [[1, b'ABC'], [6, b'xy1z'], [11, b'$']]
 7552:         """
 7553: 
+7554:         Memory_Insert(self._, address, data, backups)
  if (!(likely(PyList_CheckExact(__pyx_v_backups))||((__pyx_v_backups) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_backups)->tp_name), 0))) __PYX_ERR(0, 7554, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Insert(__pyx_v_self->_, __pyx_v_address, __pyx_v_data, ((PyObject*)__pyx_v_backups)); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 7554, __pyx_L1_error)
 7555: 
+7556:     def delete(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_99delete(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_98delete[] = "Memory.delete(self: Memory, start: Optional[Address] = None, endex: Optional[Address] = None, backups: Optional[MemoryList] = None) -> None\nDeletes an address range.\n\n        Arguments:\n            start (int):\n                Inclusive start address for deletion.\n                If ``None``, :attr:`start` is considered.\n\n            endex (int):\n                Exclusive end address for deletion.\n                If ``None``, :attr:`endex` is considered.\n\n            backups (list of :obj:`Memory`):\n                Optional output list holding backup copies of the deleted\n                items.\n\n        Example:\n            +---+---+---+---+---+---+---+---+---+---+\n            | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12| 13|\n            +===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+\n            |   |[A | y | z]|   |   |   |   |   |   |\n            +---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[5, b'ABC'], [9, b'xyz']])\n            >>> memory.delete(6, 10)\n            >>> memory._blocks\n            [[5, b'Ayz']]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_99delete = {"delete", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_99delete, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_98delete};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_99delete(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_v_backups = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("delete (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_start,&__pyx_n_s_endex,&__pyx_n_s_backups,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_98delete(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_backups) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("delete", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.delete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__132 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_start, __pyx_n_s_endex, __pyx_n_s_backups); if (unlikely(!__pyx_tuple__132)) __PYX_ERR(0, 7556, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__132);
  __Pyx_GIVEREF(__pyx_tuple__132);
/* … */
  __pyx_t_6 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7556, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7556, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_99delete, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_delete, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__133)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7556, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_delete, __pyx_t_2) < 0) __PYX_ERR(0, 7556, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__133 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__132, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_delete, 7556, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__133)) __PYX_ERR(0, 7556, __pyx_L1_error)
 7557:         self: Memory,
+7558:         start: Optional[Address] = None,
    values[0] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7558, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_start, __pyx_t_2) < 0) __PYX_ERR(0, 7556, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7559:         endex: Optional[Address] = None,
    values[1] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7559, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7559, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7559, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_endex, __pyx_t_5) < 0) __PYX_ERR(0, 7556, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+7560:         backups: Optional[MemoryList] = None,
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_backups);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "delete") < 0)) __PYX_ERR(0, 7556, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_start = values[0];
    __pyx_v_endex = values[1];
    __pyx_v_backups = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("delete", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7556, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.delete", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_98delete(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_start, __pyx_v_endex, __pyx_v_backups);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7560, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_MemoryList); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7560, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7560, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_backups, __pyx_t_2) < 0) __PYX_ERR(0, 7556, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7561:     ) -> None:
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return, Py_None) < 0) __PYX_ERR(0, 7556, __pyx_L1_error)
 7562:         r"""Deletes an address range.
 7563: 
 7564:         Arguments:
 7565:             start (int):
 7566:                 Inclusive start address for deletion.
 7567:                 If ``None``, :attr:`start` is considered.
 7568: 
 7569:             endex (int):
 7570:                 Exclusive end address for deletion.
 7571:                 If ``None``, :attr:`endex` is considered.
 7572: 
 7573:             backups (list of :obj:`Memory`):
 7574:                 Optional output list holding backup copies of the deleted
 7575:                 items.
 7576: 
 7577:         Example:
 7578:             +---+---+---+---+---+---+---+---+---+---+
 7579:             | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12| 13|
 7580:             +===+===+===+===+===+===+===+===+===+===+
 7581:             |   |[A | B | C]|   |   |[x | y | z]|   |
 7582:             +---+---+---+---+---+---+---+---+---+---+
 7583:             |   |[A | y | z]|   |   |   |   |   |   |
 7584:             +---+---+---+---+---+---+---+---+---+---+
 7585: 
 7586:             >>> memory = Memory.from_blocks([[5, b'ABC'], [9, b'xyz']])
 7587:             >>> memory.delete(6, 10)
 7588:             >>> memory._blocks
 7589:             [[5, b'Ayz']]
 7590:         """
 7591: 
+7592:         Memory_Delete(self._, start, endex, backups)
  if (!(likely(PyList_CheckExact(__pyx_v_backups))||((__pyx_v_backups) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_backups)->tp_name), 0))) __PYX_ERR(0, 7592, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Delete(__pyx_v_self->_, __pyx_v_start, __pyx_v_endex, ((PyObject*)__pyx_v_backups)); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 7592, __pyx_L1_error)
 7593: 
+7594:     def clear(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_101clear(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_100clear[] = "Memory.clear(self: Memory, start: Optional[Address] = None, endex: Optional[Address] = None, backups: Optional[MemoryList] = None) -> None\nClears an address range.\n\n        Arguments:\n            start (int):\n                Inclusive start address for clearing.\n                If ``None``, :attr:`start` is considered.\n\n            endex (int):\n                Exclusive end address for clearing.\n                If ``None``, :attr:`endex` is considered.\n\n            backups (list of :obj:`Memory`):\n                Optional output list holding backup copies of the cleared\n                items.\n\n        Example:\n            +---+---+---+---+---+---+---+---+---+\n            | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12|\n            +===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+\n            |   |[A]|   |   |   |   |[y | z]|   |\n            +---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[5, b'ABC'], [9, b'xyz']])\n            >>> memory.clear(6, 10)\n            >>> memory._blocks\n            [[5, b'A'], [10, b'yz']]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_101clear = {"clear", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_101clear, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_100clear};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_101clear(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_v_backups = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_start,&__pyx_n_s_endex,&__pyx_n_s_backups,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_100clear(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_backups) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("clear", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.clear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__134 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_start, __pyx_n_s_endex, __pyx_n_s_backups); if (unlikely(!__pyx_tuple__134)) __PYX_ERR(0, 7594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__134);
  __Pyx_GIVEREF(__pyx_tuple__134);
/* … */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7594, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_101clear, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_clear, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__135)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7594, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_clear, __pyx_t_5) < 0) __PYX_ERR(0, 7594, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__135 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__134, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_clear, 7594, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__135)) __PYX_ERR(0, 7594, __pyx_L1_error)
 7595:         self: Memory,
+7596:         start: Optional[Address] = None,
    values[0] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_start, __pyx_t_5) < 0) __PYX_ERR(0, 7594, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+7597:         endex: Optional[Address] = None,
    values[1] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7597, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7597, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7597, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_endex, __pyx_t_6) < 0) __PYX_ERR(0, 7594, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+7598:         backups: Optional[MemoryList] = None,
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_backups);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "clear") < 0)) __PYX_ERR(0, 7594, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_start = values[0];
    __pyx_v_endex = values[1];
    __pyx_v_backups = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("clear", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7594, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.clear", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_100clear(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_start, __pyx_v_endex, __pyx_v_backups);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7598, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_MemoryList); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7598, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7598, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_backups, __pyx_t_5) < 0) __PYX_ERR(0, 7594, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+7599:     ) -> None:
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, Py_None) < 0) __PYX_ERR(0, 7594, __pyx_L1_error)
 7600:         r"""Clears an address range.
 7601: 
 7602:         Arguments:
 7603:             start (int):
 7604:                 Inclusive start address for clearing.
 7605:                 If ``None``, :attr:`start` is considered.
 7606: 
 7607:             endex (int):
 7608:                 Exclusive end address for clearing.
 7609:                 If ``None``, :attr:`endex` is considered.
 7610: 
 7611:             backups (list of :obj:`Memory`):
 7612:                 Optional output list holding backup copies of the cleared
 7613:                 items.
 7614: 
 7615:         Example:
 7616:             +---+---+---+---+---+---+---+---+---+
 7617:             | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12|
 7618:             +===+===+===+===+===+===+===+===+===+
 7619:             |   |[A | B | C]|   |[x | y | z]|   |
 7620:             +---+---+---+---+---+---+---+---+---+
 7621:             |   |[A]|   |   |   |   |[y | z]|   |
 7622:             +---+---+---+---+---+---+---+---+---+
 7623: 
 7624:             >>> memory = Memory.from_blocks([[5, b'ABC'], [9, b'xyz']])
 7625:             >>> memory.clear(6, 10)
 7626:             >>> memory._blocks
 7627:             [[5, b'A'], [10, b'yz']]
 7628:         """
 7629: 
+7630:         Memory_Clear(self._, start, endex, backups)
  if (!(likely(PyList_CheckExact(__pyx_v_backups))||((__pyx_v_backups) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_backups)->tp_name), 0))) __PYX_ERR(0, 7630, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Clear(__pyx_v_self->_, __pyx_v_start, __pyx_v_endex, ((PyObject*)__pyx_v_backups)); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 7630, __pyx_L1_error)
 7631: 
+7632:     def crop(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_103crop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_102crop[] = "Memory.crop(self: Memory, start: Optional[Address] = None, endex: Optional[Address] = None, backups: Optional[MemoryList] = None) -> None\nKeeps data within an address range.\n\n        Arguments:\n            start (int):\n                Inclusive start address for cropping.\n                If ``None``, :attr:`start` is considered.\n\n            endex (int):\n                Exclusive end address for cropping.\n                If ``None``, :attr:`endex` is considered.\n\n            backups (list of :obj:`Memory`):\n                Optional output list holding backup copies of the cleared\n                items.\n\n        Example:\n            +---+---+---+---+---+---+---+---+---+\n            | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12|\n            +===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+\n            |   |   |[B | C]|   |[x]|   |   |   |\n            +---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[5, b'ABC'], [9, b'xyz']])\n            >>> memory.crop(6, 10)\n            >>> memory._blocks\n            [[6, b'BC'], [9, b'x']]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_103crop = {"crop", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_103crop, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_102crop};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_103crop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_v_backups = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("crop (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_start,&__pyx_n_s_endex,&__pyx_n_s_backups,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_102crop(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_backups) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("crop", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.crop", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__136 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_start, __pyx_n_s_endex, __pyx_n_s_backups); if (unlikely(!__pyx_tuple__136)) __PYX_ERR(0, 7632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__136);
  __Pyx_GIVEREF(__pyx_tuple__136);
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7632, __pyx_L1_error)
/* … */
  __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_103crop, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_crop, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__137)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_crop, __pyx_t_6) < 0) __PYX_ERR(0, 7632, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__137 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__136, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_crop, 7632, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__137)) __PYX_ERR(0, 7632, __pyx_L1_error)
 7633:         self: Memory,
+7634:         start: Optional[Address] = None,
    values[0] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7634, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_start, __pyx_t_6) < 0) __PYX_ERR(0, 7632, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+7635:         endex: Optional[Address] = None,
    values[1] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7635, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7635, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7635, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_endex, __pyx_t_2) < 0) __PYX_ERR(0, 7632, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7636:         backups: Optional[MemoryList] = None,
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_backups);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "crop") < 0)) __PYX_ERR(0, 7632, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_start = values[0];
    __pyx_v_endex = values[1];
    __pyx_v_backups = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("crop", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7632, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.crop", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_102crop(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_start, __pyx_v_endex, __pyx_v_backups);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7636, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_MemoryList); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7636, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7636, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_backups, __pyx_t_6) < 0) __PYX_ERR(0, 7632, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+7637:     ) -> None:
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, Py_None) < 0) __PYX_ERR(0, 7632, __pyx_L1_error)
 7638:         r"""Keeps data within an address range.
 7639: 
 7640:         Arguments:
 7641:             start (int):
 7642:                 Inclusive start address for cropping.
 7643:                 If ``None``, :attr:`start` is considered.
 7644: 
 7645:             endex (int):
 7646:                 Exclusive end address for cropping.
 7647:                 If ``None``, :attr:`endex` is considered.
 7648: 
 7649:             backups (list of :obj:`Memory`):
 7650:                 Optional output list holding backup copies of the cleared
 7651:                 items.
 7652: 
 7653:         Example:
 7654:             +---+---+---+---+---+---+---+---+---+
 7655:             | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12|
 7656:             +===+===+===+===+===+===+===+===+===+
 7657:             |   |[A | B | C]|   |[x | y | z]|   |
 7658:             +---+---+---+---+---+---+---+---+---+
 7659:             |   |   |[B | C]|   |[x]|   |   |   |
 7660:             +---+---+---+---+---+---+---+---+---+
 7661: 
 7662:             >>> memory = Memory.from_blocks([[5, b'ABC'], [9, b'xyz']])
 7663:             >>> memory.crop(6, 10)
 7664:             >>> memory._blocks
 7665:             [[6, b'BC'], [9, b'x']]
 7666:         """
 7667: 
+7668:         Memory_Crop(self._, start, endex, backups)
  if (!(likely(PyList_CheckExact(__pyx_v_backups))||((__pyx_v_backups) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_backups)->tp_name), 0))) __PYX_ERR(0, 7668, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Crop(__pyx_v_self->_, __pyx_v_start, __pyx_v_endex, ((PyObject*)__pyx_v_backups)); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 7668, __pyx_L1_error)
 7669: 
+7670:     def write(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_105write(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_104write[] = "Memory.write(self: Memory, address: Address, data: Union[AnyBytes, Value, Memory], clear: bool = False, backups: Optional[MemoryList] = None) -> None\nWrites data.\n\n        Arguments:\n            address (int):\n                Address where to start writing data.\n\n            data (bytes):\n                Data to write.\n\n            clear (bool):\n                Clears the target range before writing data.\n                Useful only if `data` is a :obj:`Memory` with empty spaces.\n\n            backups (list of :obj:`Memory`):\n                Optional output list holding backup copies of the deleted\n                items.\n\n        Example:\n            +---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |\n            +===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+\n            |   |[A | B | C]|   |[1 | 2 | 3 | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])\n            >>> memory.write(5, b'123')\n            >>> memory._blocks\n            [[1, b'ABC'], [5, b'123z']]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_105write = {"write", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_105write, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_104write};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_105write(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_address = 0;
  PyObject *__pyx_v_data = 0;
  PyObject *__pyx_v_clear = 0;
  PyObject *__pyx_v_backups = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("write (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_address,&__pyx_n_s_data,&__pyx_n_s_clear,&__pyx_n_s_backups,0};
    PyObject* values[4] = {0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_104write(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_address, PyObject *__pyx_v_data, PyObject *__pyx_v_clear, PyObject *__pyx_v_backups) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("write", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__138 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_address, __pyx_n_s_data, __pyx_n_s_clear, __pyx_n_s_backups); if (unlikely(!__pyx_tuple__138)) __PYX_ERR(0, 7670, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__138);
  __Pyx_GIVEREF(__pyx_tuple__138);
/* … */
  __pyx_t_6 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7670, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7670, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_105write, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_write, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__139)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7670, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_write, __pyx_t_5) < 0) __PYX_ERR(0, 7670, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__139 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__138, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_write, 7670, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__139)) __PYX_ERR(0, 7670, __pyx_L1_error)
 7671:         self: Memory,
+7672:         address: Address,
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Address); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7672, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_address, __pyx_t_5) < 0) __PYX_ERR(0, 7670, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+7673:         data: Union[AnyBytes, Value, Memory],
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Union); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7673, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7673, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7673, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7673, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
  __Pyx_INCREF(((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory));
  __Pyx_GIVEREF(((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory));
  PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory));
  __pyx_t_3 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7673, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_data, __pyx_t_2) < 0) __PYX_ERR(0, 7670, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7674:         clear: bool = False,
    values[2] = ((PyObject *)Py_False);
/* … */
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_clear, ((PyObject*)&PyBool_Type)) < 0) __PYX_ERR(0, 7670, __pyx_L1_error)
+7675:         backups: Optional[MemoryList] = None,
    values[3] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_address)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_data)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("write", 0, 2, 4, 1); __PYX_ERR(0, 7670, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_clear);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_backups);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "write") < 0)) __PYX_ERR(0, 7670, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_address = values[0];
    __pyx_v_data = values[1];
    __pyx_v_clear = values[2];
    __pyx_v_backups = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("write", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7670, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.write", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_104write(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_address, __pyx_v_data, __pyx_v_clear, __pyx_v_backups);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7675, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_MemoryList); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7675, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7675, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_backups, __pyx_t_5) < 0) __PYX_ERR(0, 7670, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+7676:     ) -> None:
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return, Py_None) < 0) __PYX_ERR(0, 7670, __pyx_L1_error)
 7677:         r"""Writes data.
 7678: 
 7679:         Arguments:
 7680:             address (int):
 7681:                 Address where to start writing data.
 7682: 
 7683:             data (bytes):
 7684:                 Data to write.
 7685: 
 7686:             clear (bool):
 7687:                 Clears the target range before writing data.
 7688:                 Useful only if `data` is a :obj:`Memory` with empty spaces.
 7689: 
 7690:             backups (list of :obj:`Memory`):
 7691:                 Optional output list holding backup copies of the deleted
 7692:                 items.
 7693: 
 7694:         Example:
 7695:             +---+---+---+---+---+---+---+---+---+---+
 7696:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
 7697:             +===+===+===+===+===+===+===+===+===+===+
 7698:             |   |[A | B | C]|   |   |[x | y | z]|   |
 7699:             +---+---+---+---+---+---+---+---+---+---+
 7700:             |   |[A | B | C]|   |[1 | 2 | 3 | z]|   |
 7701:             +---+---+---+---+---+---+---+---+---+---+
 7702: 
 7703:             >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])
 7704:             >>> memory.write(5, b'123')
 7705:             >>> memory._blocks
 7706:             [[1, b'ABC'], [5, b'123z']]
 7707:         """
 7708: 
+7709:         Memory_Write(self._, address, data, clear, backups)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_clear); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 7709, __pyx_L1_error)
  if (!(likely(PyList_CheckExact(__pyx_v_backups))||((__pyx_v_backups) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_backups)->tp_name), 0))) __PYX_ERR(0, 7709, __pyx_L1_error)
  __pyx_t_2 = __pyx_f_11cbytesparse_2_c_Memory_Write(__pyx_v_self->_, __pyx_v_address, __pyx_v_data, __pyx_t_1, ((PyObject*)__pyx_v_backups)); if (unlikely(__pyx_t_2 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 7709, __pyx_L1_error)
 7710: 
+7711:     def fill(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_107fill(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_106fill[] = "Memory.fill(self: Memory, start: Optional[Address] = None, endex: Optional[Address] = None, pattern: Union[AnyBytes, Value] = 0, backups: Optional[MemoryList] = None) -> None\nOverwrites a range with a pattern.\n\n        Arguments:\n            start (int):\n                Inclusive start address for filling.\n                If ``None``, :attr:`start` is considered.\n\n            endex (int):\n                Exclusive end address for filling.\n                If ``None``, :attr:`endex` is considered.\n\n            pattern (items):\n                Pattern of items to fill the range.\n\n            backups (list of :obj:`Memory`):\n                Optional output list holding backup copies of the deleted\n                items, before trimming.\n\n        Examples:\n            +---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |\n            +===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+\n            |   |[1 | 2 | 3 | 1 | 2 | 3 | 1 | 2]|   |\n            +---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])\n            >>> memory.fill(pattern=b'123')\n            >>> memory._blocks\n            [[1, b'12312312']]\n\n            ~~~\n\n            +---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |\n            +===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+\n            |   |[A | B | 1 | 2 | 3 | 1 | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])\n            >>> memory.fill(3, 7, b'123')\n            >>> memory._blocks\n            [[1, b'AB1231yz']]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_107fill = {"fill", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_107fill, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_106fill};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_107fill(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_v_pattern = 0;
  PyObject *__pyx_v_backups = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fill (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_start,&__pyx_n_s_endex,&__pyx_n_s_pattern,&__pyx_n_s_backups,0};
    PyObject* values[4] = {0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_106fill(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_pattern, PyObject *__pyx_v_backups) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("fill", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__140 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_start, __pyx_n_s_endex, __pyx_n_s_pattern, __pyx_n_s_backups); if (unlikely(!__pyx_tuple__140)) __PYX_ERR(0, 7711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__140);
  __Pyx_GIVEREF(__pyx_tuple__140);
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7711, __pyx_L1_error)
/* … */
  __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_107fill, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_fill, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__141)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7711, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_fill, __pyx_t_6) < 0) __PYX_ERR(0, 7711, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__141 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__140, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_fill, 7711, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__141)) __PYX_ERR(0, 7711, __pyx_L1_error)
 7712:         self: Memory,
+7713:         start: Optional[Address] = None,
    values[0] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7713, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7713, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7713, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_start, __pyx_t_2) < 0) __PYX_ERR(0, 7711, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7714:         endex: Optional[Address] = None,
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)__pyx_int_0);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7714, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7714, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7714, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_endex, __pyx_t_6) < 0) __PYX_ERR(0, 7711, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+7715:         pattern: Union[AnyBytes, Value] = 0,
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Union); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7715, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_pattern, __pyx_t_2) < 0) __PYX_ERR(0, 7711, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7716:         backups: Optional[MemoryList] = None,
    values[3] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pattern);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_backups);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "fill") < 0)) __PYX_ERR(0, 7711, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_start = values[0];
    __pyx_v_endex = values[1];
    __pyx_v_pattern = values[2];
    __pyx_v_backups = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("fill", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7711, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.fill", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_106fill(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_start, __pyx_v_endex, __pyx_v_pattern, __pyx_v_backups);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_MemoryList); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_backups, __pyx_t_6) < 0) __PYX_ERR(0, 7711, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+7717:     ) -> None:
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, Py_None) < 0) __PYX_ERR(0, 7711, __pyx_L1_error)
 7718:         r"""Overwrites a range with a pattern.
 7719: 
 7720:         Arguments:
 7721:             start (int):
 7722:                 Inclusive start address for filling.
 7723:                 If ``None``, :attr:`start` is considered.
 7724: 
 7725:             endex (int):
 7726:                 Exclusive end address for filling.
 7727:                 If ``None``, :attr:`endex` is considered.
 7728: 
 7729:             pattern (items):
 7730:                 Pattern of items to fill the range.
 7731: 
 7732:             backups (list of :obj:`Memory`):
 7733:                 Optional output list holding backup copies of the deleted
 7734:                 items, before trimming.
 7735: 
 7736:         Examples:
 7737:             +---+---+---+---+---+---+---+---+---+---+
 7738:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
 7739:             +===+===+===+===+===+===+===+===+===+===+
 7740:             |   |[A | B | C]|   |   |[x | y | z]|   |
 7741:             +---+---+---+---+---+---+---+---+---+---+
 7742:             |   |[1 | 2 | 3 | 1 | 2 | 3 | 1 | 2]|   |
 7743:             +---+---+---+---+---+---+---+---+---+---+
 7744: 
 7745:             >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])
 7746:             >>> memory.fill(pattern=b'123')
 7747:             >>> memory._blocks
 7748:             [[1, b'12312312']]
 7749: 
 7750:             ~~~
 7751: 
 7752:             +---+---+---+---+---+---+---+---+---+---+
 7753:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
 7754:             +===+===+===+===+===+===+===+===+===+===+
 7755:             |   |[A | B | C]|   |   |[x | y | z]|   |
 7756:             +---+---+---+---+---+---+---+---+---+---+
 7757:             |   |[A | B | 1 | 2 | 3 | 1 | y | z]|   |
 7758:             +---+---+---+---+---+---+---+---+---+---+
 7759: 
 7760:             >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])
 7761:             >>> memory.fill(3, 7, b'123')
 7762:             >>> memory._blocks
 7763:             [[1, b'AB1231yz']]
 7764:         """
 7765: 
+7766:         Memory_Fill(self._, start, endex, pattern, backups)
  if (!(likely(PyList_CheckExact(__pyx_v_backups))||((__pyx_v_backups) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_backups)->tp_name), 0))) __PYX_ERR(0, 7766, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Fill(__pyx_v_self->_, __pyx_v_start, __pyx_v_endex, __pyx_v_pattern, ((PyObject*)__pyx_v_backups)); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 7766, __pyx_L1_error)
 7767: 
+7768:     def flood(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_109flood(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_108flood[] = "Memory.flood(self: Memory, start: Optional[Address] = None, endex: Optional[Address] = None, pattern: Union[AnyBytes, Value] = 0, backups: Optional[MemoryList] = None) -> None\nFills emptiness between non-touching blocks.\n\n        Arguments:\n            start (int):\n                Inclusive start address for flooding.\n                If ``None``, :attr:`start` is considered.\n\n            endex (int):\n                Exclusive end address for flooding.\n                If ``None``, :attr:`endex` is considered.\n\n            pattern (items):\n                Pattern of items to fill the range.\n\n            backups (list of :obj:`Memory`):\n                Optional output list holding backup copies of the deleted\n                items, before trimming.\n\n        Examples:\n            +---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |\n            +===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+\n            |   |[A | B | C | 1 | 2 | x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])\n            >>> memory.flood(pattern=b'123')\n            >>> memory._blocks\n            [[1, b'ABC12xyz']]\n\n            ~~~\n\n            +---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |\n            +===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+\n            |   |[A | B | C | 2 | 3 | x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])\n            >>> memory.flood(3, 7, b'123')\n            >>> memory._blocks\n            [[1, b'ABC23xyz']]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_109flood = {"flood", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_109flood, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_108flood};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_109flood(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_v_pattern = 0;
  PyObject *__pyx_v_backups = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("flood (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_start,&__pyx_n_s_endex,&__pyx_n_s_pattern,&__pyx_n_s_backups,0};
    PyObject* values[4] = {0,0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_108flood(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_pattern, PyObject *__pyx_v_backups) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("flood", 0);
/* … */
  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.flood", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11cbytesparse_2_c_6Memory_112generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__142 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_start, __pyx_n_s_endex, __pyx_n_s_pattern, __pyx_n_s_backups); if (unlikely(!__pyx_tuple__142)) __PYX_ERR(0, 7768, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__142);
  __Pyx_GIVEREF(__pyx_tuple__142);
/* … */
  __pyx_t_6 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7768, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7768, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_109flood, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_flood, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__143)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7768, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_flood, __pyx_t_5) < 0) __PYX_ERR(0, 7768, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__143 = (PyObject*)__Pyx_PyCode_New(5, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__142, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_flood, 7768, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__143)) __PYX_ERR(0, 7768, __pyx_L1_error)
 7769:         self: Memory,
+7770:         start: Optional[Address] = None,
    values[0] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7770, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_start, __pyx_t_2) < 0) __PYX_ERR(0, 7768, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7771:         endex: Optional[Address] = None,
    values[1] = ((PyObject *)Py_None);
    values[2] = ((PyObject *)__pyx_int_0);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7771, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_endex, __pyx_t_5) < 0) __PYX_ERR(0, 7768, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+7772:         pattern: Union[AnyBytes, Value] = 0,
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Union); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
  __pyx_t_3 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7772, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_pattern, __pyx_t_2) < 0) __PYX_ERR(0, 7768, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7773:         backups: Optional[MemoryList] = None,
    values[3] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pattern);
          if (value) { values[2] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_backups);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "flood") < 0)) __PYX_ERR(0, 7768, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_start = values[0];
    __pyx_v_endex = values[1];
    __pyx_v_pattern = values[2];
    __pyx_v_backups = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("flood", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7768, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.flood", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_108flood(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_start, __pyx_v_endex, __pyx_v_pattern, __pyx_v_backups);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7773, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_MemoryList); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7773, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7773, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_backups, __pyx_t_5) < 0) __PYX_ERR(0, 7768, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+7774:     ) -> None:
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return, Py_None) < 0) __PYX_ERR(0, 7768, __pyx_L1_error)
 7775:         r"""Fills emptiness between non-touching blocks.
 7776: 
 7777:         Arguments:
 7778:             start (int):
 7779:                 Inclusive start address for flooding.
 7780:                 If ``None``, :attr:`start` is considered.
 7781: 
 7782:             endex (int):
 7783:                 Exclusive end address for flooding.
 7784:                 If ``None``, :attr:`endex` is considered.
 7785: 
 7786:             pattern (items):
 7787:                 Pattern of items to fill the range.
 7788: 
 7789:             backups (list of :obj:`Memory`):
 7790:                 Optional output list holding backup copies of the deleted
 7791:                 items, before trimming.
 7792: 
 7793:         Examples:
 7794:             +---+---+---+---+---+---+---+---+---+---+
 7795:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
 7796:             +===+===+===+===+===+===+===+===+===+===+
 7797:             |   |[A | B | C]|   |   |[x | y | z]|   |
 7798:             +---+---+---+---+---+---+---+---+---+---+
 7799:             |   |[A | B | C | 1 | 2 | x | y | z]|   |
 7800:             +---+---+---+---+---+---+---+---+---+---+
 7801: 
 7802:             >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])
 7803:             >>> memory.flood(pattern=b'123')
 7804:             >>> memory._blocks
 7805:             [[1, b'ABC12xyz']]
 7806: 
 7807:             ~~~
 7808: 
 7809:             +---+---+---+---+---+---+---+---+---+---+
 7810:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
 7811:             +===+===+===+===+===+===+===+===+===+===+
 7812:             |   |[A | B | C]|   |   |[x | y | z]|   |
 7813:             +---+---+---+---+---+---+---+---+---+---+
 7814:             |   |[A | B | C | 2 | 3 | x | y | z]|   |
 7815:             +---+---+---+---+---+---+---+---+---+---+
 7816: 
 7817:             >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])
 7818:             >>> memory.flood(3, 7, b'123')
 7819:             >>> memory._blocks
 7820:             [[1, b'ABC23xyz']]
 7821:         """
 7822: 
+7823:         Memory_Flood(self._, start, endex, pattern, backups)
  if (!(likely(PyList_CheckExact(__pyx_v_backups))||((__pyx_v_backups) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_backups)->tp_name), 0))) __PYX_ERR(0, 7823, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_Flood(__pyx_v_self->_, __pyx_v_start, __pyx_v_endex, __pyx_v_pattern, ((PyObject*)__pyx_v_backups)); if (unlikely(__pyx_t_1 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 7823, __pyx_L1_error)
 7824: 
+7825:     def keys(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_111keys(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_110keys[] = "Memory.keys(self: Memory, start: Optional[Address] = None, endex: Optional[Union[Address, EllipsisType]] = None) -> Iterator[Address]\nIterates over addresses.\n\n        Iterates over addresses, from `start` to `endex`.\n        Implemets the interface of :obj:`dict`.\n\n        Arguments:\n            start (int):\n                Inclusive start address.\n                If ``None``, :attr:`start` is considered.\n\n            endex (int):\n                Exclusive end address.\n                If ``None``, :attr:`endex` is considered.\n                If ``Ellipsis``, the iterator is infinite.\n\n        Yields:\n            int: Range address.\n\n        Examples:\n            >>> from itertools import islice\n            >>> memory = Memory()\n            >>> list(memory.keys())\n            []\n            >>> list(memory.keys(endex=8))\n            [0, 1, 2, 3, 4, 5, 6, 7]\n            >>> list(memory.keys(3, 8))\n            [3, 4, 5, 6, 7]\n            >>> list(islice(memory.keys(3, ...), 7))\n            [3, 4, 5, 6, 7, 8, 9]\n\n            ~~~\n\n            +---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |\n            +===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])\n            >>> list(memory.keys())\n            [1, 2, 3, 4, 5, 6, 7, 8]\n            >>> list(memory.keys(endex=8))\n            [0, 1, 2, 3, 4, 5, 6, 7]\n            >>> list(memory.keys(3, 8))\n            [3, 4, 5, 6, 7]\n            >>> list(islice(memory.keys(3, ...), 7))\n            [3, 4, 5, 6, 7, 8, 9]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_111keys = {"keys", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_111keys, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_110keys};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_111keys(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("keys (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_start,&__pyx_n_s_endex,0};
    PyObject* values[2] = {0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_110keys(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_2_keys *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("keys", 0);
  __pyx_cur_scope = (struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_2_keys *)__pyx_tp_new_11cbytesparse_2_c___pyx_scope_struct_2_keys(__pyx_ptype_11cbytesparse_2_c___pyx_scope_struct_2_keys, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_2_keys *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 7825, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_start = __pyx_v_start;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_start);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_start);
  __pyx_cur_scope->__pyx_v_endex = __pyx_v_endex;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_endex);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_endex);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11cbytesparse_2_c_6Memory_112generator2, __pyx_codeobj__26, (PyObject *) __pyx_cur_scope, __pyx_n_s_keys, __pyx_n_s_Memory_keys, __pyx_n_s_cbytesparse__c); if (unlikely(!gen)) __PYX_ERR(0, 7825, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.keys", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11cbytesparse_2_c_6Memory_112generator2(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("keys", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 7825, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("keys", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11cbytesparse_2_c_6Memory_115generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__144 = PyTuple_Pack(5, __pyx_n_s_self, __pyx_n_s_start, __pyx_n_s_endex, __pyx_n_s_start_2, __pyx_n_s_endex_2); if (unlikely(!__pyx_tuple__144)) __PYX_ERR(0, 7825, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__144);
  __Pyx_GIVEREF(__pyx_tuple__144);
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7825, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7825, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_111keys, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_keys, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__26)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7825, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_keys, __pyx_t_2) < 0) __PYX_ERR(0, 7825, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__26 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__144, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_keys, 7825, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__26)) __PYX_ERR(0, 7825, __pyx_L1_error)
/* … */
struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_2_keys {
  PyObject_HEAD
  PyObject *__pyx_v_endex;
  addr_t __pyx_v_endex_;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self;
  PyObject *__pyx_v_start;
  addr_t __pyx_v_start_;
};

 7826:         self: Memory,
+7827:         start: Optional[Address] = None,
    values[0] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7827, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7827, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7827, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_start, __pyx_t_2) < 0) __PYX_ERR(0, 7825, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7828:         endex: Optional[Union[Address, EllipsisType]] = None,
    values[1] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "keys") < 0)) __PYX_ERR(0, 7825, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_start = values[0];
    __pyx_v_endex = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("keys", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7825, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.keys", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_110keys(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_start, __pyx_v_endex);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Union); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Address); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_EllipsisType); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_6 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7828, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_endex, __pyx_t_4) < 0) __PYX_ERR(0, 7825, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+7829:     ) -> Iterator[Address]:
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Iterator); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7829, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_t_2) < 0) __PYX_ERR(0, 7825, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 7830:         r"""Iterates over addresses.
 7831: 
 7832:         Iterates over addresses, from `start` to `endex`.
 7833:         Implemets the interface of :obj:`dict`.
 7834: 
 7835:         Arguments:
 7836:             start (int):
 7837:                 Inclusive start address.
 7838:                 If ``None``, :attr:`start` is considered.
 7839: 
 7840:             endex (int):
 7841:                 Exclusive end address.
 7842:                 If ``None``, :attr:`endex` is considered.
 7843:                 If ``Ellipsis``, the iterator is infinite.
 7844: 
 7845:         Yields:
 7846:             int: Range address.
 7847: 
 7848:         Examples:
 7849:             >>> from itertools import islice
 7850:             >>> memory = Memory()
 7851:             >>> list(memory.keys())
 7852:             []
 7853:             >>> list(memory.keys(endex=8))
 7854:             [0, 1, 2, 3, 4, 5, 6, 7]
 7855:             >>> list(memory.keys(3, 8))
 7856:             [3, 4, 5, 6, 7]
 7857:             >>> list(islice(memory.keys(3, ...), 7))
 7858:             [3, 4, 5, 6, 7, 8, 9]
 7859: 
 7860:             ~~~
 7861: 
 7862:             +---+---+---+---+---+---+---+---+---+---+
 7863:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
 7864:             +===+===+===+===+===+===+===+===+===+===+
 7865:             |   |[A | B | C]|   |   |[x | y | z]|   |
 7866:             +---+---+---+---+---+---+---+---+---+---+
 7867: 
 7868:             >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])
 7869:             >>> list(memory.keys())
 7870:             [1, 2, 3, 4, 5, 6, 7, 8]
 7871:             >>> list(memory.keys(endex=8))
 7872:             [0, 1, 2, 3, 4, 5, 6, 7]
 7873:             >>> list(memory.keys(3, 8))
 7874:             [3, 4, 5, 6, 7]
 7875:             >>> list(islice(memory.keys(3, ...), 7))
 7876:             [3, 4, 5, 6, 7, 8, 9]
 7877:         """
 7878:         cdef:
 7879:             addr_t start_
 7880:             addr_t endex_
 7881: 
+7882:         if start is None:
  __pyx_t_1 = (__pyx_cur_scope->__pyx_v_start == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L4;
  }
+7883:             start_ = Memory_Start(self._)
    __pyx_cur_scope->__pyx_v_start_ = __pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_cur_scope->__pyx_v_self->_);
 7884:         else:
+7885:             start_ = <addr_t>start
  /*else*/ {
    __pyx_t_3 = __Pyx_PyInt_As_uint_fast64_t(__pyx_cur_scope->__pyx_v_start); if (unlikely((__pyx_t_3 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7885, __pyx_L1_error)
    __pyx_cur_scope->__pyx_v_start_ = ((addr_t)__pyx_t_3);
  }
  __pyx_L4:;
 7886: 
+7887:         if endex is None:
  __pyx_t_2 = (__pyx_cur_scope->__pyx_v_endex == Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L5;
  }
+7888:             endex_ = Memory_Endex(self._)
    __pyx_cur_scope->__pyx_v_endex_ = __pyx_f_11cbytesparse_2_c_Memory_Endex(__pyx_cur_scope->__pyx_v_self->_);
+7889:         elif endex is Ellipsis:
  __pyx_t_1 = (__pyx_cur_scope->__pyx_v_endex == __pyx_builtin_Ellipsis);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L5;
  }
+7890:             endex_ = ADDR_MAX
    __pyx_cur_scope->__pyx_v_endex_ = ADDR_MAX;
 7891:         else:
+7892:             endex_ = <addr_t>endex
  /*else*/ {
    __pyx_t_3 = __Pyx_PyInt_As_uint_fast64_t(__pyx_cur_scope->__pyx_v_endex); if (unlikely((__pyx_t_3 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7892, __pyx_L1_error)
    __pyx_cur_scope->__pyx_v_endex_ = ((addr_t)__pyx_t_3);
  }
  __pyx_L5:;
 7893: 
+7894:         while start_ < endex_:
  while (1) {
    __pyx_t_2 = ((__pyx_cur_scope->__pyx_v_start_ < __pyx_cur_scope->__pyx_v_endex_) != 0);
    if (!__pyx_t_2) break;
+7895:             yield start_
    __pyx_t_4 = __Pyx_PyInt_From_uint_fast64_t(__pyx_cur_scope->__pyx_v_start_); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7895, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L8_resume_from_yield:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 7895, __pyx_L1_error)
+7896:             start_ += 1
    __pyx_cur_scope->__pyx_v_start_ = (__pyx_cur_scope->__pyx_v_start_ + 1);
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 7897: 
+7898:     def values(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_114values(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_113values[] = "Memory.values(self: Memory, start: Optional[Address] = None, endex: Optional[Union[Address, EllipsisType]] = None, pattern: Optional[Union[AnyBytes, Value]] = None) -> Iterator[Optional[Value]]\nIterates over values.\n\n        Iterates over values, from `start` to `endex`.\n        Implemets the interface of :obj:`dict`.\n\n        Arguments:\n            start (int):\n                Inclusive start address.\n                If ``None``, :attr:`start` is considered.\n\n            endex (int):\n                Exclusive end address.\n                If ``None``, :attr:`endex` is considered.\n                If ``Ellipsis``, the iterator is infinite.\n\n            pattern (items):\n                Pattern of values to fill emptiness.\n\n        Yields:\n            int: Range values.\n\n        Examples:\n            >>> from itertools import islice\n            >>> memory = Memory()\n            >>> list(memory.values(endex=8))\n            [None, None, None, None, None, None, None]\n            >>> list(memory.values(3, 8))\n            [None, None, None, None, None]\n            >>> list(islice(memory.values(3, ...), 7))\n            [None, None, None, None, None, None, None]\n\n            ~~~\n\n            +---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |\n            +===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+\n            |   | 65| 66| 67|   |   |120|121|122|   |\n            +---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])\n            >>> list(memory.values())\n            [65, 66, 67, None, None, 120, 121, 122]\n            >>> list(memory.values(3, 8))\n            [67, None, None, 120, 121]\n            >>> list(islice(memory.values(3, ...), 7))\n            [67, None, None, 120, 121, 122, None]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_114values = {"values", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_114values, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_113values};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_114values(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_v_pattern = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("values (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_start,&__pyx_n_s_endex,&__pyx_n_s_pattern,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_113values(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_pattern) {
  struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_3_values *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("values", 0);
  __pyx_cur_scope = (struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_3_values *)__pyx_tp_new_11cbytesparse_2_c___pyx_scope_struct_3_values(__pyx_ptype_11cbytesparse_2_c___pyx_scope_struct_3_values, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_3_values *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 7898, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_start = __pyx_v_start;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_start);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_start);
  __pyx_cur_scope->__pyx_v_endex = __pyx_v_endex;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_endex);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_endex);
  __pyx_cur_scope->__pyx_v_pattern = __pyx_v_pattern;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_pattern);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_pattern);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11cbytesparse_2_c_6Memory_115generator3, __pyx_codeobj__27, (PyObject *) __pyx_cur_scope, __pyx_n_s_values, __pyx_n_s_Memory_values, __pyx_n_s_cbytesparse__c); if (unlikely(!gen)) __PYX_ERR(0, 7898, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.values", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11cbytesparse_2_c_6Memory_115generator3(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("values", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 7898, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("values", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11cbytesparse_2_c_6Memory_118generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__145 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_start, __pyx_n_s_endex, __pyx_n_s_pattern, __pyx_n_s_start_2, __pyx_n_s_endex_2, __pyx_n_s_rover, __pyx_n_s_pattern_value, __pyx_n_s_pattern_view, __pyx_n_s_pattern_size, __pyx_n_s_pattern_data); if (unlikely(!__pyx_tuple__145)) __PYX_ERR(0, 7898, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__145);
  __Pyx_GIVEREF(__pyx_tuple__145);
/* … */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7898, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7898, __pyx_L1_error)
/* … */
  __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_114values, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_values, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__27)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7898, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_values, __pyx_t_6) < 0) __PYX_ERR(0, 7898, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__27 = (PyObject*)__Pyx_PyCode_New(4, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__145, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_values, 7898, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__27)) __PYX_ERR(0, 7898, __pyx_L1_error)
/* … */
struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_3_values {
  PyObject_HEAD
  PyObject *__pyx_v_endex;
  addr_t __pyx_v_endex_;
  PyObject *__pyx_v_pattern;
  byte_t const *__pyx_v_pattern_data;
  size_t __pyx_v_pattern_size;
  byte_t __pyx_v_pattern_value;
  __Pyx_memviewslice __pyx_v_pattern_view;
  Rover_ *__pyx_v_rover;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self;
  PyObject *__pyx_v_start;
  addr_t __pyx_v_start_;
};

 7899:         self: Memory,
+7900:         start: Optional[Address] = None,
    values[0] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7900, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_start, __pyx_t_4) < 0) __PYX_ERR(0, 7898, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+7901:         endex: Optional[Union[Address, EllipsisType]] = None,
    values[1] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Optional); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Union); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Address); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_EllipsisType); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_1);
  __pyx_t_5 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_4, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7901, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_endex, __pyx_t_6) < 0) __PYX_ERR(0, 7898, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+7902:         pattern: Optional[Union[AnyBytes, Value]] = None,
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pattern);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "values") < 0)) __PYX_ERR(0, 7898, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_start = values[0];
    __pyx_v_endex = values[1];
    __pyx_v_pattern = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("values", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7898, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.values", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_113values(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_start, __pyx_v_endex, __pyx_v_pattern);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Union); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
  __pyx_t_4 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7902, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_pattern, __pyx_t_5) < 0) __PYX_ERR(0, 7898, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+7903:     ) -> Iterator[Optional[Value]]:
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Iterator); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Optional); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Value); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_t_6) < 0) __PYX_ERR(0, 7898, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 7904:         r"""Iterates over values.
 7905: 
 7906:         Iterates over values, from `start` to `endex`.
 7907:         Implemets the interface of :obj:`dict`.
 7908: 
 7909:         Arguments:
 7910:             start (int):
 7911:                 Inclusive start address.
 7912:                 If ``None``, :attr:`start` is considered.
 7913: 
 7914:             endex (int):
 7915:                 Exclusive end address.
 7916:                 If ``None``, :attr:`endex` is considered.
 7917:                 If ``Ellipsis``, the iterator is infinite.
 7918: 
 7919:             pattern (items):
 7920:                 Pattern of values to fill emptiness.
 7921: 
 7922:         Yields:
 7923:             int: Range values.
 7924: 
 7925:         Examples:
 7926:             >>> from itertools import islice
 7927:             >>> memory = Memory()
 7928:             >>> list(memory.values(endex=8))
 7929:             [None, None, None, None, None, None, None]
 7930:             >>> list(memory.values(3, 8))
 7931:             [None, None, None, None, None]
 7932:             >>> list(islice(memory.values(3, ...), 7))
 7933:             [None, None, None, None, None, None, None]
 7934: 
 7935:             ~~~
 7936: 
 7937:             +---+---+---+---+---+---+---+---+---+---+
 7938:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
 7939:             +===+===+===+===+===+===+===+===+===+===+
 7940:             |   |[A | B | C]|   |   |[x | y | z]|   |
 7941:             +---+---+---+---+---+---+---+---+---+---+
 7942:             |   | 65| 66| 67|   |   |120|121|122|   |
 7943:             +---+---+---+---+---+---+---+---+---+---+
 7944: 
 7945:             >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])
 7946:             >>> list(memory.values())
 7947:             [65, 66, 67, None, None, 120, 121, 122]
 7948:             >>> list(memory.values(3, 8))
 7949:             [67, None, None, 120, 121]
 7950:             >>> list(islice(memory.values(3, ...), 7))
 7951:             [67, None, None, 120, 121, 122, None]
 7952:         """
 7953:         cdef:
 7954:             addr_t start_
 7955:             addr_t endex_
+7956:             Rover_* rover = NULL
  __pyx_cur_scope->__pyx_v_rover = NULL;
 7957:             byte_t pattern_value
 7958:             const byte_t[:] pattern_view
+7959:             size_t pattern_size = 0
  __pyx_cur_scope->__pyx_v_pattern_size = 0;
+7960:             const byte_t* pattern_data = NULL
  __pyx_cur_scope->__pyx_v_pattern_data = NULL;
 7961: 
+7962:         if start is None:
  __pyx_t_1 = (__pyx_cur_scope->__pyx_v_start == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L4;
  }
+7963:             start_ = Memory_Start(self._)
    __pyx_cur_scope->__pyx_v_start_ = __pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_cur_scope->__pyx_v_self->_);
 7964:         else:
+7965:             start_ = <addr_t>start
  /*else*/ {
    __pyx_t_3 = __Pyx_PyInt_As_uint_fast64_t(__pyx_cur_scope->__pyx_v_start); if (unlikely((__pyx_t_3 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7965, __pyx_L1_error)
    __pyx_cur_scope->__pyx_v_start_ = ((addr_t)__pyx_t_3);
  }
  __pyx_L4:;
 7966: 
+7967:         if endex is None:
  __pyx_t_2 = (__pyx_cur_scope->__pyx_v_endex == Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L5;
  }
+7968:             endex_ = Memory_Endex(self._)
    __pyx_cur_scope->__pyx_v_endex_ = __pyx_f_11cbytesparse_2_c_Memory_Endex(__pyx_cur_scope->__pyx_v_self->_);
+7969:         elif endex is Ellipsis:
  __pyx_t_1 = (__pyx_cur_scope->__pyx_v_endex == __pyx_builtin_Ellipsis);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L5;
  }
+7970:             endex_ = ADDR_MAX
    __pyx_cur_scope->__pyx_v_endex_ = ADDR_MAX;
 7971:         else:
+7972:             endex_ = <addr_t>endex
  /*else*/ {
    __pyx_t_3 = __Pyx_PyInt_As_uint_fast64_t(__pyx_cur_scope->__pyx_v_endex); if (unlikely((__pyx_t_3 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7972, __pyx_L1_error)
    __pyx_cur_scope->__pyx_v_endex_ = ((addr_t)__pyx_t_3);
  }
  __pyx_L5:;
 7973: 
+7974:         if pattern is not None:
  __pyx_t_2 = (__pyx_cur_scope->__pyx_v_pattern != Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
  }
+7975:             if isinstance(pattern, int):
    __pyx_t_1 = PyInt_Check(__pyx_cur_scope->__pyx_v_pattern); 
    __pyx_t_2 = (__pyx_t_1 != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L7;
    }
+7976:                 pattern_value = <byte_t>pattern
      __pyx_t_4 = __Pyx_PyInt_As_byte_t(__pyx_cur_scope->__pyx_v_pattern); if (unlikely((__pyx_t_4 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 7976, __pyx_L1_error)
      __pyx_cur_scope->__pyx_v_pattern_value = ((byte_t)__pyx_t_4);
+7977:                 pattern_size = 1
      __pyx_cur_scope->__pyx_v_pattern_size = 1;
+7978:                 pattern_data = &pattern_value
      __pyx_cur_scope->__pyx_v_pattern_data = (&__pyx_cur_scope->__pyx_v_pattern_value);
 7979:             else:
+7980:                 try:
    /*else*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        goto __pyx_L13_try_end;
        __pyx_L8_error:;
        __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
        __Pyx_XGIVEREF(__pyx_t_5);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
        goto __pyx_L1_error;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_5);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
        __pyx_L13_try_end:;
      }
+7981:                     pattern_view = pattern
          __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(__pyx_cur_scope->__pyx_v_pattern, 0); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 7981, __pyx_L8_error)
          __pyx_cur_scope->__pyx_v_pattern_view = __pyx_t_8;
          __pyx_t_8.memview = NULL;
          __pyx_t_8.data = NULL;
+7982:                 except TypeError:
        __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
        if (__pyx_t_9) {
          __Pyx_AddTraceback("cbytesparse._c.Memory.values", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0) __PYX_ERR(0, 7982, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_GOTREF(__pyx_t_12);
+7983:                     pattern_view = bytes(pattern)
          __pyx_t_13 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_cur_scope->__pyx_v_pattern); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 7983, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(__pyx_t_13, 0); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 7983, __pyx_L10_except_error)
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __PYX_XDEC_MEMVIEW(&__pyx_cur_scope->__pyx_v_pattern_view, 1);
          __pyx_cur_scope->__pyx_v_pattern_view = __pyx_t_8;
          __pyx_t_8.memview = NULL;
          __pyx_t_8.data = NULL;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          goto __pyx_L9_exception_handled;
        }
        goto __pyx_L10_except_error;
        __pyx_L10_except_error:;
 7984:                 with cython.boundscheck(False):
+7985:                     pattern_size = len(pattern_view)
      __pyx_t_14 = __Pyx_MemoryView_Len(__pyx_cur_scope->__pyx_v_pattern_view); 
      __pyx_cur_scope->__pyx_v_pattern_size = __pyx_t_14;
+7986:                     pattern_data = &pattern_view[0]
      __pyx_t_15 = 0;
      if (__pyx_t_15 < 0) __pyx_t_15 += __pyx_cur_scope->__pyx_v_pattern_view.shape[0];
      __pyx_cur_scope->__pyx_v_pattern_data = (&(*((byte_t const  *) ( /* dim=0 */ (__pyx_cur_scope->__pyx_v_pattern_view.data + __pyx_t_15 * __pyx_cur_scope->__pyx_v_pattern_view.strides[0]) ))));
    }
    __pyx_L7:;
 7987: 
+7988:         try:
  /*try:*/ {
+7989:             rover = Rover_Create(self._, start_, endex_, pattern_size, pattern_data, True, endex is Ellipsis)
    __pyx_t_2 = (__pyx_cur_scope->__pyx_v_endex == __pyx_builtin_Ellipsis);
    __pyx_t_16 = __pyx_f_11cbytesparse_2_c_Rover_Create(__pyx_cur_scope->__pyx_v_self->_, __pyx_cur_scope->__pyx_v_start_, __pyx_cur_scope->__pyx_v_endex_, __pyx_cur_scope->__pyx_v_pattern_size, __pyx_cur_scope->__pyx_v_pattern_data, 1, __pyx_t_2); if (unlikely(__pyx_t_16 == ((Rover_ *)NULL))) __PYX_ERR(0, 7989, __pyx_L17_error)
    __pyx_cur_scope->__pyx_v_rover = __pyx_t_16;
+7990:             while Rover_HasNext(rover):
    while (1) {
      __pyx_t_2 = (__pyx_f_11cbytesparse_2_c_Rover_HasNext(__pyx_cur_scope->__pyx_v_rover) != 0);
      if (!__pyx_t_2) break;
+7991:                 yield Rover_Next(rover)
      __pyx_t_12 = __pyx_f_11cbytesparse_2_c_Rover_Next(__pyx_cur_scope->__pyx_v_rover); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 7991, __pyx_L17_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_r = __pyx_t_12;
      __pyx_t_12 = 0;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, yielding value */
      __pyx_generator->resume_label = 1;
      return __pyx_r;
      __pyx_L21_resume_from_yield:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 7991, __pyx_L17_error)
    }
  }
 7992:         finally:
+7993:             rover = Rover_Free(rover)
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_16 = __pyx_f_11cbytesparse_2_c_Rover_Free(__pyx_cur_scope->__pyx_v_rover); if (unlikely(__pyx_t_16 == ((Rover_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 7993, __pyx_L1_error)
      __pyx_cur_scope->__pyx_v_rover = __pyx_t_16;
      goto __pyx_L18;
    }
    __pyx_L17_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_assign
      __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_6, &__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_19);
      __Pyx_XGOTREF(__pyx_t_20);
      __Pyx_XGOTREF(__pyx_t_21);
      __pyx_t_9 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
      {
        __pyx_t_16 = __pyx_f_11cbytesparse_2_c_Rover_Free(__pyx_cur_scope->__pyx_v_rover); if (unlikely(__pyx_t_16 == ((Rover_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 7993, __pyx_L23_error)
        __pyx_cur_scope->__pyx_v_rover = __pyx_t_16;
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_XGIVEREF(__pyx_t_20);
        __Pyx_XGIVEREF(__pyx_t_21);
        __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21);
      }
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ErrRestore(__pyx_t_7, __pyx_t_6, __pyx_t_5);
      __pyx_t_7 = 0; __pyx_t_6 = 0; __pyx_t_5 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
      __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
      goto __pyx_L1_error;
      __pyx_L23_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_XGIVEREF(__pyx_t_20);
        __Pyx_XGIVEREF(__pyx_t_21);
        __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21);
      }
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L18:;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 7994: 
+7995:     def rvalues(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_117rvalues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_116rvalues[] = "Memory.rvalues(self: Memory, start: Optional[Union[Address, EllipsisType]] = None, endex: Optional[Address] = None, pattern: Optional[Union[AnyBytes, Value]] = None) -> Iterator[Optional[Value]]\nIterates over values, reversed order.\n\n        Iterates over values, from `endex` to `start`.\n\n        Arguments:\n            start (int):\n                Inclusive start address.\n                If ``None``, :attr:`start` is considered.\n                If ``Ellipsis``, the iterator is infinite.\n\n            endex (int):\n                Exclusive end address.\n                If ``None``, :attr:`endex` is considered.\n\n            pattern (items):\n                Pattern of values to fill emptiness.\n\n        Yields:\n            int: Range values.\n\n        Examples:\n            >>> from itertools import islice\n            >>> memory = Memory()\n            >>> list(memory.values(endex=8))\n            [None, None, None, None, None, None, None]\n            >>> list(memory.values(3, 8))\n            [None, None, None, None, None]\n            >>> list(islice(memory.values(3, ...), 7))\n            [None, None, None, None, None, None, None]\n\n            ~~~\n\n            +---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |\n            +===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+\n            |   | 65| 66| 67|   |   |120|121|122|   |\n            +---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])\n            >>> list(memory.values())\n            [65, 66, 67, None, None, 120, 121, 122]\n            >>> list(memory.values(3, 8))\n            [67, None, None, 120, 121]\n            >>> list(islice(memory.values(3, ...), 7))\n            [67, None, None, 120, 121, 122, None]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_117rvalues = {"rvalues", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_117rvalues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_116rvalues};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_117rvalues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_v_pattern = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rvalues (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_start,&__pyx_n_s_endex,&__pyx_n_s_pattern,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_116rvalues(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_pattern) {
  struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_4_rvalues *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rvalues", 0);
  __pyx_cur_scope = (struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_4_rvalues *)__pyx_tp_new_11cbytesparse_2_c___pyx_scope_struct_4_rvalues(__pyx_ptype_11cbytesparse_2_c___pyx_scope_struct_4_rvalues, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_4_rvalues *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 7995, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_start = __pyx_v_start;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_start);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_start);
  __pyx_cur_scope->__pyx_v_endex = __pyx_v_endex;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_endex);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_endex);
  __pyx_cur_scope->__pyx_v_pattern = __pyx_v_pattern;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_pattern);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_pattern);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11cbytesparse_2_c_6Memory_118generator4, __pyx_codeobj__28, (PyObject *) __pyx_cur_scope, __pyx_n_s_rvalues, __pyx_n_s_Memory_rvalues, __pyx_n_s_cbytesparse__c); if (unlikely(!gen)) __PYX_ERR(0, 7995, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.rvalues", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11cbytesparse_2_c_6Memory_118generator4(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("rvalues", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 7995, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("rvalues", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11cbytesparse_2_c_6Memory_121generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__146 = PyTuple_Pack(11, __pyx_n_s_self, __pyx_n_s_start, __pyx_n_s_endex, __pyx_n_s_pattern, __pyx_n_s_start_2, __pyx_n_s_endex_2, __pyx_n_s_rover, __pyx_n_s_pattern_value, __pyx_n_s_pattern_view, __pyx_n_s_pattern_size, __pyx_n_s_pattern_data); if (unlikely(!__pyx_tuple__146)) __PYX_ERR(0, 7995, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__146);
  __Pyx_GIVEREF(__pyx_tuple__146);
/* … */
  __pyx_t_6 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 7995, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 7995, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_117rvalues, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_rvalues, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__28)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7995, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_rvalues, __pyx_t_2) < 0) __PYX_ERR(0, 7995, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__28 = (PyObject*)__Pyx_PyCode_New(4, 0, 11, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__146, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_rvalues, 7995, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__28)) __PYX_ERR(0, 7995, __pyx_L1_error)
/* … */
struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_4_rvalues {
  PyObject_HEAD
  PyObject *__pyx_v_endex;
  addr_t __pyx_v_endex_;
  PyObject *__pyx_v_pattern;
  byte_t const *__pyx_v_pattern_data;
  size_t __pyx_v_pattern_size;
  byte_t __pyx_v_pattern_value;
  __Pyx_memviewslice __pyx_v_pattern_view;
  Rover_ *__pyx_v_rover;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self;
  PyObject *__pyx_v_start;
  addr_t __pyx_v_start_;
  PyObject *__pyx_t_0;
  PyObject *__pyx_t_1;
  PyObject *__pyx_t_2;
};

 7996:         self: Memory,
+7997:         start: Optional[Union[Address, EllipsisType]] = None,
    values[0] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Union); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Address); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_EllipsisType); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
  __pyx_t_5 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7997, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_start, __pyx_t_4) < 0) __PYX_ERR(0, 7995, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+7998:         endex: Optional[Address] = None,
    values[1] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Optional); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_endex, __pyx_t_2) < 0) __PYX_ERR(0, 7995, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+7999:         pattern: Optional[Union[AnyBytes, Value]] = None,
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pattern);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "rvalues") < 0)) __PYX_ERR(0, 7995, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_start = values[0];
    __pyx_v_endex = values[1];
    __pyx_v_pattern = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("rvalues", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 7995, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.rvalues", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_116rvalues(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_start, __pyx_v_endex, __pyx_v_pattern);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 7999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Union); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 7999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 7999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
  __pyx_t_4 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 7999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 7999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_pattern, __pyx_t_5) < 0) __PYX_ERR(0, 7995, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+8000:     ) -> Iterator[Optional[Value]]:
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Iterator); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8000, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Optional); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8000, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Value); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8000, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8000, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8000, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return, __pyx_t_2) < 0) __PYX_ERR(0, 7995, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 8001:         r"""Iterates over values, reversed order.
 8002: 
 8003:         Iterates over values, from `endex` to `start`.
 8004: 
 8005:         Arguments:
 8006:             start (int):
 8007:                 Inclusive start address.
 8008:                 If ``None``, :attr:`start` is considered.
 8009:                 If ``Ellipsis``, the iterator is infinite.
 8010: 
 8011:             endex (int):
 8012:                 Exclusive end address.
 8013:                 If ``None``, :attr:`endex` is considered.
 8014: 
 8015:             pattern (items):
 8016:                 Pattern of values to fill emptiness.
 8017: 
 8018:         Yields:
 8019:             int: Range values.
 8020: 
 8021:         Examples:
 8022:             >>> from itertools import islice
 8023:             >>> memory = Memory()
 8024:             >>> list(memory.values(endex=8))
 8025:             [None, None, None, None, None, None, None]
 8026:             >>> list(memory.values(3, 8))
 8027:             [None, None, None, None, None]
 8028:             >>> list(islice(memory.values(3, ...), 7))
 8029:             [None, None, None, None, None, None, None]
 8030: 
 8031:             ~~~
 8032: 
 8033:             +---+---+---+---+---+---+---+---+---+---+
 8034:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
 8035:             +===+===+===+===+===+===+===+===+===+===+
 8036:             |   |[A | B | C]|   |   |[x | y | z]|   |
 8037:             +---+---+---+---+---+---+---+---+---+---+
 8038:             |   | 65| 66| 67|   |   |120|121|122|   |
 8039:             +---+---+---+---+---+---+---+---+---+---+
 8040: 
 8041:             >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])
 8042:             >>> list(memory.values())
 8043:             [65, 66, 67, None, None, 120, 121, 122]
 8044:             >>> list(memory.values(3, 8))
 8045:             [67, None, None, 120, 121]
 8046:             >>> list(islice(memory.values(3, ...), 7))
 8047:             [67, None, None, 120, 121, 122, None]
 8048:         """
 8049:         cdef:
 8050:             addr_t start_
 8051:             addr_t endex_
+8052:             Rover_* rover = NULL
  __pyx_cur_scope->__pyx_v_rover = NULL;
 8053:             byte_t pattern_value
 8054:             const byte_t[:] pattern_view
+8055:             size_t pattern_size = 0
  __pyx_cur_scope->__pyx_v_pattern_size = 0;
+8056:             const byte_t* pattern_data = NULL
  __pyx_cur_scope->__pyx_v_pattern_data = NULL;
 8057: 
+8058:         if start is None:
  __pyx_t_1 = (__pyx_cur_scope->__pyx_v_start == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L4;
  }
+8059:             start_ = Memory_Start(self._)
    __pyx_cur_scope->__pyx_v_start_ = __pyx_f_11cbytesparse_2_c_Memory_Start(__pyx_cur_scope->__pyx_v_self->_);
+8060:         elif start is Ellipsis:
  __pyx_t_2 = (__pyx_cur_scope->__pyx_v_start == __pyx_builtin_Ellipsis);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+8061:             start_ = ADDR_MIN
    __pyx_cur_scope->__pyx_v_start_ = ADDR_MIN;
 8062:         else:
+8063:             start_ = <addr_t>start
  /*else*/ {
    __pyx_t_3 = __Pyx_PyInt_As_uint_fast64_t(__pyx_cur_scope->__pyx_v_start); if (unlikely((__pyx_t_3 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 8063, __pyx_L1_error)
    __pyx_cur_scope->__pyx_v_start_ = ((addr_t)__pyx_t_3);
  }
  __pyx_L4:;
 8064: 
+8065:         if endex is None:
  __pyx_t_1 = (__pyx_cur_scope->__pyx_v_endex == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {
/* … */
    goto __pyx_L5;
  }
+8066:             endex_ = Memory_Endex(self._)
    __pyx_cur_scope->__pyx_v_endex_ = __pyx_f_11cbytesparse_2_c_Memory_Endex(__pyx_cur_scope->__pyx_v_self->_);
 8067:         else:
+8068:             endex_ = <addr_t>endex
  /*else*/ {
    __pyx_t_3 = __Pyx_PyInt_As_uint_fast64_t(__pyx_cur_scope->__pyx_v_endex); if (unlikely((__pyx_t_3 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 8068, __pyx_L1_error)
    __pyx_cur_scope->__pyx_v_endex_ = ((addr_t)__pyx_t_3);
  }
  __pyx_L5:;
 8069: 
+8070:         if pattern is not None:
  __pyx_t_2 = (__pyx_cur_scope->__pyx_v_pattern != Py_None);
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {
/* … */
  }
+8071:             if isinstance(pattern, int):
    __pyx_t_1 = PyInt_Check(__pyx_cur_scope->__pyx_v_pattern); 
    __pyx_t_2 = (__pyx_t_1 != 0);
    if (__pyx_t_2) {
/* … */
      goto __pyx_L7;
    }
+8072:                 pattern_value = <byte_t>pattern
      __pyx_t_4 = __Pyx_PyInt_As_byte_t(__pyx_cur_scope->__pyx_v_pattern); if (unlikely((__pyx_t_4 == ((byte_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 8072, __pyx_L1_error)
      __pyx_cur_scope->__pyx_v_pattern_value = ((byte_t)__pyx_t_4);
+8073:                 pattern_size = 1
      __pyx_cur_scope->__pyx_v_pattern_size = 1;
+8074:                 pattern_data = &pattern_value
      __pyx_cur_scope->__pyx_v_pattern_data = (&__pyx_cur_scope->__pyx_v_pattern_value);
 8075:             else:
+8076:                 try:
    /*else*/ {
      {
        /*try:*/ {
/* … */
        }
        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        goto __pyx_L13_try_end;
        __pyx_L8_error:;
        __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
        __Pyx_XGIVEREF(__pyx_t_5);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
        goto __pyx_L1_error;
        __pyx_L9_exception_handled:;
        __Pyx_XGIVEREF(__pyx_t_5);
        __Pyx_XGIVEREF(__pyx_t_6);
        __Pyx_XGIVEREF(__pyx_t_7);
        __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
        __pyx_L13_try_end:;
      }
+8077:                     pattern_view = pattern
          __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(__pyx_cur_scope->__pyx_v_pattern, 0); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 8077, __pyx_L8_error)
          __pyx_cur_scope->__pyx_v_pattern_view = __pyx_t_8;
          __pyx_t_8.memview = NULL;
          __pyx_t_8.data = NULL;
+8078:                 except TypeError:
        __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
        if (__pyx_t_9) {
          __Pyx_AddTraceback("cbytesparse._c.Memory.rvalues", __pyx_clineno, __pyx_lineno, __pyx_filename);
          if (__Pyx_GetException(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12) < 0) __PYX_ERR(0, 8078, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_10);
          __Pyx_GOTREF(__pyx_t_11);
          __Pyx_GOTREF(__pyx_t_12);
+8079:                     pattern_view = bytes(pattern)
          __pyx_t_13 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyBytes_Type)), __pyx_cur_scope->__pyx_v_pattern); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8079, __pyx_L10_except_error)
          __Pyx_GOTREF(__pyx_t_13);
          __pyx_t_8 = __Pyx_PyObject_to_MemoryviewSlice_ds_nn_byte_t__const__(__pyx_t_13, 0); if (unlikely(!__pyx_t_8.memview)) __PYX_ERR(0, 8079, __pyx_L10_except_error)
          __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
          __PYX_XDEC_MEMVIEW(&__pyx_cur_scope->__pyx_v_pattern_view, 1);
          __pyx_cur_scope->__pyx_v_pattern_view = __pyx_t_8;
          __pyx_t_8.memview = NULL;
          __pyx_t_8.data = NULL;
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
          __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
          goto __pyx_L9_exception_handled;
        }
        goto __pyx_L10_except_error;
        __pyx_L10_except_error:;
 8080:                 with cython.boundscheck(False):
+8081:                     pattern_size = len(pattern_view)
      __pyx_t_14 = __Pyx_MemoryView_Len(__pyx_cur_scope->__pyx_v_pattern_view); 
      __pyx_cur_scope->__pyx_v_pattern_size = __pyx_t_14;
+8082:                     pattern_data = &pattern_view[0]
      __pyx_t_15 = 0;
      if (__pyx_t_15 < 0) __pyx_t_15 += __pyx_cur_scope->__pyx_v_pattern_view.shape[0];
      __pyx_cur_scope->__pyx_v_pattern_data = (&(*((byte_t const  *) ( /* dim=0 */ (__pyx_cur_scope->__pyx_v_pattern_view.data + __pyx_t_15 * __pyx_cur_scope->__pyx_v_pattern_view.strides[0]) ))));
    }
    __pyx_L7:;
 8083: 
+8084:         rover = Rover_Create(self._, start_, endex_, pattern_size, pattern_data, False, start is Ellipsis)
  __pyx_t_2 = (__pyx_cur_scope->__pyx_v_start == __pyx_builtin_Ellipsis);
  __pyx_t_16 = __pyx_f_11cbytesparse_2_c_Rover_Create(__pyx_cur_scope->__pyx_v_self->_, __pyx_cur_scope->__pyx_v_start_, __pyx_cur_scope->__pyx_v_endex_, __pyx_cur_scope->__pyx_v_pattern_size, __pyx_cur_scope->__pyx_v_pattern_data, 0, __pyx_t_2); if (unlikely(__pyx_t_16 == ((Rover_ *)NULL))) __PYX_ERR(0, 8084, __pyx_L1_error)
  __pyx_cur_scope->__pyx_v_rover = __pyx_t_16;
+8085:         try:
  /*try:*/ {
    {
      /*try:*/ {
/* … */
      }
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L24_try_end;
      __pyx_L19_error:;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
/* … */
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
      goto __pyx_L17_error;
      __pyx_L20_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_ExceptionReset(__pyx_t_7, __pyx_t_6, __pyx_t_5);
      __pyx_L24_try_end:;
    }
  }
+8086:             while True:
        while (1) {
+8087:                 yield Rover_Next(rover)
          __pyx_t_12 = __pyx_f_11cbytesparse_2_c_Rover_Next(__pyx_cur_scope->__pyx_v_rover); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8087, __pyx_L19_error)
          __Pyx_GOTREF(__pyx_t_12);
          __pyx_r = __pyx_t_12;
          __pyx_t_12 = 0;
          __Pyx_XGIVEREF(__pyx_t_5);
          __pyx_cur_scope->__pyx_t_0 = __pyx_t_5;
          __Pyx_XGIVEREF(__pyx_t_6);
          __pyx_cur_scope->__pyx_t_1 = __pyx_t_6;
          __Pyx_XGIVEREF(__pyx_t_7);
          __pyx_cur_scope->__pyx_t_2 = __pyx_t_7;
          __Pyx_XGIVEREF(__pyx_r);
          __Pyx_RefNannyFinishContext();
          __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
          /* return from generator, yielding value */
          __pyx_generator->resume_label = 1;
          return __pyx_r;
          __pyx_L27_resume_from_yield:;
          __pyx_t_5 = __pyx_cur_scope->__pyx_t_0;
          __pyx_cur_scope->__pyx_t_0 = 0;
          __Pyx_XGOTREF(__pyx_t_5);
          __pyx_t_6 = __pyx_cur_scope->__pyx_t_1;
          __pyx_cur_scope->__pyx_t_1 = 0;
          __Pyx_XGOTREF(__pyx_t_6);
          __pyx_t_7 = __pyx_cur_scope->__pyx_t_2;
          __pyx_cur_scope->__pyx_t_2 = 0;
          __Pyx_XGOTREF(__pyx_t_7);
          if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 8087, __pyx_L19_error)
        }
+8088:         except StopIteration:
      __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_StopIteration);
      if (__pyx_t_9) {
        __Pyx_ErrRestore(0,0,0);
        goto __pyx_L20_exception_handled;
      }
      goto __pyx_L21_except_error;
      __pyx_L21_except_error:;
 8089:             pass
 8090:         finally:
+8091:             Rover_Free(rover)
  /*finally:*/ {
    /*normal exit:*/{
      __pyx_t_16 = __pyx_f_11cbytesparse_2_c_Rover_Free(__pyx_cur_scope->__pyx_v_rover); if (unlikely(__pyx_t_16 == ((Rover_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 8091, __pyx_L1_error)
      goto __pyx_L18;
    }
    __pyx_L17_error:;
    /*exception exit:*/{
      __Pyx_PyThreadState_assign
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __PYX_XDEC_MEMVIEW(&__pyx_t_8, 1);
      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_19, &__pyx_t_20, &__pyx_t_21);
      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7) < 0)) __Pyx_ErrFetch(&__pyx_t_5, &__pyx_t_6, &__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_5);
      __Pyx_XGOTREF(__pyx_t_6);
      __Pyx_XGOTREF(__pyx_t_7);
      __Pyx_XGOTREF(__pyx_t_19);
      __Pyx_XGOTREF(__pyx_t_20);
      __Pyx_XGOTREF(__pyx_t_21);
      __pyx_t_9 = __pyx_lineno; __pyx_t_17 = __pyx_clineno; __pyx_t_18 = __pyx_filename;
      {
        __pyx_t_16 = __pyx_f_11cbytesparse_2_c_Rover_Free(__pyx_cur_scope->__pyx_v_rover); if (unlikely(__pyx_t_16 == ((Rover_ *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 8091, __pyx_L29_error)
      }
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_XGIVEREF(__pyx_t_20);
        __Pyx_XGIVEREF(__pyx_t_21);
        __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21);
      }
      __Pyx_XGIVEREF(__pyx_t_5);
      __Pyx_XGIVEREF(__pyx_t_6);
      __Pyx_XGIVEREF(__pyx_t_7);
      __Pyx_ErrRestore(__pyx_t_5, __pyx_t_6, __pyx_t_7);
      __pyx_t_5 = 0; __pyx_t_6 = 0; __pyx_t_7 = 0; __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
      __pyx_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_17; __pyx_filename = __pyx_t_18;
      goto __pyx_L1_error;
      __pyx_L29_error:;
      if (PY_MAJOR_VERSION >= 3) {
        __Pyx_XGIVEREF(__pyx_t_19);
        __Pyx_XGIVEREF(__pyx_t_20);
        __Pyx_XGIVEREF(__pyx_t_21);
        __Pyx_ExceptionReset(__pyx_t_19, __pyx_t_20, __pyx_t_21);
      }
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_19 = 0; __pyx_t_20 = 0; __pyx_t_21 = 0;
      goto __pyx_L1_error;
    }
    __pyx_L18:;
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 8092: 
+8093:     def items(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_120items(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_119items[] = "Memory.items(self: Memory, start: Optional[Address] = None, endex: Optional[Union[Address, EllipsisType]] = None, pattern: Optional[Union[AnyBytes, Value]] = None) -> Iterator[Tuple[Address, Value]]\nIterates over address and value couples.\n\n        Iterates over address and value couples, from `start` to `endex`.\n        Implemets the interface of :obj:`dict`.\n\n        Arguments:\n            start (int):\n                Inclusive start address.\n                If ``None``, :attr:`start` is considered.\n\n            endex (int):\n                Exclusive end address.\n                If ``None``, :attr:`endex` is considered.\n                If ``Ellipsis``, the iterator is infinite.\n\n            pattern (items):\n                Pattern of values to fill emptiness.\n\n        Yields:\n            int: Range address and value couples.\n\n        Examples:\n            >>> from itertools import islice\n            >>> memory = Memory()\n            >>> list(memory.items(endex=8))\n            [(0, None), (1, None), (2, None), (3, None), (4, None), (5, None), (6, None), (7, None)]\n            >>> list(memory.items(3, 8))\n            [(3, None), (4, None), (5, None), (6, None), (7, None)]\n            >>> list(islice(memory.items(3, ...), 7))\n            [(3, None), (4, None), (5, None), (6, None), (7, None), (8, None), (9, None)]\n\n            ~~~\n\n            +---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |\n            +===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B | C]|   |   |[x | y | z]|   |\n            +---+---+---+---+---+---+---+---+---+---+\n            |   | 65| 66| 67|   |   |120|121|122|   |\n            +---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])\n            >>> list(memory.items())\n            [(1, 65), (2, 66), (3, 67), (4, None), (5, None), (6, 120), (7, 121), (8, 122)]\n            >>> list(m""emory.items(3, 8))\n            [(3, 67), (4, None), (5, None), (6, 120), (7, 121)]\n            >>> list(islice(memory.items(3, ...), 7))\n            [(3, 67), (4, None), (5, None), (6, 120), (7, 121), (8, 122), (9, None)]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_120items = {"items", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_120items, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_119items};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_120items(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_v_pattern = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("items (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_start,&__pyx_n_s_endex,&__pyx_n_s_pattern,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_119items(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_pattern) {
  struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_5_items *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("items", 0);
  __pyx_cur_scope = (struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_5_items *)__pyx_tp_new_11cbytesparse_2_c___pyx_scope_struct_5_items(__pyx_ptype_11cbytesparse_2_c___pyx_scope_struct_5_items, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_5_items *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 8093, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_start = __pyx_v_start;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_start);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_start);
  __pyx_cur_scope->__pyx_v_endex = __pyx_v_endex;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_endex);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_endex);
  __pyx_cur_scope->__pyx_v_pattern = __pyx_v_pattern;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_pattern);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_pattern);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11cbytesparse_2_c_6Memory_121generator5, __pyx_codeobj__29, (PyObject *) __pyx_cur_scope, __pyx_n_s_items, __pyx_n_s_Memory_items, __pyx_n_s_cbytesparse__c); if (unlikely(!gen)) __PYX_ERR(0, 8093, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.items", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11cbytesparse_2_c_6Memory_121generator5(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("items", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 8093, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("items", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11cbytesparse_2_c_6Memory_124generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__147 = PyTuple_Pack(4, __pyx_n_s_self, __pyx_n_s_start, __pyx_n_s_endex, __pyx_n_s_pattern); if (unlikely(!__pyx_tuple__147)) __PYX_ERR(0, 8093, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__147);
  __Pyx_GIVEREF(__pyx_tuple__147);
/* … */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8093, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 8093, __pyx_L1_error)
/* … */
  __pyx_t_5 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_120items, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_items, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__29)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8093, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_5, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_items, __pyx_t_5) < 0) __PYX_ERR(0, 8093, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__29 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__147, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_items, 8093, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__29)) __PYX_ERR(0, 8093, __pyx_L1_error)
/* … */
struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_5_items {
  PyObject_HEAD
  PyObject *__pyx_v_endex;
  PyObject *__pyx_v_pattern;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self;
  PyObject *__pyx_v_start;
};

 8094:         self: Memory,
+8095:         start: Optional[Address] = None,
    values[0] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8095, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Address); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8095, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8095, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_start, __pyx_t_5) < 0) __PYX_ERR(0, 8093, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+8096:         endex: Optional[Union[Address, EllipsisType]] = None,
    values[1] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8096, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Union); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8096, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Address); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8096, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_EllipsisType); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8096, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8096, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
  __pyx_t_6 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8096, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8096, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_endex, __pyx_t_4) < 0) __PYX_ERR(0, 8093, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+8097:         pattern: Optional[Union[AnyBytes, Value]] = None,
    values[2] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pattern);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "items") < 0)) __PYX_ERR(0, 8093, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_start = values[0];
    __pyx_v_endex = values[1];
    __pyx_v_pattern = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("items", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 8093, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.items", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_119items(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_start, __pyx_v_endex, __pyx_v_pattern);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Optional); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8097, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Union); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8097, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_AnyBytes); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8097, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Value); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8097, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8097, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3);
  __pyx_t_5 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8097, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8097, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_pattern, __pyx_t_6) < 0) __PYX_ERR(0, 8093, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+8098:     ) -> Iterator[Tuple[Address, Value]]:
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Iterator); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Tuple); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_Address); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_1);
  __pyx_t_4 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8098, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_t_5) < 0) __PYX_ERR(0, 8093, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 8099:         r"""Iterates over address and value couples.
 8100: 
 8101:         Iterates over address and value couples, from `start` to `endex`.
 8102:         Implemets the interface of :obj:`dict`.
 8103: 
 8104:         Arguments:
 8105:             start (int):
 8106:                 Inclusive start address.
 8107:                 If ``None``, :attr:`start` is considered.
 8108: 
 8109:             endex (int):
 8110:                 Exclusive end address.
 8111:                 If ``None``, :attr:`endex` is considered.
 8112:                 If ``Ellipsis``, the iterator is infinite.
 8113: 
 8114:             pattern (items):
 8115:                 Pattern of values to fill emptiness.
 8116: 
 8117:         Yields:
 8118:             int: Range address and value couples.
 8119: 
 8120:         Examples:
 8121:             >>> from itertools import islice
 8122:             >>> memory = Memory()
 8123:             >>> list(memory.items(endex=8))
 8124:             [(0, None), (1, None), (2, None), (3, None), (4, None), (5, None), (6, None), (7, None)]
 8125:             >>> list(memory.items(3, 8))
 8126:             [(3, None), (4, None), (5, None), (6, None), (7, None)]
 8127:             >>> list(islice(memory.items(3, ...), 7))
 8128:             [(3, None), (4, None), (5, None), (6, None), (7, None), (8, None), (9, None)]
 8129: 
 8130:             ~~~
 8131: 
 8132:             +---+---+---+---+---+---+---+---+---+---+
 8133:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
 8134:             +===+===+===+===+===+===+===+===+===+===+
 8135:             |   |[A | B | C]|   |   |[x | y | z]|   |
 8136:             +---+---+---+---+---+---+---+---+---+---+
 8137:             |   | 65| 66| 67|   |   |120|121|122|   |
 8138:             +---+---+---+---+---+---+---+---+---+---+
 8139: 
 8140:             >>> memory = Memory.from_blocks([[1, b'ABC'], [6, b'xyz']])
 8141:             >>> list(memory.items())
 8142:             [(1, 65), (2, 66), (3, 67), (4, None), (5, None), (6, 120), (7, 121), (8, 122)]
 8143:             >>> list(memory.items(3, 8))
 8144:             [(3, 67), (4, None), (5, None), (6, 120), (7, 121)]
 8145:             >>> list(islice(memory.items(3, ...), 7))
 8146:             [(3, 67), (4, None), (5, None), (6, 120), (7, 121), (8, 122), (9, None)]
 8147:         """
 8148: 
+8149:         yield from zip(self.keys(start, endex), self.values(start, endex, pattern))  # TODO: cythonize
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_keys); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_start, __pyx_cur_scope->__pyx_v_endex};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8149, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_start, __pyx_cur_scope->__pyx_v_endex};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8149, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8149, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_start);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_start);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_cur_scope->__pyx_v_start);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_endex);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_endex);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_cur_scope->__pyx_v_endex);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8149, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_values); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_start, __pyx_cur_scope->__pyx_v_endex, __pyx_cur_scope->__pyx_v_pattern};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8149, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
    PyObject *__pyx_temp[4] = {__pyx_t_3, __pyx_cur_scope->__pyx_v_start, __pyx_cur_scope->__pyx_v_endex, __pyx_cur_scope->__pyx_v_pattern};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8149, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8149, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_start);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_start);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_4, __pyx_cur_scope->__pyx_v_start);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_endex);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_endex);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_4, __pyx_cur_scope->__pyx_v_endex);
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_pattern);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_pattern);
    PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_4, __pyx_cur_scope->__pyx_v_pattern);
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8149, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_zip, __pyx_t_5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_r = __Pyx_Generator_Yield_From(__pyx_generator, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_XGOTREF(__pyx_r);
  if (likely(__pyx_r)) {
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L4_resume_from_yield_from:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 8149, __pyx_L1_error)
  } else {
    PyObject* exc_type = __Pyx_PyErr_Occurred();
    if (exc_type) {
      if (likely(exc_type == PyExc_StopIteration || (exc_type != PyExc_GeneratorExit && __Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)))) PyErr_Clear();
      else __PYX_ERR(0, 8149, __pyx_L1_error)
    }
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
 8150: 
+8151:     def intervals(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_123intervals(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_122intervals[] = "Memory.intervals(self: Memory, start: Optional[Address] = None, endex: Optional[Address] = None) -> Iterator[ClosedInterval]\nIterates over block intervals.\n\n        Iterates over data boundaries within an address range.\n\n        Arguments:\n            start (int):\n                Inclusive start address.\n                If ``None``, :attr:`start` is considered.\n\n            endex (int):\n                Exclusive end address.\n                If ``None``, :attr:`endex` is considered.\n\n        Yields:\n            couple of addresses: Block data interval boundaries.\n\n        Example:\n            +---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|\n            +===+===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B]|   |   |[x]|   |[1 | 2 | 3]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'AB'], [5, b'x'], [7, b'123']])\n            >>> list(memory.intervals())\n            [(1, 3), (5, 6), (7, 10)]\n            >>> list(memory.intervals(2, 9))\n            [(2, 3), (5, 6), (7, 9)]\n            >>> list(memory.intervals(3, 5))\n            []\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_123intervals = {"intervals", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_123intervals, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_122intervals};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_123intervals(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("intervals (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_start,&__pyx_n_s_endex,0};
    PyObject* values[2] = {0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_122intervals(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_endex) {
  struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_6_intervals *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("intervals", 0);
  __pyx_cur_scope = (struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_6_intervals *)__pyx_tp_new_11cbytesparse_2_c___pyx_scope_struct_6_intervals(__pyx_ptype_11cbytesparse_2_c___pyx_scope_struct_6_intervals, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_6_intervals *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 8151, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_start = __pyx_v_start;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_start);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_start);
  __pyx_cur_scope->__pyx_v_endex = __pyx_v_endex;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_endex);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_endex);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11cbytesparse_2_c_6Memory_124generator6, __pyx_codeobj__30, (PyObject *) __pyx_cur_scope, __pyx_n_s_intervals, __pyx_n_s_Memory_intervals, __pyx_n_s_cbytesparse__c); if (unlikely(!gen)) __PYX_ERR(0, 8151, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.intervals", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11cbytesparse_2_c_6Memory_124generator6(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("intervals", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 8151, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("intervals", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_11cbytesparse_2_c_6Memory_127generator7(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */
/* … */
  __pyx_tuple__148 = PyTuple_Pack(15, __pyx_n_s_self, __pyx_n_s_start, __pyx_n_s_endex, __pyx_n_s_start_2, __pyx_n_s_endex_2, __pyx_n_s_blocks, __pyx_n_s_block_count, __pyx_n_s_block_index, __pyx_n_s_block_index_start_2, __pyx_n_s_block_index_endex_2, __pyx_n_s_block, __pyx_n_s_block_start, __pyx_n_s_block_endex, __pyx_n_s_slice_start, __pyx_n_s_slice_endex); if (unlikely(!__pyx_tuple__148)) __PYX_ERR(0, 8151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__148);
  __Pyx_GIVEREF(__pyx_tuple__148);
/* … */
  __pyx_t_5 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 8151, __pyx_L1_error)
/* … */
  __pyx_t_6 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_123intervals, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_intervals, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__30)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_6, __pyx_t_5);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_intervals, __pyx_t_6) < 0) __PYX_ERR(0, 8151, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__30 = (PyObject*)__Pyx_PyCode_New(3, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__148, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_intervals, 8151, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__30)) __PYX_ERR(0, 8151, __pyx_L1_error)
/* … */
struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_6_intervals {
  PyObject_HEAD
  Block_ const *__pyx_v_block;
  size_t __pyx_v_block_count;
  addr_t __pyx_v_block_endex;
  size_t __pyx_v_block_index;
  size_t __pyx_v_block_index_endex;
  size_t __pyx_v_block_index_start;
  addr_t __pyx_v_block_start;
  Rack_ const *__pyx_v_blocks;
  PyObject *__pyx_v_endex;
  addr_t __pyx_v_endex_;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self;
  size_t __pyx_v_slice_endex;
  size_t __pyx_v_slice_start;
  PyObject *__pyx_v_start;
  addr_t __pyx_v_start_;
  size_t __pyx_t_0;
  size_t __pyx_t_1;
  size_t __pyx_t_2;
};

 8152:         self: Memory,
+8153:         start: Optional[Address] = None,
    values[0] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8153, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_start, __pyx_t_6) < 0) __PYX_ERR(0, 8151, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+8154:         endex: Optional[Address] = None,
    values[1] = ((PyObject *)Py_None);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "intervals") < 0)) __PYX_ERR(0, 8151, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_start = values[0];
    __pyx_v_endex = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("intervals", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 8151, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.intervals", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_122intervals(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_start, __pyx_v_endex);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_endex, __pyx_t_2) < 0) __PYX_ERR(0, 8151, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+8155:     ) -> Iterator[ClosedInterval]:
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Iterator); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_ClosedInterval); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8155, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_return, __pyx_t_6) < 0) __PYX_ERR(0, 8151, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 8156:         r"""Iterates over block intervals.
 8157: 
 8158:         Iterates over data boundaries within an address range.
 8159: 
 8160:         Arguments:
 8161:             start (int):
 8162:                 Inclusive start address.
 8163:                 If ``None``, :attr:`start` is considered.
 8164: 
 8165:             endex (int):
 8166:                 Exclusive end address.
 8167:                 If ``None``, :attr:`endex` is considered.
 8168: 
 8169:         Yields:
 8170:             couple of addresses: Block data interval boundaries.
 8171: 
 8172:         Example:
 8173:             +---+---+---+---+---+---+---+---+---+---+---+
 8174:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|
 8175:             +===+===+===+===+===+===+===+===+===+===+===+
 8176:             |   |[A | B]|   |   |[x]|   |[1 | 2 | 3]|   |
 8177:             +---+---+---+---+---+---+---+---+---+---+---+
 8178: 
 8179:             >>> memory = Memory.from_blocks([[1, b'AB'], [5, b'x'], [7, b'123']])
 8180:             >>> list(memory.intervals())
 8181:             [(1, 3), (5, 6), (7, 10)]
 8182:             >>> list(memory.intervals(2, 9))
 8183:             [(2, 3), (5, 6), (7, 9)]
 8184:             >>> list(memory.intervals(3, 5))
 8185:             []
 8186:         """
 8187:         cdef:
 8188:             addr_t start_
 8189:             addr_t endex_
+8190:             const Rack_* blocks = self._.blocks
  __pyx_t_1 = __pyx_cur_scope->__pyx_v_self->_->blocks;
  __pyx_cur_scope->__pyx_v_blocks = __pyx_t_1;
+8191:             size_t block_count = Rack_Length(blocks)
  __pyx_cur_scope->__pyx_v_block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_cur_scope->__pyx_v_blocks);
 8192:             size_t block_index
 8193:             size_t block_index_start
 8194:             size_t block_index_endex
 8195:             const Block_* block
 8196:             addr_t block_start
 8197:             addr_t block_endex
 8198:             size_t slice_start
 8199:             size_t slice_endex
 8200: 
+8201:         if block_count:
  __pyx_t_2 = (__pyx_cur_scope->__pyx_v_block_count != 0);
  if (__pyx_t_2) {
/* … */
  }
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
+8202:             block_index_start = 0 if start is None else Rack_IndexStart(blocks, <addr_t>start)
    __pyx_t_2 = (__pyx_cur_scope->__pyx_v_start == Py_None);
    if ((__pyx_t_2 != 0)) {
      __pyx_t_3 = 0;
    } else {
      __pyx_t_4 = __Pyx_PyInt_As_uint_fast64_t(__pyx_cur_scope->__pyx_v_start); if (unlikely((__pyx_t_4 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 8202, __pyx_L1_error)
      __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Rack_IndexStart(__pyx_cur_scope->__pyx_v_blocks, ((addr_t)__pyx_t_4)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 8202, __pyx_L1_error)
      __pyx_t_3 = __pyx_t_5;
    }
    __pyx_cur_scope->__pyx_v_block_index_start = __pyx_t_3;
+8203:             block_index_endex = block_count if endex is None else Rack_IndexEndex(blocks, <addr_t>endex)
    __pyx_t_2 = (__pyx_cur_scope->__pyx_v_endex == Py_None);
    if ((__pyx_t_2 != 0)) {
      __pyx_t_3 = __pyx_cur_scope->__pyx_v_block_count;
    } else {
      __pyx_t_4 = __Pyx_PyInt_As_uint_fast64_t(__pyx_cur_scope->__pyx_v_endex); if (unlikely((__pyx_t_4 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 8203, __pyx_L1_error)
      __pyx_t_5 = __pyx_f_11cbytesparse_2_c_Rack_IndexEndex(__pyx_cur_scope->__pyx_v_blocks, ((addr_t)__pyx_t_4)); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 8203, __pyx_L1_error)
      __pyx_t_3 = __pyx_t_5;
    }
    __pyx_cur_scope->__pyx_v_block_index_endex = __pyx_t_3;
+8204:             start_, endex_ = Memory_Bound(self._, start, endex)
    __pyx_t_6 = __pyx_f_11cbytesparse_2_c_Memory_Bound(__pyx_cur_scope->__pyx_v_self->_, __pyx_cur_scope->__pyx_v_start, __pyx_cur_scope->__pyx_v_endex); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 8204, __pyx_L1_error)
    __pyx_t_4 = __pyx_t_6.f0;
    __pyx_t_7 = __pyx_t_6.f1;
    __pyx_cur_scope->__pyx_v_start_ = __pyx_t_4;
    __pyx_cur_scope->__pyx_v_endex_ = __pyx_t_7;
 8205: 
+8206:             for block_index in range(block_index_start, block_index_endex):
    __pyx_t_3 = __pyx_cur_scope->__pyx_v_block_index_endex;
    __pyx_t_8 = __pyx_t_3;
    for (__pyx_t_9 = __pyx_cur_scope->__pyx_v_block_index_start; __pyx_t_9 < __pyx_t_8; __pyx_t_9+=1) {
      __pyx_cur_scope->__pyx_v_block_index = __pyx_t_9;
+8207:                 block = Rack_Get__(blocks, block_index)
      __pyx_cur_scope->__pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_cur_scope->__pyx_v_blocks, __pyx_cur_scope->__pyx_v_block_index);
+8208:                 block_start = Block_Start(block)
      __pyx_cur_scope->__pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_cur_scope->__pyx_v_block);
+8209:                 block_endex = Block_Endex(block)
      __pyx_cur_scope->__pyx_v_block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_cur_scope->__pyx_v_block);
+8210:                 slice_start = block_start if start_ < block_start else start_
      if (((__pyx_cur_scope->__pyx_v_start_ < __pyx_cur_scope->__pyx_v_block_start) != 0)) {
        __pyx_t_7 = __pyx_cur_scope->__pyx_v_block_start;
      } else {
        __pyx_t_7 = __pyx_cur_scope->__pyx_v_start_;
      }
      __pyx_cur_scope->__pyx_v_slice_start = __pyx_t_7;
+8211:                 slice_endex = endex_ if endex_ < block_endex else block_endex
      if (((__pyx_cur_scope->__pyx_v_endex_ < __pyx_cur_scope->__pyx_v_block_endex) != 0)) {
        __pyx_t_7 = __pyx_cur_scope->__pyx_v_endex_;
      } else {
        __pyx_t_7 = __pyx_cur_scope->__pyx_v_block_endex;
      }
      __pyx_cur_scope->__pyx_v_slice_endex = __pyx_t_7;
+8212:                 if slice_start < slice_endex:
      __pyx_t_2 = ((__pyx_cur_scope->__pyx_v_slice_start < __pyx_cur_scope->__pyx_v_slice_endex) != 0);
      if (__pyx_t_2) {
/* … */
      }
    }
+8213:                     yield slice_start, slice_endex
        __pyx_t_10 = __Pyx_PyInt_FromSize_t(__pyx_cur_scope->__pyx_v_slice_start); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8213, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_11 = __Pyx_PyInt_FromSize_t(__pyx_cur_scope->__pyx_v_slice_endex); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8213, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_11);
        __pyx_t_12 = PyTuple_New(2); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8213, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_12);
        __Pyx_GIVEREF(__pyx_t_10);
        PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_10);
        __Pyx_GIVEREF(__pyx_t_11);
        PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_11);
        __pyx_t_10 = 0;
        __pyx_t_11 = 0;
        __pyx_r = __pyx_t_12;
        __pyx_t_12 = 0;
        __pyx_cur_scope->__pyx_t_0 = __pyx_t_3;
        __pyx_cur_scope->__pyx_t_1 = __pyx_t_8;
        __pyx_cur_scope->__pyx_t_2 = __pyx_t_9;
        __Pyx_XGIVEREF(__pyx_r);
        __Pyx_RefNannyFinishContext();
        __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
        /* return from generator, yielding value */
        __pyx_generator->resume_label = 1;
        return __pyx_r;
        __pyx_L8_resume_from_yield:;
        __pyx_t_3 = __pyx_cur_scope->__pyx_t_0;
        __pyx_t_8 = __pyx_cur_scope->__pyx_t_1;
        __pyx_t_9 = __pyx_cur_scope->__pyx_t_2;
        if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 8213, __pyx_L1_error)
 8214: 
+8215:     def gaps(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_126gaps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_125gaps[] = "Memory.gaps(self: Memory, start: Optional[Address] = None, endex: Optional[Address] = None, bound: bool = False) -> Iterator[OpenInterval]\nIterates over block gaps.\n\n        Iterates over gaps emptiness bounds within an address range.\n        If a yielded bound is ``None``, that direction is infinitely empty\n        (valid before or after global data bounds).\n\n        Arguments:\n            start (int):\n                Inclusive start address.\n                If ``None``, :attr:`start` is considered.\n\n            endex (int):\n                Exclusive end address.\n                If ``None``, :attr:`endex` is considered.\n\n            bound (bool):\n                Only gaps within blocks are considered; emptiness before and\n                after global data bounds are ignored.\n\n        Yields:\n            couple of addresses: Block data interval boundaries.\n\n        Example:\n            +---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|\n            +===+===+===+===+===+===+===+===+===+===+===+\n            |   |[A | B]|   |   |[x]|   |[1 | 2 | 3]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[1, b'AB'], [5, b'x'], [7, b'123']])\n            >>> list(memory.gaps())\n            [(None, 1), (3, 5), (6, 7), (10, None)]\n            >>> list(memory.gaps(bound=True))\n            [(3, 5), (6, 7)]\n            >>> list(memory.gaps(2, 6))\n            [(3, 5)]\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_126gaps = {"gaps", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_11cbytesparse_2_c_6Memory_126gaps, METH_VARARGS|METH_KEYWORDS, __pyx_doc_11cbytesparse_2_c_6Memory_125gaps};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_126gaps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_start = 0;
  PyObject *__pyx_v_endex = 0;
  PyObject *__pyx_v_bound = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("gaps (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_start,&__pyx_n_s_endex,&__pyx_n_s_bound,0};
    PyObject* values[3] = {0,0,0};
/* … */
  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_125gaps(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_start, PyObject *__pyx_v_endex, PyObject *__pyx_v_bound) {
  struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_7_gaps *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("gaps", 0);
  __pyx_cur_scope = (struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_7_gaps *)__pyx_tp_new_11cbytesparse_2_c___pyx_scope_struct_7_gaps(__pyx_ptype_11cbytesparse_2_c___pyx_scope_struct_7_gaps, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_7_gaps *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 8215, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __pyx_cur_scope->__pyx_v_start = __pyx_v_start;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_start);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_start);
  __pyx_cur_scope->__pyx_v_endex = __pyx_v_endex;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_endex);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_endex);
  __pyx_cur_scope->__pyx_v_bound = __pyx_v_bound;
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_bound);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_bound);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_11cbytesparse_2_c_6Memory_127generator7, __pyx_codeobj__31, (PyObject *) __pyx_cur_scope, __pyx_n_s_gaps, __pyx_n_s_Memory_gaps, __pyx_n_s_cbytesparse__c); if (unlikely(!gen)) __PYX_ERR(0, 8215, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.gaps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_11cbytesparse_2_c_6Memory_127generator7(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("gaps", 0);
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 8215, __pyx_L1_error)
/* … */
  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_AddTraceback("gaps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__149 = PyTuple_Pack(17, __pyx_n_s_self, __pyx_n_s_start, __pyx_n_s_endex, __pyx_n_s_bound, __pyx_n_s_start_2, __pyx_n_s_endex_2, __pyx_n_s_bound_2, __pyx_n_s_blocks, __pyx_n_s_block_count, __pyx_n_s_block_index, __pyx_n_s_block_index_start_2, __pyx_n_s_block_index_endex_2, __pyx_n_s_block, __pyx_n_s_block_start, __pyx_n_s_block_endex, __pyx_n_s_start_3, __pyx_n_s_endex_3); if (unlikely(!__pyx_tuple__149)) __PYX_ERR(0, 8215, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__149);
  __Pyx_GIVEREF(__pyx_tuple__149);
/* … */
  __pyx_t_6 = __Pyx_PyDict_NewPresized(5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8215, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 8215, __pyx_L1_error)
/* … */
  __pyx_t_2 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_126gaps, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_gaps, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__31)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8215, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_2, __pyx_t_6);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_gaps, __pyx_t_2) < 0) __PYX_ERR(0, 8215, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__31 = (PyObject*)__Pyx_PyCode_New(4, 0, 17, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__149, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_gaps, 8215, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__31)) __PYX_ERR(0, 8215, __pyx_L1_error)
/* … */
struct __pyx_obj_11cbytesparse_2_c___pyx_scope_struct_7_gaps {
  PyObject_HEAD
  Block_ const *__pyx_v_block;
  size_t __pyx_v_block_count;
  addr_t __pyx_v_block_endex;
  size_t __pyx_v_block_index;
  size_t __pyx_v_block_index_endex;
  size_t __pyx_v_block_index_start;
  addr_t __pyx_v_block_start;
  Rack_ const *__pyx_v_blocks;
  PyObject *__pyx_v_bound;
  int __pyx_v_bound_;
  PyObject *__pyx_v_endex;
  addr_t __pyx_v_endex_;
  PyObject *__pyx_v_endex__;
  struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self;
  PyObject *__pyx_v_start;
  addr_t __pyx_v_start_;
  PyObject *__pyx_v_start__;
  size_t __pyx_t_0;
  size_t __pyx_t_1;
  size_t __pyx_t_2;
};

 8216:         self: Memory,
+8217:         start: Optional[Address] = None,
    values[0] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8217, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8217, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8217, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_start, __pyx_t_2) < 0) __PYX_ERR(0, 8215, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+8218:         endex: Optional[Address] = None,
    values[1] = ((PyObject *)Py_None);
/* … */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Optional); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8218, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_endex, __pyx_t_5) < 0) __PYX_ERR(0, 8215, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+8219:         bound: bool = False,
    values[2] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_start);
          if (value) { values[0] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_endex);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_bound);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "gaps") < 0)) __PYX_ERR(0, 8215, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_start = values[0];
    __pyx_v_endex = values[1];
    __pyx_v_bound = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("gaps", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 8215, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("cbytesparse._c.Memory.gaps", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_125gaps(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), __pyx_v_start, __pyx_v_endex, __pyx_v_bound);
/* … */
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_bound, ((PyObject*)&PyBool_Type)) < 0) __PYX_ERR(0, 8215, __pyx_L1_error)
+8220:     ) -> Iterator[OpenInterval]:
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Iterator); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_OpenInterval); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8220, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_t_6, __pyx_n_s_return, __pyx_t_2) < 0) __PYX_ERR(0, 8215, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 8221:         r"""Iterates over block gaps.
 8222: 
 8223:         Iterates over gaps emptiness bounds within an address range.
 8224:         If a yielded bound is ``None``, that direction is infinitely empty
 8225:         (valid before or after global data bounds).
 8226: 
 8227:         Arguments:
 8228:             start (int):
 8229:                 Inclusive start address.
 8230:                 If ``None``, :attr:`start` is considered.
 8231: 
 8232:             endex (int):
 8233:                 Exclusive end address.
 8234:                 If ``None``, :attr:`endex` is considered.
 8235: 
 8236:             bound (bool):
 8237:                 Only gaps within blocks are considered; emptiness before and
 8238:                 after global data bounds are ignored.
 8239: 
 8240:         Yields:
 8241:             couple of addresses: Block data interval boundaries.
 8242: 
 8243:         Example:
 8244:             +---+---+---+---+---+---+---+---+---+---+---+
 8245:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|
 8246:             +===+===+===+===+===+===+===+===+===+===+===+
 8247:             |   |[A | B]|   |   |[x]|   |[1 | 2 | 3]|   |
 8248:             +---+---+---+---+---+---+---+---+---+---+---+
 8249: 
 8250:             >>> memory = Memory.from_blocks([[1, b'AB'], [5, b'x'], [7, b'123']])
 8251:             >>> list(memory.gaps())
 8252:             [(None, 1), (3, 5), (6, 7), (10, None)]
 8253:             >>> list(memory.gaps(bound=True))
 8254:             [(3, 5), (6, 7)]
 8255:             >>> list(memory.gaps(2, 6))
 8256:             [(3, 5)]
 8257:         """
 8258:         cdef:
 8259:             addr_t start_
 8260:             addr_t endex_
+8261:             bint bound_ = <bint>bound
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_cur_scope->__pyx_v_bound); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 8261, __pyx_L1_error)
  __pyx_cur_scope->__pyx_v_bound_ = __pyx_t_1;
+8262:             const Rack_* blocks = self._.blocks
  __pyx_t_2 = __pyx_cur_scope->__pyx_v_self->_->blocks;
  __pyx_cur_scope->__pyx_v_blocks = __pyx_t_2;
+8263:             size_t block_count = Rack_Length(blocks)
  __pyx_cur_scope->__pyx_v_block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_cur_scope->__pyx_v_blocks);
 8264:             size_t block_index
 8265:             size_t block_index_start
 8266:             size_t block_index_endex
 8267:             const Block_* block
 8268:             addr_t block_start
 8269:             addr_t block_endex
 8270: 
+8271:         if block_count:
  __pyx_t_1 = (__pyx_cur_scope->__pyx_v_block_count != 0);
  if (__pyx_t_1) {
/* … */
    goto __pyx_L4;
  }
+8272:             start__ = start
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_start);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_start);
    __pyx_cur_scope->__pyx_v_start__ = __pyx_cur_scope->__pyx_v_start;
+8273:             endex__ = endex
    __Pyx_INCREF(__pyx_cur_scope->__pyx_v_endex);
    __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_endex);
    __pyx_cur_scope->__pyx_v_endex__ = __pyx_cur_scope->__pyx_v_endex;
+8274:             start_, endex_ = Memory_Bound(self._, start, endex)
    __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Memory_Bound(__pyx_cur_scope->__pyx_v_self->_, __pyx_cur_scope->__pyx_v_start, __pyx_cur_scope->__pyx_v_endex); if (unlikely(PyErr_Occurred())) __PYX_ERR(0, 8274, __pyx_L1_error)
    __pyx_t_4 = __pyx_t_3.f0;
    __pyx_t_5 = __pyx_t_3.f1;
    __pyx_cur_scope->__pyx_v_start_ = __pyx_t_4;
    __pyx_cur_scope->__pyx_v_endex_ = __pyx_t_5;
 8275: 
+8276:             if start__ is None:
    __pyx_t_1 = (__pyx_cur_scope->__pyx_v_start__ == Py_None);
    __pyx_t_6 = (__pyx_t_1 != 0);
    if (__pyx_t_6) {
/* … */
      goto __pyx_L5;
    }
+8277:                 if not bound_:
      __pyx_t_6 = ((!(__pyx_cur_scope->__pyx_v_bound_ != 0)) != 0);
      if (__pyx_t_6) {
/* … */
      }
+8278:                     block = Rack_First__(blocks)
        __pyx_cur_scope->__pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_First__(__pyx_cur_scope->__pyx_v_blocks);
+8279:                     start_ = Block_Start(block)  # override trim start
        __pyx_cur_scope->__pyx_v_start_ = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_cur_scope->__pyx_v_block);
+8280:                     yield None, start_
        __pyx_t_7 = __Pyx_PyInt_From_uint_fast64_t(__pyx_cur_scope->__pyx_v_start_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8280, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8280, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_INCREF(Py_None);
        __Pyx_GIVEREF(Py_None);
        PyTuple_SET_ITEM(__pyx_t_8, 0, Py_None);
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_7);
        __pyx_t_7 = 0;
        __pyx_r = __pyx_t_8;
        __pyx_t_8 = 0;
        __Pyx_XGIVEREF(__pyx_r);
        __Pyx_RefNannyFinishContext();
        __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
        /* return from generator, yielding value */
        __pyx_generator->resume_label = 1;
        return __pyx_r;
        __pyx_L7_resume_from_yield:;
        if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 8280, __pyx_L1_error)
+8281:                 block_index_start = 0
      __pyx_cur_scope->__pyx_v_block_index_start = 0;
 8282:             else:
+8283:                 block_index_start = Rack_IndexStart(blocks, start_)
    /*else*/ {
      __pyx_t_9 = __pyx_f_11cbytesparse_2_c_Rack_IndexStart(__pyx_cur_scope->__pyx_v_blocks, __pyx_cur_scope->__pyx_v_start_); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 8283, __pyx_L1_error)
      __pyx_cur_scope->__pyx_v_block_index_start = __pyx_t_9;
    }
    __pyx_L5:;
 8284: 
+8285:             if endex__ is None:
    __pyx_t_6 = (__pyx_cur_scope->__pyx_v_endex__ == Py_None);
    __pyx_t_1 = (__pyx_t_6 != 0);
    if (__pyx_t_1) {
/* … */
      goto __pyx_L8;
    }
+8286:                 block_index_endex = block_count
      __pyx_cur_scope->__pyx_v_block_index_endex = __pyx_cur_scope->__pyx_v_block_count;
 8287:             else:
+8288:                 block_index_endex = Rack_IndexEndex(blocks, endex_)
    /*else*/ {
      __pyx_t_9 = __pyx_f_11cbytesparse_2_c_Rack_IndexEndex(__pyx_cur_scope->__pyx_v_blocks, __pyx_cur_scope->__pyx_v_endex_); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 8288, __pyx_L1_error)
      __pyx_cur_scope->__pyx_v_block_index_endex = __pyx_t_9;
    }
    __pyx_L8:;
 8289: 
+8290:             for block_index in range(block_index_start, block_index_endex):
    __pyx_t_10 = __pyx_cur_scope->__pyx_v_block_index_endex;
    __pyx_t_11 = __pyx_t_10;
    for (__pyx_t_12 = __pyx_cur_scope->__pyx_v_block_index_start; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
      __pyx_cur_scope->__pyx_v_block_index = __pyx_t_12;
+8291:                 block = Rack_Get__(blocks, block_index)
      __pyx_cur_scope->__pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_cur_scope->__pyx_v_blocks, __pyx_cur_scope->__pyx_v_block_index);
+8292:                 block_start = Block_Start(block)
      __pyx_cur_scope->__pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_cur_scope->__pyx_v_block);
+8293:                 if start_ < block_start:
      __pyx_t_1 = ((__pyx_cur_scope->__pyx_v_start_ < __pyx_cur_scope->__pyx_v_block_start) != 0);
      if (__pyx_t_1) {
/* … */
      }
+8294:                     yield start_, block_start
        __pyx_t_8 = __Pyx_PyInt_From_uint_fast64_t(__pyx_cur_scope->__pyx_v_start_); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8294, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_8);
        __pyx_t_7 = __Pyx_PyInt_From_uint_fast64_t(__pyx_cur_scope->__pyx_v_block_start); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8294, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8294, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_13);
        __Pyx_GIVEREF(__pyx_t_8);
        PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_8);
        __Pyx_GIVEREF(__pyx_t_7);
        PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_7);
        __pyx_t_8 = 0;
        __pyx_t_7 = 0;
        __pyx_r = __pyx_t_13;
        __pyx_t_13 = 0;
        __pyx_cur_scope->__pyx_t_0 = __pyx_t_10;
        __pyx_cur_scope->__pyx_t_1 = __pyx_t_11;
        __pyx_cur_scope->__pyx_t_2 = __pyx_t_12;
        __Pyx_XGIVEREF(__pyx_r);
        __Pyx_RefNannyFinishContext();
        __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
        /* return from generator, yielding value */
        __pyx_generator->resume_label = 2;
        return __pyx_r;
        __pyx_L12_resume_from_yield:;
        __pyx_t_10 = __pyx_cur_scope->__pyx_t_0;
        __pyx_t_11 = __pyx_cur_scope->__pyx_t_1;
        __pyx_t_12 = __pyx_cur_scope->__pyx_t_2;
        if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 8294, __pyx_L1_error)
+8295:                 start_ = Block_Endex(block)
      __pyx_cur_scope->__pyx_v_start_ = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_cur_scope->__pyx_v_block);
    }
 8296: 
+8297:             if endex__ is None and not bound_:
    __pyx_t_6 = (__pyx_cur_scope->__pyx_v_endex__ == Py_None);
    __pyx_t_14 = (__pyx_t_6 != 0);
    if (__pyx_t_14) {
    } else {
      __pyx_t_1 = __pyx_t_14;
      goto __pyx_L14_bool_binop_done;
    }
    __pyx_t_14 = ((!(__pyx_cur_scope->__pyx_v_bound_ != 0)) != 0);
    __pyx_t_1 = __pyx_t_14;
    __pyx_L14_bool_binop_done:;
    if (__pyx_t_1) {
/* … */
      goto __pyx_L13;
    }
+8298:                 yield start_, None
      __pyx_t_13 = __Pyx_PyInt_From_uint_fast64_t(__pyx_cur_scope->__pyx_v_start_); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8298, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8298, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_13);
      PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_13);
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyTuple_SET_ITEM(__pyx_t_7, 1, Py_None);
      __pyx_t_13 = 0;
      __pyx_r = __pyx_t_7;
      __pyx_t_7 = 0;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, yielding value */
      __pyx_generator->resume_label = 3;
      return __pyx_r;
      __pyx_L16_resume_from_yield:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 8298, __pyx_L1_error)
+8299:             elif start_ < endex_:
    __pyx_t_1 = ((__pyx_cur_scope->__pyx_v_start_ < __pyx_cur_scope->__pyx_v_endex_) != 0);
    if (__pyx_t_1) {
/* … */
    }
    __pyx_L13:;
+8300:                 yield start_, endex_
      __pyx_t_7 = __Pyx_PyInt_From_uint_fast64_t(__pyx_cur_scope->__pyx_v_start_); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8300, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_13 = __Pyx_PyInt_From_uint_fast64_t(__pyx_cur_scope->__pyx_v_endex_); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 8300, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_13);
      __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8300, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_13);
      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_13);
      __pyx_t_7 = 0;
      __pyx_t_13 = 0;
      __pyx_r = __pyx_t_8;
      __pyx_t_8 = 0;
      __Pyx_XGIVEREF(__pyx_r);
      __Pyx_RefNannyFinishContext();
      __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
      /* return from generator, yielding value */
      __pyx_generator->resume_label = 4;
      return __pyx_r;
      __pyx_L17_resume_from_yield:;
      if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 8300, __pyx_L1_error)
 8301: 
+8302:         elif not bound_:
  __pyx_t_1 = ((!(__pyx_cur_scope->__pyx_v_bound_ != 0)) != 0);
  if (__pyx_t_1) {
/* … */
  }
  __pyx_L4:;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);
+8303:             yield None, None
    __Pyx_INCREF(__pyx_tuple__32);
    __pyx_r = __pyx_tuple__32;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 5;
    return __pyx_r;
    __pyx_L18_resume_from_yield:;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 8303, __pyx_L1_error)
/* … */
  __pyx_tuple__32 = PyTuple_Pack(2, Py_None, Py_None); if (unlikely(!__pyx_tuple__32)) __PYX_ERR(0, 8303, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__32);
  __Pyx_GIVEREF(__pyx_tuple__32);
 8304: 
+8305:     def equal_span(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_129equal_span(PyObject *__pyx_v_self, PyObject *__pyx_v_address); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_128equal_span[] = "Memory.equal_span(self: Memory, address: Address) -> Tuple[Optional[Address], Optional[Address], Optional[Value]]\nSpan of homogeneous data.\n\n        It searches for the biggest chunk of data adjacent to the given\n        address, with the same value at that address.\n\n        If the address is within a gap, its bounds are returned, and its\n        value is ``None``.\n\n        If the address is before or after any data, bounds are ``None``.\n\n        Arguments:\n            address (int):\n                Reference address.\n\n        Returns:\n            tuple: Start bound, exclusive end bound, and reference value.\n\n        Examples:\n            >>> memory = Memory()\n            >>> memory.equal_span(0)\n            (None, None, None)\n\n            ~~~\n\n            +---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|\n            +===+===+===+===+===+===+===+===+===+===+===+\n            |[A | B | B | B | C]|   |   |[C | C | D]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+\n            | 65| 66| 66| 66| 67|   |   | 67| 67| 68|   |\n            +---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[0, b'ABBBC'], [7, b'CCD']])\n            >>> memory.equal_span(2)\n            (1, 4, 66)\n            >>> memory.equal_span(4)\n            (4, 5, 67)\n            >>> memory.equal_span(5)\n            (5, 7, None)\n            >>> memory.equal_span(10)\n            (10, None, None)\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_129equal_span = {"equal_span", (PyCFunction)__pyx_pw_11cbytesparse_2_c_6Memory_129equal_span, METH_O, __pyx_doc_11cbytesparse_2_c_6Memory_128equal_span};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_129equal_span(PyObject *__pyx_v_self, PyObject *__pyx_v_address) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("equal_span (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_128equal_span(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_address));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_128equal_span(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_address) {
  Rack_ const *__pyx_v_blocks;
  size_t __pyx_v_block_count;
  size_t __pyx_v_block_index;
  Block_ const *__pyx_v_block;
  addr_t __pyx_v_block_start;
  addr_t __pyx_v_block_endex;
  addr_t __pyx_v_address_;
  addr_t __pyx_v_start;
  addr_t __pyx_v_endex;
  size_t __pyx_v_offset;
  byte_t __pyx_v_value;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("equal_span", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("cbytesparse._c.Memory.equal_span", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__150 = PyTuple_Pack(15, __pyx_n_s_self, __pyx_n_s_address, __pyx_n_s_blocks, __pyx_n_s_block_count, __pyx_n_s_block_index, __pyx_n_s_block_index_start_2, __pyx_n_s_block_index_endex_2, __pyx_n_s_block, __pyx_n_s_block_start, __pyx_n_s_block_endex, __pyx_n_s_address_2, __pyx_n_s_start, __pyx_n_s_endex, __pyx_n_s_offset, __pyx_n_s_value); if (unlikely(!__pyx_tuple__150)) __PYX_ERR(0, 8305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__150);
  __Pyx_GIVEREF(__pyx_tuple__150);
/* … */
  __pyx_t_2 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 8305, __pyx_L1_error)
/* … */
  __pyx_t_7 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_129equal_span, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_equal_span, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__151)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_7, __pyx_t_2);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_equal_span, __pyx_t_7) < 0) __PYX_ERR(0, 8305, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__151 = (PyObject*)__Pyx_PyCode_New(2, 0, 15, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__150, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_equal_span, 8305, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__151)) __PYX_ERR(0, 8305, __pyx_L1_error)
 8306:         self: Memory,
+8307:         address: Address,
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Address); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_address, __pyx_t_6) < 0) __PYX_ERR(0, 8305, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+8308:     ) -> Tuple[Optional[Address], Optional[Address], Optional[Value]]:
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Tuple); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Optional); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Address); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Address); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Optional); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Value); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_7);
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8308, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_return, __pyx_t_7) < 0) __PYX_ERR(0, 8305, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 8309:         r"""Span of homogeneous data.
 8310: 
 8311:         It searches for the biggest chunk of data adjacent to the given
 8312:         address, with the same value at that address.
 8313: 
 8314:         If the address is within a gap, its bounds are returned, and its
 8315:         value is ``None``.
 8316: 
 8317:         If the address is before or after any data, bounds are ``None``.
 8318: 
 8319:         Arguments:
 8320:             address (int):
 8321:                 Reference address.
 8322: 
 8323:         Returns:
 8324:             tuple: Start bound, exclusive end bound, and reference value.
 8325: 
 8326:         Examples:
 8327:             >>> memory = Memory()
 8328:             >>> memory.equal_span(0)
 8329:             (None, None, None)
 8330: 
 8331:             ~~~
 8332: 
 8333:             +---+---+---+---+---+---+---+---+---+---+---+
 8334:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|
 8335:             +===+===+===+===+===+===+===+===+===+===+===+
 8336:             |[A | B | B | B | C]|   |   |[C | C | D]|   |
 8337:             +---+---+---+---+---+---+---+---+---+---+---+
 8338:             | 65| 66| 66| 66| 67|   |   | 67| 67| 68|   |
 8339:             +---+---+---+---+---+---+---+---+---+---+---+
 8340: 
 8341:             >>> memory = Memory.from_blocks([[0, b'ABBBC'], [7, b'CCD']])
 8342:             >>> memory.equal_span(2)
 8343:             (1, 4, 66)
 8344:             >>> memory.equal_span(4)
 8345:             (4, 5, 67)
 8346:             >>> memory.equal_span(5)
 8347:             (5, 7, None)
 8348:             >>> memory.equal_span(10)
 8349:             (10, None, None)
 8350:         """
 8351:         cdef:
+8352:             const Rack_* blocks = self._.blocks
  __pyx_t_1 = __pyx_v_self->_->blocks;
  __pyx_v_blocks = __pyx_t_1;
+8353:             size_t block_count = Rack_Length(blocks)
  __pyx_v_block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
 8354:             size_t block_index
 8355:             size_t block_index_start
 8356:             size_t block_index_endex
 8357:             const Block_* block
 8358:             addr_t block_start
 8359:             addr_t block_endex
+8360:             addr_t address_ = <addr_t>address
  __pyx_t_2 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_address); if (unlikely((__pyx_t_2 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 8360, __pyx_L1_error)
  __pyx_v_address_ = ((addr_t)__pyx_t_2);
 8361:             addr_t start
 8362:             addr_t endex
 8363:             size_t offset
 8364:             byte_t value
 8365: 
+8366:         block_index = Rack_IndexStart(blocks, address_)
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_IndexStart(__pyx_v_blocks, __pyx_v_address_); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 8366, __pyx_L1_error)
  __pyx_v_block_index = __pyx_t_3;
 8367: 
+8368:         if block_index < block_count:
  __pyx_t_4 = ((__pyx_v_block_index < __pyx_v_block_count) != 0);
  if (__pyx_t_4) {
/* … */
  }
+8369:             block = Rack_Get__(blocks, block_index)
    __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+8370:             block_start = Block_Start(block)
    __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+8371:             block_endex = Block_Endex(block)
    __pyx_v_block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
 8372: 
+8373:             if block_start <= address_ < block_endex:
    __pyx_t_4 = (__pyx_v_block_start <= __pyx_v_address_);
    if (__pyx_t_4) {
      __pyx_t_4 = (__pyx_v_address_ < __pyx_v_block_endex);
    }
    __pyx_t_5 = (__pyx_t_4 != 0);
    if (__pyx_t_5) {
/* … */
    }
 8374:                 # Address within a block
+8375:                 CheckSubAddrU(address_, block_start)
      __pyx_t_6 = __pyx_f_11cbytesparse_2_c_CheckSubAddrU(__pyx_v_address_, __pyx_v_block_start); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 8375, __pyx_L1_error)
+8376:                 CheckAddrToSizeU(address - block_start)
      __pyx_t_7 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_block_start); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8376, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = PyNumber_Subtract(__pyx_v_address, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8376, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_2 = __Pyx_PyInt_As_uint_fast64_t(__pyx_t_8); if (unlikely((__pyx_t_2 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 8376, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_6 = __pyx_f_11cbytesparse_2_c_CheckAddrToSizeU(__pyx_t_2); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 8376, __pyx_L1_error)
+8377:                 offset = <size_t>(address_ - block_start)
      __pyx_v_offset = ((size_t)(__pyx_v_address_ - __pyx_v_block_start));
+8378:                 start = offset
      __pyx_v_start = __pyx_v_offset;
+8379:                 CheckAddAddrU(offset, 1)
      __pyx_t_6 = __pyx_f_11cbytesparse_2_c_CheckAddAddrU(__pyx_v_offset, 1); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 8379, __pyx_L1_error)
+8380:                 endex = offset + 1
      __pyx_v_endex = (__pyx_v_offset + 1);
+8381:                 value = Block_Get__(block, offset)
      __pyx_v_value = __pyx_f_11cbytesparse_2_c_Block_Get__(__pyx_v_block, __pyx_v_offset);
 8382: 
+8383:                 for start in range(start + 1, 0, -1):
      for (__pyx_t_2 = (__pyx_v_start + 1) + 1; __pyx_t_2 > 0 + 1; ) { __pyx_t_2-=1;
        __pyx_v_start = __pyx_t_2;
+8384:                     if Block_Get__(block, start - 1) != value:
        __pyx_t_5 = ((__pyx_f_11cbytesparse_2_c_Block_Get__(__pyx_v_block, (__pyx_v_start - 1)) != __pyx_v_value) != 0);
        if (__pyx_t_5) {
/* … */
        }
      }
      /*else*/ {
+8385:                         break
          goto __pyx_L6_break;
 8386:                 else:
+8387:                     start = 0
        __pyx_v_start = 0;
      }
      __pyx_L6_break:;
 8388: 
+8389:                 for endex in range(endex, Block_Length(block)):
      __pyx_t_9 = __pyx_f_11cbytesparse_2_c_Block_Length(__pyx_v_block);
      __pyx_t_10 = __pyx_t_9;
      for (__pyx_t_2 = __pyx_v_endex; __pyx_t_2 < __pyx_t_10; __pyx_t_2+=1) {
        __pyx_v_endex = __pyx_t_2;
+8390:                     if Block_Get__(block, endex) != value:
        __pyx_t_5 = ((__pyx_f_11cbytesparse_2_c_Block_Get__(__pyx_v_block, __pyx_v_endex) != __pyx_v_value) != 0);
        if (__pyx_t_5) {
/* … */
        }
      }
      /*else*/ {
+8391:                         break
          goto __pyx_L9_break;
 8392:                 else:
+8393:                     endex = Block_Length(block)
        __pyx_v_endex = __pyx_f_11cbytesparse_2_c_Block_Length(__pyx_v_block);
      }
      __pyx_L9_break:;
 8394: 
+8395:                 block_endex = block_start + endex
      __pyx_v_block_endex = (__pyx_v_block_start + __pyx_v_endex);
+8396:                 block_start = block_start + start
      __pyx_v_block_start = (__pyx_v_block_start + __pyx_v_start);
+8397:                 return block_start, block_endex, value  # equal data span
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_8 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_block_start); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_7 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_block_endex); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_11 = __Pyx_PyInt_From_byte_t(__pyx_v_value); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8397, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_11);
      PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_t_11);
      __pyx_t_8 = 0;
      __pyx_t_7 = 0;
      __pyx_t_11 = 0;
      __pyx_r = __pyx_t_12;
      __pyx_t_12 = 0;
      goto __pyx_L0;
 8398: 
+8399:             elif block_index:
    __pyx_t_5 = (__pyx_v_block_index != 0);
    if (__pyx_t_5) {
/* … */
    }
 8400:                 # Address within a gap
+8401:                 block_endex = block_start  # end gap before next block
      __pyx_v_block_endex = __pyx_v_block_start;
+8402:                 block = Rack_Get__(blocks, block_index - 1)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, (__pyx_v_block_index - 1));
+8403:                 block_start = Block_Endex(block)  # start gap after previous block
      __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
+8404:                 return block_start, block_endex, None  # gap span
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_12 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_block_start); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 8404, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_12);
      __pyx_t_11 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_block_endex); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8404, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8404, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_12);
      PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_12);
      __Pyx_GIVEREF(__pyx_t_11);
      PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_11);
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyTuple_SET_ITEM(__pyx_t_7, 2, Py_None);
      __pyx_t_12 = 0;
      __pyx_t_11 = 0;
      __pyx_r = __pyx_t_7;
      __pyx_t_7 = 0;
      goto __pyx_L0;
 8405: 
 8406:             else:
 8407:                 # Address before content
+8408:                 return None, block_start, None  # open left
    /*else*/ {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_7 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_block_start); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8408, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_11 = PyTuple_New(3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8408, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyTuple_SET_ITEM(__pyx_t_11, 0, Py_None);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_7);
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyTuple_SET_ITEM(__pyx_t_11, 2, Py_None);
      __pyx_t_7 = 0;
      __pyx_r = __pyx_t_11;
      __pyx_t_11 = 0;
      goto __pyx_L0;
    }
 8409: 
 8410:         else:
 8411:             # Address after content
+8412:             if block_count:
  /*else*/ {
    __pyx_t_5 = (__pyx_v_block_count != 0);
    if (__pyx_t_5) {
/* … */
    }
+8413:                 block = Rack_Last__(blocks)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Last__(__pyx_v_blocks);
+8414:                 block_start = Block_Start(block)
      __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+8415:                 block_endex = Block_Endex(block)
      __pyx_v_block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
+8416:                 return block_endex, None, None  # open right
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_11 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_block_endex); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 8416, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_11);
      __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8416, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_11);
      PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_11);
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyTuple_SET_ITEM(__pyx_t_7, 1, Py_None);
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyTuple_SET_ITEM(__pyx_t_7, 2, Py_None);
      __pyx_t_11 = 0;
      __pyx_r = __pyx_t_7;
      __pyx_t_7 = 0;
      goto __pyx_L0;
 8417: 
 8418:             else:
+8419:                 return None, None, None  # fully open
    /*else*/ {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_tuple__33);
      __pyx_r = __pyx_tuple__33;
      goto __pyx_L0;
    }
  }
/* … */
  __pyx_tuple__33 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__33)) __PYX_ERR(0, 8419, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__33);
  __Pyx_GIVEREF(__pyx_tuple__33);
 8420: 
+8421:     def block_span(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_131block_span(PyObject *__pyx_v_self, PyObject *__pyx_v_address); /*proto*/
static char __pyx_doc_11cbytesparse_2_c_6Memory_130block_span[] = "Memory.block_span(self: Memory, address: Address) -> Tuple[Optional[Address], Optional[Address], Optional[Value]]\nSpan of block data.\n\n        It searches for the biggest chunk of data adjacent to the given\n        address.\n\n        If the address is within a gap, its bounds are returned, and its\n        value is ``None``.\n\n        If the address is before or after any data, bounds are ``None``.\n\n        Arguments:\n            address (int):\n                Reference address.\n\n        Returns:\n            tuple: Start bound, exclusive end bound, and reference value.\n\n        Examples:\n            >>> memory = Memory()\n            >>> memory.block_span(0)\n            (None, None, None)\n\n            ~~~\n\n            +---+---+---+---+---+---+---+---+---+---+---+\n            | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|\n            +===+===+===+===+===+===+===+===+===+===+===+\n            |[A | B | B | B | C]|   |   |[C | C | D]|   |\n            +---+---+---+---+---+---+---+---+---+---+---+\n            | 65| 66| 66| 66| 67|   |   | 67| 67| 68|   |\n            +---+---+---+---+---+---+---+---+---+---+---+\n\n            >>> memory = Memory.from_blocks([[0, b'ABBBC'], [7, b'CCD']])\n            >>> memory.block_span(2)\n            (0, 5, 66)\n            >>> memory.block_span(4)\n            (0, 5, 67)\n            >>> memory.block_span(5)\n            (5, 7, None)\n            >>> memory.block_span(10)\n            (10, None, None)\n        ";
static PyMethodDef __pyx_mdef_11cbytesparse_2_c_6Memory_131block_span = {"block_span", (PyCFunction)__pyx_pw_11cbytesparse_2_c_6Memory_131block_span, METH_O, __pyx_doc_11cbytesparse_2_c_6Memory_130block_span};
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_131block_span(PyObject *__pyx_v_self, PyObject *__pyx_v_address) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("block_span (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_130block_span(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self), ((PyObject *)__pyx_v_address));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_130block_span(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self, PyObject *__pyx_v_address) {
  addr_t __pyx_v_address_;
  Rack_ const *__pyx_v_blocks;
  size_t __pyx_v_block_count;
  size_t __pyx_v_block_index;
  Block_ const *__pyx_v_block;
  addr_t __pyx_v_block_start;
  addr_t __pyx_v_block_endex;
  byte_t __pyx_v_value;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("block_span", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("cbytesparse._c.Memory.block_span", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
/* … */
  __pyx_tuple__152 = PyTuple_Pack(10, __pyx_n_s_self, __pyx_n_s_address, __pyx_n_s_address_2, __pyx_n_s_blocks, __pyx_n_s_block_count, __pyx_n_s_block_index, __pyx_n_s_block, __pyx_n_s_block_start, __pyx_n_s_block_endex, __pyx_n_s_value); if (unlikely(!__pyx_tuple__152)) __PYX_ERR(0, 8421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__152);
  __Pyx_GIVEREF(__pyx_tuple__152);
/* … */
  __pyx_t_7 = __Pyx_PyDict_NewPresized(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_self, __pyx_n_u_Memory) < 0) __PYX_ERR(0, 8421, __pyx_L1_error)
/* … */
  __pyx_t_1 = __Pyx_CyFunction_New(&__pyx_mdef_11cbytesparse_2_c_6Memory_131block_span, __Pyx_CYFUNCTION_CCLASS, __pyx_n_s_Memory_block_span, NULL, __pyx_n_s_cbytesparse__c, __pyx_d, ((PyObject *)__pyx_codeobj__153)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8421, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_CyFunction_SetAnnotationsDict(__pyx_t_1, __pyx_t_7);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (PyDict_SetItem((PyObject *)__pyx_ptype_11cbytesparse_2_c_Memory->tp_dict, __pyx_n_s_block_span, __pyx_t_1) < 0) __PYX_ERR(0, 8421, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  PyType_Modified(__pyx_ptype_11cbytesparse_2_c_Memory);
  __pyx_codeobj__153 = (PyObject*)__Pyx_PyCode_New(2, 0, 10, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__152, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_src_cbytesparse__c_pyx, __pyx_n_s_block_span, 8421, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__153)) __PYX_ERR(0, 8421, __pyx_L1_error)
 8422:         self: Memory,
+8423:         address: Address,
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Address); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8423, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_address, __pyx_t_2) < 0) __PYX_ERR(0, 8421, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+8424:     ) -> Tuple[Optional[Address], Optional[Address], Optional[Value]]:
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_Tuple); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 8424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Address); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 8424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Optional); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Address); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = __Pyx_PyObject_GetItem(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 8424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_Optional); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 8424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_Value); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 8424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_1);
  __pyx_t_4 = 0;
  __pyx_t_3 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetItem(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8424, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_return, __pyx_t_1) < 0) __PYX_ERR(0, 8421, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 8425:         r"""Span of block data.
 8426: 
 8427:         It searches for the biggest chunk of data adjacent to the given
 8428:         address.
 8429: 
 8430:         If the address is within a gap, its bounds are returned, and its
 8431:         value is ``None``.
 8432: 
 8433:         If the address is before or after any data, bounds are ``None``.
 8434: 
 8435:         Arguments:
 8436:             address (int):
 8437:                 Reference address.
 8438: 
 8439:         Returns:
 8440:             tuple: Start bound, exclusive end bound, and reference value.
 8441: 
 8442:         Examples:
 8443:             >>> memory = Memory()
 8444:             >>> memory.block_span(0)
 8445:             (None, None, None)
 8446: 
 8447:             ~~~
 8448: 
 8449:             +---+---+---+---+---+---+---+---+---+---+---+
 8450:             | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10|
 8451:             +===+===+===+===+===+===+===+===+===+===+===+
 8452:             |[A | B | B | B | C]|   |   |[C | C | D]|   |
 8453:             +---+---+---+---+---+---+---+---+---+---+---+
 8454:             | 65| 66| 66| 66| 67|   |   | 67| 67| 68|   |
 8455:             +---+---+---+---+---+---+---+---+---+---+---+
 8456: 
 8457:             >>> memory = Memory.from_blocks([[0, b'ABBBC'], [7, b'CCD']])
 8458:             >>> memory.block_span(2)
 8459:             (0, 5, 66)
 8460:             >>> memory.block_span(4)
 8461:             (0, 5, 67)
 8462:             >>> memory.block_span(5)
 8463:             (5, 7, None)
 8464:             >>> memory.block_span(10)
 8465:             (10, None, None)
 8466:         """
 8467:         cdef:
+8468:             addr_t address_ = <addr_t>address
  __pyx_t_1 = __Pyx_PyInt_As_uint_fast64_t(__pyx_v_address); if (unlikely((__pyx_t_1 == ((addr_t)-1)) && PyErr_Occurred())) __PYX_ERR(0, 8468, __pyx_L1_error)
  __pyx_v_address_ = ((addr_t)__pyx_t_1);
+8469:             const Rack_* blocks = self._.blocks
  __pyx_t_2 = __pyx_v_self->_->blocks;
  __pyx_v_blocks = __pyx_t_2;
+8470:             size_t block_count = Rack_Length(blocks)
  __pyx_v_block_count = __pyx_f_11cbytesparse_2_c_Rack_Length(__pyx_v_blocks);
 8471:             size_t block_index
 8472:             const Block_* block
 8473:             addr_t block_start
 8474:             addr_t block_endex
 8475:             byte_t value
 8476: 
+8477:         block_index = Rack_IndexStart(blocks, address_)
  __pyx_t_3 = __pyx_f_11cbytesparse_2_c_Rack_IndexStart(__pyx_v_blocks, __pyx_v_address_); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-2L))) __PYX_ERR(0, 8477, __pyx_L1_error)
  __pyx_v_block_index = __pyx_t_3;
 8478: 
+8479:         if block_index < block_count:
  __pyx_t_4 = ((__pyx_v_block_index < __pyx_v_block_count) != 0);
  if (__pyx_t_4) {
/* … */
  }
+8480:             block = Rack_Get__(blocks, block_index)
    __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, __pyx_v_block_index);
+8481:             block_start = Block_Start(block)
    __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+8482:             block_endex = Block_Endex(block)
    __pyx_v_block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
 8483: 
+8484:             if block_start <= address_ < block_endex:
    __pyx_t_4 = (__pyx_v_block_start <= __pyx_v_address_);
    if (__pyx_t_4) {
      __pyx_t_4 = (__pyx_v_address_ < __pyx_v_block_endex);
    }
    __pyx_t_5 = (__pyx_t_4 != 0);
    if (__pyx_t_5) {
/* … */
    }
 8485:                 # Address within a block
+8486:                 CheckSubAddrU(address_, block_start)
      __pyx_t_6 = __pyx_f_11cbytesparse_2_c_CheckSubAddrU(__pyx_v_address_, __pyx_v_block_start); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 8486, __pyx_L1_error)
+8487:                 CheckAddrToSizeU(address_ - block_start)
      __pyx_t_6 = __pyx_f_11cbytesparse_2_c_CheckAddrToSizeU((__pyx_v_address_ - __pyx_v_block_start)); if (unlikely(__pyx_t_6 == ((__pyx_t_11cbytesparse_2_c_vint)-1))) __PYX_ERR(0, 8487, __pyx_L1_error)
+8488:                 value = Block_Get__(block, <size_t>(address_ - block_start))
      __pyx_v_value = __pyx_f_11cbytesparse_2_c_Block_Get__(__pyx_v_block, ((size_t)(__pyx_v_address_ - __pyx_v_block_start)));
+8489:                 return block_start, block_endex, value  # block span
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_7 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_block_start); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 8489, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_block_endex); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8489, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = __Pyx_PyInt_From_byte_t(__pyx_v_value); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8489, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_10 = PyTuple_New(3); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8489, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_7);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_t_9);
      __pyx_t_7 = 0;
      __pyx_t_8 = 0;
      __pyx_t_9 = 0;
      __pyx_r = __pyx_t_10;
      __pyx_t_10 = 0;
      goto __pyx_L0;
 8490: 
+8491:             elif block_index:
    __pyx_t_5 = (__pyx_v_block_index != 0);
    if (__pyx_t_5) {
/* … */
    }
 8492:                 # Address within a gap
+8493:                 block_endex = block_start  # end gap before next block
      __pyx_v_block_endex = __pyx_v_block_start;
+8494:                 block = Rack_Get__(blocks, block_index - 1)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Get__(__pyx_v_blocks, (__pyx_v_block_index - 1));
+8495:                 block_start = Block_Endex(block)  # start gap after previous block
      __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
+8496:                 return block_start, block_endex, None  # gap span
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_10 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_block_start); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 8496, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_9 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_block_endex); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8496, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8496, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_10);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_10);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_9);
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyTuple_SET_ITEM(__pyx_t_8, 2, Py_None);
      __pyx_t_10 = 0;
      __pyx_t_9 = 0;
      __pyx_r = __pyx_t_8;
      __pyx_t_8 = 0;
      goto __pyx_L0;
 8497: 
 8498:             else:
 8499:                 # Address before content
+8500:                 return None, block_start, None  # open left
    /*else*/ {
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_8 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_block_start); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8500, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_9 = PyTuple_New(3); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8500, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyTuple_SET_ITEM(__pyx_t_9, 0, Py_None);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_8);
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyTuple_SET_ITEM(__pyx_t_9, 2, Py_None);
      __pyx_t_8 = 0;
      __pyx_r = __pyx_t_9;
      __pyx_t_9 = 0;
      goto __pyx_L0;
    }
 8501: 
 8502:         else:
 8503:             # Address after content
+8504:             if block_count:
  /*else*/ {
    __pyx_t_5 = (__pyx_v_block_count != 0);
    if (__pyx_t_5) {
/* … */
    }
+8505:                 block = Rack_Last__(blocks)
      __pyx_v_block = __pyx_f_11cbytesparse_2_c_Rack_Last__(__pyx_v_blocks);
+8506:                 block_start = Block_Start(block)
      __pyx_v_block_start = __pyx_f_11cbytesparse_2_c_Block_Start(__pyx_v_block);
+8507:                 block_endex = Block_Endex(block)
      __pyx_v_block_endex = __pyx_f_11cbytesparse_2_c_Block_Endex(__pyx_v_block);
+8508:                 return block_endex, None, None  # open right
      __Pyx_XDECREF(__pyx_r);
      __pyx_t_9 = __Pyx_PyInt_From_uint_fast64_t(__pyx_v_block_endex); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 8508, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 8508, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_9);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyTuple_SET_ITEM(__pyx_t_8, 1, Py_None);
      __Pyx_INCREF(Py_None);
      __Pyx_GIVEREF(Py_None);
      PyTuple_SET_ITEM(__pyx_t_8, 2, Py_None);
      __pyx_t_9 = 0;
      __pyx_r = __pyx_t_8;
      __pyx_t_8 = 0;
      goto __pyx_L0;
 8509: 
 8510:             else:
+8511:                 return None, None, None  # fully open
    /*else*/ {
      __Pyx_XDECREF(__pyx_r);
      __Pyx_INCREF(__pyx_tuple__33);
      __pyx_r = __pyx_tuple__33;
      goto __pyx_L0;
    }
  }
 8512: 
 8513:     @property
+8514:     def _blocks(
/* Python wrapper */
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_7_blocks_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_11cbytesparse_2_c_6Memory_7_blocks_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_11cbytesparse_2_c_6Memory_7_blocks___get__(((struct __pyx_obj_11cbytesparse_2_c_Memory *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_11cbytesparse_2_c_6Memory_7_blocks___get__(struct __pyx_obj_11cbytesparse_2_c_Memory *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
/* … */
  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("cbytesparse._c.Memory._blocks.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
 8515:         self: Memory,
 8516:     ) -> BlockList:
 8517:         r"""list of blocks: A sequence of spaced blocks, sorted by address."""
 8518: 
+8519:         return Memory_ToBlocks(self._)
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __pyx_f_11cbytesparse_2_c_Memory_ToBlocks(__pyx_v_self->_); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 8519, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;