]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
Maple Tree: Add new data structure
authorLiam Howlett <Liam.Howlett@oracle.com>
Thu, 27 Feb 2020 20:04:42 +0000 (15:04 -0500)
committerMatthew Wilcox (Oracle) <willy@infradead.org>
Fri, 6 Mar 2020 01:43:42 +0000 (20:43 -0500)
The Maple Tree is a new data structure optimised for storing
ranges.

Signed-off-by: Liam Howlett <Liam.Howlett@oracle.com>
Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
13 files changed:
Documentation/core-api/index.rst
Documentation/core-api/maple-tree.rst [new file with mode: 0644]
MAINTAINERS
include/linux/maple_tree.h [new file with mode: 0644]
init/main.c
lib/Makefile
lib/maple_tree.c [new file with mode: 0644]
lib/test_maple_tree.c [new file with mode: 0644]
tools/testing/radix-tree/.gitignore
tools/testing/radix-tree/Makefile
tools/testing/radix-tree/linux/maple_tree.h [new file with mode: 0644]
tools/testing/radix-tree/ma_xa_benchmark.c [new file with mode: 0644]
tools/testing/radix-tree/maple.c [new file with mode: 0644]

index ab0eae1c153a42e5ebfb3b17f0e1046ab956855b..cb95abad85b55eccfe5b407f377ad64330c664ef 100644 (file)
@@ -29,6 +29,7 @@ Core utilities
    printk-formats
    circular-buffers
    generic-radix-tree
+   maple-tree
    memory-allocation
    mm-api
    gfp_mask-from-fs-io
diff --git a/Documentation/core-api/maple-tree.rst b/Documentation/core-api/maple-tree.rst
new file mode 100644 (file)
index 0000000..6d71d4b
--- /dev/null
@@ -0,0 +1,36 @@
+.. SPDX-License-Identifier: GPL-2.0+
+
+
+==========
+Maple Tree
+==========
+
+:Author: Liam R. Howlett
+
+Overview
+========
+
+The Maple Tree is an RCU safe Range tree based on the B-Tree.
+
+Normal API
+==========
+
+Allocating Nodes
+----------------
+
+Locking
+-------
+
+Advanced API
+============
+
+
+Internal Entries
+----------------
+
+Functions and structures
+========================
+
+.. kernel-doc:: include/linux/maple_tree.c
+.. kernel-doc:: lib/maple_tree.c
+
index 56765f542244f8af4fb80e3db9c9df2023465411..ad7d3c205efec9ca7da6fa8aef57092a1b9344c5 100644 (file)
@@ -9876,6 +9876,15 @@ W:       http://www.kernel.org/doc/man-pages
 L:     linux-man@vger.kernel.org
 S:     Maintained
 
+MAPLE TREE
+M:     Liam R. Howlett <Liam.Howlett@oracle.com>
+L:     linux-mm@kvack.org
+S:     Supported
+F:     Documentation/core-api/maple_tree.rst
+F:     lib/maple_tree.c
+F:     include/linux/maple_tree.h
+F:     tools/testing/radix-tree
+
 MARDUK (CREATOR CI40) DEVICE TREE SUPPORT
 M:     Rahul Bedarkar <rahulbedarkar89@gmail.com>
 L:     linux-mips@vger.kernel.org
diff --git a/include/linux/maple_tree.h b/include/linux/maple_tree.h
new file mode 100644 (file)
index 0000000..2cca058
--- /dev/null
@@ -0,0 +1,435 @@
+/* SPDX-License-Identifier: GPL-2.0+ */
+#ifndef _LINUX_MAPLE_TREE_H
+#define _LINUX_MAPLE_TREE_H
+/*
+ * Maple Tree - An RCU-safe adaptive tree for storing ranges
+ * Copyright (c) 2018 Oracle
+ * Authors:     Liam R. Howlett <Liam.Howlett@Oracle.com>
+ *              Matthew Wilcox <willy@infradead.org>
+ */
+
+#include <linux/kernel.h>
+#include <linux/rcupdate.h>
+#include <linux/spinlock.h>
+
+/*
+ * Allocated nodes are mutable until they have been inserted into the tree,
+ * at which time they cannot change their type until they have been removed
+ * from the tree and an RCU grace period has passed.
+ *
+ * Removed nodes have their ->parent set to point to themselves.  RCU readers
+ * check ->parent before relying on the value that they loaded from the
+ * slots array.  This lets us reuse the slots array for the RCU head.
+ *
+ * Nodes in the tree point to their parent unless bit 0 is set.
+ */
+#if defined(CONFIG_64BIT) || defined(BUILD_VDSO32_64)
+#define MAPLE_NODE_SLOTS       15      /* 128 bytes including ->parent */
+#define MAPLE_RANGE64_SLOTS    8       /* 128 bytes */
+#define MAPLE_ARANGE64_SLOTS   5       /* 120 bytes */
+#define MAPLE_RANGE32_SLOTS    10      /* 124 bytes */
+#define MAPLE_RANGE16_SLOTS    12      /* 126 bytes */
+#define MAPLE_SPARSE64_SLOTS   7       /* 120 bytes */
+#define MAPLE_SPARSE32_SLOTS   10      /* 128 bytes */
+#define MAPLE_SPARSE21_SLOTS   11      /* 128 bytes */
+#define MAPLE_SPARSE16_SLOTS   12      /* 128 bytes */
+#define MAPLE_SPARSE9_SLOTS    13      /* 127 bytes */
+#define MAPLE_SPARSE6_SLOTS    14      /* 128 bytes */
+
+#define MAPLE_NODE_COALESCE     2       /* Limit on coalesce count */
+
+#else
+/* Need to do corresponding calculations for 32-bit kernels */
+#endif
+
+typedef struct maple_enode *maple_enode; // encoded node.
+typedef struct maple_pnode *maple_pnode; // parent node.
+
+
+/**
+ * maple_tree node explained
+ *
+ * Each node type has a number of slots for entries and a number of slots for
+ * pivots.  In the case of dense nodes, the pivots are implied by the position
+ * and are simply the slot index + the minimum of the node.
+ *
+ * In regular B-Tree terms, pivots are called keys.  The term pivot is used to
+ * indicate that the tree is specifying ranges,  Pivots may appear in the
+ * subtree with an entry attached to the value where as keys are unique to a
+ * specific position of a B-tree.  Pivot values are inclusive of the slot with
+ * the same index.
+ *
+ *
+ * The following illustrates the layout of a range64 nodes slots and pivots.
+ *
+ *           _________________________________
+ *  Slots -> | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
+ *           ┬   ┬   ┬   ┬   ┬   ┬   ┬   ┬   ┬
+ *           │   │   │   │   │   │   │   │   └─ Implied maximum
+ *           │   │   │   │   │   │   │   └─ Pivot 6
+ *           │   │   │   │   │   │   └─ Pivot 5
+ *           │   │   │   │   │   └─ Pivot 4
+ *           │   │   │   │   └─ Pivot 3
+ *           │   │   │   └─ Pivot 2
+ *           │   │   └─ Pivot 1
+ *           │   └─ Pivot 0
+ *           └─  Implied minimum
+ *
+ * Slot contents:
+ *  Internal (non-leaf) nodes contain pointers to other nodes.
+ *  Leaf nodes contain entries.
+ *
+ *
+ */
+struct maple_range_64 {
+       struct maple_pnode *parent;
+       void __rcu *slot[MAPLE_RANGE64_SLOTS];
+       unsigned long pivot[MAPLE_RANGE64_SLOTS - 1];
+};
+
+struct maple_arange_64 {
+       struct maple_pnode *parent;
+       unsigned long gap[MAPLE_ARANGE64_SLOTS];
+       void __rcu *slot[MAPLE_ARANGE64_SLOTS];
+       unsigned long pivot[MAPLE_ARANGE64_SLOTS - 1];
+};
+
+struct maple_range_32 {
+       struct maple_pnode *parent;
+       void __rcu *slot[MAPLE_RANGE32_SLOTS];
+       u32 pivot[MAPLE_RANGE32_SLOTS - 1];
+};
+
+struct maple_range_16 {
+       struct maple_pnode *parent;
+       void __rcu *slot[MAPLE_RANGE16_SLOTS];
+       u16 pivot[MAPLE_RANGE16_SLOTS - 1];
+};
+
+struct maple_sparse_64 {
+       struct maple_pnode *parent;
+       void __rcu *slot[MAPLE_SPARSE64_SLOTS];
+       unsigned long pivot[MAPLE_SPARSE64_SLOTS];
+};
+
+struct maple_sparse_32 {
+       struct maple_pnode *parent;
+       void __rcu *slot[MAPLE_SPARSE32_SLOTS];
+       u32 pivot[MAPLE_SPARSE32_SLOTS];
+};
+
+struct maple_sparse_21 {
+       struct maple_pnode *parent;
+       void __rcu *slot[MAPLE_SPARSE21_SLOTS];
+       unsigned long pivot[(MAPLE_SPARSE21_SLOTS + 2) / 3];
+};
+
+struct maple_sparse_16 {
+       struct maple_pnode *parent;
+       void __rcu *slot[MAPLE_SPARSE16_SLOTS];
+       u16 pivot[MAPLE_SPARSE16_SLOTS];
+};
+
+struct maple_sparse_9 {
+       struct maple_pnode *parent;
+       void __rcu *slot[MAPLE_SPARSE9_SLOTS];
+       unsigned long pivot[(MAPLE_SPARSE9_SLOTS + 6) / 7];
+};
+
+struct maple_sparse_6 {
+       struct maple_pnode *parent;
+       void __rcu *slot[MAPLE_SPARSE6_SLOTS];
+       unsigned long pivot;    /* Use a bitmap for pivots */
+};
+
+struct maple_node {
+       union {
+               struct {
+                       struct maple_pnode *parent;
+                       void __rcu *slot[MAPLE_NODE_SLOTS];
+               };
+               struct {
+                       void *pad;
+                       struct rcu_head rcu;
+               };
+               struct maple_range_64 mr64;
+               struct maple_arange_64 ma64;
+               struct maple_range_32 mr32;
+               struct maple_range_16 mr16;
+               struct maple_sparse_64 ms64;
+               struct maple_sparse_32 ms32;
+               struct maple_sparse_21 ms21;
+               struct maple_sparse_16 ms16;
+               struct maple_sparse_9 ms9;
+               struct maple_sparse_6 ms6;
+       };
+};
+
+enum maple_type {
+       maple_dense,
+       maple_sparse_6,
+       maple_sparse_9,
+       maple_sparse_16,
+       maple_sparse_21,
+       maple_sparse_32,
+       maple_sparse_64,
+       maple_leaf_16,
+       maple_leaf_32,
+       maple_leaf_64,
+       maple_range_16,
+       maple_range_32,
+       maple_range_64,
+       maple_arange_64,
+};
+
+/* Flags:
+ * MAPLE_ALLOC_RANGE - This tree is used to store allocation ranges.  Use
+ * alloc range types (MAPLE_ARANGE_*)
+ */
+#define MAPLE_ALLOC_RANGE 1
+struct maple_tree {
+       spinlock_t      ma_lock;
+       unsigned int    ma_flags;
+       void __rcu      *ma_root;
+};
+
+#define MTREE_INIT(name, flags) {                                      \
+       .ma_lock = __SPIN_LOCK_UNLOCKED(name.ma_lock),                  \
+       .ma_flags = flags,                                              \
+       .ma_root = NULL,                                                \
+}
+
+#define DEFINE_MTREE(name)                                             \
+       struct maple_tree name = MTREE_INIT(name, 0)
+
+#define mtree_lock(mt)         spin_lock((&mt->ma_lock))
+#define mtree_unlock(mt)       spin_unlock((&mt->ma_lock))
+
+
+void mtree_init(struct maple_tree *mt, unsigned int ma_flags);
+void *mtree_load(struct maple_tree *mt, unsigned long index);
+int mtree_insert(struct maple_tree *mt, unsigned long index,
+               void *entry, gfp_t gfp);
+int mtree_insert_range(struct maple_tree *mt, unsigned long first,
+               unsigned long last, void *entry, gfp_t gfp);
+void *mtree_erase(struct maple_tree *mt, unsigned long index);
+void mtree_destroy(struct maple_tree *mt);
+int mtree_store_range(struct maple_tree *mt, unsigned long first,
+               unsigned long last, void *entry, gfp_t gfp);
+
+/**
+ * mtree_empty() - Determine if a tree has any present entries.
+ * @mt: Maple Tree.
+ *
+ * Context: Any context.
+ * Return: %true if the tree contains only NULL pointers.
+ */
+static inline bool mtree_empty(const struct maple_tree *mt)
+{
+       return mt->ma_root == NULL;
+}
+
+/* Advanced API */
+
+struct ma_state {
+       struct maple_tree *tree;        /* The tree we're operating in */
+       unsigned long index;            /* The index we're operating on */
+       unsigned long last;             /* The last index we're operating on */
+       struct maple_enode *node;       /* The node containing this entry */
+       unsigned long min;              /* The minimum index of this node */
+       unsigned long max;              /* The maximum index of this node */
+       struct maple_node *alloc;       /* Allocated nodes for this operation */
+};
+
+#define mas_lock(mas)           spin_lock(&((mas)->tree->ma_lock))
+#define mas_unlock(mas)         spin_unlock(&((mas)->tree->ma_lock))
+
+
+/*
+ * Special values for ma_state.node.
+ * MAS_START means we have not searched the tree.
+ * MAS_ROOT means we have searched the tree and the entry we found lives in
+ * the root of the tree (ie it has index 0, length 1 and is the only entry in
+ * the tree).
+ * MAS_NONE means we have searched the tree and there is no node in the
+ * tree for this entry.  For example, we searched for index 1 in an empty
+ * tree.  Or we have a tree which points to a full leaf node and we
+ * searched for an entry which is larger than can be contained in that
+ * leaf node.
+ * MA_ERROR represents an errno.  After dropping the lock and attempting
+ * to resolve the error, the walk would have to be restarted from the
+ * top of the tree as the tree may have been modified.
+ */
+#define MAS_START      ((struct maple_enode *)1UL)
+#define MAS_ROOT       ((struct maple_enode *)5UL)
+#define MAS_NONE       ((struct maple_enode *)9UL)
+#define MA_ERROR(err) \
+               ((struct maple_enode *)(((unsigned long)err << 2) | 2UL))
+
+#define MA_STATE(name, mt, first, end)                                 \
+       struct ma_state name = {                                        \
+               .tree = mt,                                             \
+               .index = first,                                         \
+               .last = end,                                            \
+               .node = MAS_START,                                      \
+               .min = 0,                                               \
+               .max = ULONG_MAX,                                       \
+       }
+
+void *mas_walk(struct ma_state *mas);
+void *mas_store(struct ma_state *mas, void *entry);
+void *mas_find(struct ma_state *mas, unsigned long max);
+
+bool mas_nomem(struct ma_state *mas, gfp_t gfp);
+void mas_pause(struct ma_state *mas);
+void maple_tree_init(void);
+
+void *mas_prev(struct ma_state *mas, unsigned long min);
+void *mas_next(struct ma_state *mas, unsigned long max);
+
+/* Finds a sufficient hole */
+int mas_get_unmapped_area(struct ma_state *mas, unsigned long min,
+               unsigned long max, unsigned long size);
+
+/* This finds an unmapped area from the highest address to the lowest.
+ * AKA "Topdown" version,
+ */
+int mas_get_unmapped_area_rev(struct ma_state *mas, unsigned long min,
+               unsigned long max, unsigned long size);
+/**
+ * mas_reset() - Reset a Maple Tree operation state.
+ * @mas: Maple Tree operation state.
+ *
+ * Resets the error or walk state of the @mas so future walks of the
+ * array will start from the root.  Use this if you have dropped the
+ * lock and want to reuse the ma_state.
+ *
+ * Context: Any context.
+ */
+static inline void mas_reset(struct ma_state *mas)
+{
+       mas->node = MAS_START;
+}
+
+/**
+ * mas_for_each() - Iterate over a range of the maple tree.
+ * @mas: Maple Tree operation state (maple_state)
+ * @entry: Entry retrieved from the tree
+ * @max: maximum index to retrieve from the tree
+ *
+ * When returned, mas->index and mas->last will hold the entire range for the
+ * entry.
+ *
+ * Note: may return the zero entry.
+ *
+ */
+#define mas_for_each(mas, entry, max) \
+       while (((entry) = mas_find((mas), (max))) != NULL)
+
+
+bool mas_retry(struct ma_state *mas, const void *entry);
+
+/**
+ * mas_set_range() - Set up Maple Tree operation state for a different index.
+ * @mas: Maple Tree operation state.
+ * @start: New start of range in the Maple Tree.
+ * @last: New end of range in the Maple Tree.
+ *
+ * Move the operation state to refer to a different range.  This will
+ * have the effect of starting a walk from the top; see mas_next()
+ * to move to an adjacent index.
+ */
+static inline void mas_set_range(struct ma_state *mas, unsigned long start,
+               unsigned long last)
+{
+              mas->index = start;
+              mas->last = last;
+              mas->node = MAS_START;
+}
+
+/**
+ * mas_set() - Set up Maple Tree operation state for a different index.
+ * @mas: Maple Tree operation state.
+ * @index: New index into the Maple Tree.
+ *
+ * Move the operation state to refer to a different index.  This will
+ * have the effect of starting a walk from the top; see mas_next()
+ * to move to an adjacent index.
+ */
+static inline void mas_set(struct ma_state *mas, unsigned long index)
+{
+
+       mas_set_range(mas, index, index);
+}
+
+/**
+ * mt_init_flags() - Initialise an empty maple tree with flags.
+ * @mt: Maple Tree
+ * @flags: maple tree flags.
+ *
+ * If you need to initialise a Maple Tree with special falgs (eg, an
+ * allocation tree), use this function.
+ *
+ * Context: Any context.
+ *
+ */
+static inline void mt_init_flags(struct maple_tree *mt, unsigned int flags)
+{
+       spin_lock_init(&mt->ma_lock);
+       mt->ma_flags = flags;
+       mt->ma_root = NULL;
+}
+
+/**
+ * mt_init() - Initialise an empty maple tree.
+ * @mt: Maple Tree
+ *
+ * An empty Maple Tree.
+ *
+ * Context: Any context.
+ */
+static inline void mt_init(struct maple_tree *mt)
+{
+       mt_init_flags(mt, 0);
+}
+
+void *mt_find(struct maple_tree *mt, unsigned long *index, unsigned long max);
+void *_mt_find(struct maple_tree *mt, unsigned long *index, unsigned long max,
+               bool start);
+/**
+ * mt_for_each - Searches for an entry starting at index until max.
+ *
+ *
+ *
+ * Note: Will not return the zero entry.
+ *
+ *
+ */
+#define mt_for_each(tree, entry, index, max) \
+       for (entry = _mt_find(tree, &index, max, true); \
+               entry; entry = _mt_find(tree, &index, max, false))
+
+
+#ifdef CONFIG_DEBUG_MAPLE_TREE
+extern unsigned int maple_tree_tests_run;
+extern unsigned int maple_tree_tests_passed;
+
+void mt_dump(const struct maple_tree *mt);
+#define MT_BUG_ON(tree, x) do {                                                \
+       maple_tree_tests_run++;                                         \
+       if (x) {                                                        \
+               pr_info("BUG at %s:%d (%u)\n",                          \
+               __func__, __LINE__, x);                                 \
+               mt_dump(tree);                                          \
+               pr_info("Pass: %u Run:%u\n", maple_tree_tests_passed,   \
+                       maple_tree_tests_run);                          \
+               dump_stack();                                           \
+       } else {                                                        \
+               maple_tree_tests_passed++;                              \
+       }                                                               \
+} while (0)
+#else
+#define MT_BUG_ON(tree, x) BUG_ON(x)
+#endif /* CONFIG_DEBUG_MAPLE_TREE */
+
+#endif /*_LINUX_MAPLE_TREE_H */
index da1bc0b60a7de3119113a8dace48c79928f5a927..57075984323c1249ebeb8c1dac254b56ce7de6cc 100644 (file)
@@ -107,6 +107,7 @@ static int kernel_init(void *);
 
 extern void init_IRQ(void);
 extern void radix_tree_init(void);
+extern void maple_tree_init(void);
 
 /*
  * Debug helper: via this flag we know that we are in 'early bootup code'
@@ -647,6 +648,7 @@ asmlinkage __visible void __init start_kernel(void)
                 "Interrupts were enabled *very* early, fixing it\n"))
                local_irq_disable();
        radix_tree_init();
+       maple_tree_init();
 
        /*
         * Set up housekeeping before setting up workqueues to allow the unbound
index 93217d44237f2893555f03992424756a1d83080e..d6205040c51eb162f9d912ef61f553d91007b5f0 100644 (file)
@@ -26,7 +26,8 @@ endif
 
 lib-y := ctype.o string.o vsprintf.o cmdline.o \
         rbtree.o radix-tree.o timerqueue.o xarray.o \
-        idr.o extable.o sha1.o irq_regs.o argv_split.o \
+        maple_tree.o idr.o extable.o \
+        sha1.o irq_regs.o argv_split.o \
         flex_proportions.o ratelimit.o show_mem.o \
         is_single_threaded.o plist.o decompress.o kobject_uevent.o \
         earlycpio.o seq_buf.o siphash.o dec_and_lock.o \
diff --git a/lib/maple_tree.c b/lib/maple_tree.c
new file mode 100644 (file)
index 0000000..714c7db
--- /dev/null
@@ -0,0 +1,5497 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Maple Tree implementation
+ * Copyright (c) 2018 Oracle Corporation
+ * Authors: Liam R. Howlett <jedix@infradead.org>
+ *         Matthew Wilcox <willy@infradead.org>
+ */
+
+#include <linux/maple_tree.h>
+#include <linux/xarray.h>
+#include <linux/types.h>
+#include <linux/export.h>
+#include <linux/slab.h>
+#include <asm/barrier.h>
+//#include <linux/mm.h> // for task_size
+
+#define CONFIG_DEBUG_MAPLE_TREE
+#define MA_ROOT_PARENT 1
+#define ma_parent_ptr(x) ((struct maple_pnode *)(x))
+#define ma_mnode_ptr(x) ((struct maple_node *)(x))
+#define ma_enode_ptr(x) ((struct maple_enode *)(x))
+
+static struct kmem_cache *maple_node_cache;
+
+unsigned long mt_max[] = {
+       [maple_dense]           = MAPLE_NODE_SLOTS,
+       [maple_sparse_6]        = (1UL << 6) - 1,
+       [maple_sparse_9]        = (1UL << 9) - 1,
+       [maple_sparse_16]       = (1UL << 16) - 1,
+       [maple_sparse_21]       = (1UL << 21) - 1,
+       [maple_sparse_32]       = UINT_MAX,
+       [maple_sparse_64]       = ULONG_MAX,
+       [maple_leaf_16]         = (1UL << 16) - 1,
+       [maple_leaf_32]         = UINT_MAX,
+       [maple_leaf_64]         = ULONG_MAX,
+       [maple_range_16]        = (1UL << 16) - 1,
+       [maple_range_32]        = UINT_MAX,
+       [maple_range_64]        = ULONG_MAX,
+       [maple_arange_64]       = ULONG_MAX,
+};
+#define mt_node_max(x) mt_max[mte_node_type(x)]
+
+
+unsigned char mt_slots[] = {
+       [maple_dense]           = MAPLE_NODE_SLOTS,
+       [maple_sparse_6]        = MAPLE_SPARSE6_SLOTS,
+       [maple_sparse_9]        = MAPLE_SPARSE9_SLOTS,
+       [maple_sparse_16]       = MAPLE_SPARSE16_SLOTS,
+       [maple_sparse_21]       = MAPLE_SPARSE21_SLOTS,
+       [maple_sparse_32]       = MAPLE_SPARSE32_SLOTS,
+       [maple_sparse_64]       = MAPLE_SPARSE64_SLOTS,
+       [maple_leaf_16]         = MAPLE_RANGE16_SLOTS,
+       [maple_leaf_32]         = MAPLE_RANGE32_SLOTS,
+       [maple_leaf_64]         = MAPLE_RANGE64_SLOTS,
+       [maple_range_16]        = MAPLE_RANGE16_SLOTS,
+       [maple_range_32]        = MAPLE_RANGE32_SLOTS,
+       [maple_range_64]        = MAPLE_RANGE64_SLOTS,
+       [maple_arange_64]       = MAPLE_ARANGE64_SLOTS,
+};
+#define mt_slot_count(x) mt_slots[mte_node_type(x)]
+
+unsigned char mt_pivots[] = {
+       [maple_dense]           = 0,
+       [maple_sparse_6]        = 1,
+       [maple_sparse_9]        = MAPLE_SPARSE9_SLOTS - 1,
+       [maple_sparse_16]       = MAPLE_SPARSE16_SLOTS - 1,
+       [maple_sparse_21]       = MAPLE_SPARSE21_SLOTS - 1,
+       [maple_sparse_32]       = MAPLE_SPARSE32_SLOTS - 1,
+       [maple_sparse_64]       = MAPLE_SPARSE64_SLOTS - 1,
+       [maple_leaf_16]         = MAPLE_RANGE16_SLOTS - 1,
+       [maple_leaf_32]         = MAPLE_RANGE32_SLOTS - 1,
+       [maple_leaf_64]         = MAPLE_RANGE64_SLOTS - 1,
+       [maple_range_16]        = MAPLE_RANGE16_SLOTS - 1,
+       [maple_range_32]        = MAPLE_RANGE32_SLOTS - 1,
+       [maple_range_64]        = MAPLE_RANGE64_SLOTS - 1,
+       [maple_arange_64]       = MAPLE_ARANGE64_SLOTS - 1,
+};
+#define mt_pivot_count(x) mt_pivots[mte_node_type(x)]
+
+unsigned char mt_min_slots[] = {
+       [maple_dense]           = MAPLE_NODE_SLOTS / 2,
+       [maple_sparse_6]        = MAPLE_SPARSE6_SLOTS / 2,
+       [maple_sparse_9]        = MAPLE_SPARSE9_SLOTS / 2,
+       [maple_sparse_16]       = MAPLE_SPARSE16_SLOTS / 2,
+       [maple_sparse_21]       = MAPLE_SPARSE21_SLOTS / 2,
+       [maple_sparse_32]       = MAPLE_SPARSE32_SLOTS / 2,
+       [maple_sparse_64]       = MAPLE_SPARSE64_SLOTS / 2,
+       [maple_leaf_16]         = MAPLE_RANGE16_SLOTS / 2,
+       [maple_leaf_32]         = MAPLE_RANGE32_SLOTS / 2,
+       [maple_leaf_64]         = (MAPLE_RANGE64_SLOTS / 2) - 2,
+       [maple_range_16]        = MAPLE_RANGE16_SLOTS / 2,
+       [maple_range_32]        = MAPLE_RANGE32_SLOTS / 2,
+       [maple_range_64]        = (MAPLE_RANGE64_SLOTS / 2) - 2,
+       [maple_arange_64]       = (MAPLE_ARANGE64_SLOTS + 1) / 2,
+};
+#define mt_min_slot_cnt(x) mt_min_slots[mte_node_type(x)]
+
+// Functions
+static struct maple_node *mt_alloc_one(gfp_t gfp)
+{
+       return kmem_cache_alloc(maple_node_cache, gfp | __GFP_ZERO);
+}
+
+static void mt_free_rcu(struct rcu_head *head)
+{
+       struct maple_node *node = container_of(head, struct maple_node, rcu);
+
+       kmem_cache_free(maple_node_cache, node);
+}
+
+static void ma_free(struct maple_node *node)
+{
+       node->parent = ma_parent_ptr(node);
+       call_rcu(&node->rcu, mt_free_rcu);
+}
+
+static inline enum maple_type mte_node_type(const struct maple_enode *entry)
+{
+       return ((unsigned long)entry >> 3) & 15;
+}
+
+static inline bool ma_is_dense(const enum maple_type type)
+{
+       return type < maple_sparse_6;
+}
+
+static inline bool mte_is_dense(const struct maple_enode *entry)
+{
+       return ma_is_dense(mte_node_type(entry));
+}
+static inline bool ma_is_leaf(const enum maple_type type)
+{
+       return type < maple_range_16;
+}
+
+static inline bool mte_is_leaf(const struct maple_enode *entry)
+{
+       return ma_is_leaf(mte_node_type(entry));
+}
+
+static inline enum maple_type mt_node_hole(const void *entry)
+{
+       return (unsigned long)entry & 4;
+
+}
+/* Private
+ * We also reserve values with the bottom two bits set to '10' which are
+ * below 4096
+ */
+static inline bool mt_is_reserved(const void *entry)
+{
+       return ((unsigned long)entry < 4096) && xa_is_internal(entry);
+}
+
+static inline bool mt_is_advanced(const void *entry)
+{
+       return xa_is_internal(entry) && (entry <= XA_RETRY_ENTRY);
+}
+
+static inline bool mt_is_empty(const void *entry)
+{
+       return (!entry) || xa_is_deleted((entry)) || xa_is_skip(entry);
+}
+static inline bool mt_will_coalesce(const void *entry)
+{
+       return (xa_is_deleted((entry)) || xa_is_skip(entry) ||
+                       xa_is_retry(entry));
+}
+
+static inline void mas_set_err(struct ma_state *mas, long err)
+{
+       mas->node = MA_ERROR(err);
+}
+static inline bool mas_is_ptr(struct ma_state *mas)
+{
+       return mas->node == MAS_ROOT;
+}
+static inline bool mas_is_none(struct ma_state *mas)
+{
+       return mas->node == MAS_NONE;
+}
+
+static inline bool mas_is_start(struct ma_state *mas)
+{
+       return mas->node == MAS_START;
+}
+
+static inline bool mas_is_err(struct ma_state *mas)
+{
+       return xa_is_err(mas->node);
+}
+
+static inline bool mas_searchable(struct ma_state *mas)
+{
+       if (!mas->node)
+               return false;
+
+       if (mas_is_none(mas))
+               return false;
+
+       if (mas_is_ptr(mas))
+               return false;
+
+       return true;
+}
+static inline struct maple_node *mte_to_node(const struct maple_enode *entry)
+{
+       return (struct maple_node *)((unsigned long)entry & ~127);
+}
+static inline struct maple_node *mas_mn(const struct ma_state *mas)
+{
+       return mte_to_node(mas->node);
+}
+
+static void mte_free(struct maple_enode *enode)
+{
+       ma_free(mte_to_node(enode));
+}
+
+static inline struct maple_enode *mt_mk_node(const struct maple_node *node,
+               enum maple_type type) {
+       return (void *)((unsigned long)node | (type << 3) | 4);
+}
+
+static inline
+void *mte_mk_root(const struct maple_enode *node)
+{
+       return (void *)((unsigned long)node | 2);
+}
+static inline
+void *mte_safe_root(const struct maple_enode *node)
+{
+       return (void *)((unsigned long)node & ~2);
+}
+static inline
+void *mte_is_full(const struct maple_enode *node)
+{
+       return (void *)((unsigned long)node & ~4);
+}
+
+static inline
+void mte_set_full(const struct maple_enode *node)
+{
+       node = (void *)((unsigned long)node | 4);
+}
+
+static inline unsigned int mte_slot_mask(const struct maple_enode *node)
+{
+       unsigned int bitmask = 0x78; // Bits 3-6
+
+       if (mte_node_type(node) == MAPLE_RANGE16_SLOTS)
+               bitmask |= 0x04; // Set bit 2.
+       return bitmask;
+}
+static inline bool _ma_is_root(struct maple_node *node)
+{
+       return ((unsigned long)node->parent & MA_ROOT_PARENT);
+}
+
+static inline bool mte_is_root(const struct maple_enode *node)
+{
+       return _ma_is_root(mte_to_node(node));
+}
+
+static inline bool mt_is_alloc(struct maple_tree *mt)
+{
+       return (mt->ma_flags & MAPLE_ALLOC_RANGE);
+}
+
+
+static inline unsigned int mte_parent_shift(unsigned long parent)
+{
+       if (!(parent & 2))
+               return 2; // maple_range_16
+       return 3;
+}
+
+static inline enum maple_type mte_parent_range_enum(unsigned long parent)
+{
+       switch (parent) {
+       case 6:
+               return maple_range_64;
+       case 4:
+               return maple_range_32;
+       case 0:
+               return maple_range_16;
+       }
+       return maple_dense;
+}
+
+static inline enum maple_type mte_parent_alloc_enum(unsigned long parent)
+{
+       switch (parent) {
+       case 6:
+               return maple_arange_64;
+       }
+       return maple_dense;
+}
+
+static inline enum maple_type mas_parent_enum(struct ma_state *mas,
+               struct maple_enode *node)
+{
+       unsigned long parent = 6;
+       unsigned long slot_shift;
+
+       if (!mte_is_root(mas->node)) {
+               parent = (unsigned long) mte_to_node(node)->parent;
+               slot_shift = mte_parent_shift(parent);
+               parent &= (1 << slot_shift) - 1;
+       }
+
+       if (mt_is_alloc(mas->tree))
+               return mte_parent_alloc_enum(parent);
+       return mte_parent_range_enum(parent);
+}
+
+/* Private
+ *
+ * Type is encoded in the node->parent
+ * bit 0: 1 = root, 0 otherwise
+ * bit 1: 0 = range 16, 1 otherwise
+ * bit 2: 0 = range 32, 1 = [a]range 64 | lowest bit of range_16's slot.
+ *
+ * Slot number is encoded in the node->parent
+ * range_16, slot number is encoded in bits 2-6
+ * range_32, slot number is encoded in bits 3-6
+ * [a]range_64, slot number is encoded in bits 3-6
+ */
+static inline void mte_set_parent(struct maple_enode *node,
+                                const struct maple_enode *parent,
+                                unsigned char slot)
+{
+       unsigned long bitmask = 0x78;
+       unsigned long slot_shift = 3;
+       unsigned long val = (unsigned long) parent;
+       unsigned long type = 0;
+
+       switch (mte_node_type(parent)) {
+       case maple_range_64:
+       case maple_arange_64:
+               type |= 4;
+               /* fallthrough */
+       case maple_range_32:
+               type |= 2;
+               break;
+       case maple_range_16:
+               slot_shift = 2;
+               break;
+       default:
+               break;
+       }
+
+       BUG_ON(slot > MAPLE_NODE_SLOTS); // Only 4 bits to use.
+       val &= ~bitmask; // Remove any old slot number.
+       val |= (slot << slot_shift); // Set the slot.
+       val |= type;
+       mte_to_node(node)->parent = ma_parent_ptr(val);
+}
+
+static inline unsigned int mte_parent_slot(const struct maple_enode *node)
+{
+       unsigned long bitmask = 0x7C;
+       unsigned long val = (unsigned long) mte_to_node(node)->parent;
+       unsigned long slot_shift = mte_parent_shift(val);
+
+       if (val & 1)
+               return 0; // Root.
+
+       return (val & bitmask) >> slot_shift;
+}
+
+
+static inline struct maple_node *mte_parent(const struct maple_enode *node)
+{
+       unsigned long bitmask = 0x7F;
+
+       return (void *)((unsigned long)(mte_to_node(node)->parent) & ~bitmask);
+
+}
+
+static inline bool mte_dead_node(const struct maple_enode *enode)
+{
+       struct maple_node *parent, *node = mte_to_node(enode);
+
+       parent = mte_parent(enode);
+       return (parent == node);
+}
+
+static inline struct maple_node *mas_get_alloc(const struct ma_state *ms)
+{
+       return (struct maple_node *)((unsigned long)ms->alloc & ~0x7F);
+}
+
+static inline int ma_get_node_alloc_cnt(const struct maple_node *node)
+{
+       int ret = 1;
+       int slot = 0;
+
+       while (slot < MAPLE_NODE_SLOTS) {
+               if (!node->slot[slot])
+                       return ret;
+
+               if (ma_mnode_ptr(node->slot[slot])->slot[0]) {
+                       ret += ma_get_node_alloc_cnt(
+                               ma_mnode_ptr(node->slot[slot]));
+               } else {
+                       ret++;
+               }
+               slot++;
+       }
+       return ret;
+}
+
+static inline int mas_get_alloc_cnt(const struct ma_state *mas)
+{
+       struct maple_node *node = mas_get_alloc(mas);
+
+       if (!node)
+               return 0;
+
+       return ma_get_node_alloc_cnt(node);
+}
+
+static inline void mas_set_alloc_req(struct ma_state *mas, int count)
+{
+       mas->alloc = (struct maple_node *)((unsigned long)mas->alloc & ~0x7F);
+       mas->alloc = (struct maple_node *)((unsigned long)mas->alloc | count);
+}
+
+static inline int mas_get_alloc_req(const struct ma_state *mas)
+{
+       return (int)(((unsigned long)mas->alloc & 0x7F));
+}
+
+static inline int mas_get_slot(const struct ma_state *mas)
+{
+       return mas_get_alloc_req(mas);
+}
+
+static inline void mas_set_slot(struct ma_state *mas, int slot)
+{
+       mas_set_alloc_req(mas, slot);
+}
+
+static inline unsigned long ma_get_pivot(const struct maple_node *mn,
+                                unsigned char slot, enum maple_type type)
+{
+       switch (type) {
+       case maple_arange_64:
+               return mn->ma64.pivot[slot];
+       case maple_range_64:
+       case maple_leaf_64:
+               return mn->mr64.pivot[slot];
+       case maple_sparse_6:
+               return mn->ms6.pivot;
+       case maple_sparse_9:
+               return mn->ms9.pivot[slot];
+       case maple_sparse_16:
+               return mn->ms16.pivot[slot];
+       case maple_sparse_21:
+               return mn->ms21.pivot[slot];
+       case maple_sparse_32:
+               return mn->ms32.pivot[slot];
+       case maple_sparse_64:
+               return mn->ms64.pivot[slot];
+       case maple_range_16:
+       case maple_leaf_16:
+               return mn->mr16.pivot[slot];
+       case maple_range_32:
+       case maple_leaf_32:
+               return mn->mr32.pivot[slot];
+       case maple_dense:
+       default:
+               return 0;
+       }
+}
+static inline unsigned long _mte_get_pivot(const struct maple_enode *mn,
+                                unsigned char slot, enum maple_type type)
+{
+       return ma_get_pivot(mte_to_node(mn), slot, type);
+}
+static inline unsigned long mte_get_pivot(const struct maple_enode *mn,
+                                        unsigned char slot)
+{
+       return _mte_get_pivot(mn, slot, mte_node_type(mn));
+}
+static inline unsigned long _mas_get_safe_pivot(const struct ma_state *mas,
+                               unsigned char slot, enum maple_type type)
+{
+       if (slot >= mt_pivots[type])
+               return mas->max;
+
+       return _mte_get_pivot(mas->node, slot, type);
+}
+/** Private
+ * mas_get_safe_pivot() - Return the pivot or the mas->max.
+ *
+ * Return: The pivot (including mas->max for the final slot)
+ */
+static inline unsigned long mas_get_safe_pivot(const struct ma_state *mas,
+                                        unsigned char slot)
+{
+       enum maple_type type = mte_node_type(mas->node);
+
+       return _mas_get_safe_pivot(mas, slot, type);
+}
+
+static inline void ma_set_pivot(struct maple_node *mn, unsigned char slot,
+               enum maple_type type, unsigned long val)
+{
+       switch (type) {
+       default:
+       case maple_range_64:
+       case maple_leaf_64:
+               (&mn->mr64)->pivot[slot] = val;
+               break;
+       case maple_arange_64:
+               (&mn->ma64)->pivot[slot] = val;
+       case maple_dense:
+               break;
+       case maple_sparse_6:
+               (&mn->ms6)->pivot = val;
+               break;
+       case maple_sparse_9:
+               (&mn->ms9)->pivot[slot] = val;
+               break;
+       case maple_sparse_16:
+               (&mn->ms16)->pivot[slot] = val;
+               break;
+       case maple_sparse_21:
+               (&mn->ms21)->pivot[slot] = val;
+               break;
+       case maple_sparse_32:
+               (&mn->ms32)->pivot[slot] = val;
+               break;
+       case maple_sparse_64:
+               (&mn->ms64)->pivot[slot] = val;
+               break;
+       case maple_range_16:
+       case maple_leaf_16:
+               (&mn->mr16)->pivot[slot] = val;
+               break;
+       case maple_range_32:
+       case maple_leaf_32:
+               (&mn->mr32)->pivot[slot] = val;
+               break;
+       }
+}
+static inline void mte_set_pivot(struct maple_enode *mn, unsigned char slot,
+                               unsigned long val)
+{
+       return ma_set_pivot(mte_to_node(mn), slot, mte_node_type(mn), val);
+}
+static inline struct maple_enode *ma_get_rcu_slot(
+               const struct maple_node *mn, unsigned char slot,
+               enum maple_type type, struct maple_tree *mtree)
+{
+       switch (type) {
+       case maple_range_64:
+       case maple_leaf_64:
+               return rcu_dereference_check(mn->mr64.slot[slot],
+                               lockdep_is_held(&mtree->ma_lock));
+       default:
+       case maple_dense:
+               return rcu_dereference_check(mn->slot[slot],
+                               lockdep_is_held(&mtree->ma_lock));
+       case maple_arange_64:
+               return rcu_dereference_check(mn->ma64.slot[slot],
+                               lockdep_is_held(&mtree->ma_lock));
+       case maple_sparse_6:
+               return rcu_dereference_check(mn->ms6.slot[slot],
+                               lockdep_is_held(&mtree->ma_lock));
+       case maple_sparse_9:
+               return rcu_dereference_check(mn->ms9.slot[slot],
+                               lockdep_is_held(&mtree->ma_lock));
+       case maple_sparse_16:
+               return rcu_dereference_check(mn->ms16.slot[slot],
+                               lockdep_is_held(&mtree->ma_lock));
+       case maple_sparse_21:
+               return rcu_dereference_check(mn->ms21.slot[slot],
+                               lockdep_is_held(&mtree->ma_lock));
+       case maple_sparse_32:
+               return rcu_dereference_check(mn->ms32.slot[slot],
+                               lockdep_is_held(&mtree->ma_lock));
+       case maple_sparse_64:
+               return rcu_dereference_check(mn->ms64.slot[slot],
+                               lockdep_is_held(&mtree->ma_lock));
+       case maple_range_16:
+       case maple_leaf_16:
+               return rcu_dereference_check(mn->mr16.slot[slot],
+                               lockdep_is_held(&mtree->ma_lock));
+       case maple_range_32:
+       case maple_leaf_32:
+               return rcu_dereference_check(mn->mr32.slot[slot],
+                               lockdep_is_held(&mtree->ma_lock));
+       }
+}
+
+static inline struct maple_enode *_mte_get_rcu_slot(
+               const struct maple_enode *mn, unsigned char slot,
+               enum maple_type type, struct maple_tree *mtree)
+{
+       return ma_get_rcu_slot(mte_to_node(mn), slot, type, mtree);
+}
+static inline struct maple_enode *mte_get_rcu_slot(const struct maple_enode *mn,
+                unsigned char slot, struct maple_tree *mtree)
+{
+       return _mte_get_rcu_slot(mn, slot, mte_node_type(mn), mtree);
+}
+
+static inline struct maple_enode *mas_get_rcu_slot(const struct ma_state *mas,
+               unsigned char slot)
+{
+       return mte_get_rcu_slot(mas->node, slot, mas->tree);
+}
+static inline struct maple_enode *mas_get_rcu_sanitized(
+               struct ma_state *mas, unsigned char slot)
+{
+       void *entry = mte_get_rcu_slot(mas->node, slot, mas->tree);
+
+       if (mt_will_coalesce(entry))
+               return NULL;
+
+       return entry;
+}
+
+static inline void ma_set_rcu_slot(struct maple_node *mn,
+               unsigned char slot, enum maple_type type, void *val)
+{
+
+       switch (type) {
+       default:
+       case maple_dense:
+               rcu_assign_pointer(mn->slot[slot], val);
+               break;
+       case maple_sparse_6:
+               rcu_assign_pointer(mn->ms6.slot[slot], val);
+               break;
+       case maple_sparse_9:
+               rcu_assign_pointer(mn->ms9.slot[slot], val);
+               break;
+       case maple_sparse_16:
+               rcu_assign_pointer(mn->ms16.slot[slot], val);
+               break;
+       case maple_sparse_21:
+               rcu_assign_pointer(mn->ms21.slot[slot], val);
+               break;
+       case maple_sparse_32:
+               rcu_assign_pointer(mn->ms32.slot[slot], val);
+               break;
+       case maple_sparse_64:
+               rcu_assign_pointer(mn->ms64.slot[slot], val);
+               break;
+       case maple_range_16:
+       case maple_leaf_16:
+               rcu_assign_pointer(mn->mr16.slot[slot], val);
+               break;
+       case maple_range_32:
+       case maple_leaf_32:
+               rcu_assign_pointer(mn->mr32.slot[slot], val);
+               break;
+       case maple_range_64:
+       case maple_leaf_64:
+               BUG_ON(slot >= 8);
+               rcu_assign_pointer(mn->mr64.slot[slot], val);
+               break;
+       case maple_arange_64:
+               BUG_ON(slot >= 5);
+               rcu_assign_pointer(mn->ma64.slot[slot], val);
+               break;
+       }
+}
+static inline void mte_set_rcu_slot(const struct maple_enode *mn,
+                                unsigned char slot, void *val)
+{
+       ma_set_rcu_slot(mte_to_node(mn), slot, mte_node_type(mn), val);
+}
+
+static inline void mas_dup_state(struct ma_state *dst, struct ma_state *src)
+{
+       dst->tree = src->tree;
+       dst->index = src->index;
+       dst->last = src->last;
+       dst->node = src->node;
+       dst->max = src->max;
+       dst->min = src->min;
+       mas_set_slot(dst, mas_get_slot(src));
+}
+static inline void mas_descend(struct ma_state *mas)
+{
+       unsigned char slot = mas_get_slot(mas);
+
+       if (slot)
+               mas->min = mas_get_safe_pivot(mas, slot - 1) + 1;
+       mas->max = mas_get_safe_pivot(mas, slot);
+       mas->node = mas_get_rcu_slot(mas, mas_get_slot(mas));
+}
+
+static inline void mte_update_rcu_slot(const struct maple_enode *mn,
+                                unsigned char slot, void *val)
+{
+       enum maple_type type = mte_node_type(mn);
+
+       switch (type) {
+       case maple_range_64:
+       case maple_leaf_64:
+               rcu_assign_pointer(mte_to_node(mn)->mr64.slot[slot], val);
+               break;
+       default:
+       case maple_dense:
+               rcu_assign_pointer(mte_to_node(mn)->slot[slot], val);
+               break;
+       case maple_arange_64:
+               rcu_assign_pointer(mte_to_node(mn)->ma64.slot[slot], val);
+               break;
+       case maple_sparse_6:
+               rcu_assign_pointer(mte_to_node(mn)->ms6.slot[slot], val);
+               break;
+       case maple_sparse_9:
+               rcu_assign_pointer(mte_to_node(mn)->ms9.slot[slot], val);
+               break;
+       case maple_sparse_16:
+               rcu_assign_pointer(mte_to_node(mn)->ms16.slot[slot], val);
+               break;
+       case maple_sparse_21:
+               rcu_assign_pointer(mte_to_node(mn)->ms21.slot[slot], val);
+               break;
+       case maple_sparse_32:
+               rcu_assign_pointer(mte_to_node(mn)->ms32.slot[slot], val);
+               break;
+       case maple_sparse_64:
+               rcu_assign_pointer(mte_to_node(mn)->ms64.slot[slot], val);
+               break;
+       case maple_range_16:
+       case maple_leaf_16:
+               rcu_assign_pointer(mte_to_node(mn)->mr16.slot[slot], val);
+               break;
+       case maple_range_32:
+       case maple_leaf_32:
+               rcu_assign_pointer(mte_to_node(mn)->mr32.slot[slot], val);
+               break;
+       }
+}
+
+static inline unsigned long ma_get_gap(const struct maple_node *mn,
+                                unsigned char gap, enum maple_type type)
+{
+       switch (type) {
+       case maple_arange_64:
+               return mn->ma64.gap[gap];
+       default:
+               return 0;
+       }
+}
+static inline unsigned long mte_get_gap(const struct maple_enode *mn,
+                                unsigned char gap)
+{
+       return ma_get_gap(mte_to_node(mn), gap, mte_node_type(mn));
+}
+
+static inline void ma_set_gap(struct maple_node *mn, unsigned char gap,
+               enum maple_type type, unsigned long val)
+{
+       switch (type) {
+       default:
+               break;
+       case maple_arange_64:
+               mn->ma64.gap[gap] = val;
+               break;
+       }
+}
+static inline void mte_set_gap(const struct maple_enode *mn,
+                                unsigned char gap, unsigned long val)
+{
+       ma_set_gap(mte_to_node(mn), gap, mte_node_type(mn), val);
+}
+static inline void mte_cp_gap(struct maple_enode *dst,
+               unsigned char dloc, struct maple_enode *src, unsigned long sloc)
+{
+       mte_set_gap(dst, dloc, mte_get_gap(src, sloc));
+}
+
+static inline void mas_update_limits(struct ma_state *mas, unsigned char slot,
+               enum maple_type type)
+{
+       if (slot > 0)
+               mas->min = _mte_get_pivot(mas->node, slot - 1, type) + 1;
+
+       if (slot < mt_pivots[type])
+               mas->max = _mte_get_pivot(mas->node, slot, type);
+}
+
+/**
+ * mas_retry() - Retry the operation if appropriate.
+ * @mas: Maple Tree operation state.
+ * @entry: Entry from tree.
+ *
+ * The advanced functions may sometimes return an internal entry, such as
+ * a retry entry or a zero entry.  This function sets up the @mas to restart
+ * the walk from the head of the array if needed.
+ *
+ * Context: Any context.
+ * Return: true if the operation needs to be retried.
+ */
+bool mas_retry(struct ma_state *mas, const void *entry)
+{
+       if (xa_is_skip(entry))
+               return true;
+       if (xa_is_deleted(entry))
+               return true;
+       if (xa_is_zero(entry))
+               return true;
+       if (!xa_is_retry(entry))
+               return false;
+       mas_reset(mas);
+       return true;
+}
+
+static inline void mas_ascend(struct ma_state *mas)
+{
+       struct maple_enode *p_enode; // parent enode.
+       struct maple_enode *a_enode = mas->node; // ancestor enode.
+       struct maple_node *a_node = mas_mn(mas); // ancestor node.
+       unsigned char a_slot = 0;
+       enum maple_type a_type = mte_node_type(mas->node);
+       unsigned long max = 0, min = ULONG_MAX;
+       bool set_max = false, set_min = false;
+
+       p_enode = mt_mk_node(mte_parent(mas->node),
+                       mas_parent_enum(mas, mas->node));
+
+
+       if (_ma_is_root(a_node))
+               goto no_parent;
+
+       a_type = mas_parent_enum(mas, mas->node);
+       a_enode = p_enode;
+
+       if (mte_is_root(a_enode)) {
+               a_node = mte_to_node(a_enode);
+               goto no_parent;
+       }
+
+       mas->node = p_enode;
+ascend:
+       a_type = mas_parent_enum(mas, mas->node);
+       a_node = mte_parent(mas->node);
+       a_slot = mte_parent_slot(mas->node);
+       a_enode = mt_mk_node(a_node, a_type);
+
+       if (!set_min && a_slot) {
+               set_min = true;
+               min = mte_get_pivot(a_enode, a_slot - 1) + 1;
+       }
+
+       if (!set_max && a_slot < mt_pivots[a_type]) {
+               set_max = true;
+               max = mte_get_pivot(a_enode, a_slot);
+       }
+
+no_parent:
+       if (_ma_is_root(a_node)) {
+               if (!set_min)
+                       min = 0;
+               if (!set_max)
+                       max = mt_max[a_type];
+       }
+
+       if (!max || min == ULONG_MAX) {
+               mas->node = a_enode;
+               goto ascend;
+       }
+
+       mas->max = max;
+       mas->min = min;
+       mas->node = p_enode;
+}
+
+static inline void mas_set_safe_pivot(struct ma_state *mas, unsigned char slot,
+               unsigned long val)
+{
+       MA_STATE(safe_mas, mas->tree, mas->index, mas->last);
+       mas_dup_state(&safe_mas, mas);
+
+restart:
+       if (slot >= mt_pivot_count(safe_mas.node)) {
+               if (mte_is_root(safe_mas.node))
+                       return;
+
+               slot = mte_parent_slot(safe_mas.node);
+               mas_ascend(&safe_mas);
+               goto restart;
+       }
+       mte_set_pivot(safe_mas.node, slot, val);
+}
+
+/** Private
+ * mas_shift_pivot() - Shift a pivot from one node to the next.
+ * @left - the left node with mas slot set to the pivot location.
+ * @right - the right node with mas slot set to the pivot location.
+ *
+ * This exists when moving gaps across many levels of a tree.  Basically, walk
+ * backwards until the nodes meet and set the pivots accordingly.
+ *
+ * Special cases for XA_SKIP_ENTRY is needed.
+ */
+static inline void mas_shift_pivot(struct ma_state *curr,
+               struct ma_state *next, unsigned long piv)
+{
+       unsigned char l_p_slot; // left parent slot.
+       unsigned char r_p_slot; // right parent slot.
+
+       MA_STATE(left, curr->tree, curr->index, curr->last);
+       MA_STATE(right, next->tree, next->index, next->last);
+
+       mas_dup_state(&left, curr);
+       mas_dup_state(&right, next);
+       do {
+               // Ends with NULL side
+               l_p_slot = mte_parent_slot(left.node);
+               mas_set_slot(&left, l_p_slot);
+               mas_ascend(&left);
+
+               // Starts with NULL side
+               r_p_slot = mte_parent_slot(right.node);
+               mas_set_slot(&right, r_p_slot);
+               mas_ascend(&right);
+
+               mas_set_safe_pivot(&left, l_p_slot, piv);
+               if (left.node == right.node) {
+                       if (r_p_slot - 1 != l_p_slot) {
+                               int slot = l_p_slot + 1;
+                               do {
+                                       mte_set_pivot(left.node, slot, piv);
+                               } while (++slot < r_p_slot);
+                       }
+                       return;
+               }
+       } while (left.node != right.node);
+}
+/* mas_get_prev_pivot() - Return the previous pivot.
+ *
+ * Mainly for extracting the previous pivot in the case of slot = 0.
+ * Walk up the tree until the minimum changes, then get the previous pivot.
+ *
+ */
+static inline unsigned long mas_get_prev_pivot(const struct ma_state *mas,
+                                        unsigned char slot)
+{
+       unsigned char p_slot = MAPLE_NODE_SLOTS; // parent slot.
+
+       MA_STATE(prev_piv, mas->tree, 0, 0);
+
+       if (slot > 0)
+               return mas_get_safe_pivot(mas, slot - 1);
+
+       if (mas->min == 0)
+               return 0;
+
+
+       prev_piv.node = mas->node;
+       prev_piv.min = mas->min;
+
+       while (prev_piv.min == mas->min) {
+               p_slot = mte_parent_slot(prev_piv.node);
+               mas_ascend(&prev_piv);
+               if (p_slot)
+                       break;
+       }
+       p_slot--;
+       return mte_get_pivot(prev_piv.node, slot);
+}
+
+static inline struct maple_node *mas_next_alloc(struct ma_state *ms)
+{
+       int cnt;
+       struct maple_node *mn, *smn;
+
+       if (!ms->alloc)
+               return NULL;
+
+       cnt = mas_get_alloc_cnt(ms);
+       mn = mas_get_alloc(ms);
+       if (cnt == 1) {
+               ms->alloc = NULL;
+       } else if (cnt <= 16) {
+               cnt -= 2;
+               smn = mn->slot[cnt];
+               mn->slot[cnt] = NULL;
+               mn = smn;
+       } else if (cnt > 16) {
+               cnt -= 2;
+               smn = mn->slot[(cnt / 15) - 1];
+               mn = smn->slot[(cnt % 15)];
+               smn->slot[cnt % 15] = NULL;
+       }
+
+       return mn;
+}
+static inline void mas_push_node(struct ma_state *mas, struct maple_enode *used)
+{
+       struct maple_node *reuse = mte_to_node(used);
+       struct maple_node *node = mas_get_alloc(mas);
+       int cnt;
+
+       memset(reuse, 0, sizeof(*reuse));
+       cnt = mas_get_alloc_cnt(mas);
+       if (cnt == 0) {
+               mas->alloc = reuse;
+       } else if (cnt <= 15) {
+               cnt--;
+               node->slot[cnt] = reuse;
+       } else {
+               struct maple_node *smn;
+
+               cnt--;
+               smn = node->slot[(cnt/15) - 1];
+               smn->slot[cnt % 15] = reuse;
+       }
+       cnt = mas_get_alloc_cnt(mas);
+
+       BUG_ON(!mas_get_alloc_cnt(mas));
+}
+static inline void mas_node_node(struct ma_state *ms, gfp_t gfp)
+{
+       struct maple_node *mn, *smn;
+       int req = mas_get_alloc_req(ms);
+       int allocated = mas_get_alloc_cnt(ms);
+       int slot;
+
+       if (!req)
+               return;
+
+       mn = mas_get_alloc(ms);
+       if (!mn) {
+               mn = mt_alloc_one(gfp);
+               if (!mn)
+                       goto list_failed;
+               req--;
+               allocated++;
+       }
+
+       ms->alloc = mn;
+       slot = (allocated - 1);
+       if (allocated - 1 >= MAPLE_NODE_SLOTS) {
+               slot /= MAPLE_NODE_SLOTS;
+               mn = mn->slot[slot - 1];
+       }
+
+       while (req > 0) {
+               smn = mt_alloc_one(gfp);
+               if (!smn)
+                       goto slot_failed;
+               smn->parent = NULL;
+               mn->slot[slot] = smn;
+               req--;
+               allocated++;
+               slot++;
+               if (slot >= MAPLE_NODE_SLOTS) {
+                       slot = (allocated - 1) / MAPLE_NODE_SLOTS;
+                       mn = ms->alloc->slot[slot - 1];
+                       slot = 0;
+               }
+       }
+
+slot_failed:
+       mas_set_alloc_req(ms, req);
+
+list_failed:
+       if (req > 0)
+               mas_set_err(ms, -ENOMEM);
+}
+
+// Free the allocations.
+static inline void ma_free_alloc(struct maple_node *node)
+{
+       int alloc = 0;
+
+       while (alloc < MAPLE_NODE_SLOTS && node->slot[alloc]) {
+               if (ma_mnode_ptr(node->slot[alloc])->slot[0])
+                       ma_free_alloc(node->slot[alloc]);
+               else
+                       kfree(node->slot[alloc]);
+               alloc++;
+       }
+       kfree(node);
+}
+
+/* Private
+ * Check if there was an error allocating and do the allocation if necessary
+ * If there are allocations, then free them.
+ */
+bool mas_nomem(struct ma_state *mas, gfp_t gfp)
+       __must_hold(mas->tree->lock)
+{
+       if (mas->node != MA_ERROR(-ENOMEM)) {
+               struct maple_node *node = mas_get_alloc(mas);
+
+               if (node)
+                       ma_free_alloc(node);
+               mas->alloc = NULL;
+               return false;
+       }
+
+       if (gfpflags_allow_blocking(gfp)) {
+               mtree_unlock(mas->tree);
+               mas_node_node(mas, gfp);
+               mtree_lock(mas->tree);
+       } else {
+               mas_node_node(mas, gfp);
+       }
+       if (!mas_get_alloc(mas))
+               return false;
+       mas->node = MAS_START;
+       return true;
+}
+static inline struct maple_node *mas_node_cnt(struct ma_state *mas, int count)
+{
+       int allocated = mas_get_alloc_cnt(mas);
+
+       BUG_ON(count > 127);
+
+       if (allocated < count) {
+               mas_set_alloc_req(mas, count - allocated);
+               mas_node_node(mas, GFP_NOWAIT | __GFP_NOWARN);
+       }
+       return mas->alloc;
+}
+
+/** Private
+ * Sets up maple state for operations by setting mas->min = 0 & mas->node to
+ * certain values.
+ * returns:
+ * - If mas->node is an error or MAS_START, return NULL.
+ * - If it's an empty tree:     NULL & mas->node == MAS_NONE
+ * - If it's a single entry:    The entry & mas->node == MAS_ROOT
+ * - If it's a tree:            NULL & mas->node == safe root node.
+ */
+static inline struct maple_enode *mas_start(struct ma_state *mas)
+{
+       void *entry = NULL;
+
+       if (mas_is_err(mas))
+               goto done;
+
+       if (mas_is_start(mas)) {
+               struct maple_enode *root;
+
+               mas->node = MAS_NONE;
+               mas->min = 0;
+               mas->max = ULONG_MAX;
+               mas_set_slot(mas, 0);
+               if (!mas->tree->ma_root) // empty tree.
+                       goto done;
+
+               root = mte_safe_root(mas->tree->ma_root);
+
+               if (!xa_is_node(mas->tree->ma_root)) {
+                       // Single entry tree.
+                       if (mas->index > 0)
+                               goto done;
+
+                       entry = mas->tree->ma_root;
+                       mas->node = MAS_ROOT;
+                       mas_set_slot(mas, MAPLE_NODE_SLOTS);
+               } else {
+                       mas->node = root;
+               }
+       }
+
+done:
+       return entry;
+}
+
+/* Private
+ * mas_data_end() - Find the end of the data (slot +1).  Sets the value of the
+ * last pivot to @last_piv, sets @coalesce to the number of slots that can be
+ * removed by coalescing.
+ */
+static inline unsigned char _mas_data_end(const struct ma_state *mas,
+               const enum maple_type type, unsigned long *last_piv,
+               unsigned char *coalesce)
+{
+       struct maple_enode *mn = mas->node;
+       unsigned long piv = mas->min, prev_piv = mas->min;
+       unsigned char slot;
+       unsigned char counted_null = 0;
+
+       *coalesce = 0;
+       for (slot = 0; slot < mt_slot_count(mn); slot++) {
+               void *entry;
+
+               piv = _mas_get_safe_pivot(mas, slot, type);
+               if (!piv && slot) { // Past the end of data.
+                       slot--;
+                       piv = prev_piv;
+                       // At this point, we are saying the previous slot is
+                       // the end.
+                       if (counted_null) {
+                               // if this node has ended in a run of NULL
+                               if (slot <= counted_null) {
+                                       slot = 0;
+                                       (*coalesce) = 0;
+                                       piv = mas->min - 1;
+                                       break;
+                               }
+                               (*coalesce) = (*coalesce) - counted_null + 1;
+                               piv = _mas_get_safe_pivot(mas,
+                                               slot - counted_null, type);
+                       }
+                       break;
+               }
+
+               entry = _mte_get_rcu_slot(mn, slot, type, mas->tree);
+               if (mt_will_coalesce(entry)) {
+                       if (piv == prev_piv || !slot)
+                               (*coalesce)++;
+
+               } else if (entry == NULL) {
+                       if (counted_null)
+                               (*coalesce)++;
+
+                       counted_null++;
+               } else {
+                       counted_null = 0;
+               }
+
+               if (piv == mas->max)
+                       break;
+
+               prev_piv = piv;
+       }
+
+       *last_piv = piv;
+       return slot;
+}
+
+static inline unsigned char mas_data_end(const struct ma_state *mas)
+{
+       unsigned long l;
+       unsigned char c;
+
+       return _mas_data_end(mas, mte_node_type(mas->node), &l, &c);
+}
+/** Private
+ * ma_hard_data - return the number of slots required to store what is
+ * currently in this node.
+ *
+ * @end the last slot with a valid pivot/contents
+ * @coalesce the number of slots that would be removed if copied/coalesced.
+ *
+ */
+static inline int ma_hard_data(unsigned long end,
+               unsigned long coalesce)
+{
+       if (end < coalesce)
+               return 0;
+       return end - coalesce;
+}
+
+static inline unsigned long mas_leaf_max_gap(struct ma_state *mas);
+
+// Set min/max for a given slot in mas->node.
+static inline void mas_get_range(struct ma_state *mas, unsigned char slot,
+               unsigned long *min, unsigned long *max)
+{
+       *min = mas->min;
+       *max = mas_get_safe_pivot(mas, slot);
+       if (!(*max)) {
+               if (slot || mas->min)
+                       *max = mas->max;
+       }
+
+       if (slot)
+               *min = mte_get_pivot(mas->node, slot - 1) + 1;
+
+       if ((*min) == 1) // empty node.
+               *min = mas->min;
+}
+/* mas_append_entry() - Append an entry to the target slot or overwrite a
+ * porting of the last slot.
+ */
+static inline unsigned char mas_append_entry(struct ma_state *mas, void *entry)
+{
+       unsigned long wr_pivot = mas->min ? mas->min - 1 : 0;
+       unsigned char coalesce, dst_slot = mas_get_slot(mas);
+
+       if (!mas_get_rcu_slot(mas, 0) && !mte_get_pivot(mas->node, 0))
+               dst_slot = 0; // empty node.
+       else if (dst_slot > mt_slot_count(mas->node)) { // Should not happen.
+               dst_slot = _mas_data_end(mas, mte_node_type(mas->node),
+                               &wr_pivot, &coalesce); // slot not set.
+       } else if (dst_slot)
+               wr_pivot = mas_get_safe_pivot(mas, dst_slot - 1);
+
+       if (dst_slot && mas->index <= wr_pivot) {
+               mas_set_safe_pivot(mas, dst_slot - 1, mas->index - 1);
+       } else if (entry && mas->index && (mas->index - 1 != wr_pivot)) {
+               if (dst_slot && !mas_get_rcu_slot(mas, dst_slot - 1))
+                       dst_slot--;
+
+               mte_set_rcu_slot(mas->node, dst_slot, NULL);
+               mas_set_safe_pivot(mas, dst_slot++, mas->index - 1);
+       } else if (!entry) { // appending NULL value.
+               if (mas_get_rcu_slot(mas, dst_slot)) {
+                       mas_set_safe_pivot(mas, dst_slot, mas->index - 1);
+                       dst_slot++;
+               }
+       }
+
+       mte_set_rcu_slot(mas->node, dst_slot, entry);
+       mas_set_safe_pivot(mas, dst_slot, mas->last);
+       mas->max = mas->last;
+
+       return dst_slot;
+}
+
+static inline unsigned char _mas_append(struct ma_state *mas,
+               struct maple_node *smn, enum maple_type stype,
+               unsigned long src_max,
+               unsigned char src_start, unsigned char src_end)
+{
+
+       unsigned long src_piv;
+       unsigned char src_slot = src_start;
+       unsigned char dst_slot = 0;
+       bool prev_null = false;
+       void *src_data = NULL;
+
+       // Find last slot in the dst.
+       while (dst_slot < mt_slot_count(mas->node)) {
+               unsigned long this_piv;
+
+               if (dst_slot < mt_pivot_count(mas->node))
+                       this_piv = mte_get_pivot(mas->node, dst_slot);
+               else { // Last slot, no pivot..
+                       if (src_end >= mt_pivots[stype])
+                               this_piv = src_max;
+                       else
+                               this_piv = ma_get_pivot(smn, src_end, stype);
+               }
+
+               // Not really src_data..
+               src_data = mas_get_rcu_slot(mas, dst_slot);
+               if (!src_data) {
+                       if (!this_piv)
+                               break;
+
+                       if (dst_slot == mt_pivot_count(mas->node))
+                               break;
+
+                       prev_null = true;
+               } else
+                       prev_null = false;
+               dst_slot++;
+       }
+
+       // Append data from src.
+       src_data = ma_get_rcu_slot(smn, src_start, stype, mas->tree);
+       for (src_slot = src_start; src_slot <= src_end; src_slot++) {
+               bool next_dst = true;
+
+               if (dst_slot >= mt_slot_count(mas->node))
+                       return dst_slot;
+
+               src_data = ma_get_rcu_slot(smn, src_slot, stype, mas->tree);
+               if (src_slot >= mt_pivots[stype])
+                       src_piv = src_max;
+               else
+                       src_piv = ma_get_pivot(smn, src_slot, stype);
+
+               if (!mte_is_leaf(mas->node) && mt_will_coalesce(src_data))
+                       continue;
+
+               if (!src_data || mt_will_coalesce(src_data)) {
+                       if (src_piv < mas->min && xa_is_retry(src_data))
+                               continue;
+
+                       src_data = NULL;
+                       if (prev_null && dst_slot) {
+                               mte_set_pivot(mas->node, dst_slot - 1, src_piv);
+                               next_dst = false;
+                               goto update_gap;
+                       }
+
+                       prev_null = true;
+               } else {
+                       prev_null = false;
+               }
+
+               mte_set_rcu_slot(mas->node, dst_slot, src_data);
+               mas_set_safe_pivot(mas, dst_slot, src_piv);
+update_gap:
+               if (!mte_is_leaf(mas->node) && mt_is_alloc(mas->tree))
+                       mte_set_gap(mas->node, dst_slot,
+                                       ma_get_gap(smn, src_slot, stype));
+
+               if (next_dst)
+                       dst_slot++;
+
+               if (mas->max < src_piv)
+                       mas->max = src_piv;
+       }
+
+       return dst_slot;
+}
+static inline unsigned char mas_append(struct ma_state *mas,
+               struct ma_state *src, unsigned char src_start,
+               unsigned char src_end)
+{
+       return _mas_append(mas, mas_mn(src), mte_node_type(src->node),
+                       src->max, src_start, src_end);
+}
+
+static inline unsigned char mas_append_calc_split(struct ma_state *mas,
+               bool active)
+{
+       unsigned char max = 7, ret = 7;
+       unsigned char slot;
+       unsigned long range = mas->max - mas->min;
+       unsigned long half;
+       unsigned long piv = 0;
+       enum maple_type mas_type = mte_node_type(mas->node);
+
+       if (mas_type == maple_arange_64)
+               max = 5;
+
+       if (!active) {
+               if (ma_is_leaf(mas_type))
+                       return max;
+               return max - 2;
+       }
+
+       //if (mas->min == 0)
+       //      max = 7;
+
+       half = max / 2;
+       if (ma_is_leaf(mas_type)) {
+               if (range <= 8UL)
+                       return ret;
+
+               for (slot = 0; slot <= mt_pivots[mas_type]; slot++) {
+                       piv = mas_get_safe_pivot(mas, slot);
+
+                       if (!piv && slot)
+                               return ret;
+
+                       range = piv - mas->min;
+                       if (range >= 8) {
+                               if (slot > half)
+                                       ret = slot;
+                               else
+                                       ret = half;
+                               goto done;
+                       }
+
+               }
+       }
+
+       return half;
+
+done:
+       if (ret < max && (piv == ULONG_MAX))
+               ret++;
+
+       return ret;
+}
+static inline unsigned char mas_skip_overwritten(struct ma_state *mas,
+               unsigned char data_end, unsigned char slot)
+{
+       unsigned char ret = slot;
+
+       while ((data_end >= ret) &&
+             (mas_get_safe_pivot(mas, ret) <= mas->last))
+               ret++;
+
+       return ret;
+}
+static void mas_split_may_switch_dst(struct ma_state **dst_mas,
+               struct ma_state *right, unsigned char *dst_slot)
+{
+       struct ma_state *dst = *dst_mas;
+
+       if (dst == right)
+               return;
+
+       if (*dst_slot >= mt_slot_count(dst->node)) {
+               right->min = dst->max + 1;
+               *dst_mas = right;
+               *dst_slot = 0;
+       }
+}
+
+static unsigned char mas_append_split_data(struct ma_state *left,
+               struct ma_state *right, struct ma_state *src,
+               unsigned char split, unsigned char start, unsigned char end,
+               unsigned char slot, void *entry)
+{
+       void *existing_entry = mas_get_rcu_sanitized(src, slot);
+       struct ma_state *dst = left;
+       unsigned char dst_slot = slot;
+       unsigned long slot_min, slot_max;
+
+       mas_get_range(src, slot, &slot_min, &slot_max);
+       if (!left) {
+               dst = right;
+               dst_slot = slot - split - 1;
+               if (mte_get_pivot(dst->node, dst_slot))
+                       dst_slot++;
+
+               while ((mte_get_pivot(src->node, start) < dst->min) &&
+                       (start < end))
+                       start++;
+       }
+
+       if (dst_slot) {
+               mas_append(dst, src, start, slot - 1);
+               dst->max = mte_get_pivot(dst->node, slot - 1);
+       }
+
+
+       if (slot_min == src->index) {
+               mas_set_safe_pivot(dst, dst_slot, dst->last);
+               mte_set_rcu_slot(dst->node, dst_slot++, entry);
+               dst->max = dst->last;
+       } else {
+               mas_set_safe_pivot(dst, dst_slot, dst->index - 1);
+               mte_set_rcu_slot(dst->node, dst_slot++, existing_entry);
+               dst->max = dst->index - 1;
+               mas_split_may_switch_dst(&dst, right, &dst_slot);
+               mas_set_safe_pivot(dst, dst_slot, dst->last);
+               mte_set_rcu_slot(dst->node, dst_slot++, entry);
+               dst->max = dst->last;
+       }
+
+       // Check if it's time to switch.
+       mas_split_may_switch_dst(&dst, right, &dst_slot);
+       // Skip anything overwritten by this add
+       slot = mas_skip_overwritten(src, end, slot);
+       if (slot >= mt_slot_count(src->node))
+               goto done;
+
+       mas_get_range(src, slot, &slot_min, &slot_max);
+       existing_entry = mas_get_rcu_sanitized(src, slot);
+
+       if (slot_min <= src->last && slot_max > src->last) {
+               mte_set_rcu_slot(dst->node, dst_slot, existing_entry);
+               mas_set_safe_pivot(dst, dst_slot++, slot_max);
+               dst->max = slot_max;
+               slot++;
+       }
+
+       mas_split_may_switch_dst(&dst, right, &dst_slot);
+
+       if (slot <= end && dst->max < src->max) {
+               mas_append(dst, src, slot, end);
+               dst->max = mas_get_safe_pivot(src, end);
+               slot = end + 1;
+       }
+done:
+       if (left == dst)
+               right->min = dst->max + 1;
+       return slot;
+}
+
+
+static inline unsigned char mas_append_split(struct ma_state *dst1,
+               struct ma_state *dst2, struct ma_state *src,
+               unsigned char slot, void *entry, bool active)
+{
+       unsigned char split = mas_append_calc_split(src, active);
+       unsigned char data_end = mas_data_end(src);
+       bool add_entry = mte_is_leaf(src->node);
+
+       mas_set_slot(dst1, slot);
+       dst1->max = mas_get_safe_pivot(src, split);
+       dst2->min = dst1->max + 1;
+       if (!add_entry)
+               goto not_a_leaf;
+
+       if (slot <= split) { // going into the left one, at least a little.
+               slot = mas_append_split_data(dst1, dst2, src, split, 0,
+                               split, slot, entry);
+               mas_append(dst2, src, slot, data_end);
+       } else { // going into the right.
+               mas_append(dst1, src, 0, split);
+               mas_append_split_data(NULL, dst2, src, split, split + 1,
+                               data_end, slot, entry);
+       }
+
+       return split;
+
+not_a_leaf:
+       mas_append(dst1, src, 0, split);
+       if (split != data_end)
+               split++;
+       mas_append(dst2, src, split, data_end);
+       return split;
+}
+
+
+static inline unsigned char mas_dense_calc_split(struct ma_state *mas,
+               struct maple_enode **left, struct maple_enode **right)
+{
+       char i, j;
+       unsigned long min = mas->min;
+       unsigned long max = min;
+       enum maple_type type = mte_node_type(mas->node);
+       unsigned long pivot_cnt = mt_pivots[type];
+       unsigned long half = mt_slots[type] / 2;
+       unsigned char data_end = mas_data_end(mas);
+
+       if (mte_is_root(mas->node)) {
+               i = half;
+               *left = (struct maple_enode *)mas_next_alloc(mas);
+               *right = (struct maple_enode *)mas_next_alloc(mas);
+               goto even_split;
+       }
+
+       *left = (struct maple_enode *)mas_next_alloc(mas);
+       for (i = 0; i < data_end; i++) {
+               max = mte_get_pivot(mas->node, i);
+               if ((max - min) > 15) {
+                       if (i)
+                               i--;
+                       break;
+               }
+       }
+
+       if (i >= data_end) {
+               *left = mt_mk_node(ma_mnode_ptr(*left), maple_dense);
+               if (mas->last >= mas->min + mt_max[type]) {
+                       *right = (struct maple_enode *)mas_next_alloc(mas);
+                       *right = mt_mk_node(ma_mnode_ptr(*right), type);
+               }
+               if (!i)
+                       i = mt_max[type];
+               return i;
+       }
+
+       *right = (struct maple_enode *)mas_next_alloc(mas);
+       if (i >= half) {
+               *left = mt_mk_node(ma_mnode_ptr(*left), maple_dense);
+               *right = mt_mk_node(ma_mnode_ptr(*right), type);
+               return i;
+       }
+
+       if (data_end < pivot_cnt)
+               max = mte_get_pivot(mas->node, data_end);
+       else
+               max = mas->max;
+
+       j = data_end;
+       do {
+               j--;
+               min = mte_get_pivot(mas->node, j);
+               if ((max - min) > 15) {
+                       j++;
+                       break;
+               }
+       } while (j > 0);
+
+       if (data_end - j >= half) {
+               *left = mt_mk_node(ma_mnode_ptr(*left), type);
+               *right = mt_mk_node(ma_mnode_ptr(*right), maple_dense);
+               return j;
+       }
+even_split:
+       *left = mt_mk_node(ma_mnode_ptr(*left), type);
+       *right = mt_mk_node(ma_mnode_ptr(*right), type);
+
+       return i > 2 ? i : half - 1;
+}
+
+static inline unsigned long mas_leaf_max_gap(struct ma_state *mas)
+{
+       enum maple_type mt = mte_node_type(mas->node);
+       unsigned long pstart, pend;
+       unsigned long prev_gap = 0;
+       unsigned long max_gap = 0;
+       unsigned long gap = 0;
+       void *entry = NULL;
+       int i;
+
+       if (ma_is_dense(mt)) {
+               for (i = 0; i < mt_slot_count(mas->node); i++) {
+                       entry = mas_get_rcu_slot(mas, i);
+                       if (!mt_is_empty(entry) || xa_is_retry(entry)) {
+                               if (gap > max_gap)
+                                       max_gap = gap;
+                               gap = 0;
+                       } else {
+                               gap++;
+                       }
+               }
+               if (gap > max_gap)
+                       max_gap = gap;
+               goto done;
+       }
+
+       pstart = mas->min;
+       for (i = 0; i < mt_slots[mt]; i++) {
+               pend = mas_get_safe_pivot(mas, i);
+               if (!pend && i)
+                       pend = mas->max;
+
+               gap = pend - pstart + 1;
+               entry = mas_get_rcu_slot(mas, i);
+
+               if (!mt_is_empty(entry) || xa_is_retry(entry)) {
+                       prev_gap = 0;
+                       goto next;
+               }
+
+               prev_gap += gap;
+               if (prev_gap > max_gap)
+                       max_gap = prev_gap;
+
+next:
+               if (pend >= mas->max)
+                       break;
+
+               pstart = pend + 1;
+       }
+done:
+       return max_gap;
+
+}
+static inline unsigned long mas_max_gap(struct ma_state *mas,
+               unsigned char *slot)
+{
+       unsigned long max_gap = 0;
+       unsigned char i;
+
+       for (i = 0; i < mt_slot_count(mas->node); i++) {
+               unsigned long gap;
+
+               gap = mte_get_gap(mas->node, i);
+               if (gap >  max_gap) {
+                       *slot = i;
+                       max_gap = gap;
+               }
+       }
+
+       return max_gap;
+}
+static inline void mas_parent_gap(struct ma_state *mas, unsigned char slot,
+               unsigned long new, bool force)
+{
+       unsigned char max_slot = 0;
+       unsigned long old_max_gap;
+
+       /* Don't mess with mas state, use a new state */
+       MA_STATE(gaps, mas->tree, mas->index, mas->last);
+       mas_dup_state(&gaps, mas);
+
+ascend:
+       /* Go to the parent node. */
+       mas_ascend(&gaps);
+       old_max_gap = mas_max_gap(&gaps, &max_slot);
+       mte_set_gap(gaps.node, slot, new);
+       new = mas_max_gap(&gaps, &slot);
+
+       if (!force && new == old_max_gap)
+               return;
+
+       if (mte_is_root(gaps.node))
+               return;
+
+       slot = mte_parent_slot(gaps.node);
+       goto ascend;
+}
+/* Private
+ *
+ * mas_update_gap() - Update a nodes gaps and propagate up if necessary or
+ * force by setting @force to true.
+ */
+static inline void mas_update_gap(struct ma_state *mas, bool force)
+{
+       unsigned char pslot;
+       unsigned long p_gap, max_gap = 0;
+       unsigned char slot = 0;
+
+       /* Get the largest gap in mas->node */
+       if (mte_is_root(mas->node))
+               return;
+
+       if (mte_is_leaf(mas->node))
+               max_gap = mas_leaf_max_gap(mas);
+       else
+               max_gap = mas_max_gap(mas, &slot);
+
+       /* Get the gap reported in the parent */
+       pslot = mte_parent_slot(mas->node);
+       p_gap = ma_get_gap(mte_parent(mas->node), pslot,
+                       mas_parent_enum(mas, mas->node));
+
+       if (force || p_gap != max_gap)
+               mas_parent_gap(mas, pslot, max_gap, force);
+}
+
+
+/* Private
+ * mas_first_node() - Finds the first node in mas->node and returns the pivot,
+ * mas->max if no node is found.  Node is returned as mas->node which may be
+ * MAS_NONE.
+ *
+ * Note, if we descend to a leaf, then the slot is not valid.
+ *
+ * @mas: maple state
+ * @limit: The maximum index to consider valid.
+ */
+static inline unsigned long mas_first_node(struct ma_state *mas,
+               unsigned long limit)
+{
+       int slot = mas_get_slot(mas) - 1;
+       unsigned char count = mt_slot_count(mas->node);
+       unsigned long min = mas->min;
+
+       while (++slot < count) {
+               struct maple_enode *mn;
+               unsigned long pivot;
+
+               pivot = mas_get_safe_pivot(mas, slot);
+               if (pivot > limit)
+                       goto no_entry;
+
+               mn = mas_get_rcu_slot(mas, slot);
+
+               if (mt_is_empty(mn)) {
+                       min = pivot + 1;
+                       continue;
+               }
+
+               // Non-leaf nodes need to descend.
+               if (!mte_is_leaf(mas->node)) {
+                       mas->max = pivot;
+                       mas->min = min;
+                       mas->node = mn;
+               }
+               mas_set_slot(mas, slot);
+               return pivot;
+       }
+
+no_entry:
+       mas->node = MAS_NONE;
+       return mas->max;
+}
+/* Private
+ *
+ * Returns the pivot which points to the entry with the lowest index.
+ * @mas slot is set to the entry location.
+ * @limit is the maximum index to check.
+ *
+ */
+static inline unsigned long mas_first_entry(struct ma_state *mas,
+               unsigned long limit)
+{
+       unsigned long pivot;
+
+       while (1) {
+               pivot = mas_first_node(mas, limit);
+               if (mas_is_none(mas))
+                       return pivot;
+
+               if (mte_is_leaf(mas->node)) {
+                       // Get the leaf slot.
+                       mas_set_slot(mas, 0);
+                       mas_first_node(mas, limit);
+                       if (mas_is_none(mas))
+                               return limit;
+                       return mas_get_safe_pivot(mas,
+                                       mas_get_slot(mas));
+               }
+
+               mas_set_slot(mas, 0);
+       }
+}
+
+
+/* Private
+ *  mte_destroy_walk: Free the sub-tree from @mn and below.
+ */
+void mte_destroy_walk(struct maple_enode *mn, struct maple_tree *mtree)
+{
+       struct maple_enode *node;
+       unsigned int type = mte_node_type(mn);
+       unsigned char slot_cnt = mt_slot_count(mn);
+       int i;
+
+       switch (type) {
+       case maple_range_16:
+       case maple_range_32:
+       case maple_range_64:
+       case maple_arange_64:
+               for (i = 0; i < slot_cnt; i++) {
+                       node = mte_get_rcu_slot(mn, i, mtree);
+                       if (!mt_is_empty(node) && !xa_is_retry(node))
+                               mte_destroy_walk(node, mtree);
+               }
+               break;
+       default:
+               break;
+       }
+       mte_free(mn);
+
+}
+
+static inline void mas_adopt_children(struct ma_state *mas,
+               struct maple_enode *parent)
+{
+
+       enum maple_type type = mte_node_type(parent);
+       unsigned char slot_cnt = mt_slots[type];
+       struct maple_enode *child;
+       unsigned char slot;
+
+       for (slot = 0; slot < slot_cnt; slot++) {
+               if (slot != 0 && slot < slot_cnt - 1 &&
+                   _mte_get_pivot(parent, slot, type) == 0)
+                       break;
+
+               child = _mte_get_rcu_slot(parent, slot, type, mas->tree);
+               if (!mt_is_empty(child))
+                       mte_set_parent(child, parent, slot);
+       }
+}
+/* Private
+ * _mas_replace() - Replace a maple node in the tree with mas->node.  Uses the
+ * parent encoding to locate the maple node in the tree.
+ * @free: Free the old node
+ * @push: push the old node onto the allocated nodes in mas->alloc
+ *
+ */
+static inline void _mas_replace(struct ma_state *mas, bool free, bool push)
+{
+       struct maple_node *mn = mas_mn(mas);
+       struct maple_enode *parent = NULL;
+       struct maple_enode *prev;
+       unsigned char slot = 0;
+
+       if (mte_is_root(mas->node)) {
+               prev = mas->tree->ma_root;
+       } else {
+               enum maple_type ptype = mas_parent_enum(mas, mas->node);
+
+               parent = mt_mk_node(mte_parent(mas->node), ptype);
+               slot = mte_parent_slot(mas->node);
+               prev = mte_get_rcu_slot(parent, slot, mas->tree);
+       }
+
+       if (mte_to_node(prev) == mn)
+               return;
+
+       if (!mte_is_leaf(mas->node))
+               mas_adopt_children(mas, mas->node);
+
+       if (mte_is_root(mas->node)) {
+               mn->parent = ma_parent_ptr(
+                             ((unsigned long)mas->tree | MA_ROOT_PARENT));
+               rcu_assign_pointer(mas->tree->ma_root, mte_mk_root(mas->node));
+       } else {
+               mte_update_rcu_slot(parent, slot, mas->node);
+       }
+
+       if (free) {
+               mte_free(prev);
+               return;
+       }
+
+       if (push)
+               mas_push_node(mas, prev);
+
+}
+static inline void mas_replace(struct ma_state *mas)
+{
+       _mas_replace(mas, true, false);
+}
+
+static inline void mas_gap_link(struct ma_state *mas, struct maple_enode *parent,
+               unsigned char slot, unsigned long pivot)
+{
+       unsigned long gap, max;
+       unsigned char max_slot;
+
+       max = mas->max;
+       if (slot)
+               mas->min = mte_get_pivot(parent, slot - 1) + 1;
+
+       mas->max = pivot;
+       if (!mte_is_leaf(mas->node))
+               gap = mas_max_gap(mas, &max_slot);
+       else
+               gap = mas_leaf_max_gap(mas);
+
+       mte_set_gap(parent, slot, gap);
+       mas->max = max;
+}
+static inline void mas_link(struct ma_state *mas, struct maple_enode *new,
+               struct maple_enode *parent, unsigned char slot,
+               unsigned long pivot, enum maple_type type)
+{
+       unsigned char pivot_cnt = mt_pivots[type];
+
+       mte_set_parent(new, parent, slot);
+       if (slot < pivot_cnt)
+               mte_set_pivot(parent, slot, pivot);
+
+       mte_set_rcu_slot(parent, slot, new);
+       if (!mte_is_leaf(new))
+               mas_adopt_children(mas, new);
+
+}
+static inline enum maple_type mas_ptype_leaf(struct ma_state *mas)
+{
+       enum maple_type pt = mte_node_type(mas->node);
+
+       switch (pt) {
+       case maple_arange_64:
+       case maple_range_64:
+       default:
+               return maple_leaf_64;
+       }
+}
+/*
+ * split late, that is to say.. the parent may be full and need to be split.
+ * Once we know there is space (we need only a single location), then we can
+ * continue.
+ *
+ * 1. Allocate 3 nodes: left, right, parent
+ * 2. If it's not root, copy all data from the old parent to the new one and
+ *    leave a hole.
+ * 3. Calculate the location to split the nodes.
+ * 4. Figure out the type of the node
+ * 5. Copy the data to the new nodes
+ * 6. Link in the nodes
+ * 7. replace old_parent
+ * 8. set up ma_state for return.
+ *
+ */
+static inline int mas_split(struct ma_state *mas, unsigned char slot,
+               bool active, unsigned char entry_cnt, void *entry)
+{
+       struct maple_enode *full = mas->node;
+       unsigned char split, p_slot = 0, p_end = 0, link = 0;
+       struct maple_enode *old_parent;
+       enum maple_type ptype; // parent type.
+       enum maple_type type; // split type.
+
+       MA_STATE(parent, mas->tree, mas->index, mas->last);
+       MA_STATE(left, mas->tree, mas->index, mas->last);
+       MA_STATE(right, mas->tree, mas->index, mas->last);
+       MA_STATE(new_p_mas, mas->tree, mas->index, mas->last);
+
+       type = mte_node_type(mas->node);
+       if (mte_is_root(mas->node)) {
+               old_parent = full;
+               mas_dup_state(&parent, mas);
+               if (mt_is_alloc(mas->tree))
+                       ptype = maple_arange_64;
+               else
+                       ptype = maple_range_64;
+               p_slot = 0;
+       } else {
+               unsigned long last_pivot;
+               unsigned char coalesce;
+
+               p_slot = mte_parent_slot(mas->node);
+               mas_dup_state(&parent, mas);
+               mas_ascend(&parent);
+               old_parent = parent.node;
+               ptype = mas_parent_enum(mas, mas->node);
+               p_end = _mas_data_end(&parent, ptype, &last_pivot, &coalesce);
+               if (p_end - coalesce >= mt_slots[ptype] - 1) {
+                       /* Must split the parent */
+                       mas_dup_state(mas, &parent);
+                       split = mas_split(mas, p_slot, active,
+                                       p_end - coalesce + 1, entry);
+                       if (mas_is_err(mas))
+                               return 0;
+
+                       mas_dup_state(&parent, mas);
+                       if (split <= p_slot)
+                               p_slot -= split;
+                       // Split will return the parent.
+                       old_parent = parent.node;
+                       mas_set_slot(&parent, p_slot);
+               }
+               ptype = mas_parent_enum(mas, mas->node);
+               p_end = mas_data_end(&parent);
+               mas_dup_state(mas, &parent);
+               mas_set_slot(mas, p_slot);
+               mas_descend(mas);
+       }
+
+       mas_node_cnt(mas, 3);
+       if (mas_is_err(mas))
+               return 0;
+
+       // Allocations.
+       mas_dup_state(&new_p_mas, &parent);
+       new_p_mas.node = mt_mk_node(mas_next_alloc(mas), ptype);
+
+       // Copy grand parent to the parent, including slot encoding.
+       mas_mn(&new_p_mas)->parent = mas_mn(&parent)->parent;
+
+       mas_dup_state(&left, mas);
+       mas_dup_state(&right, mas);
+       left.node = mt_mk_node(ma_mnode_ptr(mas_next_alloc(mas)), type);
+       right.node  = mt_mk_node(ma_mnode_ptr(mas_next_alloc(mas)), type);
+
+       mte_set_parent(left.node, new_p_mas.node, p_slot);
+       mte_set_parent(right.node, new_p_mas.node, p_slot+1);
+       // split the data into left & right and do the insert.
+       split = mas_append_split(&left, &right, mas, slot, entry, active);
+
+       // Copy the parent data up to p_slot - 1.
+       if (!mte_is_root(full) && p_slot)
+               link = mas_append(&new_p_mas, &parent, 0, p_slot - 1);
+
+       right.max = mas->max;
+       // left will be placed in link, not p_slot as coalescing may occur.
+       mas_link(mas, left.node, new_p_mas.node, link, left.max, ptype);
+
+       // right (if it exists, will be placed in link + 1;
+       if (right.node)
+               mas_link(mas, right.node, new_p_mas.node, link + 1,
+                       right.max, ptype);
+
+       // Append data from p_slot + 1 to the end.
+       if (!mte_is_root(full) && (p_slot + 1 <= p_end))
+               mas_append(&new_p_mas, &parent, p_slot + 1, p_end);
+
+       // Update encoded slots in children
+       mas_adopt_children(&new_p_mas, new_p_mas.node);
+
+       mas_dup_state(mas, &new_p_mas);
+       // Replace the parent node & free the old parent.
+       _mas_replace(mas, active, true);
+       mas_dup_state(mas, &new_p_mas);
+
+       if (mt_is_alloc(mas->tree))
+               mas_update_gap(mas, false);
+
+       // Set up the ma_state for the return.  Point to the correct node for
+       // the insert or subsequent split.
+       if (mas->index <= left.max) {
+               mas_dup_state(mas, &left);
+               p_slot += 1;
+       } else {
+               mas_dup_state(mas, &right);
+               p_slot += 2;
+       }
+
+       // Free the full node, this may have happened in _mas_replace
+       if (old_parent != full) {  // not root?
+               if (!active)
+                       mas_push_node(mas, full);
+               else
+                       mte_free(full);
+       }
+
+       if (mt_is_alloc(mas->tree)) {
+               mas_update_gap(&left, false);
+               mas_update_gap(&right, false);
+       }
+
+       return split;
+}
+
+/* Private
+ *
+ * When inserting into non-leaf nodes in _mas_insert, a type is needed.
+ *
+ * Try to determine that type here.
+ */
+static inline enum maple_type mas_determine_type(struct ma_state *mas,
+               unsigned long min, unsigned char slot)
+{
+       struct maple_enode *sibling;
+       unsigned char sibling_slot = slot;
+       enum maple_type stype, mt = mas_ptype_leaf(mas);
+
+       if (slot > 0)
+               sibling_slot -= 1;
+       else
+               sibling_slot += 1;
+       sibling = mas_get_rcu_slot(mas, sibling_slot);
+       if (!sibling)
+               return mt;
+
+       stype = mte_node_type(sibling);
+       if (mt_max[stype] >= min - mas->index)
+               return stype;
+
+       return mt;
+}
+
+/** Private
+ * mas_may_move_gap() - May move the gap to the proceeding node.
+ */
+static inline void mas_may_move_gap(struct ma_state *mas)
+{
+
+       unsigned long last_piv;
+       unsigned char coalesce;
+       unsigned char end;
+       unsigned char new_end;
+       unsigned char slot = mas_get_slot(mas);
+       void *entry = NULL;
+       void *next_entry = NULL;
+
+       // node that starts with NULL
+       MA_STATE(next, mas->tree, mas->index, mas->last);
+       // node that ends with NULL
+       MA_STATE(curr, mas->tree, mas->index, mas->last);
+
+       if (mte_is_root(mas->node))
+               return;
+
+       mas_dup_state(&next, mas);
+       mas_dup_state(&curr, mas);
+       end = mas_data_end(&curr);
+       if (end != slot) {
+               mas_prev(&curr, 0);
+               if (curr.node == mas->node) // prev value not in prev node.
+                       return;
+       }
+
+       if (mas_is_none(&curr))
+               return;
+
+       end = _mas_data_end(&curr, mte_node_type(curr.node), &last_piv,
+                       &coalesce);
+       entry = mas_get_rcu_slot(&curr, end);
+       if (entry && (!xa_is_deleted(entry)))
+               return;
+
+       if (curr.node == mas->node) // current wasn't shifted to prev.
+               mas_next(&next, ULONG_MAX);
+
+       if (mas_is_none(&next))
+               return;
+
+       next_entry = mas_get_rcu_slot(&next, 0);
+       if (next_entry && !mt_will_coalesce(next_entry))
+               return;
+
+       /* At this point curr has a gap at the end next has a gap at the
+        * start, see if there are more to shift.
+        */
+
+       new_end = end;
+       while (new_end && (!entry || mt_will_coalesce(entry)))
+               entry = mas_get_rcu_slot(&curr, --new_end);
+
+       // Set the slot to 0 in case of deleted or retry.
+       if (next_entry)
+               mte_set_rcu_slot(next.node, 0, NULL);
+
+       last_piv = mas_get_safe_pivot(&curr, new_end);
+       while (new_end++ != end) {
+               if (new_end < mt_pivot_count(curr.node))
+                       mte_set_pivot(curr.node, new_end, 0);
+               // The location storing these values has moved.
+               // FIXME: We need to allocate a new node.
+               // FIXME: What if allocation fails?
+               mte_set_rcu_slot(curr.node, new_end, NULL);
+       }
+
+       if (curr.node == mas->node)
+               mas->max = last_piv;
+       else
+               mas->min = last_piv + 1;
+
+       next.min = last_piv + 1;
+       curr.max = last_piv;
+       mas_shift_pivot(&curr, &next, last_piv);
+
+       if (mt_is_alloc(mas->tree)) {
+               mas_update_gap(&curr, false);
+               mas_update_gap(&next, false);
+       }
+}
+
+static inline int mas_add(struct ma_state *mas, void *entry, bool overwrite,
+               bool active);
+static inline int _mas_add_dense(struct ma_state *mas, void *entry,
+               unsigned char slot, bool overwrite, enum maple_type this_type,
+               bool active)
+{
+       int ret = 0;
+       unsigned long min = mas->index - mas->min;
+       unsigned long max = mas->last - mas->min;
+
+       if (max > mt_max[this_type])
+               max = mt_max[this_type];
+
+       // FIXME: Check entire range, not what we would insert this time.
+       if (!overwrite) {
+               do {
+                       if (mas_get_rcu_slot(mas, min++))
+                               return 0;
+               } while (min < max);
+       }
+
+       do {
+               mte_update_rcu_slot(mas->node, min++, entry);
+       } while (min < max);
+
+       if (max != mas->last - mas->min) {
+               mas->index = mas->min + max + 1;
+               mas_add(mas, entry, overwrite, active);
+       }
+
+       ret = max - min + 1;
+
+       return ret;
+}
+
+
+static inline int __mas_add_slot_cnt(struct ma_state *mas,
+               unsigned long prev_piv, unsigned char this_slot,
+               const unsigned char slot, bool prev_null, bool start)
+{
+       unsigned long this_piv = mas->min;
+       int slot_cnt = 0;
+       void *data;
+
+       while (this_slot < slot) {
+               this_piv = mas_get_safe_pivot(mas, this_slot);
+               if (!this_piv && this_slot)
+                       break;
+
+               if (this_piv == prev_piv && this_slot)
+                       goto skip_slot;
+
+               if (this_piv < prev_piv)
+                       goto skip_slot;
+
+               data = mas_get_rcu_slot(mas, this_slot);
+               if (!data || mt_will_coalesce(data)) {
+                       if (prev_null)
+                               goto skip_slot;
+
+                       prev_null = true;
+               } else
+                       prev_null = false;
+
+               slot_cnt++;
+skip_slot:
+               prev_piv = this_piv;
+               this_slot++;
+       }
+
+       if (start)
+               return slot_cnt;
+
+       if (prev_null != true && this_piv != mas->max)
+               slot_cnt++;
+
+       return slot_cnt;
+}
+
+static inline int _mas_add_slot_cnt(struct ma_state *mas,
+               const unsigned char slot, const unsigned long min,
+               const unsigned long max, void *entry)
+{
+       int slot_cnt;
+       unsigned char slot_max = mt_slot_count(mas->node);
+       bool prev_null = false;
+       unsigned long prev_piv = (mas->min ? mas->min - 1 : mas->min);
+
+       slot_cnt = __mas_add_slot_cnt(mas, prev_piv, 0, slot, false, true);
+       slot_cnt++; // maintains the same slot (this_slot) (1)
+       if (min < mas->index) // starts after this_slot.
+               slot_cnt++; // (2?)
+
+       if (max > mas->last) { // ends before this_slot.
+               void *prev_val = mas_get_rcu_slot(mas, slot);
+
+               slot_cnt++; // (2 or 3?)
+               prev_piv = max;
+               if (!prev_val || mt_will_coalesce(prev_val))
+                       prev_null = true;
+       } else {
+               if (!entry)
+                       prev_null = true;
+               prev_piv = mas->last;
+       }
+
+       if (max == mas->max)
+               return slot_cnt;
+
+       slot_cnt += __mas_add_slot_cnt(mas, prev_piv, slot + 1, slot_max,
+                                      prev_null, false);
+
+       return slot_cnt;
+}
+
+static inline int __mas_add(struct ma_state *mas, void *entry,
+               int entry_cnt, bool active, bool append)
+{
+       enum maple_type mas_type = mte_node_type(mas->node);
+       struct maple_node space;
+       struct maple_node *mn = NULL;
+       unsigned char data_end = mas_data_end(mas);
+       unsigned char slot = mas_get_slot(mas);
+       unsigned char end_slot = slot;
+       unsigned long src_max = mas->max;
+       unsigned long piv, prev_piv = mas->min - 1;
+       void *existing_entry = NULL;
+       int ret = 0;
+
+       MA_STATE(cp, mas->tree, mas->index, mas->last);
+
+       /* Append only if we are appending AND the slot is truly empty.
+        * If it's delete, skip, etc, then RCU requires a new node.
+        */
+       if (append && !mas_get_rcu_slot(mas, data_end + 1)) {
+               mas_set_slot(mas, data_end + 1);
+               mas_append_entry(mas, entry);
+               return ret;
+       }
+
+       mas_dup_state(&cp, mas);
+
+       if (slot)
+               prev_piv = mte_get_pivot(mas->node, slot - 1);
+
+       if (active) {
+               cp.node = mt_mk_node(ma_mnode_ptr(mas_next_alloc(mas)),
+                               mas_type);
+               mn = mas_mn(mas);
+       } else {
+               // Note cp.node == mas->node here.
+               mn = &space;
+               memcpy(mn, mas_mn(mas), sizeof(struct maple_node));
+               memset(mas_mn(&cp), 0, sizeof(struct maple_node));
+       }
+       mas_mn(&cp)->parent = mn->parent;
+       if (prev_piv == mas->index - 1) {
+               if (slot) // slot - 1 will translate to slot - 1 + 1.
+                       end_slot = _mas_append(&cp, mn, mas_type, src_max, 0,
+                                       slot - 1);
+       } else {
+               end_slot = _mas_append(&cp, mn, mas_type, src_max, 0, slot);
+               if (end_slot < mt_pivot_count(cp.node))
+                       mte_set_pivot(cp.node, end_slot, mas->index - 1);
+       }
+
+       mas_set_slot(&cp, end_slot);
+       end_slot = mas_append_entry(&cp, entry) + 1;
+
+       // Partial slot overwrite
+       slot = mas_skip_overwritten(mas, data_end, slot);
+       if (slot >= mt_slot_count(mas->node))
+               goto done; // potential spanning add.
+
+       mas_get_range(mas, slot, &prev_piv, &piv);
+       existing_entry = mas_get_rcu_sanitized(mas, slot);
+       if (prev_piv <= mas->last && piv > mas->last) {
+               mte_set_rcu_slot(cp.node, end_slot, existing_entry);
+               mas_set_safe_pivot(&cp, end_slot++, piv);
+               cp.max = piv;
+               slot++;
+       }
+       if (slot <= data_end && cp.max < mas->max)
+               _mas_append(&cp, mn, mas_type, src_max, slot, data_end);
+
+done:
+       if (active)
+               mas->node = cp.node;
+
+       return ret;
+}
+static inline bool _mas_walk(struct ma_state *mas);
+static inline int mas_replace_tree(struct ma_state *mas, void *new_entry);
+static inline bool mas_rebalance_node(struct ma_state *mas);
+static inline unsigned long mas_next_node(struct ma_state *mas,
+               unsigned long max);
+/* Private
+ *
+ * mas_spanning_add() - Add a value which spans the nodes range.  This is
+ * handled separately than other adds because the tree may need significant
+ * alterations.
+ *
+ * Current plan:
+ * Alter in-node data to use the new maximum, walk up the tree setting the
+ * pivots & inserting skip/retry values as well as rebalance once the nodes
+ * have been altered.
+ *
+ *
+ */
+
+static inline void mas_rebalance_gaps(struct ma_state *mas)
+{
+       if (mt_is_alloc(mas->tree)) {
+               MA_STATE(r_mas, mas->tree, mas->index, mas->last);
+
+               _mas_walk(mas); // return to the updated location in the tree.
+               mas_dup_state(&r_mas, mas);
+               mas_update_gap(mas, true);
+               mas_dup_state(mas, &r_mas);
+               mas_set_slot(&r_mas, mte_parent_slot(mas->node));
+               mas_next_node(&r_mas, ULONG_MAX);
+               if (!mas_is_none(&r_mas))
+                       mas_update_gap(&r_mas, true);
+
+       }
+}
+static inline int mas_spanning_add(struct ma_state *mas, void *entry,
+               unsigned long old_max)
+{
+       unsigned char p_slot;
+       unsigned long new_pivot = mas->last;
+       int i;
+
+       MA_STATE(r_mas, mas->tree, mas->index, mas->last); // right mas.
+       MA_STATE(p_mas, mas->tree, mas->index, mas->last); // parent mas.
+       mas_dup_state(&p_mas, mas); // point to the start node.
+       mas_ascend(&p_mas);
+
+       p_slot = mte_parent_slot(mas->node);
+       do {
+               MA_STATE(tmp, mas->tree, mas->index, mas->last);
+
+               mas_set_slot(mas, p_slot); // for mas_next_node.
+               mas_set_slot(&p_mas, p_slot); // for pivot changes in parent.
+
+               mas_dup_state(&r_mas, mas); // point to the start node.
+               while (!mas_is_none(&r_mas) && r_mas.max <= r_mas.last + 1) {
+                       mas_dup_state(&tmp, &r_mas);
+                       mas_next_node(&r_mas, r_mas.last);
+                       if (r_mas.max <= r_mas.last + 1) {
+                               struct maple_enode *enode = r_mas.node;
+
+                               i = mte_parent_slot(enode);
+                               mas_ascend(&r_mas);
+                               mte_set_rcu_slot(r_mas.node, i, XA_SKIP_ENTRY);
+                               mas_set_safe_pivot(&r_mas, i, r_mas.last);
+                               if (mt_is_alloc(r_mas.tree))
+                                       mte_set_gap(r_mas.node, i, 0);
+                               mas_dup_state(&r_mas, &tmp);
+                               mte_free(enode);
+                       }
+               }
+               mas_dup_state(&r_mas, &tmp);
+               mas_next_node(&r_mas, ULONG_MAX);
+               if (!mas_is_none(&r_mas)) {
+                       unsigned long piv = mas->min;
+
+                       for (i = 0; i < mt_slot_count(r_mas.node); i++) {
+                               piv = mas_get_safe_pivot(&r_mas, i);
+                               if (!piv)
+                                       break;
+
+                               if (piv > r_mas.last)
+                                       break;
+
+                               if (mte_is_leaf(r_mas.node)) {
+                                       mte_set_rcu_slot(r_mas.node, i,
+                                                       XA_RETRY_ENTRY);
+                                       mte_set_pivot(r_mas.node, i,
+                                                       r_mas.last);
+                               } else {
+                                       mte_set_rcu_slot(r_mas.node, i,
+                                                       XA_SKIP_ENTRY);
+                                       mte_set_pivot(r_mas.node, i,
+                                                       r_mas.last);
+                                       if (mt_is_alloc(r_mas.tree))
+                                               mte_set_gap(r_mas.node, i, 0);
+                               }
+                       }
+               }
+
+               // Update the pivots.
+               mas->max = new_pivot;
+               mas_set_safe_pivot(&p_mas, p_slot, mas->max);
+               if (!mas_rebalance_node(mas))
+                       if (mt_is_alloc(mas->tree))
+                               mas_update_gap(&r_mas, true);
+
+               if (mas_is_err(mas))
+                       return 0; // FIXME: Broken tree?
+
+               // parent slot may have changed during rebalance.
+               p_slot = mte_parent_slot(mas->node);
+               //  Set up for the next loop.
+               if (!mte_is_root(mas->node)) {
+                       // Set the current parent slot for ascend.
+                       mas_set_slot(mas, p_slot);
+                       mas_ascend(mas);
+                       // Get the new levels parent slot (grand-parent slot)
+                       p_slot = mte_parent_slot(mas->node);
+
+                       if (!mte_is_root(p_mas.node)) {
+                               // Set the slot for ascending.
+                               mas_set_slot(&p_mas, p_slot);
+                               mas_ascend(&p_mas);
+                       }
+               }
+
+               if (mas->max > new_pivot)
+                       new_pivot = mas->max;
+
+       } while (mas->max < mas->last);
+
+       if (!mte_is_root(mas->node))
+               mte_set_pivot(p_mas.node, p_slot, mas->max);
+
+       mas_rebalance_node(mas);
+       if (mas_is_err(mas))
+               return 0; // FIXME: Broken tree?
+
+
+       mas_rebalance_gaps(mas);
+       return 1;
+}
+/* Private
+ *
+ * Insert entry into a node.
+ * If this is not an append, a new node will be generated.
+ * If this node is full, split the node & insert or overwrite
+ *
+ * This is done by:
+ * 1. Calculating the range of slot.
+ * 2. Figure out how many slots are needed for the entry. (0, 1, 2)
+ * 3. Copy the data over
+ * 4. Write the entry.
+ *
+ * Returns the number of slots used on success, the slot number on failure.
+ */
+static inline int _mas_add(struct ma_state *mas, void *entry, bool overwrite,
+               bool active)
+{
+       enum maple_type this_type = mte_node_type(mas->node);
+       unsigned long last_piv;
+       unsigned char coalesce;
+       unsigned char old_end, new_end;
+       unsigned long max = mas->max;
+       unsigned long min = mas->min;
+       unsigned char slot = mas_get_slot(mas);
+       unsigned char slot_cnt = mt_slots[this_type] - 1;
+       struct maple_enode *prev_enode = NULL;
+       void *contents = NULL;
+       bool append = false;
+       unsigned long spans_node = 0;
+       int ret = 0;
+
+
+       if (ma_is_dense(this_type)) {
+               ret = _mas_add_dense(mas, entry, slot, this_type, overwrite,
+                               active);
+               if (!ret)
+                       return ret;
+               old_end = 0; // fixme.
+               goto update_gap;
+       }
+
+
+       // Bug if we are adding an entry to a non-leaf node.
+       MT_BUG_ON(mas->tree, !ma_is_leaf(this_type));
+
+       old_end = _mas_data_end(mas, this_type, &last_piv, &coalesce);
+       if (slot > slot_cnt) // search returned MAPLE_NODE_SLOTS
+               slot = old_end + 1;
+
+       mas_get_range(mas, slot, &min, &max);
+       if (mas_get_slot(mas) > slot_cnt)
+               max = mas->max;
+
+       if (slot <= old_end)
+               contents = mas_get_rcu_slot(mas, slot);
+
+
+       // Check early failures.
+       if (!overwrite) {
+               if (mas->last > max) { // spans range.
+                       // FIXME, this may be fine if the range isn't
+                       // coalesced, or such?
+                       mas_set_err(mas, -ERANGE);
+                       return 0;
+               }
+               if (!mt_is_empty(contents)) {
+                       mas_set_err(mas, -EBUSY);
+                       return 0;
+               }
+       }
+
+
+       if (mas->last > mas->max) // spans node.
+               spans_node = mas->max;
+
+       // At this point, the we can perform the add.
+       if (!mte_is_leaf(mas->node)) {
+               // An allocation failed previously during a rebalance.  There
+               // is no way to know how broken things are, so try to rebuild
+               // the tree.
+               mas_reset(mas);
+               mas_first_node(mas, ULONG_MAX);
+               return mas_replace_tree(mas, entry);
+       }
+
+       // Fits neatly into a slot.
+       if (mas->index == min && mas->last == max) {
+               mte_set_rcu_slot(mas->node, slot, entry);
+               if (slot < slot_cnt)
+                       mte_set_pivot(mas->node, slot, mas->last);
+               ret = 1;
+               goto complete;
+       }
+       new_end = _mas_add_slot_cnt(mas, slot, min, max, entry);
+       if (new_end > slot_cnt + 1) {
+               mas_split(mas, slot, active, old_end, entry);
+               if (mas_is_err(mas))
+                       return 0;
+
+               ret = old_end - new_end;
+               goto complete;
+       }
+
+       if (active) {
+               mas_node_cnt(mas, 1);
+               if (mas_is_err(mas))
+                       return 0;
+       }
+       prev_enode = mas->node;
+       if (slot > old_end && !coalesce)
+               append = true;
+
+       mas_set_slot(mas, slot);
+       __mas_add(mas, entry, old_end, active, append);
+       mas_set_slot(mas, slot);
+
+complete:
+       if (prev_enode != mas->node)
+               _mas_replace(mas, active, true);
+
+       // Spanning a node can be complex.
+       if (spans_node)
+               ret = mas_spanning_add(mas, entry, spans_node);
+
+update_gap:
+       if (mt_is_alloc(mas->tree)) {
+               mas_update_gap(mas, false);
+               if (!entry && (slot >= old_end || !slot))
+                       mas_may_move_gap(mas);
+       }
+
+       return ret;
+}
+
+static inline void ma_inactive_insert(struct ma_state *mas, void *entry)
+{
+       // Restart search for where to insert.
+       mas->node = MAS_START;
+       mas_start(mas);
+       mas_add(mas, entry, true, false);
+}
+static inline void mas_insert(struct ma_state *mas, void *entry)
+{
+       mas_add(mas, entry, false, true);
+}
+
+static inline int _mas_insert(struct ma_state *mas, void *entry,
+               unsigned char slot, bool active)
+{
+       mas_set_slot(mas, slot);
+       return _mas_add(mas, entry, false, active);
+}
+
+static inline void mas_root_expand(struct ma_state *mas, void *entry)
+{
+       void *r_entry = rcu_dereference_protected(mas->tree->ma_root,
+                               lockdep_is_held(&mas->tree->ma_lock));
+       struct maple_node *mn;
+       enum maple_type mt = mas_ptype_leaf(mas);
+       int slot = 0;
+
+       mas_node_cnt(mas, 1);
+       if (mas_is_err(mas))
+               return;
+
+       mn = mas_next_alloc(mas);
+       mas->node = mt_mk_node(mn, mt);
+       mn->parent = ma_parent_ptr(
+                     ((unsigned long)mas->tree | MA_ROOT_PARENT));
+
+       mte_set_rcu_slot(mas->node, slot, r_entry);
+       mte_set_pivot(mas->node, slot, 0);
+       if (r_entry)
+               mas_set_slot(mas, 1);
+
+       // FIXME: When task_size / page_size -1 works, check to ensure we are
+       // not inserting above this.
+       __mas_add(mas, entry, slot++, false, false);
+       if (mas_is_err(mas))
+               return;
+
+       if (mas->last != 1)
+               slot++;
+       //_mas_insert(mas, entry, slot, false);
+
+       if (mas_is_err(mas))
+               return;
+
+       if (mt_is_alloc(mas->tree)) {
+               //FIXME: arch_get_mmap_end? mas->index = TASK_SIZE / PAGE_SIZE - 1;
+               mas_set_slot(mas, 2);
+               mas->index = 0x2000000000000UL;
+               mas->last = mt_max[mt];
+               __mas_add(mas, XA_ZERO_ENTRY, slot, false, false);
+               if (mas_is_err(mas))
+                       return;
+       }
+
+       /* swap the new root into the tree */
+       rcu_assign_pointer(mas->tree->ma_root, mte_mk_root(mas->node));
+}
+
+static inline int mas_safe_slot(struct ma_state *mas, int *slot, int delta);
+static inline int mas_dead_node(struct ma_state *mas, unsigned long index);
+
+static inline void mas_next_slot(struct ma_state *mas, unsigned long max)
+       __must_hold(mas->tree->lock)
+{
+       unsigned char slot;
+
+       // walk up.
+       while (1) {
+               slot = mte_parent_slot(mas->node);
+walk_again:
+               if (mte_is_root(mas->node))
+                       goto no_entry;
+
+               mas_ascend(mas);
+               if (mas->max > max)
+                       goto no_entry;
+
+               if (slot < mt_slot_count(mas->node) - 1) {
+                       if (!mas_get_safe_pivot(mas, slot + 1))
+                               continue;
+                       slot++;
+                       goto walk_down;
+               }
+
+               if (mte_is_root(mas->node))
+                       goto no_entry;
+       }
+
+
+walk_down:
+       do {
+               void *entry = NULL;
+               if (slot)
+                       mas->min = mas_get_safe_pivot(mas, slot - 1) + 1;
+               mas->max = mas_get_safe_pivot(mas, slot);
+               entry = mas_get_rcu_slot(mas, slot);
+               if (xa_is_skip(entry)) {
+                       if (mas->max >= max) {
+                               goto no_entry;
+                       } else if (slot < mt_slot_count(mas->node)) {
+                               slot++;
+                               goto walk_down;
+                       } else if (mte_is_root(mas->node)) {
+                               goto no_entry;
+                       } else {
+                               goto walk_again;
+                       }
+               }
+
+               mas->node = entry;
+               if (mt_is_empty(mas->node))
+                       goto no_entry;
+
+               if (mte_is_leaf(mas->node)) {
+                       goto done;
+               }
+               slot = 0;
+
+       } while (1);
+
+done:
+       mas_set_slot(mas, slot);
+       return;
+
+no_entry:
+       mas->node = MAS_NONE;
+}
+/** Private
+ * mas_prev_slot() - Find the previous leaf slot, regardless of having an
+ * entry or not
+ *
+ * NOTE: Not read safe - does not check for dead nodes.
+ *       Not root safe, cannot be the root node.
+ */
+static inline void mas_prev_slot(struct ma_state *mas, unsigned long min)
+       __must_hold(ms->tree->lock)
+{
+       unsigned char slot, coalesce;
+
+       if (mte_is_root(mas->node))
+               goto no_entry;
+
+       // Walk up.
+       while (1) {
+               slot = mte_parent_slot(mas->node);
+               mas_ascend(mas);
+               if (mas->min < min)
+                       goto no_entry;
+
+               if (slot) {
+                       slot--;
+                       goto walk_down;
+               }
+               if (mte_is_root(mas->node))
+                       goto no_entry;
+       }
+
+walk_down:
+       do {
+               if (slot)
+                       mas->min = mas_get_safe_pivot(mas, slot - 1);
+               mas->max = mas_get_safe_pivot(mas, slot);
+               mas->node = mas_get_rcu_slot(mas, slot);
+               if (mt_is_empty(mas->node))
+                       goto done;
+
+               if (mte_is_leaf(mas->node))
+                       goto done;
+
+               slot = _mas_data_end(mas, mte_node_type(mas->node), &mas->max,
+                               &coalesce);
+       } while (1);
+
+done:
+       mas_set_slot(mas, slot);
+       return;
+
+no_entry:
+       mas->node = MAS_NONE;
+}
+
+/** Private
+ * mas_prev_node() - Find the prev non-null entry at the same level in the
+ * tree.  The prev value will be mas->node[mas_get_slot(mas)] or MAS_NONE.
+ */
+static inline void mas_prev_node(struct ma_state *mas, unsigned long limit)
+{
+       int level;
+       int slot = mas_get_slot(mas);
+       unsigned long start_piv;
+
+       start_piv = mas_get_safe_pivot(mas, slot);
+restart_prev_node:
+       level = 0;
+       if (mte_is_root(mas->node) || mas->node == MAS_NONE)
+               goto no_entry;
+
+       while (1) {
+               unsigned long min;
+               slot = mte_parent_slot(mas->node);
+               mas_ascend(mas);
+               level++;
+
+               if (!mas_safe_slot(mas, &slot, -1))
+                       goto ascend;
+
+               if (mas_dead_node(mas, start_piv))
+                       goto restart_prev_node;
+
+               if (!slot)
+                       goto ascend;
+
+               slot--;
+               do {
+                       struct maple_enode *mn;
+                       unsigned long last_pivot;
+                       unsigned long pivot = mas_get_safe_pivot(mas, slot);
+                       unsigned char coalesce;
+
+                       if (slot)
+                               min = mas_get_safe_pivot(mas, slot - 1);
+                       else
+                               min = mas->min;
+
+                       if (pivot < limit)
+                               goto no_entry;
+
+                       if (slot != 0 && pivot == 0)
+                               break;
+
+                       mn = mas_get_rcu_slot(mas, slot);
+                       if (mt_is_empty(mn) || xa_is_retry(mn))
+                               continue;
+
+                       if (level == 1) {
+                               mas_set_slot(mas, slot);
+                               mas->node = mn;
+                               mas->max = pivot;
+                               mas->min = min;
+                               if (mas_dead_node(mas, start_piv))
+                                       goto restart_prev_node;
+                               return;
+                       }
+
+                       level--;
+                       mas->node = mn;
+                       slot = _mas_data_end(mas, mte_node_type(mn),
+                                       &last_pivot, &coalesce) + 1;
+               } while (slot-- > 0);
+
+ascend:
+               if (mte_is_root(mas->node))
+                       goto no_entry;
+       }
+
+no_entry:
+       mas->node = MAS_NONE;
+}
+/*
+ * Find the next non-null entry at the same level in the tree.  The next value
+ * will be mas->node[mas_get_slot(mas)] or MAS_NONE.
+ *
+ *
+ * Node: Not safe to call with mas->node == root
+ */
+
+static inline unsigned long mas_next_node(struct ma_state *mas,
+               unsigned long max)
+{
+       int level;
+       unsigned long start_piv;
+
+restart_next_node:
+       level = 0;
+       while (1) {
+               unsigned char count;
+               int slot;
+               struct maple_enode *mn;
+               unsigned long prev_piv;
+
+               if (mte_is_root(mas->node) || mas->node == MAS_NONE)
+                       goto no_entry;
+
+               mn = mas->node;
+               slot = mas_get_slot(mas);
+               start_piv = mas_get_safe_pivot(mas, slot);
+               level++;
+               mas_ascend(mas);
+
+               if (!mas_safe_slot(mas, &slot, 1))
+                       goto ascend;
+
+               if (mas_dead_node(mas, start_piv))
+                       goto restart_next_node;
+
+               count = mt_slot_count(mas->node);
+               prev_piv = mas_get_safe_pivot(mas, slot);
+               while (++slot < count) {
+                       unsigned long pivot = mas_get_safe_pivot(mas, slot);
+
+                       if (prev_piv > max)
+                               goto no_entry;
+
+                       if (slot != 0 && pivot == 0)
+                               break;
+
+                       mn = mas_get_rcu_slot(mas, slot);
+                       if (mt_is_empty(mn) || xa_is_retry(mn)) {
+                               prev_piv = pivot;
+                               continue;
+                       }
+
+                       mas->min = prev_piv + 1;
+                       mas->max = pivot;
+
+                       if (level == 1) {
+                               mas_set_slot(mas, slot);
+                               mas->node = mn;
+                               if (mas_dead_node(mas, start_piv))
+                                       goto restart_next_node;
+                               return pivot;
+                       }
+
+                       level--;
+                       mas->node = mn;
+                       slot = -1;
+                       count = mt_slot_count(mas->node);
+               }
+
+ascend:
+               if (mte_is_root(mas->node))
+                       goto no_entry;
+               mas_set_slot(mas, mte_parent_slot(mas->node));
+       }
+
+no_entry:
+       mas->node = MAS_NONE;
+       return mas->max;
+
+}
+
+/** Private
+ * prev node entry
+ */
+static inline bool mas_prev_nentry(struct ma_state *mas, unsigned long limit,
+               unsigned long *max)
+{
+       unsigned long pivot = mas->max;
+       unsigned char slot = mas_get_slot(mas);
+       void *entry;
+
+       if (!slot)
+               return false;
+
+       slot--;
+       do {
+               pivot = mas_get_safe_pivot(mas, slot);
+               if (pivot < limit)
+                       goto no_entry;
+
+               entry = mas_get_rcu_slot(mas, slot);
+               if (!mt_is_empty(entry))
+                       goto found;
+       } while (slot--);
+
+no_entry:
+       return false;
+
+found:
+       *max = pivot;
+       mas_set_slot(mas, slot);
+       return true;
+}
+
+/** Private
+ * mas_next_nentry() - Next node entry.  Set the @mas slot to the next valid
+ * entry and range_start to the start value for that entry.  If there is no
+ * entry, returns false.
+ */
+static inline bool mas_next_nentry(struct ma_state *mas, unsigned long max,
+               unsigned long *range_start)
+{
+       unsigned long pivot = mas->min;
+       unsigned long r_start = mas->min;
+       unsigned char slot = mas_get_slot(mas);
+       unsigned char count = mt_slot_count(mas->node);
+       void *entry;
+
+       if (slot)
+               r_start = mas_get_safe_pivot(mas, slot - 1) + 1;
+
+       while (slot < count) {
+               pivot = mas_get_safe_pivot(mas, slot);
+
+               if (slot != 0 && pivot == 0)
+                       goto no_entry;
+
+               if (r_start > max)
+                       goto no_entry;
+
+               entry = mas_get_rcu_slot(mas, slot);
+               if (!mt_is_empty(entry))
+                       goto found;
+
+               /* Ran over the limit, this is was the last slot to try */
+               if (pivot >= max)
+                       goto no_entry;
+
+               r_start = pivot + 1;
+               slot++;
+       }
+
+no_entry:
+       *range_start = r_start;
+       return false;
+
+found:
+       mas->last = pivot;
+       *range_start = r_start;
+       mas_set_slot(mas, slot);
+       return true;
+}
+/* Private
+ *
+ * Returns the pivot which points to the entry with the highest index.
+ * @mas slot is set to the entry location.
+ * @limit is the minimum index to check.
+ *
+ */
+static inline void* mas_last_entry(struct ma_state *mas,
+               unsigned long limit)
+{
+       unsigned long prev_min, prev_max, range_start = 0;
+       unsigned char slot = 1;
+
+       if (mas_start(mas) || mas_is_none(mas))
+               return NULL;
+
+       prev_min = mas->min;
+       prev_max = mas->max;
+       while (range_start < limit) {
+               mas_set_slot(mas, slot);
+               if (!mas_next_nentry(mas, limit, &range_start)) {
+                       void *entry = mas_get_rcu_slot(mas, slot - 1);
+                       if (mte_is_leaf(mas->node)) {
+                               mas->index = range_start - 1;
+                               mas->index = mte_get_pivot(mas->node, slot - 1);
+                               return entry;
+                       }
+                       mas->max = prev_max;
+                       mas->min = prev_min;
+                       mas->node = entry;
+                       slot = 0;
+               } else {
+                       slot = mas_get_slot(mas) + 1;
+                       prev_min = prev_max + 1;
+                       if (range_start > prev_min)
+                               prev_min = range_start;
+                       range_start = prev_min;
+                       prev_max = mas->last;
+               }
+       }
+       return NULL;
+}
+
+/** Private
+ *
+ * __mas_next() Set the @mas->node to the next entry and the range_start to
+ * the beginning value for the entry.  Does not check beyond @limit.
+ *
+ * May return NULL.
+ *
+ */
+static inline void *__mas_next(struct ma_state *mas, unsigned long limit,
+               unsigned long *range_start)
+{
+       void *entry = NULL;
+       unsigned long index = mas->index;
+       unsigned char slot = mas_get_slot(mas);
+       mas_set_slot(mas, slot + 1);
+
+retry:
+       *range_start = mas->last + 1;
+
+       while (!mas_is_none(mas)) {
+               unsigned char p_slot = 0;
+               struct maple_enode *last_node = mas->node;
+
+               slot = mas_get_slot(mas);
+               if (slot > mt_slot_count(mas->node))
+                       goto next_node;
+
+               if (!mte_is_leaf(mas->node) || !mas_get_slot(mas)) {
+                       *range_start = mas_first_entry(mas, limit);
+                       if (mas_is_none(mas)) {
+                               mas->node = last_node;
+                               goto next_node;
+                       }
+               }
+
+               if (mas_next_nentry(mas, limit, range_start))
+                       break;
+
+               if (*range_start > limit)
+                       return NULL;
+
+next_node:
+               p_slot = mte_parent_slot(mas->node);
+               mas_set_slot(mas, p_slot);
+               mas_next_node(mas, limit);
+               mas_set_slot(mas, 0);
+       }
+
+       if (mas_is_none(mas))
+               return NULL;
+
+       entry = mas_get_rcu_slot(mas, mas_get_slot(mas));
+       if (mas_dead_node(mas, index))
+               goto retry;
+
+       return entry;
+}
+
+void *mas_range_load(struct ma_state *mas, unsigned long *range_min,
+               unsigned long *range_max, bool skip_retry);
+/* Private
+ *
+ * _mas_next() - Finds the next entry, sets index to the start of the range.
+ *
+ */
+static inline void *_mas_next(struct ma_state *mas, unsigned long limit,
+               unsigned long *range_start)
+{
+       void *entry = NULL;
+       unsigned long range_max;
+
+       if (mas->node && !mas_searchable(mas))
+               return NULL;
+
+       if (!mas->node || mas_is_start(mas)) {// First run.
+               *range_start = 0;
+               mas_start(mas);
+               entry = mas_range_load(mas, range_start, &range_max, false);
+               mas->last = range_max;
+       }
+
+       if (entry)
+               return entry;
+
+       return __mas_next(mas, limit, range_start);
+}
+
+/*
+ * mas_next() - Get the next entry.  Can return the zero entry.  mas->node
+ * must be a valid node and not a special value.  Unsafe for single entry
+ * trees.
+ *
+ */
+void *mas_next(struct ma_state *mas, unsigned long max)
+{
+       unsigned long index = 0;
+
+       return _mas_next(mas, max, &index);
+}
+EXPORT_SYMBOL_GPL(mas_next);
+
+/* Private
+ *
+ * _mas_prev() - Find the previous entry from the current ma state.
+ * @mas the current maple state (must have a valid slot)
+ */
+static inline void* _mas_prev(struct ma_state *mas, unsigned long limit)
+{
+       unsigned long max = mas->max;
+       unsigned char slot;
+
+       while (!mas_is_none(mas)) {
+               if (mas_prev_nentry(mas, limit, &max))
+                       break;
+
+               mas_prev_node(mas, limit);
+               mas_set_slot(mas, mt_slot_count(mas->node));
+       }
+
+       if (mas_is_none(mas))
+               return NULL;
+
+       mas->last = max;
+       slot = mas_get_slot(mas);
+       if (slot)
+               mas->index = mas_get_safe_pivot(mas, slot - 1) + 1;
+       else
+               mas->index = mas->min;
+
+       return mas_get_rcu_slot(mas, mas_get_slot(mas));
+}
+
+/*
+ * mas_prev() - Get the previous entry.  Can return the zero entry.
+ *
+ *
+ */
+void *mas_prev(struct ma_state *mas, unsigned long min)
+{
+       void *entry;
+       if (mas->node && !mas_searchable(mas))
+               return NULL;
+
+       if (!mas->node)
+               mas->node = MAS_START;
+
+       if (mas_is_start(mas)) {
+               mas_start(mas);
+               return mas_last_entry(mas, ULONG_MAX);
+       }
+
+       do {
+               entry = _mas_prev(mas, min);
+               if (!mas_searchable(mas))
+                       break;
+
+       } while (!entry || mt_will_coalesce(entry));
+
+       return entry;
+}
+EXPORT_SYMBOL_GPL(mas_prev);
+
+/** Private
+ *
+ */
+static inline void mas_coalesce_root(struct ma_state *mas)
+{
+       struct maple_enode *this_enode = mas->node;
+       enum maple_type this_type = mte_node_type(this_enode);
+       unsigned long piv;
+       unsigned long min, max;
+       unsigned char coalesce, hard_data;
+       unsigned char end = _mas_data_end(mas, this_type, &piv, &coalesce);
+
+       MA_STATE(old_mas, mas->tree, mas->index, mas->last);
+
+       hard_data = ma_hard_data(end, coalesce);
+       if (hard_data > mt_min_slots[this_type] - 1)
+               return;
+
+       /* Check for a single entry in the root node.
+        * 1. 0-oo => node
+        * 2. slot count == coalesce
+        * 3. one entry and one null.
+        */
+       if (!hard_data ||
+               (end + 1 == coalesce) ||
+               (end  == 1 && !mte_get_rcu_slot(this_enode, 1, mas->tree))) {
+               unsigned long piv;
+
+               min = mas->min;
+               max = mas->max;
+               mas_set_slot(mas, 0);
+               piv = mas_first_node(mas, ULONG_MAX);
+               if (mte_is_leaf(this_enode)) {
+                       if (!piv) {
+                               void *entry = mte_get_rcu_slot(this_enode,
+                                               mas_get_slot(mas), mas->tree);
+                               rcu_assign_pointer(mas->tree->ma_root,
+                                               entry);
+                               mte_free(this_enode);
+                               return;
+                       }
+                       // coalesce the node..
+                       mas->min = min;
+                       mas->max = max;
+                       mas->node = this_enode;
+                       goto coalesce;
+               } else if (mas_is_none(mas)) {
+                       /* allocation failed to create a leaf for this empty
+                        * node.
+                        */
+                       rcu_assign_pointer(mas->tree->ma_root, NULL);
+                       mte_free(this_enode);
+                       return;
+               }
+               /* it's not a leaf, remove a level from the tree. */
+               goto remove_level;
+       } else if (hard_data <= mt_min_slots[this_type] - 1)
+               goto coalesce; // Compact the node.
+
+       return;
+
+coalesce:
+       mas_dup_state(&old_mas, mas);
+       mas_node_cnt(mas, 1);
+       if (mas_is_err(mas))
+               return;
+
+       mas->node = mt_mk_node(mas_next_alloc(mas), this_type);
+       mas_append(mas, &old_mas, 0, end);
+
+remove_level:
+       mas_mn(mas)->parent = mte_to_node(this_enode)->parent;
+       mas->node = mte_mk_root(mas->node);
+       mas_replace(mas);
+
+       if (mt_is_alloc(mas->tree))
+               mas_update_gap(mas, true);
+
+}
+
+/** Private
+ * mas_coalesce() -
+ *
+ * coalesce completely consumes the right node into this node.
+ *
+ */
+static inline bool mas_coalesce(struct ma_state *mas, unsigned char l_end_slot,
+               unsigned char l_coalesce, enum maple_type l_type,
+               struct ma_state *r_mas, unsigned char r_end_slot,
+               struct ma_state *p_mas, unsigned long total_slots)
+{
+       struct maple_node *mn;
+       bool free_left = false;
+
+       MA_STATE(dst, mas->tree, mas->index, mas->last);
+       // it is possible that all of the right node can be appended to the
+       // left.
+       if (total_slots + 1 - l_end_slot < mt_slots[l_type] - l_end_slot)
+               goto use_left;
+
+       mas_node_cnt(mas, 1); // ensure we have a node, or allocate one.
+       if (mas_is_err(mas)) {
+               // Allocation failed, we could try to append as much
+               // as possible here?
+               return false;
+       }
+
+       free_left = true;
+       mn = mas_next_alloc(mas);
+       mas_dup_state(&dst, mas);
+       mn->parent = mas_mn(mas)->parent;
+       dst.node = mt_mk_node(mn, l_type);
+       l_end_slot = mas_append(&dst, mas, 0, l_end_slot);
+       //l_end_slot = mas_cp_append(&dst, mas, p_mas, 0, l_end_slot, false);
+
+       // If there is no entry or pivot, then set one to avoid a first entry
+       // in r_mas being incorrect.
+       if (!l_end_slot && !mte_get_pivot(dst.node, 0)) {
+               mte_set_pivot(dst.node, 0, mas->max);
+               l_end_slot++;
+       }
+       mas->node = dst.node;
+
+use_left:
+       mas_append(mas, r_mas, 0, r_end_slot);
+
+       if (!mte_is_leaf(mas->node))
+               mas_adopt_children(mas, mas->node);
+
+       mte_set_pivot(p_mas->node, mte_parent_slot(mas->node), r_mas->max);
+       mte_set_rcu_slot(p_mas->node, mte_parent_slot(r_mas->node),
+                       XA_SKIP_ENTRY);
+
+       if (mt_is_alloc(mas->tree))
+               mte_set_gap(p_mas->node, mte_parent_slot(r_mas->node), 0);
+
+       mte_free(r_mas->node);
+       mas->max = r_mas->max; // update limits.
+
+       return free_left;
+}
+/* Private
+ * mas_rebalance_node() - rebalance a single node.
+ * Returns: true if rebalancing was necessary.
+ */
+static inline bool mas_rebalance_node(struct ma_state *mas)
+{
+       unsigned char l_end_slot, l_coalesce, r_end_slot, r_coalesce;
+       unsigned char p_slot; // parent slot.
+       unsigned char total_slots;
+       int copy_count;
+       unsigned long l_end_piv, r_end_piv;
+       enum maple_type l_type, r_type;
+       bool try_anyways = false;
+       bool free;
+       bool ret = false;
+
+       MA_STATE(r_mas, mas->tree, mas->index, mas->last); // right state
+       MA_STATE(p_mas, mas->tree, mas->index, mas->last); // parent state
+       MA_STATE(src_mas, mas->tree, mas->index, mas->last);
+
+start:
+       free = false;
+       l_type = mte_node_type(mas->node);
+       if (mte_is_root(mas->node)) {
+               mas_coalesce_root(mas); // height reduction and such.
+               return false;
+       }
+
+       mas_dup_state(&p_mas, mas);
+       mas_ascend(&p_mas);
+       p_slot = mte_parent_slot(mas->node);
+       l_end_slot = _mas_data_end(mas, l_type, &l_end_piv, &l_coalesce);
+       if (!try_anyways &&
+           (ma_hard_data(l_end_slot, l_coalesce) >= mt_min_slots[l_type]))
+               goto done; // Everything's perfectly all right now.
+
+       try_anyways = false;
+
+       // Make sure there is a right node.
+       mas_dup_state(&r_mas, &p_mas);
+       mas_set_slot(&r_mas, p_slot + 1);
+       if (!mas_next_nentry(&r_mas, ULONG_MAX, &r_end_piv)) {
+               // Right-most node coalescing.
+               mas_dup_state(&r_mas, &p_mas);
+               mas_set_slot(&r_mas, p_slot);
+               if (!mas_prev_nentry(&r_mas, 0, &r_end_piv)) {
+                       // Single entry in the parent.
+                       if (l_end_slot < l_coalesce) { // Single entry is empty.
+                               free = true;
+                       } else if (l_end_slot == l_coalesce &&
+                                  mas->max == ULONG_MAX) {
+                               // Possible single entry of null for ULONG_MAX
+                               free = true;
+                       }
+                       if (free) {
+                               mte_set_rcu_slot(p_mas.node, p_slot,
+                                               XA_DELETED_ENTRY);
+                               if (mt_is_alloc(p_mas.tree)) {
+                                       mte_set_gap(p_mas.node, p_slot, 0);
+                                       mas_update_gap(&r_mas, false);
+                               }
+                       }
+                       goto done;
+               }
+               mas_descend(&r_mas);
+               r_type = mte_node_type(r_mas.node);
+               r_end_slot = _mas_data_end(&r_mas, r_type, &r_end_piv,
+                                          &r_coalesce);
+               if (r_end_slot - r_coalesce + l_end_slot - l_coalesce + 2
+                               < mt_slots[l_type]) {
+                       // Force a rebalance/coalesce of these nodes
+                       try_anyways = true;
+                       mas_dup_state(mas, &r_mas);
+                       goto start; // restart with new left.
+               }
+               goto done;
+       }
+       mas_descend(&r_mas);
+
+       // We have a left and a right, check if they can be coalesced.
+       r_type = mte_node_type(r_mas.node); // not for racing.
+       r_end_slot = _mas_data_end(&r_mas, r_type, &r_end_piv, &r_coalesce);
+
+       // end_slot values don't count slot 0, so add one.
+       total_slots = l_end_slot + 1 - l_coalesce;
+       total_slots += r_end_slot + 1 - r_coalesce;
+       if (l_end_piv + 1 != r_mas.min)
+               total_slots++; // will need a null entry between the two.
+
+       mas_dup_state(&p_mas, mas);
+       mas_ascend(&p_mas);
+       //cp.src_end = l_end_slot;
+       if (total_slots <= mt_slots[l_type]) {
+               // Totally consume the right node; coalesce.
+               free = mas_coalesce(mas, l_end_slot, l_coalesce, l_type,
+                               &r_mas, r_end_slot, &p_mas, total_slots);
+               if (!mas_is_err(mas))
+                       ret = true;
+
+               goto done;
+       }
+
+       // Rebalance between mas and r_mas nodes.
+       p_slot = mte_parent_slot(mas->node);
+
+       mas_node_cnt(mas, 1); // Try to allocate.
+       if (mas_is_err(mas)) {
+               // Allocation failed, we could try to append as much
+               // as possible here?
+               goto done;
+       }
+
+       free = true; // free parent.node after the operation.
+       mas_dup_state(&src_mas, mas);
+       mas->node = mt_mk_node(mas_next_alloc(mas), l_type);
+       mas_mn(mas)->parent = mas_mn(&src_mas)->parent;
+       mas_append(mas, &src_mas, 0, l_end_slot);
+
+
+       // Put 1/2 of the contents into the left if not all of them can fit.
+       copy_count = (total_slots / 2) - (l_end_slot + 1 - l_coalesce);
+       mas_append(mas, &r_mas, 0, copy_count);
+       /* All relocations *must* be committed before removing real data */
+       wmb();
+       do {
+               // relocated.
+               mte_set_rcu_slot(r_mas.node, copy_count, XA_RETRY_ENTRY);
+               if (mt_is_alloc(r_mas.tree))
+                       mte_set_gap(r_mas.node, copy_count, 0);
+               mte_set_pivot(r_mas.node, copy_count, mas->max);
+
+       } while (copy_count-- > 0);
+
+       if (mt_is_alloc(mas->tree))
+               mas_update_gap(&r_mas, true);
+
+       ret = true;
+
+done:
+       if (!mte_is_leaf(mas->node))
+               mas_adopt_children(mas, mas->node);
+
+       if (free)
+               mas_replace(mas);
+
+       mas_dup_state(&p_mas, mas);
+       mas_set_slot(&p_mas, mte_parent_slot(mas->node));
+       mas_ascend(&p_mas);
+       mas_set_safe_pivot(&p_mas, p_slot, mas->max);
+
+       if (mt_is_alloc(mas->tree))
+               mas_update_gap(mas, true);
+
+       return ret;
+}
+
+/** Private
+ * mas_rebalance() -
+ *
+ * rebalance moves data from the node to the right to this node if the
+ * low watermark of data is not met.  It also calls coalesce if the right data
+ * can fully be moved to the left.
+ *
+ */
+static inline void mas_rebalance(struct ma_state *mas)
+{
+       bool at_root = false;
+
+       do {
+               if (mte_is_root(mas->node))
+                       at_root = true;
+
+               if (!mas_rebalance_node(mas))
+                       break; // We're all done here.
+
+               if (mas_is_err(mas))
+                       return;
+
+               // Check parent for rebalancing.
+               if (!at_root)
+                       mas_ascend(mas);
+       } while (!at_root);
+
+       mas_rebalance_gaps(mas);
+}
+
+static inline bool _mas_rev_awalk(struct ma_state *mas, unsigned long size)
+{
+       enum maple_type type;
+       unsigned long max, min;
+       unsigned char i, start;
+       bool found = false;
+       unsigned long this_gap = 0;
+
+       type = mte_node_type(mas->node);
+       i = mas_get_slot(mas);
+
+       min = mas->min;
+       max = _mas_get_safe_pivot(mas, i, type);
+
+       switch (type) {
+       case maple_leaf_64:
+               start = i;
+               do {
+                       void *entry = NULL;
+
+                       if (!i)
+                               min = mas->min;
+                       else
+                               min = _mte_get_pivot(mas->node, i - 1,
+                                               type) + 1;
+
+                       /* last is below this range */
+                       if (mas->last < min)
+                               goto next_slot;
+
+                       /* index is above this range.*/
+                       if (mas->index > max) {
+                               mas_set_err(mas, -EBUSY);
+                               return false;
+                       }
+
+                       /* check if this slot is full */
+                       entry = mas_get_rcu_slot(mas, i);
+                       if (entry && !xa_is_deleted(entry)) {
+                               this_gap = 0;
+                               goto next_slot;
+                       }
+
+                       if (!this_gap)
+                               start = i;
+
+                       this_gap += max - min + 1;
+                       if (this_gap >= size) {
+                               /* within range and large enough */
+                               if (mas->last - min + 1 < size) {
+                                       /* It is possible that the gap is
+                                        * sufficient and within range, but
+                                        * the size does not fit within the
+                                        * maximum value and the min of gap
+                                        */
+                                       goto next_slot;
+                               }
+                               mas->min = min;
+                               mas->max = min + this_gap - 1;
+                               i = start;
+                               found = true;
+                               break;
+                       }
+next_slot:
+                       if (!i)
+                               goto ascend;
+
+                       max = min - 1;
+               } while (i--);
+               break;
+       default:
+
+               do {
+                       if (!i)
+                               min = mas->min;
+                       else
+                               min = _mte_get_pivot(mas->node, i - 1,
+                                               type) + 1;
+
+
+                       /* last is too little for this range */
+                       if (mas->last < min)
+                               goto next;
+
+
+                       /* index is too large for this range */
+                       if (mas->index > max) {
+                               mas_set_err(mas, -EBUSY);
+                               return false;
+                       }
+
+                       this_gap = mte_get_gap(mas->node, i);
+                       /* Not big enough */
+                       if (size > this_gap)
+                               goto next;
+
+                       break;
+
+next:
+                       /* Not found in this node.*/
+                       if (!i)
+                               goto ascend;
+
+                       max = min - 1;
+                       if (mas->index > max) {
+                               mas_set_err(mas, -EBUSY);
+                               return false;
+                       }
+               } while (i--);
+               break;
+
+       case maple_dense:
+               // FIXME: find a line of nulls...
+               i = mas->index - mas->min;
+               found = true;
+               break;
+       }
+
+
+       if (!ma_is_leaf(type)) { //descend
+               struct maple_enode *next;
+               unsigned char coalesce;
+
+               next = mas_get_rcu_slot(mas, i);
+               mas->min = min;
+               mas->max = max;
+               if (!mt_is_empty(next)) {
+                       mas->node = next;
+                       i = _mas_data_end(mas, mte_node_type(next), &max,
+                                       &coalesce);
+               } else {
+                       goto ascend;
+               }
+       }
+
+       mas_set_slot(mas, i);
+       return found;
+ascend:
+       if (mte_is_root(mas->node))
+               mas_set_err(mas, -EBUSY);
+
+       mas_set_slot(mas, i);
+       return found;
+}
+
+static inline bool _mas_awalk(struct ma_state *mas, unsigned long size)
+{
+       enum maple_type type;
+       unsigned long pivot, max, min;
+       unsigned char pivot_cnt, i;
+       bool found = false;
+
+       min = mas->min;
+       max = mas->max;
+
+       type = mte_node_type(mas->node);
+       pivot_cnt = mt_pivots[type];
+
+       switch (type) {
+       case maple_leaf_64:
+               for (i = 0; i <= pivot_cnt; i++) {
+                       unsigned long this_gap = 0;
+                       void *entry = NULL;
+
+                       pivot = _mas_get_safe_pivot(mas, i, type);
+
+                       /* End of data in this leaf */
+                       if (i && !pivot) {
+                               if (min > mas->max)
+                                       break;
+                               pivot = mas->max;
+                       }
+
+                       /* Not within lower bounds */
+                       if (mas->index > pivot)
+                               goto next;
+
+                       entry = mas_get_rcu_slot(mas, i);
+                       if (unlikely(xa_is_skip(entry)))
+                               goto next;
+
+                       if (!mt_is_empty(entry))
+                               goto next;
+
+                       this_gap = pivot - mas->index;
+                       if (!this_gap) // No entry, pivot = index.
+                               this_gap = 1;
+
+                       /* out of upper bounds */
+                       if (mas->last + size < pivot - this_gap) {
+                               mas_set_err(mas, -EBUSY);
+                               return true;
+                       }
+                       /* Does not fit in this gap or node */
+                       if (mas->last < pivot - this_gap)
+                               goto ascend;
+
+                       if (this_gap >= size) {
+                               found = true;
+                               break;
+                       }
+next:
+                       min = pivot + 1;
+               }
+               if (!found)
+                       goto ascend; // leaf exhausted.
+               break;
+       default:
+               pivot = 0;
+               i = mas_get_slot(mas);
+               for (; i <= pivot_cnt; i++) {
+                       unsigned long this_gap;
+
+                       pivot = _mas_get_safe_pivot(mas, i, type);
+                       if (i && !pivot)
+                               goto ascend;
+
+                       this_gap = mte_get_gap(mas->node, i);
+                       if (size <= this_gap) {
+                               if (mas->index <= pivot) {
+                                       max = pivot;
+                                       goto descend;
+                               }
+                       }
+
+                       min = pivot + 1;
+                       if (mas->last < min) {
+                               mas_set_err(mas, -EBUSY);
+                               return true;
+                       }
+               }
+               goto ascend; // exhausted internal node.
+
+               break;
+
+       case maple_dense:
+               // FIXME: find a line of nulls...
+               i = mas->index - mas->min;
+               found = true;
+               break;
+       }
+
+descend:
+
+       if (!ma_is_leaf(type)) { //descend
+               struct maple_enode *next;
+
+               next = mas_get_rcu_slot(mas, i);
+               mas->min = min;
+               mas->max = max;
+               if (!mt_is_empty(next)) {
+                       mas->node = next;
+                       i = 0;
+               } else {
+                       found = true; // this is a non-leaf hole.
+               }
+       }
+
+       mas_set_slot(mas, i);
+       return found;
+ascend:
+       if (mte_is_root(mas->node))
+               found = true;
+
+       mas_set_slot(mas, i);
+       return found;
+}
+
+/*
+ * Private
+ * __mas_walk(): Locates a value and sets the mas->node and slot accordingly.
+ * range_min and range_max are set to the range which the entry is valid.
+ * Returns true if mas->node is a leaf.
+ *
+ * Will not point to a skip entry.
+ * May point to a deleted or retry entry.
+ *
+ */
+static inline bool __mas_walk(struct ma_state *mas, unsigned long *range_min,
+               unsigned long *range_max)
+{
+       enum maple_type type;
+       struct maple_enode *next;
+       unsigned long pivot = 0;
+       unsigned long max, min;
+       unsigned char i;
+       bool ret = false;
+
+       min = mas->min;
+       max = mas->max;
+
+       while (true) {
+               type = mte_node_type(mas->node);
+
+               if (ma_is_leaf(type)) // Leaf.
+                       ret = true;
+
+skip_entry:
+               switch (type) {
+               default:
+                       for (i = mas_get_slot(mas); i < mt_slots[type]; i++) {
+                               pivot = _mas_get_safe_pivot(mas, i, type);
+
+                               if (i != 0 && pivot == 0) {
+                                       i = MAPLE_NODE_SLOTS;
+                                       goto done;
+                               }
+
+                               if (min > pivot) // coalescing value was in the last slot.
+                                       min = pivot;
+
+                               if (mas->index <= pivot) {
+                                       max = pivot;
+                                       break;
+                               }
+                               min = pivot + 1;
+                       }
+
+                       if (ret)
+                               goto done;
+                       break;
+
+               case maple_dense:
+                       // Linear node.
+                       i = mas->index - mas->min;
+                       mas->min = mas->max = mas->index;
+                       goto done;
+               }
+
+               next = mas_get_rcu_slot(mas, i);
+               if (unlikely(xa_is_skip(next))) {
+                       if (unlikely(i == mt_slots[type] - 1)) {
+                               i = MAPLE_NODE_SLOTS;
+                               goto done;
+                       }
+                       mas_set_slot(mas, i + 1);
+                       goto skip_entry;
+               }
+
+               // Traverse.
+               mas->max = max;
+               mas->min = min;
+               if (mt_is_empty(next)) // Not found.
+                       goto done;
+
+               mas->node = next;
+               mas_set_slot(mas, 0);
+       }
+done:
+       mas_set_slot(mas, i);
+       *range_max = max;
+       *range_min = min;
+       return ret;
+}
+/** Private
+ *  _mas_range_walk(): A walk that supports returning the range in which an
+ *  index is located.
+ *
+ */
+static inline bool _mas_range_walk(struct ma_state *mas,
+               unsigned long *range_min, unsigned long *range_max)
+{
+
+       void *entry = mas_start(mas);
+
+       if (entry)
+               return true;
+
+       if (mas_is_none(mas)) {
+               mas_set_slot(mas, MAPLE_NODE_SLOTS);
+               return false;
+       }
+
+       if (mas_is_ptr(mas))
+               return true;
+
+       mas_set_slot(mas, 0);
+       return __mas_walk(mas, range_min, range_max);
+}
+
+static inline bool _mas_walk(struct ma_state *mas)
+{
+       unsigned long range_max, range_min;
+
+       return _mas_range_walk(mas, &range_min, &range_max);
+}
+
+/* Private
+ * Skip any slots that have special values.
+ * If the limit of the slot is hit, then return false.
+ */
+static inline int mas_safe_slot(struct ma_state *mas, int *slot,
+               int delta)
+{
+       unsigned char max = mt_slot_count(mas->node);
+       unsigned char limit = max;
+       if (0 > delta)
+               limit = 0;
+       while (*slot != limit) {
+               void *entry;
+               if (!mas_get_safe_pivot(mas, (*slot) + delta))
+                       return false;
+
+               entry = mas_get_rcu_slot(mas, (*slot) + delta);
+               if (!mt_is_empty(entry) && !xa_is_retry(entry))
+                       return true;
+               *slot += delta;
+       }
+       return false;
+}
+static inline int mas_dead_node(struct ma_state *mas, unsigned long index)
+{
+       if (!mas_searchable(mas))
+               return 0;
+
+       if (!mte_dead_node(mas->node))
+               return 0;
+
+       mas->index = index;
+       _mas_walk(mas);
+       return 1;
+}
+
+static inline bool mas_search_cont(struct ma_state *mas, unsigned long index,
+               unsigned long max, void *entry)
+{
+       if (mas_is_start(mas))
+               return true;
+
+       if (index >= max)
+               return false;
+
+       if (!mas_searchable(mas))
+               return false;
+
+       if (mas_is_err(mas))
+               return false;
+
+       if (entry)
+               return false;
+
+       return true;
+}
+/**
+ * mas_find: If mas->node == MAS_START, find the first
+ * non-NULL entry >= mas->index.
+ * Otherwise, find the first non-NULL entry > mas->index
+ *
+ * If an entry exists, last and index are updated accordingly.
+ *
+ * returns entry or null and set mas->node to MAS_NONE.
+ */
+void *mas_find(struct ma_state *mas, unsigned long max)
+{
+       unsigned long index = mas->min;
+       void *entry = NULL;
+
+       while (mas_search_cont(mas, index, max, entry)) {
+               entry = _mas_next(mas, max, &index);
+               if (mt_is_empty(entry))
+                       entry = NULL;
+       }
+
+       if (entry)
+               mas->index = index;
+
+       return entry;
+}
+EXPORT_SYMBOL_GPL(mas_find);
+
+/**
+ * mas_pause() - Pause a mas_find/mas_for_each to drop the lock.
+ *
+ * Some users need to pause a walk and drop the lock they're holding in
+ * order to yield to a higher priority thread or carry out an operation
+ * on an entry.  Those users should call this function before they drop
+ * the lock.  It resets the @mas to be suitable for the next iteration
+ * of the loop after the user has reacquired the lock.  If most entries
+ * found during a walk require you to call mas_pause(), the mt_for_each()
+ * iterator may be more appropriate.
+ *
+ */
+void mas_pause(struct ma_state *mas)
+{
+       // Overflow protection.
+       if (mas->last == ULONG_MAX) {
+               mas->node = MAS_NONE;
+               return;
+       }
+
+       mas_reset(mas);
+       mas->last++;
+       mas->index = mas->last;
+}
+EXPORT_SYMBOL_GPL(mas_pause);
+
+/* mt_find() - Search from start up until an entry is found.
+ *
+ * Note: Does not return the zero entry.
+ * returns an entry.
+ */
+void *_mt_find(struct maple_tree *mt, unsigned long *index, unsigned long max,
+               bool start)
+{
+       unsigned long range_start = 0, range_end = 0;
+       void *entry = NULL;
+       bool leaf;
+       unsigned char slot;
+       MA_STATE(mas, mt, *index, *index);
+
+       if (!start && !(*index))
+               return NULL;
+
+       rcu_read_lock();
+       leaf = _mas_range_walk(&mas, &range_start, &range_end);
+       slot = mas_get_slot(&mas);
+       if (leaf == true && slot != MAPLE_NODE_SLOTS)
+               entry = mas_get_rcu_slot(&mas, slot);
+
+       mas.last = range_end;
+       if (mt_is_empty(entry) || xa_is_zero(entry) || xa_is_retry(entry))
+               entry = NULL;
+
+       while (mas_search_cont(&mas, range_start, max, entry)) {
+               entry = _mas_next(&mas, max, &range_start);
+               if (mt_is_empty(entry) || xa_is_zero(entry) ||
+                   xa_is_retry(entry))
+                       entry = NULL;
+       }
+
+       rcu_read_unlock();
+       if (entry)
+               *index = mas.last + 1;
+
+       return entry;
+}
+void *mt_find(struct maple_tree *mt, unsigned long *index, unsigned long max) {
+       return _mt_find(mt, index, max, true);
+}
+EXPORT_SYMBOL(mt_find);
+
+static inline int mas_build_replacement(struct ma_state *mas, void *new_entry,
+               long node_cnt)
+
+{
+       struct maple_enode *last = NULL;
+       unsigned long new_index, new_last;
+       unsigned long r_index, r_last;
+       struct maple_tree new_tree = MTREE_INIT(name, mas->tree->ma_flags);
+       void *entry;
+
+       MA_STATE(new_mas, &new_tree, 0, 0);
+
+
+       if (!node_cnt)
+               return 0;
+       node_cnt += 3; // Room for an extra split.
+
+       mas_node_cnt(mas, node_cnt);
+       if (mas_is_err(mas))
+               return 0;
+
+       new_index = mas->index;
+       new_last = mas->last;
+
+       /* Move allocations from mas to new_mas.
+        * NOTE: This is necessary as mas will pass back errors and will retry
+        * the allocation, so it has to be done in mas and has to be moved for
+        * below.
+        */
+       new_mas.alloc = mas->alloc;
+       mas->alloc = NULL;
+
+       // Copy left side
+       mas_reset(mas);
+       mas->index = 0;
+       mas->last = 0;
+       mas_for_each(mas, entry, new_index - 1) {
+               new_mas.index = mas->index;
+               new_mas.last = mas_get_safe_pivot(mas, mas_get_slot(mas));
+               MT_BUG_ON(mas->tree, entry ==  XA_DELETED_ENTRY);
+               ma_inactive_insert(&new_mas, entry);
+               if (mas_is_err(&new_mas))
+                       goto error;
+       }
+
+       // Insert the new value.
+       new_mas.index = new_index;
+       new_mas.last = new_last;
+       ma_inactive_insert(&new_mas, new_entry);
+       if (mas_is_err(&new_mas))
+               goto error;
+
+
+       /*
+        * We need to run through a few things:
+        * - new_mas.last goes beyond anything right now (no entries)
+        * - new_mas.last cuts a range
+        * - new_mas.last ends in a null
+        * - new_mas.last has a sequentially next value
+        */
+
+       mas_reset(mas);
+       mas->index = new_last + 1;
+       mas->last = new_last + 1;
+       _mas_range_walk(mas, &r_index, &r_last);
+
+       if (mas_get_slot(mas) == MAPLE_NODE_SLOTS)
+               goto skip_right;
+
+
+       if (mte_is_leaf(mas->node)) {
+               entry = mas_get_rcu_slot(mas, mas_get_slot(mas));
+               if (!mt_is_empty(entry))
+               {
+                       new_mas.index = r_index;
+                       new_mas.last = r_last;
+                       ma_inactive_insert(&new_mas, entry);
+                       if (mas_is_err(&new_mas))
+                               goto error;
+               }
+       }
+
+       mas_for_each(mas, entry, ULONG_MAX) {
+               if (mas->index < new_index)
+                       continue;
+
+               new_mas.index = mas->index;
+               new_mas.last = mas_get_safe_pivot(mas, mas_get_slot(mas));
+               ma_inactive_insert(&new_mas, entry);
+               if (mas_is_err(&new_mas))
+                       goto error;
+       }
+
+skip_right:
+
+       last = mas->tree->ma_root;
+       mas->node = new_tree.ma_root;
+       _mas_replace(mas, false, false);
+       if (mt_is_alloc(mas->tree))
+               mas_update_gap(mas, false);
+       mas->node = MAS_START;
+       mas->alloc = new_mas.alloc;
+       mte_destroy_walk(last, mas->tree);
+
+       return node_cnt;
+
+error:
+       if (new_mas.tree)
+               mte_destroy_walk(new_mas.tree->ma_root, new_mas.tree);
+       return 0;
+}
+
+/* Private
+ * mas_replace_tree() - Build a new tree and replace the entire structure.
+ *
+ */
+static inline int mas_replace_tree(struct ma_state *mas, void *new_entry)
+{
+       unsigned int slot_cnt = 0;
+       long node_cnt = 0, leaves= 1;
+       struct maple_enode *last = NULL;
+       enum maple_type p_type = mas_parent_enum(mas, mas->node);
+
+       // Create a new tree.
+       MA_STATE(r_mas, mas->tree, mas->last + 1, mas->last + 1);
+
+       // Count the slots that will be used in the node we landed.
+       slot_cnt = 3 + mas_get_slot(mas); // 3 is the max a new entry can create.
+
+       // Count the nodes that are currently used to the left.
+       mas_set_slot(mas, mte_parent_slot(mas->node));
+       while (!mas_is_none(mas)) {
+               last = mas->node;
+               mas_prev_node(mas, 0);
+               leaves++;
+       }
+       // Set mas->node to a valid node.
+       mas->node = last;
+
+       // Walk down to the right side of the tree.
+       _mas_walk(&r_mas);
+       // Add the slots to the right of where the search landed.
+       if (mas_get_slot(&r_mas) == MAPLE_NODE_SLOTS) {
+               r_mas.node = MAS_NONE;
+               slot_cnt++; //entry for oo
+               goto skip_r_count;
+       }
+       slot_cnt -= mas_get_slot(&r_mas);
+       slot_cnt += mas_data_end(&r_mas);
+
+       // Count the nodes to the right.
+       mas_set_slot(&r_mas, mte_parent_slot(r_mas.node));
+       while (!mas_is_none(&r_mas)) {
+               last = r_mas.node;
+               mas_next_node(&r_mas, ULONG_MAX);
+               leaves++;
+       }
+
+skip_r_count:
+       // Calculate all the nodes needed for a new tree.
+       if (slot_cnt > mt_slot_count(mas->node))
+               leaves++;
+
+       node_cnt = 1; // Root node. and room to split.
+       while (leaves) { // add the number of nodes at each level.
+               node_cnt += leaves;
+               leaves /= mt_slots[p_type];
+       }
+       return mas_build_replacement(mas, new_entry, node_cnt);
+}
+
+static inline bool mas_rewind_node(struct ma_state *mas);
+static inline void mas_rev_awalk(struct ma_state *mas, unsigned long size)
+{
+       struct maple_enode *last = NULL;
+       unsigned char slot;
+
+       mas_start(mas);
+       if (mas_is_none(mas)) {
+               mas_set_slot(mas, MAPLE_NODE_SLOTS);
+               return;
+       }
+
+       if (mas_is_ptr(mas))
+               return;
+       if (mas_is_err(mas))
+               return;
+
+       slot = mas_data_end(mas);
+       mas_set_slot(mas, slot);
+
+
+       /* There are 4 options:
+        * go to child (descend)
+        * go back to parent (ascend)
+        * no gap found. (return, slot == MAPLE_NODE_SLOTS)
+        * found the gap. (return, slot != MAPLE_NODE_SLOTS)
+        */
+       while (!mas_is_err(mas) && !_mas_rev_awalk(mas, size)) {
+               if (last == mas->node)
+                       mas_rewind_node(mas);
+               else
+                       last = mas->node;
+       }
+}
+static inline bool mas_skip_node(struct ma_state *mas);
+static inline void mas_awalk(struct ma_state *mas, unsigned long size)
+{
+       struct maple_enode *last = NULL;
+
+       mas_start(mas);
+       if (mas_is_none(mas))
+               return;
+
+       if (mas_is_ptr(mas))
+               return;
+
+       /* There are 4 options:
+        * go to child (descend)
+        * go back to parent (ascend)
+        * no gap found. (return, slot == MAPLE_NODE_SLOTS)
+        * found the gap. (return, slot != MAPLE_NODE_SLOTS)
+        */
+       while (!mas_is_err(mas) && !_mas_awalk(mas, size)) {
+               if (last == mas->node)
+                       mas_skip_node(mas);
+               else
+                       last = mas->node;
+       }
+}
+
+static inline int ma_root_ptr(struct ma_state *mas, void *entry,
+               bool overwrite)
+{
+       if (xa_is_node(mas->tree->ma_root))
+               return 0;
+
+       if (!overwrite)
+               if (mas->tree->ma_root && mas->last == 0)
+                       goto exists;
+
+       if (mas->last != 0)
+               mas_root_expand(mas, entry);
+       else if (((unsigned long) (entry) & 3) == 2)
+               mas_root_expand(mas, entry);
+       else
+               rcu_assign_pointer(mas->tree->ma_root, entry);
+       return 1;
+
+exists:
+       mas_set_err(mas, -EEXIST);
+       return 0;
+}
+
+static inline int mas_add(struct ma_state *mas, void *entry, bool overwrite,
+               bool active)
+{
+       unsigned char slot = MAPLE_NODE_SLOTS;
+       bool leaf;
+       int ret = 0;
+
+       ret = ma_root_ptr(mas, entry, overwrite);
+       if (mas_is_err(mas))
+               return 0;
+
+       if (ret)
+               return ret;
+
+       leaf = _mas_walk(mas);
+       slot = mas_get_slot(mas);
+       if (leaf == true) {
+               if (slot == MAPLE_NODE_SLOTS) {
+                       if (mas->index == 0 && !overwrite)
+                               goto exists;
+               } else if (!overwrite) {
+                       void *entry = mas_get_rcu_slot(mas, slot);
+
+                       if (!mt_is_empty(entry))
+                               goto exists;
+               }
+       }
+
+       /* Do the add */
+       ret = _mas_add(mas, entry, overwrite, active);
+       if (mas_is_err(mas) && xa_err(mas->node) == -ERANGE)
+               mas_set_err(mas, -EEXIST);
+
+       return ret;
+
+exists:
+       mas_set_err(mas, -EEXIST);
+       return 0;
+}
+
+static int mas_fill_gap(struct ma_state *mas, void *entry, unsigned char slot,
+               unsigned long size, unsigned long *index)
+{
+       unsigned char pslot = mte_parent_slot(mas->node);
+       struct maple_enode *mn = mas->node;
+       /* mas->index is the start address for the search
+        *  which may no longer be needed.
+        * mas->last is the end address for the search
+        */
+
+       *index = mas->index;
+       mas->last = mas->index + size - 1;
+
+       /* It is possible that using mas->max and mas->min to correctly
+        * calculate the index and last will cause an issue in the gap
+        * calculation, so fix the ma_state here
+        */
+       mas_ascend(mas);
+       mas->max = mas_get_safe_pivot(mas, pslot);
+       if (pslot)
+               mas->min = mas_get_safe_pivot(mas, pslot - 1) + 1;
+
+       mas->node = mn;
+       _mas_insert(mas, entry, slot, true);
+       return 0;
+}
+
+void mas_set_fwd_index(struct ma_state *mas, unsigned long size)
+{
+       unsigned long min = mas->min;
+       unsigned char slot = mas_get_slot(mas);
+       // At this point, mas->node points to the right node and we have a
+       // slot that has a sufficient gap.
+       if (slot)
+               min = mte_get_pivot(mas->node, slot - 1) + 1;
+
+       mas->min = min;
+       mas->max = mas_get_safe_pivot(mas, slot);
+
+       if (mas->index < min)
+               mas->index = min;
+       mas->last = mas->index + size - 1;
+}
+void mas_set_rev_index(struct ma_state *mas, unsigned long size)
+{
+       unsigned long gap_max = mas->max; // in-tree gap.
+       unsigned long range_max = mas->last; // range window we are searching in.
+
+       // rev_awalk has set mas->min and mas->max to the gap values.
+       // If the maximum is outside the window we are searching, then use the
+       // last location in the search.
+       // mas->max and mas->min is the range of the gap.
+       // mas->index and mas->last are currently set to the search range.
+
+       // Trim the upper limit to the max.
+       if (gap_max > range_max)
+               gap_max = range_max;
+
+       mas->last = gap_max;
+       mas->index = mas->last - size + 1;
+}
+static void _mas_empty_or_single_unmapped_area(struct ma_state *mas,
+               unsigned long min, unsigned long max, unsigned long size,
+               bool fwd)
+{
+       unsigned long start = 0;
+       if (!mas_is_none(mas))
+               start++; // mas_is_ptr
+
+       if (start < min)
+               start = min;
+
+       if (fwd) {
+               mas->index = start;
+               mas->last = start + size - 1;
+               return;
+       }
+
+       mas->index = max - size + 1;
+       mas->index = max;
+}
+static inline int _mas_get_unmapped_area(struct ma_state *mas, unsigned long min,
+               unsigned long max, unsigned long size, bool forward)
+{
+       mas_start(mas);
+       max--; // Convert to inclusive.
+
+       // Empty set.
+       if (mas_is_none(mas) || mas_is_ptr(mas)) {
+               _mas_empty_or_single_unmapped_area(mas, min, max, size, forward);
+               return 0;
+       }
+
+       // The start of the window can only be within these values.
+       mas->index = min;
+       mas->last = max;
+
+       if (forward)
+               mas_awalk(mas, size);
+       else
+               mas_rev_awalk(mas, size);
+
+       if (mas_is_err(mas))
+               return xa_err(mas->node);
+
+       if (mas_get_slot(mas) == MAPLE_NODE_SLOTS)
+               return -EBUSY;
+
+       if (forward)
+               mas_set_fwd_index(mas, size);
+       else
+               mas_set_rev_index(mas, size);
+
+       return 0;
+}
+
+int mas_get_unmapped_area(struct ma_state *mas, unsigned long min,
+               unsigned long max, unsigned long size)
+{
+       return _mas_get_unmapped_area(mas, min, max, size, true);
+}
+int mas_get_unmapped_area_rev(struct ma_state *mas, unsigned long min,
+               unsigned long max, unsigned long size)
+{
+       return _mas_get_unmapped_area(mas, min, max, size, false);
+}
+/** Private
+ * mas_alloc() - Allocate a range.
+ *
+ * Give a size, a minimum starting point (mas->index), a maximum (mas->last),
+ * and a size (size), find the lowest location in the min-max window in the
+ * tree which this allocation fits and set index to that value.
+ *
+ * Returns: 0 on success, -ENOMEM if allocation fails, -EBUSY otherwise.
+ */
+static inline int mas_alloc(struct ma_state *mas, void *entry,
+               unsigned long size, unsigned long *index)
+{
+       unsigned char slot = MAPLE_NODE_SLOTS;
+       unsigned long min;
+       mas_start(mas);
+
+       if (mas_is_none(mas) || mas_is_ptr(mas)) {
+               mas_root_expand(mas, entry);
+               if (mas_is_err(mas))
+                       return xa_err(mas->node);
+
+               if (!mas->index)
+                       return mte_get_pivot(mas->node, 0);
+               return mte_get_pivot(mas->node, 1);
+       }
+
+       mas_awalk(mas, size); // Must be walking a tree.
+
+       if (mas_is_err(mas))
+               return xa_err(mas->node);
+
+       slot = mas_get_slot(mas);
+       if (slot == MAPLE_NODE_SLOTS)
+               goto no_gap;
+
+       // At this point, mas->node points to the right node and we have a
+       // slot that has a sufficient gap.
+       min = mas->min;
+       if (slot)
+               min = mte_get_pivot(mas->node, slot - 1) + 1;
+
+       if (mas->index < min)
+               mas->index = min;
+
+       return mas_fill_gap(mas, entry, slot, size, index);
+
+no_gap:
+       return -EBUSY;
+}
+/** Private
+ * mas_rev_alloc() - Reverse allocate a range.
+ *
+ * Give a size, a minimum value (mas->index), a maximum starting point
+ * (mas->last), and a size (size), find the largest location in the min-max
+ * window in tree which this allocation fits and set index to that value.
+ *
+ * Returns: 0 on success, -EBUSY otherwise.
+ */
+static inline int mas_rev_alloc(struct ma_state *mas, unsigned long min,
+               unsigned long max, void *entry,
+               unsigned long size, unsigned long *index)
+{
+       unsigned char slot = MAPLE_NODE_SLOTS;
+       int ret = 0;
+
+       ret = _mas_get_unmapped_area(mas, min, max, size, false);
+       if (ret)
+               return ret;
+
+       if (mas_is_err(mas))
+               return xa_err(mas->node);
+
+       slot = mas_get_slot(mas);
+       if (slot == MAPLE_NODE_SLOTS)
+               goto no_gap;
+
+       return mas_fill_gap(mas, entry, slot, size, index);
+
+no_gap:
+       return -EBUSY;
+}
+
+/**
+ *
+ * Must hold rcu_read_lock or the write lock.
+ *
+ * Find where ms->index is located and return the entry.
+ * mas->node will point to the node containing the entry.
+ *
+ * range_min and range_max will be set accordingly.
+ *
+ */
+void *mas_range_load(struct ma_state *mas, unsigned long *range_min,
+               unsigned long *range_max, bool skip_retry)
+{
+       void *entry = NULL;
+
+retry:
+       if (_mas_range_walk(mas, range_min, range_max)) {
+               unsigned char slot = MAPLE_NODE_SLOTS;
+
+               if (mas_is_ptr(mas) && mas->last == 0)
+                       return mte_safe_root(mas->tree->ma_root);
+
+               slot = mas_get_slot(mas);
+               if (slot >= MAPLE_NODE_SLOTS)
+                       return NULL;
+
+               entry = mas_get_rcu_slot(mas, slot);
+               if (mte_dead_node(mas->node))
+                       goto retry;
+       }
+
+       if (mas_is_none(mas))
+               return NULL;
+
+       if (!entry || xa_is_deleted(entry))
+               return NULL;
+
+       if (skip_retry && xa_is_retry(entry))
+               goto retry;
+
+       return entry;
+}
+
+void *mas_load(struct ma_state *mas)
+{
+       unsigned long range_max, range_min;
+
+       return mas_range_load(mas, &range_min, &range_max, true);
+}
+static inline bool mas_rewind_node(struct ma_state *mas)
+{
+       unsigned char slot;
+
+       do {
+               if (mte_is_root(mas->node)) {
+                       slot = mas_get_slot(mas);
+                       if (!slot) {
+                               mas_set_err(mas, -EBUSY);
+                               return false;
+                       }
+               } else {
+                       slot = mte_parent_slot(mas->node);
+                       mas_ascend(mas);
+               }
+       } while (!slot);
+
+       mas_set_slot(mas, --slot);
+       return true;
+}
+/* Skip this slot in the parent. */
+static inline bool mas_skip_node(struct ma_state *mas)
+{
+       unsigned char slot;
+
+       do {
+               if (mte_is_root(mas->node)) {
+                       slot = mas_get_slot(mas);
+                       if (slot > mt_slot_count(mas->node) - 1) {
+                               mas_set_err(mas, -EBUSY);
+                               return false;
+                       }
+               } else {
+                       slot = mte_parent_slot(mas->node);
+                       mas_ascend(mas);
+               }
+       } while (slot > mt_slot_count(mas->node) - 1);
+
+       mas_set_slot(mas, ++slot);
+       mas_update_limits(mas, slot, mte_node_type(mas->node));
+       return true;
+}
+/* Private
+ * mas_erase() - Find the range in which index resides and erase the entire
+ * range.
+ *
+ * Any previous pivots with no value will be set to the same pivot value.
+ * Return: the entry that was erased
+ */
+static inline void *mas_erase(struct ma_state *mas)
+{
+       int slot;
+       void *entry = NULL;
+
+       _mas_walk(mas);
+       if (mas_is_ptr(mas)) {
+               entry = mas->tree->ma_root;
+               mas->tree->ma_root = NULL;
+               return entry;
+       }
+
+       slot = mas_get_slot(mas);
+       if (slot == MAPLE_NODE_SLOTS)
+               return NULL;
+
+       entry = mas_get_rcu_slot(mas, slot);
+       mte_update_rcu_slot(mas->node, slot, XA_DELETED_ENTRY);
+       // dense nodes only need to set a single value.
+
+       mas_rebalance(mas);
+       mas_may_move_gap(mas);
+       return entry;
+}
+
+
+/* Interface */
+void __init maple_tree_init(void)
+{
+       maple_node_cache = kmem_cache_create("maple_node",
+                       sizeof(struct maple_node), sizeof(struct maple_node),
+                       SLAB_PANIC | SLAB_RECLAIM_ACCOUNT, NULL);
+}
+void mtree_init(struct maple_tree *mt, unsigned int ma_flags)
+{
+       spin_lock_init(&mt->ma_lock);
+       mt->ma_flags = ma_flags;
+       rcu_assign_pointer(mt->ma_root, NULL);
+}
+EXPORT_SYMBOL(mtree_init);
+
+void *mtree_load(struct maple_tree *mt, unsigned long index)
+{
+       void *entry;
+
+       MA_STATE(mas, mt, index, index);
+       rcu_read_lock();
+       entry = mas_load(&mas);
+       rcu_read_unlock();
+       if (xa_is_zero(entry))
+               return NULL;
+
+       return entry;
+}
+EXPORT_SYMBOL(mtree_load);
+
+int mtree_store_range(struct maple_tree *mt, unsigned long index,
+               unsigned long last, void *entry, gfp_t gfp)
+{
+       MA_STATE(mas, mt, index, last);
+
+       if (WARN_ON_ONCE(mt_is_advanced(entry)))
+               return -EINVAL;
+
+       if (index > last)
+               return -EINVAL;
+
+       mas_lock(&mas);
+retry:
+       mas_add(&mas, entry, true, true);
+       if (mas_nomem(&mas, gfp))
+               goto retry;
+
+       mas_unlock(&mas);
+       if (mas_is_err(&mas))
+               return xa_err(mas.node);
+
+       return 0;
+}
+EXPORT_SYMBOL(mtree_store_range);
+
+int mtree_store(struct maple_tree *mt, unsigned long index, void *entry,
+                gfp_t gfp)
+{
+       return mtree_store_range(mt, index, index, entry, gfp);
+}
+EXPORT_SYMBOL(mtree_store);
+
+int mtree_insert_range(struct maple_tree *mt, unsigned long first,
+               unsigned long last, void *entry, gfp_t gfp)
+{
+       MA_STATE(ms, mt, first, last);
+
+       if (WARN_ON_ONCE(mt_is_advanced(entry)))
+               return -EINVAL;
+
+       if (first > last)
+               return -EINVAL;
+
+       mtree_lock(ms.tree);
+retry:
+       mas_add(&ms, entry, false, true);
+       if (mas_nomem(&ms, gfp))
+               goto retry;
+
+       mtree_unlock(ms.tree);
+       if (mas_is_err(&ms))
+               return xa_err(ms.node);
+
+       return 0;
+}
+EXPORT_SYMBOL(mtree_insert_range);
+int mtree_insert(struct maple_tree *mt, unsigned long index, void *entry,
+                gfp_t gfp)
+{
+       return mtree_insert_range(mt, index, index, entry, gfp);
+}
+EXPORT_SYMBOL(mtree_insert);
+
+int mtree_alloc_range(struct maple_tree *mt, unsigned long *startp,
+               void *entry, unsigned long size, unsigned long min,
+               unsigned long max, gfp_t gfp)
+{
+       int ret = 0;
+       MA_STATE(mas, mt, min, max - size);
+
+       if (!mt_is_alloc(mt))
+               return -EINVAL;
+
+       if (WARN_ON_ONCE(mt_is_reserved(entry)))
+               return -EINVAL;
+
+       if (min > max)
+               return -EINVAL;
+
+       if (max < size)
+               return -EINVAL;
+
+       if (!size)
+               return -EINVAL;
+
+       mtree_lock(mas.tree);
+retry:
+       mas_set_slot(&mas, 0);
+       mas.index = min;
+       mas.last = max - size;
+       ret = mas_alloc(&mas, entry, size, startp);
+       if (mas_nomem(&mas, gfp))
+               goto retry;
+
+       mtree_unlock(mas.tree);
+       return ret;
+}
+int mtree_alloc_rrange(struct maple_tree *mt, unsigned long *startp,
+               void *entry, unsigned long size, unsigned long min,
+               unsigned long max, gfp_t gfp)
+{
+       int ret = 0;
+       MA_STATE(mas, mt, min, max - size);
+
+       if (!mt_is_alloc(mt))
+               return -EINVAL;
+
+       if (WARN_ON_ONCE(mt_is_reserved(entry)))
+               return -EINVAL;
+
+       if (min >= max)
+               return -EINVAL;
+
+       if (max < size - 1)
+               return -EINVAL;
+
+       if (!size)
+               return -EINVAL;
+
+       mtree_lock(mas.tree);
+retry:
+       ret = mas_rev_alloc(&mas, min, max, entry, size, startp);
+       if (mas_nomem(&mas, gfp))
+               goto retry;
+
+       mtree_unlock(mas.tree);
+       return ret;
+}
+
+int mtree_next(struct maple_tree *mt, unsigned long index, unsigned long *next)
+{
+       int ret = -ENOENT;
+
+       MA_STATE(mas, mt, index, index);
+       rcu_read_lock();
+       //mas_walk_next(&mas);
+       rcu_read_unlock();
+
+       if (mas.node)
+               return 0;
+       return ret;
+}
+
+void *mtree_erase(struct maple_tree *mt, unsigned long index)
+{
+       void *entry = NULL;
+
+       MA_STATE(mas, mt, index, index);
+
+       mtree_lock(mt);
+       entry = mas_erase(&mas);
+       mtree_unlock(mt);
+
+       return entry;
+}
+EXPORT_SYMBOL(mtree_erase);
+
+void mtree_destroy(struct maple_tree *mt)
+{
+       struct maple_enode *destroyed;
+
+       mtree_lock(mt);
+       destroyed = mt->ma_root;
+       if (xa_is_node(destroyed))
+               mte_destroy_walk(destroyed, mt);
+
+       mt->ma_flags = 0;
+       rcu_assign_pointer(mt->ma_root, NULL);
+       mtree_unlock(mt);
+}
+EXPORT_SYMBOL(mtree_destroy);
+
+#ifdef CONFIG_DEBUG_MAPLE_TREE
+unsigned int maple_tree_tests_run;
+unsigned int maple_tree_tests_passed;
+EXPORT_SYMBOL_GPL(maple_tree_tests_run);
+EXPORT_SYMBOL_GPL(maple_tree_tests_passed);
+
+#ifndef __KERNEL__
+extern void kmem_cache_set_non_kernel(struct kmem_cache *, unsigned int);
+void mt_set_non_kernel(unsigned int val)
+{
+       kmem_cache_set_non_kernel(maple_node_cache, val);
+}
+
+extern unsigned long kmem_cache_get_alloc(struct kmem_cache *);
+unsigned long mt_get_alloc_size(void)
+{
+       return kmem_cache_get_alloc(maple_node_cache);
+}
+#define MA_PTR "%p"
+#else
+#define MA_PTR "%px"
+#endif
+// Tree validations
+void mt_dump_node(void *entry, unsigned long min, unsigned long max,
+               unsigned int depth);
+void mt_dump_range(unsigned long min, unsigned long max, unsigned int depth)
+{
+       static const char spaces[] = "                                ";
+
+       if (min == max)
+               pr_info("%.*s%lu: ", depth * 2, spaces, min);
+       else
+               pr_info("%.*s%lu-%lu: ", depth * 2, spaces, min, max);
+}
+
+void mt_dump_entry(void *entry, unsigned long min, unsigned long max,
+               unsigned int depth)
+{
+       mt_dump_range(min, max, depth);
+
+       if (xa_is_value(entry))
+               pr_cont("value %ld (0x%lx) ["MA_PTR"]\n", xa_to_value(entry),
+                               xa_to_value(entry), entry);
+       else if (xa_is_zero(entry))
+               pr_cont("zero (%ld)\n", xa_to_internal(entry));
+       else if (xa_is_deleted(entry))
+               pr_cont("deleted (%ld)\n", xa_to_internal(entry));
+       else if (xa_is_skip(entry))
+               pr_cont("skip (%ld)\n", xa_to_internal(entry));
+       else if (xa_is_retry(entry))
+               pr_cont("retry (%ld)\n", xa_to_internal(entry));
+       else if (mt_is_reserved(entry))
+               pr_cont("UNKNOWN ENTRY ("MA_PTR")\n", entry);
+       else
+               pr_cont(""MA_PTR"\n", entry);
+}
+
+void mt_dump_range64(void *entry, unsigned long min, unsigned long max,
+               unsigned int depth)
+{
+       struct maple_range_64 *node = &mte_to_node(entry)->mr64;
+       bool leaf = mte_is_leaf(entry);
+       unsigned long first = min;
+       int i;
+
+       pr_cont(" contents: ");
+       for (i = 0; i < MAPLE_RANGE64_SLOTS - 1; i++)
+               pr_cont(""MA_PTR" %lu ", node->slot[i], node->pivot[i]);
+       pr_cont(""MA_PTR"\n", node->slot[i]);
+       for (i = 0; i < MAPLE_RANGE64_SLOTS; i++) {
+               unsigned long last = max;
+
+               if (i < (MAPLE_RANGE64_SLOTS - 1))
+                       last = node->pivot[i];
+               else if (node->slot[i] == NULL && max != mt_max[mte_node_type(entry)])
+                       break;
+               if (last == 0 && i > 0)
+                       break;
+               if (leaf)
+                       mt_dump_entry(node->slot[i], first, last, depth + 1);
+               else if (xa_is_deleted(node->slot[i]))
+                       mt_dump_entry(node->slot[i], first, last, depth + 1);
+               else if (xa_is_skip(node->slot[i]))
+                       mt_dump_entry(node->slot[i], first, last, depth + 1);
+               else if (node->slot[i])
+                       mt_dump_node(node->slot[i], first, last, depth + 1);
+
+               if (last == max)
+                       break;
+               if (last > max) {
+                       pr_err("node "MA_PTR" last (%lu) > max (%lu) at pivot %d!\n",
+                                       node, last, max, i);
+                       break;
+               }
+               first = last + 1;
+       }
+}
+
+void mt_dump_arange64(void *entry, unsigned long min, unsigned long max,
+               unsigned int depth)
+{
+       struct maple_arange_64 *node = &mte_to_node(entry)->ma64;
+       bool leaf = mte_is_leaf(entry);
+       unsigned long first = min;
+       int i;
+
+       pr_cont(" contents: ");
+       for (i = 0; i < MAPLE_ARANGE64_SLOTS; i++)
+               pr_cont("%lu ", node->gap[i]);
+       pr_cont("| ");
+       for (i = 0; i < MAPLE_ARANGE64_SLOTS - 1; i++)
+               pr_cont(MA_PTR" %lu ", node->slot[i], node->pivot[i]);
+       pr_cont(MA_PTR"\n", node->slot[i]);
+       for (i = 0; i < MAPLE_ARANGE64_SLOTS; i++) {
+               unsigned long last = max;
+
+               if (i < (MAPLE_ARANGE64_SLOTS - 1))
+                       last = node->pivot[i];
+               else if (node->slot[i] == NULL)
+                       break;
+               if (last == 0 && i > 0)
+                       break;
+               if (leaf)
+                       mt_dump_entry(node->slot[i], first, last, depth + 1);
+               else if (xa_is_deleted(node->slot[i]))
+                       mt_dump_entry(node->slot[i], first, last, depth + 1);
+               else if (xa_is_skip(node->slot[i]))
+                       mt_dump_entry(node->slot[i], first, last, depth + 1);
+               else if (xa_is_retry(node->slot[i]))
+                       mt_dump_entry(node->slot[i], first, last, depth + 1);
+               else if (node->slot[i])
+                       mt_dump_node(node->slot[i], first, last, depth + 1);
+
+               if (last == max)
+                       break;
+               if (last > max) {
+                       pr_err("node "MA_PTR" last (%lu) > max (%lu) at pivot %d!\n",
+                                       node, last, max, i);
+                       break;
+               }
+               first = last + 1;
+       }
+}
+
+void mt_dump_node(void *entry, unsigned long min, unsigned long max,
+               unsigned int depth)
+{
+       struct maple_node *node = mte_to_node(entry);
+       unsigned int type = mte_node_type(entry);
+       unsigned int i;
+
+       mt_dump_range(min, max, depth);
+
+       pr_cont("node "MA_PTR" depth %d type %d parent "MA_PTR, node, depth, type,
+                       node ? node->parent : NULL);
+       switch (type) {
+       case maple_dense:
+               pr_cont("\n");
+               for (i = 0; i < MAPLE_NODE_SLOTS; i++) {
+                       if (min + i > max)
+                               pr_cont("OUT OF RANGE: ");
+                       mt_dump_entry(node->slot[i], min + i, min + i, depth);
+               }
+               break;
+       case maple_leaf_64:
+       case maple_range_64:
+               mt_dump_range64(entry, min, max, depth);
+               break;
+       case maple_arange_64:
+               mt_dump_arange64(entry, min, max, depth);
+               break;
+
+       default:
+               pr_cont(" UNKNOWN TYPE\n");
+       }
+}
+
+void mt_dump(const struct maple_tree *mt)
+{
+       void *entry = mt->ma_root;
+
+       pr_info("maple_tree("MA_PTR") flags %X, root "MA_PTR"\n",
+                mt, mt->ma_flags, entry);
+       if (!xa_is_node(entry))
+               mt_dump_entry(entry, 0, 0, 0);
+       else if (entry)
+               mt_dump_node(entry, 0, mt_max[mte_node_type(entry)], 0);
+}
+
+/**
+ * Calculate the maximum gap in a node and check if that's what is reported in
+ * the parent (unless root).
+ */
+void mas_validate_gaps(struct ma_state *mas)
+{
+       struct maple_enode *mte = mas->node;
+       struct maple_node *p_mn;
+       unsigned long gap = 0, max_gap = 0;
+       unsigned long p_end, p_start = mas->min;
+       unsigned char p_slot;
+       int i;
+
+       if (mte_is_dense(mte)) {
+               for (i = 0; i < mt_slot_count(mte); i++) {
+                       if (!mt_is_empty(mas_get_rcu_slot(mas, i))) {
+                               if (gap > max_gap)
+                                       max_gap = gap;
+                               gap = 0;
+                               continue;
+                       }
+                       gap++;
+               }
+               goto counted;
+       }
+
+       for (i = 0; i < mt_slot_count(mte); i++) {
+               p_end = mas_get_safe_pivot(mas, i);
+               if (!p_end && i)
+                       p_end = mas->max;
+
+               if (mte_is_leaf(mte)) {
+                       if (!mt_is_empty(mas_get_rcu_slot(mas, i))) {
+                               gap = 0;
+                               goto not_empty;
+                       }
+                       gap += p_end - p_start + 1;
+               } else {
+                       void *entry = mas_get_rcu_slot(mas, i);
+                       gap = mte_get_gap(mte, i);
+                       if (mt_is_empty(entry) || xa_is_retry(entry)) {
+                               if (gap != p_end - p_start + 1) {
+                                       if (xa_is_retry(entry))
+                                               pr_err("retry\n");
+
+                                       pr_err(MA_PTR"[%u] -> "MA_PTR" %lu != %lu - %lu + 1\n",
+                                               mas_mn(mas), i,
+                                               mas_get_rcu_slot(mas, i), gap,
+                                               p_end, p_start);
+                                       mt_dump(mas->tree);
+
+                                       MT_BUG_ON(mas->tree,
+                                               gap != p_end - p_start + 1);
+                               }
+                       } else {
+                               if (gap > p_end - p_start + 1) {
+                                       pr_err(MA_PTR"[%u] %lu >= %lu - %lu + 1 (%lu)\n",
+                                       mas_mn(mas), i, gap, p_end, p_start,
+                                       p_end - p_start + 1);
+                                       mt_dump(mas->tree);
+                                       MT_BUG_ON(mas->tree,
+                                               gap > p_end - p_start + 1);
+                               }
+                       }
+               }
+
+               if (gap > max_gap)
+                       max_gap = gap;
+not_empty:
+               p_start = p_end + 1;
+               if (p_end >= mas->max)
+                       break;
+       }
+
+counted:
+       if (mte_is_root(mte))
+               return;
+
+       p_slot = mte_parent_slot(mas->node);
+       p_mn = mte_parent(mte);
+       MT_BUG_ON(mas->tree, max_gap > mas->max);
+       if (ma_get_gap(p_mn, p_slot, mas_parent_enum(mas, mte)) != max_gap) {
+               pr_err("gap "MA_PTR"[%u] != %lu\n", p_mn, p_slot, max_gap);
+               mt_dump(mas->tree);
+       }
+
+       MT_BUG_ON(mas->tree,
+               ma_get_gap(p_mn, p_slot, mas_parent_enum(mas, mte)) !=
+               max_gap);
+}
+
+void mas_validate_parent_slot(struct ma_state *mas)
+{
+       struct maple_node *parent;
+       enum maple_type p_type = mas_parent_enum(mas, mas->node);
+       unsigned char p_slot = mte_parent_slot(mas->node);
+       int i;
+
+       if (mte_is_root(mas->node))
+               return;
+
+       parent = mte_parent(mas->node);
+       MT_BUG_ON(mas->tree, mas_mn(mas) == parent);
+
+       // Check prev/next parent slot for duplicate node entry
+
+       for (i = 0; i < mt_slots[p_type]; i++) {
+               if (i == p_slot) {
+                       MT_BUG_ON(mas->tree,
+                               ma_get_rcu_slot(parent, i, p_type, mas->tree) !=
+                               mas->node);
+               } else if (ma_get_rcu_slot(parent, i, p_type, mas->tree) ==
+                                mas->node) {
+                       pr_err("parent contains invalid child at "MA_PTR"[%u] "
+                               MA_PTR"\n", parent, i, mas_mn(mas));
+                       MT_BUG_ON(mas->tree,
+                              ma_get_rcu_slot(parent, i, p_type, mas->tree) ==
+                              mas->node);
+               }
+       }
+}
+/**
+ * Validate all pivots are within mas->min and mas->max.
+ */
+void mas_validate_limits(struct ma_state *mas)
+{
+       int i;
+       unsigned long prev_piv = 0;
+
+       if (mte_is_root(mas->node))
+               return; // all limits are fine here.
+
+       for (i = 0; i < mt_slot_count(mas->node); i++) {
+               unsigned long piv = mas_get_safe_pivot(mas, i);
+
+               if (!piv)
+                       break;
+
+               if (prev_piv > piv) {
+                       void *entry = mas_get_rcu_slot(mas, i);
+                       if (!mt_will_coalesce(entry)) {
+                               pr_err(MA_PTR"[%u] %lu < %lu\n", mas_mn(mas), i,
+                               piv, prev_piv);
+                               mt_dump(mas->tree);
+                               MT_BUG_ON(mas->tree, piv < prev_piv);
+                       }
+               }
+
+               if (piv < mas->min) {
+                       void *entry = mas_get_rcu_slot(mas, i);
+
+                       if (!mt_will_coalesce(entry)) {
+                               if (piv < mas->min)
+                                       mt_dump(mas->tree);
+                               pr_err(MA_PTR"[%u] %lu < %lu\n", mas_mn(mas), i,
+                                               piv, mas->min);
+                               mt_dump(mas->tree);
+                               MT_BUG_ON(mas->tree, piv < mas->min);
+                       }
+               }
+               if (piv > mas->max) {
+                       pr_err(MA_PTR"[%u] %lu > %lu\n", mas_mn(mas), i, piv,
+                               mas->max);
+                       mt_dump(mas->tree);
+                       MT_BUG_ON(mas->tree, piv > mas->max);
+               }
+               prev_piv = piv;
+       }
+}
+
+/* Depth first search, post-order */
+static inline void mas_dfs_postorder(struct ma_state *mas, unsigned long max)
+{
+
+       struct maple_enode *p = MAS_NONE, *mn = mas->node;
+       unsigned long p_min, p_max;
+
+       mas_next_node(mas, max);
+       if (mas->node != MAS_NONE)
+               return;
+
+       if (mte_is_root(mn))
+               return;
+
+       mas->node = mn;
+       mas_ascend(mas);
+       while (mas->node != MAS_NONE) {
+               p = mas->node;
+               p_min = mas->min;
+               p_max = mas->max;
+               mas_prev_node(mas, 0);
+       }
+
+       if (p == MAS_NONE)
+               return;
+
+       mas->node = p;
+       mas->max = p_max;
+       mas->min = p_min;
+}
+/**
+ * validate a maple tree by checking:
+ * 1. The limits (pivots are within mas->min to mas->max)
+ * 2. The gap is correctly set in the parents
+ */
+void mt_validate(struct maple_tree *mt)
+{
+       MA_STATE(mas, mt, 0, 0);
+       rcu_read_lock();
+       mas_start(&mas);
+       mas_first_entry(&mas, ULONG_MAX);
+       while (mas.node != MAS_NONE) {
+               mas_validate_parent_slot(&mas);
+               mas_validate_limits(&mas);
+               if (mt_is_alloc(mt))
+                       mas_validate_gaps(&mas);
+               mas_dfs_postorder(&mas, ULONG_MAX);
+       }
+       rcu_read_unlock();
+
+}
+#endif /* MT_DEBUG */
diff --git a/lib/test_maple_tree.c b/lib/test_maple_tree.c
new file mode 100644 (file)
index 0000000..e00bcc9
--- /dev/null
@@ -0,0 +1,11611 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * test_maple_tree.c: Test the maple tree API
+ * Copyright (c) 2018 Liam R. Howlett
+ * Author: Liam R. Howlett <Liam.Howlett@Oracle.com>
+ */
+
+#include <linux/maple_tree.h>
+#include <linux/module.h>
+
+#define MTREE_ALLOC_MAX 0x2000000000000Ul
+static
+int mtree_insert_index(struct maple_tree *mt, unsigned long index, gfp_t gfp)
+{
+       return mtree_insert(mt, index, xa_mk_value(index & LONG_MAX), gfp);
+}
+
+static void mtree_erase_index(struct maple_tree *mt, unsigned long index)
+{
+       MT_BUG_ON(mt, mtree_erase(mt, index) != xa_mk_value(index & LONG_MAX));
+       MT_BUG_ON(mt, mtree_load(mt, index) != NULL);
+}
+
+static int mtree_test_insert(struct maple_tree *mt, unsigned long index,
+                               void *ptr)
+{
+       return mtree_insert(mt, index, ptr, GFP_KERNEL);
+}
+
+static int mtree_test_store_range(struct maple_tree *mt, unsigned long start,
+                               unsigned long end, void *ptr)
+{
+       return mtree_store_range(mt, start, end, ptr, GFP_KERNEL);
+}
+static int mtree_test_insert_range(struct maple_tree *mt, unsigned long start,
+                               unsigned long end, void *ptr)
+{
+       return mtree_insert_range(mt, start, end, ptr, GFP_KERNEL);
+}
+
+static void *mtree_test_load(struct maple_tree *mt, unsigned long index)
+{
+       return mtree_load(mt, index);
+}
+
+static void *mtree_test_erase(struct maple_tree *mt, unsigned long index)
+{
+       return mtree_erase(mt, index);
+}
+
+static noinline void check_mtree_alloc_range(struct maple_tree *mt,
+               unsigned long start, unsigned long end, unsigned long size,
+               unsigned long expected, int eret, void *ptr)
+{
+
+       unsigned long result = expected + 1;
+       int ret;
+
+       ret = mtree_alloc_range(mt, &result, ptr, size, start, end,
+                       GFP_KERNEL);
+       MT_BUG_ON(mt, ret != eret);
+       if (ret)
+               return;
+
+       MT_BUG_ON(mt, result != expected);
+}
+
+static noinline void check_mtree_alloc_rrange(struct maple_tree *mt,
+               unsigned long start, unsigned long end, unsigned long size,
+               unsigned long expected, int eret, void *ptr)
+{
+
+       unsigned long result = expected + 1;
+       int ret;
+
+       ret = mtree_alloc_rrange(mt, &result, ptr, size, start, end,
+                       GFP_KERNEL);
+       MT_BUG_ON(mt, ret != eret);
+       if (ret)
+               return;
+
+       MT_BUG_ON(mt, result != expected);
+}
+static noinline void check_load(struct maple_tree *mt, unsigned long index,
+                               void *ptr)
+{
+       void *ret = mtree_test_load(mt, index);
+       MT_BUG_ON(mt, ret != ptr);
+}
+
+static noinline void check_store_range(struct maple_tree *mt,
+               unsigned long start, unsigned long end, void *ptr, int expected)
+{
+       int ret = -EINVAL;
+       unsigned long i;
+
+       ret = mtree_test_store_range(mt, start, end, ptr);
+       MT_BUG_ON(mt, ret != expected);
+
+       if (ret)
+               return;
+
+       for (i = start; i <= end; i++)
+               check_load(mt, i, ptr);
+}
+
+static noinline void check_insert_range(struct maple_tree *mt,
+               unsigned long start, unsigned long end, void *ptr, int expected)
+{
+       int ret = -EINVAL;
+       unsigned long i;
+
+       ret = mtree_test_insert_range(mt, start, end, ptr);
+       MT_BUG_ON(mt, ret != expected);
+
+       if (ret)
+               return;
+
+       for (i = start; i <= end; i++)
+               check_load(mt, i, ptr);
+}
+
+static noinline void check_insert(struct maple_tree *mt, unsigned long index,
+               void *ptr)
+{
+       int ret = -EINVAL;
+
+       ret = mtree_test_insert(mt, index, ptr);
+       MT_BUG_ON(mt, ret != 0);
+}
+
+static noinline void check_erase(struct maple_tree *mt, unsigned long index,
+               void *ptr)
+{
+       MT_BUG_ON(mt, mtree_test_erase(mt, index) != ptr);
+}
+static noinline void check_dup_insert(struct maple_tree *mt,
+                                     unsigned long index, void *ptr)
+{
+       int ret = -EINVAL;
+
+       ret = mtree_test_insert(mt, index, ptr);
+       MT_BUG_ON(mt, ret != -EEXIST);
+}
+
+
+static noinline
+void check_index_load(struct maple_tree *mt, unsigned long index)
+{
+       return check_load(mt, index, xa_mk_value(index & LONG_MAX));
+}
+
+static noinline void check_nomem(struct maple_tree *mt)
+{
+       MA_STATE(ms, mt, 1, 1);
+
+       MT_BUG_ON(mt, !mtree_empty(mt));
+       /* Ensure no bypassing of allocation failures */
+       mt_set_non_kernel(0);
+
+       /* Storing something at 1 requires memory allocation */
+       MT_BUG_ON(mt, mtree_insert(mt, 1, &ms, GFP_ATOMIC) != -ENOMEM);
+       /* Storing something at 0 does not */
+       MT_BUG_ON(mt, mtree_insert(mt, 0, &ms, GFP_ATOMIC) != 0);
+
+       /*
+        * Simulate two threads racing; the first one fails to allocate
+        * memory to insert an entry at 1, then the second one succeeds
+        * in allocating memory to insert an entry at 2.  The first one
+        * then needs to free the node it allocated.  LeakSanitizer will
+        * notice this, as will the 'nr_allocated' debugging aid in the
+        * userspace test suite.
+        */
+       mtree_lock(mt);
+       mas_insert(&ms, &ms); // insert 1 -> &ms, fails.
+       MT_BUG_ON(mt, ms.node != MA_ERROR(-ENOMEM));
+       mas_nomem(&ms, GFP_KERNEL); // Node allocated in here.
+       MT_BUG_ON(mt, ms.node != MAS_START);
+       mtree_unlock(mt);
+       MT_BUG_ON(mt, mtree_insert(mt, 2, mt, GFP_KERNEL) != 0);
+       mtree_lock(mt);
+       mas_insert(&ms, &ms); // insert 1 -> &ms
+       mas_nomem(&ms, GFP_KERNEL); // Node allocated in here.
+       mtree_unlock(mt);
+       mtree_destroy(mt);
+}
+
+static noinline void check_new_node(struct maple_tree *mt)
+{
+
+       struct maple_node *mn, *smn;
+       int cnt = 0;
+
+       MA_STATE(mas, mt, 0, 0);
+
+       /* Try allocating 3 nodes */
+       mtree_lock(mt);
+       // request 3 nodes to be allocated.
+       mas_node_cnt(&mas, 3);
+       // Allocation request of 3.
+       MT_BUG_ON(mt, mas_get_alloc_req(&mas) != 3);
+       // Allocate failed.
+       MT_BUG_ON(mt, mas.node != MA_ERROR(-ENOMEM));
+       MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
+
+       MT_BUG_ON(mt, mas_get_alloc_cnt(&mas) != 3);
+       mn = mas_get_alloc(&mas);
+       MT_BUG_ON(mt, mn == NULL);
+       MT_BUG_ON(mt, mn->slot[0] == NULL);
+       MT_BUG_ON(mt, mn->slot[1] == NULL);
+       mas_nomem(&mas, GFP_KERNEL); // free;
+       mtree_unlock(mt);
+
+
+       /* Try allocating 1 node, then 2 more */
+       mtree_lock(mt);
+       // Set allocation request to 1.
+       mas_set_alloc_req(&mas, 1);
+       // Check Allocation request of 1.
+       MT_BUG_ON(mt, mas_get_alloc_req(&mas) != 1);
+       mas_set_err(&mas, -ENOMEM);
+       // Validate allocation request.
+       MT_BUG_ON(mt, !mas_nomem(&mas, GFP_KERNEL));
+       // Eat the requested node.
+       mn = mas_next_alloc(&mas);
+
+       MT_BUG_ON(mt, mn == NULL);
+       MT_BUG_ON(mt, mn->slot[0] != NULL);
+       MT_BUG_ON(mt, mn->slot[1] != NULL);
+       MT_BUG_ON(mt, mas_get_alloc_cnt(&mas) != 0);
+
+       ma_free(mn);
+       // Allocate 3 nodes, will fail.
+       mas_node_cnt(&mas, 3);
+       // Drop the lock and allocate 3 nodes.
+       mas_nomem(&mas, GFP_KERNEL);
+       // Ensure 3 are allocated.
+       MT_BUG_ON(mt, mas_get_alloc_cnt(&mas) != 3);
+       // Allocation request of 0.
+       MT_BUG_ON(mt, mas_get_alloc_req(&mas) != 0);
+
+       mn = mas.alloc;
+       MT_BUG_ON(mt, mn == NULL);
+       MT_BUG_ON(mt, mn->slot[0] == NULL);
+       MT_BUG_ON(mt, mn->slot[1] == NULL);
+       // Ensure we counted 3.
+       MT_BUG_ON(mt, mas_get_alloc_cnt(&mas) != 3);
+       // Free.
+       mas_nomem(&mas, GFP_KERNEL);
+
+       // Set allocation request to 127.
+       mas_node_cnt(&mas, 127);
+       // Drop the lock and allocate 3 nodes.
+       mas_nomem(&mas, GFP_KERNEL);
+       mn = mas_get_alloc(&mas);
+       MT_BUG_ON(mt, mn == NULL);
+       cnt++;
+       for (int i = 0; i < 7; i++) {
+               smn = mn->slot[i];
+               MT_BUG_ON(mt, smn == NULL);
+               cnt++;
+               for (int j = 0; j < 15; j++) {
+                       MT_BUG_ON(mt, smn->slot[j] == NULL);
+                       cnt++;
+               }
+       }
+
+       smn = mn->slot[7];
+       cnt++;
+       MT_BUG_ON(mt, smn == NULL);
+       for (int j = 0; j < 6; j++) {
+               MT_BUG_ON(mt, smn->slot[j] == NULL);
+               cnt++;
+       }
+
+       for (int i = 8; i < 15; i++) {
+               MT_BUG_ON(mt, mn->slot[i] == NULL);
+               cnt++;
+       }
+
+       MT_BUG_ON(mt, mas_get_alloc_cnt(&mas) != 127);
+       mas_nomem(&mas, GFP_KERNEL); // Free.
+       MT_BUG_ON(mt, mas_get_alloc_cnt(&mas) != 0);
+       for (int i = 1; i < 128; i++) {
+               int j;
+               mas_node_cnt(&mas, i); // Request
+               mas_nomem(&mas, GFP_KERNEL); // Fill request
+               MT_BUG_ON(mt, mas_get_alloc_cnt(&mas) != i); // check request filled
+               for (j = i; j > 0; j--) { //Free the requests
+                       mn = mas_next_alloc(&mas); // get the next node.
+                       MT_BUG_ON(mt, mn == NULL);
+                       ma_free(mn);
+               }
+               MT_BUG_ON(mt, mas_get_alloc_cnt(&mas) != 0);
+       }
+       for (int i = 1; i < 128; i++) {
+               int j;
+               MA_STATE(mas2, mt, 0, 0);
+
+               mas_node_cnt(&mas, i); // Request
+               mas_nomem(&mas, GFP_KERNEL); // Fill request
+               MT_BUG_ON(mt, mas_get_alloc_cnt(&mas) != i); // check request filled
+               for (j = 1; j <= i; j++) { // Move the allocations to mas2
+                       mn = mas_next_alloc(&mas); // get the next node.
+                       MT_BUG_ON(mt, mn == NULL);
+                       mas_push_node(&mas2, (struct maple_enode*)mn);
+                       MT_BUG_ON(mt, mas_get_alloc_cnt(&mas2) != j);
+               }
+               MT_BUG_ON(mt, mas_get_alloc_cnt(&mas) != 0);
+               MT_BUG_ON(mt, mas_get_alloc_cnt(&mas2) != i);
+
+               for (j = i; j > 0; j--) { //Free the requests
+                       MT_BUG_ON(mt, mas_get_alloc_cnt(&mas2) != j);
+                       mn = mas_next_alloc(&mas2); // get the next node.
+                       MT_BUG_ON(mt, mn == NULL);
+                       ma_free(mn);
+               }
+               MT_BUG_ON(mt, mas_get_alloc_cnt(&mas2) != 0);
+       }
+
+       mtree_unlock(mt);
+       mtree_destroy(mt);
+}
+static noinline void check_seq(struct maple_tree *mt, unsigned long max,
+               bool verbose)
+{
+       unsigned long i, j;
+
+       MT_BUG_ON(mt, !mtree_empty(mt));
+
+       for (i = 0; i <= max; i++) {
+               MT_BUG_ON(mt, mtree_insert_index(mt, i, GFP_KERNEL));
+               for (j = 0; j <= i; j++)
+                       check_index_load(mt, j);
+
+               check_load(mt, i + 1, NULL);
+       }
+       if (verbose) {
+               rcu_barrier();
+               mt_dump(mt);
+               pr_info(" seq test of 0-%lu used %luK in %d allocations\n",
+                       max, mt_get_alloc_size()/1024, nr_allocated);
+       }
+}
+
+static noinline void check_lb_not_empty(struct maple_tree *mt)
+{
+       unsigned long i, j;
+       unsigned long huge = 4000UL * 1000 * 1000;
+
+
+       i = huge;
+       while (i > 4096) {
+               check_insert(mt, i, (void *) i);
+               for (j = huge; j >= i; j /= 2) {
+                       check_load(mt, j-1, NULL);
+                       check_load(mt, j, (void *) j);
+                       check_load(mt, j+1, NULL);
+               }
+               i /= 2;
+       }
+       mtree_destroy(mt);
+
+}
+static noinline void check_lower_bound_split(struct maple_tree *mt)
+{
+       MT_BUG_ON(mt, !mtree_empty(mt));
+       check_lb_not_empty(mt);
+}
+static noinline void check_upper_bound_split(struct maple_tree *mt)
+{
+       unsigned long i, j;
+       unsigned long huge = 4000UL * 1000 * 1000;
+
+       MT_BUG_ON(mt, !mtree_empty(mt));
+
+       i = 4096;
+       while (i < huge) {
+               check_insert(mt, i, (void *) i);
+               for (j = i; j >= huge; j *= 2) {
+                       check_load(mt, j-1, NULL);
+                       check_load(mt, j, (void *) j);
+                       check_load(mt, j+1, NULL);
+               }
+               i *= 2;
+       }
+       mtree_destroy(mt);
+}
+static noinline void check_mid_split(struct maple_tree *mt)
+{
+       unsigned long huge = 8000UL * 1000 * 1000;
+
+       check_insert(mt, huge, (void *) huge);
+       check_insert(mt, 0, xa_mk_value(0) );
+       check_lb_not_empty(mt);
+}
+
+static noinline void check_find(struct maple_tree *mt)
+{
+       unsigned long val = 0;
+       unsigned long count = 20;
+       unsigned long max;
+       unsigned long last = 0, index = 0;
+       void *entry, *entry2;
+
+       MA_STATE(mas, mt, 0, 0);
+
+       // Insert 0.
+       MT_BUG_ON(mt, mtree_insert_index(mt, val++, GFP_KERNEL));
+
+       for (int i = 0; i <= count; i++) {
+               if (val != 64)
+                       MT_BUG_ON(mt, mtree_insert_index(mt, val, GFP_KERNEL));
+               else
+                       MT_BUG_ON(mt, mtree_insert(mt, val,
+                               XA_ZERO_ENTRY, GFP_KERNEL));
+
+               val <<= 2;
+       }
+
+       val = 0;
+       mas_reset(&mas);
+       mas.index = val;
+
+       while ((entry = mas_find(&mas, 268435456)) != NULL) {
+               if (val != 64)
+                       MT_BUG_ON(mt, xa_mk_value(val) != entry);
+               else
+                       MT_BUG_ON(mt, entry != XA_ZERO_ENTRY);
+
+               val <<= 2;
+               // For zero check.
+               if (!val)
+                       val = 1;
+       }
+
+       val = 0;
+       mas_reset(&mas);
+       mas.index = val;
+       mas_for_each(&mas, entry, ULONG_MAX) {
+               if (val != 64)
+                       MT_BUG_ON(mt, xa_mk_value(val) != entry);
+               else
+                       MT_BUG_ON(mt, entry != XA_ZERO_ENTRY);
+               val <<= 2;
+               // For zero check.
+               if (!val)
+                       val = 1;
+       }
+
+       /* Test mas_pause */
+       val = 0;
+       mas_set(&mas, val);
+       mas_lock(&mas);
+       mas_for_each(&mas, entry, ULONG_MAX) {
+               if (val != 64)
+                       MT_BUG_ON(mt, xa_mk_value(val) != entry);
+               else
+                       MT_BUG_ON(mt, entry != XA_ZERO_ENTRY);
+               val <<= 2;
+               // For zero check.
+               if (!val)
+                       val = 1;
+
+               mas_pause(&mas);
+               mas_unlock(&mas);
+               mas_lock(&mas);
+       }
+       mas_unlock(&mas);
+
+       val = 0;
+       max = 300; // A value big enough to include XA_ZERO_ENTRY at 64.
+       mt_for_each(mt, entry, index, max) {
+               MT_BUG_ON(mt, xa_mk_value(val) != entry);
+               val <<= 2;
+               if (val == 64) // Skip zero entry.
+                       val <<= 2;
+               // For zero check.
+               if (!val)
+                       val = 1;
+       }
+
+       val = 0;
+       max = 0;
+       index = 0;
+       MT_BUG_ON(mt, mtree_insert_index(mt, ULONG_MAX, GFP_KERNEL));
+       mt_for_each(mt, entry, index, ULONG_MAX) {
+               if (val == 4398046511104)
+                       MT_BUG_ON(mt, entry !=
+                                       xa_mk_value(ULONG_MAX & LONG_MAX));
+               else
+                       MT_BUG_ON(mt, xa_mk_value(val) != entry);
+               val <<= 2;
+               if (val == 64) // Skip zero entry.
+                       val <<= 2;
+               // For zero check.
+               if (!val)
+                       val = 1;
+               max++;
+               MT_BUG_ON(mt, max > 25);
+       }
+       mtree_erase_index(mt, ULONG_MAX);
+
+       mas_reset(&mas);
+       index = 17;
+       entry = mt_find(mt, &index, 512);
+       MT_BUG_ON(mt, xa_mk_value(256) != entry);
+
+       mas_reset(&mas);
+       index = 17;
+       entry = mt_find(mt, &index, 20);
+       MT_BUG_ON(mt, entry != NULL);
+
+
+       // Range check..
+       // Insert ULONG_MAX
+       MT_BUG_ON(mt, mtree_insert_index(mt, ULONG_MAX, GFP_KERNEL));
+
+       val = 0;
+       mas_set(&mas, 0);
+       mas_reset(&mas);
+       mas_lock(&mas);
+       mas_for_each(&mas, entry, ULONG_MAX) {
+               if (val == 64)
+                       MT_BUG_ON(mt, entry != XA_ZERO_ENTRY);
+               else if (val == 4398046511104)
+                       MT_BUG_ON(mt, entry != xa_mk_value(ULONG_MAX & LONG_MAX));
+               else
+                       MT_BUG_ON(mt, xa_mk_value(val) != entry);
+               val <<= 2;
+
+               // For zero check.
+               if (!val)
+                       val = 1;
+               mas_pause(&mas);
+               mas_unlock(&mas);
+               mas_lock(&mas);
+       }
+       mas_unlock(&mas);
+
+       /* Find last value.
+        * 1. get the expected value, leveraging the existence of an end entry
+        * 2. delete end entry
+        * 3. find the last value but searching for ULONG_MAX and then using
+        * prev
+        *
+        */
+       // First, get the expected result.
+       mas_lock(&mas);
+       mas_reset(&mas);
+       mas.index = ULONG_MAX; // start at max..
+       entry = mas_find(&mas, ULONG_MAX);
+       entry = mas_prev(&mas, 0);
+       index = mas.index;
+       last = mas.last;
+
+       // Erase the last entry.
+       mas_reset(&mas);
+       mas.index = ULONG_MAX;
+       mas.last = ULONG_MAX;
+       mas_erase(&mas);
+
+       // Get the previous value from MAS_START
+       mas_reset(&mas);
+       entry2 = mas_prev(&mas, 0);
+
+       // Check results.
+       MT_BUG_ON(mt, entry != entry2);
+       MT_BUG_ON(mt, index != mas.index);
+       MT_BUG_ON(mt, last != mas.last);
+       mas_unlock(&mas);
+       mtree_destroy(mt);
+}
+
+static noinline void check_find_2(struct maple_tree *mt)
+{
+       unsigned long i, j;
+       void *entry;
+       MA_STATE(mas, mt, 0, 0);
+
+       rcu_read_lock();
+       mas_for_each(&mas, entry, ULONG_MAX)
+               MT_BUG_ON(mt, true);
+       rcu_read_unlock();
+
+       for (i = 0; i < 256; i++) {
+               mtree_insert_index(mt, i, GFP_KERNEL);
+               j = 0;
+               mas_set(&mas, 0);
+               rcu_read_lock();
+               mas_for_each(&mas, entry, ULONG_MAX) {
+                       MT_BUG_ON(mt, entry != xa_mk_value(j));
+                       j++;
+               }
+               rcu_read_unlock();
+               MT_BUG_ON(mt, j != i + 1);
+       }
+
+       for (i = 0; i < 256; i++) {
+               mtree_erase_index(mt, i);
+               j = i + 1;
+               mas_set(&mas, 0);
+               rcu_read_lock();
+               mas_for_each(&mas, entry, ULONG_MAX) {
+                       if (mas_retry(&mas, entry))
+                               continue;
+                       MT_BUG_ON(mt, entry != xa_mk_value(j));
+                       j++;
+               }
+               rcu_read_unlock();
+               MT_BUG_ON(mt, j != 256);
+       }
+
+       //MT_BUG_ON(mt, !mtree_empty(mt));
+}
+
+#define erase_ptr(i) entry[i%2]
+#define erase_check_load(mt, i) check_load(mt, set[i], entry[i%2])
+#define erase_check_insert(mt, i) check_insert(mt, set[i], entry[i%2])
+#define erase_check_erase(mt, i) check_erase(mt, set[i], entry[i%2])
+
+static noinline void check_erase_testset(struct maple_tree *mt)
+{
+       unsigned long set[] = { 5015, 5014, 5017, 25, 1000,
+                               1001, 1002, 1003, 1005, 0,
+                               6003, 6002, 6008, 6012, 6015,
+                               7003, 7002, 7008, 7012, 7015,
+                               8003, 8002, 8008, 8012, 8015,
+                               9003, 9002, 9008, 9012, 9015,
+                               10003, 10002, 10008, 10012, 10015,
+                               11003, 11002, 11008, 11012, 11015,
+                               12003, 12002, 12008, 12012, 12015,
+                               13003, 13002, 13008, 13012, 13015,
+                               14003, 14002, 14008, 14012, 14015,
+                               15003, 15002, 15008, 15012, 15015,
+                             };
+
+
+       void *ptr = &set;
+       void *entry[2] = { ptr, mt };
+       void *root_node;
+
+
+       for (int i = 0; i < 4; i++)
+               erase_check_insert(mt, i);
+       for (int i = 0; i < 4; i++)
+               erase_check_load(mt, i);
+
+       mt_set_non_kernel(2);
+       erase_check_erase(mt, 1);
+       erase_check_load(mt, 0);
+       check_load(mt, set[1], NULL);
+       for (int i = 2; i < 4; i++)
+               erase_check_load(mt, i);
+
+
+       erase_check_erase(mt, 2);
+       erase_check_load(mt, 0);
+       check_load(mt, set[1], NULL);
+       check_load(mt, set[2], NULL);
+
+       erase_check_insert(mt, 1);
+       erase_check_insert(mt, 2);
+
+       for (int i = 0; i < 4; i++)
+               erase_check_load(mt, i);
+
+       // Check erase and load without an allocation.
+       erase_check_load(mt, 3);
+       erase_check_erase(mt, 1);
+       erase_check_load(mt, 0);
+       check_load(mt, set[1], NULL);
+       for (int i = 2; i < 4; i++)
+               erase_check_load(mt, i);
+
+       // Set the newly erased node.  This will produce a different allocated
+       // node to avoid busy slots.
+       root_node = mt->ma_root;
+       erase_check_insert(mt, 1);
+
+       erase_check_load(mt, 0);
+       check_load(mt, 5016, NULL);
+       erase_check_load(mt, 1);
+       check_load(mt, 5013, NULL);
+       erase_check_load(mt, 2);
+       check_load(mt, 5018, NULL);
+       erase_check_load(mt, 3);
+
+       erase_check_erase(mt, 2); // erase 5017 to check append
+       erase_check_load(mt, 0);
+       check_load(mt, 5016, NULL);
+       erase_check_load(mt, 1);
+       check_load(mt, 5013, NULL);
+       check_load(mt, set[2], NULL);
+       check_load(mt, 5018, NULL);
+
+       erase_check_load(mt, 3);
+
+       root_node = mt->ma_root;
+       erase_check_insert(mt, 2);
+
+       erase_check_load(mt, 0);
+       check_load(mt, 5016, NULL);
+       erase_check_load(mt, 1);
+       check_load(mt, 5013, NULL);
+       erase_check_load(mt, 2);
+       check_load(mt, 5018, NULL);
+       erase_check_load(mt, 3);
+
+       mt_set_non_kernel(1);
+       erase_check_erase(mt, 2); // erase 5017 to check append
+       erase_check_load(mt, 0);
+       check_load(mt, 5016, NULL);
+       check_load(mt, set[2], NULL);
+       erase_check_erase(mt, 0); // erase 5015 to check append
+       check_load(mt, set[0], NULL);
+       check_load(mt, 5016, NULL);
+       erase_check_insert(mt, 4); // 1000 < Should not split.
+       check_load(mt, set[0], NULL);
+       check_load(mt, 5016, NULL);
+       erase_check_load(mt, 1);
+       check_load(mt, 5013, NULL);
+       check_load(mt, set[2], NULL);
+       check_load(mt, 5018, NULL);
+       erase_check_load(mt, 4);
+       check_load(mt, 999, NULL);
+       check_load(mt, 1001, NULL);
+       erase_check_load(mt, 4);
+       // Should be a new node.
+       MT_BUG_ON(mt, root_node == mt->ma_root);
+       // Should not have split.
+       MT_BUG_ON(mt, !mte_is_leaf(mt->ma_root));
+
+
+       // Coalesce testing
+       erase_check_insert(mt, 0);
+       erase_check_insert(mt, 2);
+
+       for (int i = 5; i < 25; i++) {
+               erase_check_insert(mt, i);
+               for (int j = i; j >= 0; j--) {
+                       erase_check_load(mt, j);
+               }
+       }
+
+       erase_check_erase(mt, 14); //6015
+       for (int i = 0; i < 25; i++) {
+               if (i == 14)
+                       check_load(mt, set[i], NULL);
+               else
+                       erase_check_load(mt, i);
+       }
+       erase_check_erase(mt, 16); //7002
+       for (int i = 0; i < 25; i++) {
+               if (i == 16 || i == 14)
+                       check_load(mt, set[i], NULL);
+               else
+                       erase_check_load(mt, i);
+       }
+
+
+       mt_set_non_kernel(1);
+       erase_check_erase(mt, 13); //6012
+       for (int i = 0; i < 25; i++) {
+               if (i == 16 || i == 14 || i == 13)
+                       check_load(mt, set[i], NULL);
+               else
+                       erase_check_load(mt, i);
+       }
+
+       erase_check_erase(mt, 15); //7003
+       for (int i = 0; i < 25; i++) {
+               if (i <= 16 && i >= 13)
+                       check_load(mt, set[i], NULL);
+               else
+                       erase_check_load(mt, i);
+       }
+
+       mt_set_non_kernel(2);
+       erase_check_erase(mt, 17); //7008 *should* cause coalesce.
+       for (int i = 0; i < 25; i++) {
+               if (i <= 17 && i >= 13)
+                       check_load(mt, set[i], NULL);
+               else
+                       erase_check_load(mt, i);
+       }
+
+       erase_check_erase(mt, 18); //7012
+       for (int i = 0; i < 25; i++) {
+               if (i <= 18 && i >= 13)
+                       check_load(mt, set[i], NULL);
+               else
+                       erase_check_load(mt, i);
+       }
+
+       mt_set_non_kernel(2);
+       erase_check_erase(mt, 19); //7015
+       for (int i = 0; i < 25; i++) {
+               if (i <= 19 && i >= 13)
+                       check_load(mt, set[i], NULL);
+               else
+                       erase_check_load(mt, i);
+       }
+
+       erase_check_erase(mt, 20); //8003
+       for (int i = 0; i < 25; i++) {
+               if (i <= 20 && i >= 13)
+                       check_load(mt, set[i], NULL);
+               else
+                       erase_check_load(mt, i);
+       }
+
+       mt_set_non_kernel(2);
+       erase_check_erase(mt, 21); //8002
+       for (int i = 0; i < 25; i++) {
+               if (i <= 21 && i >= 13)
+                       check_load(mt, set[i], NULL);
+               else
+                       erase_check_load(mt, i);
+       }
+
+       mt_set_non_kernel(1);
+       erase_check_erase(mt, 22); //8008
+       for (int i = 0; i < 25; i++) {
+               if (i <= 22 && i >= 13)
+                       check_load(mt, set[i], NULL);
+               else
+                       erase_check_load(mt, i);
+       }
+       for (int i = 23; i < 25; i++) {
+               erase_check_erase(mt, i);
+       }
+       for (int i = 0; i < 25; i++) {
+               if (i <= 25 && i >= 13)
+                       check_load(mt, set[i], NULL);
+               else
+                       erase_check_load(mt, i);
+       }
+
+       // Shrinking tree test.
+       //
+
+       for (int i = 13; i < ARRAY_SIZE(set); i++)
+               erase_check_insert(mt, i);
+
+       mt_set_non_kernel(99);
+       for (int i = 18; i < ARRAY_SIZE(set); i++) {
+               erase_check_erase(mt, i);
+               for (int j = 0; j < ARRAY_SIZE(set); j++) {
+                       if (j < 18 || j > i)
+                               erase_check_load(mt, j);
+                       else
+                               check_load(mt, set[j], NULL);
+               }
+       }
+       mt_set_non_kernel(35);
+       for (int i = 0; i < 18; i++) {
+               erase_check_erase(mt, i);
+               for (int j = 0; j < ARRAY_SIZE(set); j++) {
+                       if (j < 18 && j > i)
+                               erase_check_load(mt, j);
+                       else
+                               check_load(mt, set[j], NULL);
+               }
+       }
+       erase_check_insert(mt, 8);
+       erase_check_insert(mt, 9);
+       erase_check_erase(mt, 8);
+}
+
+#define erase_check_store_range(mt, a, i, ptr) mtree_test_store_range(mt, \
+                                               a[(i)], a[(i + 1)], ptr)
+#define STORE 1
+#define SNULL 2
+#define ERASE 3
+#define ec_type_str(x) \
+       ( ((x) == STORE) ? \
+         "STORE" : \
+                 (((x) == SNULL) ? \
+                 "SNULL" : "ERASE") \
+       )
+#define check_erase2_debug 0
+void *mas_next(struct ma_state *mas, unsigned long max);
+static noinline void check_erase2_testset(struct maple_tree *mt,
+               unsigned long *set, unsigned long size)
+{
+       int entry_cnt = 0;
+       int check = 0;
+       void *foo;
+       unsigned long addr = 0;
+       MA_STATE(mas, mt, 0, 0);
+       void *s_entry = NULL, *e_entry = NULL;
+
+       for (int i = 0; i < size; i += 3) {
+               unsigned long s_min, s_max;
+               unsigned long e_min, e_max;
+               void *value = NULL;
+               MA_STATE(mas_start, mt, set[i+1], set[i+1]);
+               MA_STATE(mas_end, mt, set[i+2], set[i+2]);
+               mt_set_non_kernel(127);
+#if check_erase2_debug
+               pr_err("%s: %d %s %lu - %lu\n", __func__, i,
+                               ec_type_str(set[i]),
+                               set[i+1], set[i+2]);
+#endif
+
+               s_entry = mas_range_load(&mas_start, &s_min, &s_max, false);
+               e_entry = mas_range_load(&mas_end, &e_min, &e_max, false);
+
+               switch (set[i]) {
+               case SNULL:
+                       if ((s_min == set[i+1]) && (s_max == set[i+2]))
+                               entry_cnt--;
+
+                       erase_check_store_range(mt, set, i + 1, value);
+                       break;
+               case STORE:
+                       value = xa_mk_value(set[i + 1]);
+                       if ((s_min == e_min) && (s_max == e_max)) {
+                               if (!entry_cnt)
+                                       entry_cnt++;
+                               else if (!mt_is_empty(s_entry)) {
+                                       if (e_max > mas_end.last) {
+                                               entry_cnt++;
+                                       }
+                                       if (s_min < mas_start.index) {
+                                               entry_cnt++;
+                                       }
+                               } else {
+                                       entry_cnt++;
+                               }
+                       } else {
+                               unsigned char cnt = 0;
+                               // check start
+                               if (s_entry && (s_min == mas_start.index))
+                                       cnt++;
+
+                               // check end
+                               if (e_entry && (e_max == mas_end.last))
+                                       cnt++;
+                               // count slots
+                               s_entry = mas_next(&mas_start,
+                                               set[i+2]);
+                               while (!mas_is_none(&mas_start) &&
+                                      (mas_start.last != e_max) ) {
+                                       if (s_entry) {
+                                               cnt++;
+                                       }
+                                       s_entry = mas_next(&mas_start,
+                                                       set[i+2]);
+                               }
+                               entry_cnt = entry_cnt - cnt + 1;
+                       }
+
+                       erase_check_store_range(mt, set, i + 1, value);
+                       break;
+               case ERASE:
+                       check_erase(mt, set[i+1], xa_mk_value(set[i+1]));
+                       entry_cnt--;
+                       break;
+               }
+               mt_validate(mt);
+#if check_erase2_debug > 1
+               mt_dump(mt);
+#endif
+#if check_erase2_debug
+               pr_err("Done\n");
+#endif
+
+               check = 0;
+               addr = 0;
+               mt_for_each(mt, foo, addr, ULONG_MAX) {
+#if check_erase2_debug > 1
+                       pr_err("mt: %lu -> %p\n", addr+1, foo);
+#endif
+                       check++;
+                       if (check > entry_cnt)
+                               break;
+               }
+
+#if check_erase2_debug > 1
+               pr_err("mt_for_each %d and  cnt %d\n", check, entry_cnt);
+#endif
+
+               MT_BUG_ON(mt, check != entry_cnt);
+
+               check = 0;
+               addr = 0;
+               mas_reset(&mas);
+               mas.index = 0;
+               rcu_read_lock();
+               mas_for_each(&mas, foo, ULONG_MAX) {
+                       if (mas_retry(&mas, foo)) {
+                               if (addr == mas.index) {
+                                       mt_dump(mas.tree);
+                                       pr_err("retry failed %lu - %lu\n",
+                                               mas.index, mas.last);
+                                       MT_BUG_ON(mt, 1);
+                               }
+                               addr = mas.index;
+                               continue;
+                       }
+#if check_erase2_debug > 1
+                       pr_err("mas: %lu -> %p\n", mas.index, foo);
+#endif
+                       check++;
+                       if (check > entry_cnt)
+                               break;
+               }
+               rcu_read_unlock();
+#if check_erase2_debug > 1
+               pr_err("mas_for_each %d and cnt %d\n", check, entry_cnt);
+#endif
+
+               MT_BUG_ON(mt, check != entry_cnt);
+
+               MT_BUG_ON(mt, mtree_load(mas.tree, 0) != NULL);
+       }
+}
+
+
+// These tests were pulled from kvm tests.
+static noinline void check_erase2_sets(struct maple_tree *mt)
+{
+       void *entry;
+       unsigned long start = 0;
+       unsigned long set[] = {
+STORE, 140737488347136, 140737488351231,
+STORE, 140721266458624, 140737488351231,
+ERASE, 140721266458624, 140737488351231,
+STORE, 140721266458624, 140721266462719,
+STORE, 94735788949504, 94735789121535,
+ERASE, 94735788949504, 94735789121535,
+STORE, 94735788949504, 94735788965887,
+STORE, 94735788965888, 94735789121535,
+ERASE, 94735788965888, 94735789121535,
+STORE, 94735788965888, 94735789068287,
+STORE, 94735789068288, 94735789109247,
+STORE, 94735789109248, 94735789121535,
+STORE, 140253902692352, 140253902864383,
+ERASE, 140253902692352, 140253902864383,
+STORE, 140253902692352, 140253902696447,
+STORE, 140253902696448, 140253902864383,
+               };
+       unsigned long set2[] = {
+STORE, 140737488347136, 140737488351231,
+STORE, 140735933583360, 140737488351231,
+ERASE, 140735933583360, 140737488351231,
+STORE, 140735933583360, 140735933587455,
+STORE, 94811003260928, 94811003432959,
+ERASE, 94811003260928, 94811003432959,
+STORE, 94811003260928, 94811003277311,
+STORE, 94811003277312, 94811003432959,
+ERASE, 94811003277312, 94811003432959,
+STORE, 94811003277312, 94811003379711,
+STORE, 94811003379712, 94811003420671,
+STORE, 94811003420672, 94811003432959,
+STORE, 140277094653952, 140277094825983,
+ERASE, 140277094653952, 140277094825983,
+STORE, 140277094653952, 140277094658047,
+STORE, 140277094658048, 140277094825983,
+ERASE, 140277094658048, 140277094825983,
+STORE, 140277094658048, 140277094780927,
+STORE, 140277094780928, 140277094813695,
+STORE, 140277094813696, 140277094821887,
+STORE, 140277094821888, 140277094825983,
+STORE, 140735933906944, 140735933911039,
+       };
+       unsigned long set3[] = {
+STORE, 140737488347136, 140737488351231,
+STORE, 140735790264320, 140737488351231,
+ERASE, 140735790264320, 140737488351231,
+STORE, 140735790264320, 140735790268415,
+STORE, 94016597282816, 94016597454847,
+ERASE, 94016597282816, 94016597454847,
+STORE, 94016597282816, 94016597299199,
+STORE, 94016597299200, 94016597454847,
+ERASE, 94016597299200, 94016597454847,
+STORE, 94016597299200, 94016597401599,
+STORE, 94016597401600, 94016597442559,
+STORE, 94016597442560, 94016597454847,
+STORE, 140496959283200, 140496959455231,
+ERASE, 140496959283200, 140496959455231,
+STORE, 140496959283200, 140496959287295,
+STORE, 140496959287296, 140496959455231,
+ERASE, 140496959287296, 140496959455231,
+STORE, 140496959287296, 140496959410175,
+STORE, 140496959410176, 140496959442943,
+STORE, 140496959442944, 140496959451135,
+STORE, 140496959451136, 140496959455231,
+STORE, 140735791718400, 140735791722495,
+STORE, 140735791706112, 140735791718399,
+STORE, 47135835713536, 47135835721727,
+STORE, 47135835721728, 47135835729919,
+STORE, 47135835729920, 47135835893759,
+ERASE, 47135835729920, 47135835893759,
+STORE, 47135835729920, 47135835742207,
+STORE, 47135835742208, 47135835893759,
+STORE, 47135835840512, 47135835893759,
+STORE, 47135835742208, 47135835840511,
+ERASE, 47135835742208, 47135835840511,
+STORE, 47135835742208, 47135835840511,
+STORE, 47135835885568, 47135835893759,
+STORE, 47135835840512, 47135835885567,
+ERASE, 47135835840512, 47135835885567,
+STORE, 47135835840512, 47135835893759,
+ERASE, 47135835840512, 47135835893759,
+STORE, 47135835840512, 47135835885567,
+STORE, 47135835885568, 47135835893759,
+       };
+
+       unsigned long set4[] = {
+STORE, 140737488347136, 140737488351231,
+STORE, 140728251703296, 140737488351231,
+ERASE, 140728251703296, 140737488351231,
+STORE, 140728251703296, 140728251707391,
+STORE, 94668429205504, 94668429377535,
+ERASE, 94668429205504, 94668429377535,
+STORE, 94668429205504, 94668429221887,
+STORE, 94668429221888, 94668429377535,
+ERASE, 94668429221888, 94668429377535,
+STORE, 94668429221888, 94668429324287,
+STORE, 94668429324288, 94668429365247,
+STORE, 94668429365248, 94668429377535,
+STORE, 47646523273216, 47646523445247,
+ERASE, 47646523273216, 47646523445247,
+STORE, 47646523273216, 47646523277311,
+STORE, 47646523277312, 47646523445247,
+ERASE, 47646523277312, 47646523445247,
+STORE, 47646523277312, 47646523400191,
+       };
+
+       unsigned long set5[] = {
+STORE, 140737488347136, 140737488351231,
+STORE, 140726874062848, 140737488351231,
+ERASE, 140726874062848, 140737488351231,
+STORE, 140726874062848, 140726874066943,
+STORE, 94248892870656, 94248893042687,
+ERASE, 94248892870656, 94248893042687,
+STORE, 94248892870656, 94248892887039,
+STORE, 94248892887040, 94248893042687,
+ERASE, 94248892887040, 94248893042687,
+STORE, 94248892887040, 94248892989439,
+STORE, 94248892989440, 94248893030399,
+STORE, 94248893030400, 94248893042687,
+STORE, 47884786266112, 47884786438143,
+ERASE, 47884786266112, 47884786438143,
+STORE, 47884786266112, 47884786270207,
+STORE, 47884786270208, 47884786438143,
+ERASE, 47884786270208, 47884786438143,
+STORE, 47884786270208, 47884786393087,
+STORE, 47884786393088, 47884786425855,
+STORE, 47884786425856, 47884786434047,
+STORE, 47884786434048, 47884786438143,
+STORE, 140726874513408, 140726874517503,
+STORE, 140726874501120, 140726874513407,
+STORE, 47884786438144, 47884786446335,
+STORE, 47884786446336, 47884786454527,
+STORE, 47884786454528, 47884786618367,
+ERASE, 47884786454528, 47884786618367,
+STORE, 47884786454528, 47884786466815,
+STORE, 47884786466816, 47884786618367,
+STORE, 47884786565120, 47884786618367,
+STORE, 47884786466816, 47884786565119,
+ERASE, 47884786466816, 47884786565119,
+STORE, 47884786466816, 47884786565119,
+STORE, 47884786610176, 47884786618367,
+STORE, 47884786565120, 47884786610175,
+ERASE, 47884786565120, 47884786610175,
+STORE, 47884786565120, 47884786618367,
+ERASE, 47884786565120, 47884786618367,
+STORE, 47884786565120, 47884786610175,
+STORE, 47884786610176, 47884786618367,
+ERASE, 47884786610176, 47884786618367,
+STORE, 47884786610176, 47884786618367,
+STORE, 47884786618368, 47884789669887,
+STORE, 47884787163136, 47884789669887,
+STORE, 47884786618368, 47884787163135,
+ERASE, 47884787163136, 47884789669887,
+STORE, 47884787163136, 47884789448703,
+STORE, 47884789448704, 47884789669887,
+STORE, 47884788858880, 47884789448703,
+STORE, 47884787163136, 47884788858879,
+ERASE, 47884787163136, 47884788858879,
+STORE, 47884787163136, 47884788858879,
+STORE, 47884789444608, 47884789448703,
+STORE, 47884788858880, 47884789444607,
+ERASE, 47884788858880, 47884789444607,
+STORE, 47884788858880, 47884789444607,
+STORE, 47884789653504, 47884789669887,
+STORE, 47884789448704, 47884789653503,
+ERASE, 47884789448704, 47884789653503,
+STORE, 47884789448704, 47884789653503,
+ERASE, 47884789653504, 47884789669887,
+STORE, 47884789653504, 47884789669887,
+STORE, 47884789669888, 47884791508991,
+STORE, 47884789809152, 47884791508991,
+STORE, 47884789669888, 47884789809151,
+ERASE, 47884789809152, 47884791508991,
+STORE, 47884789809152, 47884791468031,
+STORE, 47884791468032, 47884791508991,
+STORE, 47884791152640, 47884791468031,
+STORE, 47884789809152, 47884791152639,
+ERASE, 47884789809152, 47884791152639,
+STORE, 47884789809152, 47884791152639,
+STORE, 47884791463936, 47884791468031,
+STORE, 47884791152640, 47884791463935,
+ERASE, 47884791152640, 47884791463935,
+STORE, 47884791152640, 47884791463935,
+STORE, 47884791492608, 47884791508991,
+STORE, 47884791468032, 47884791492607,
+ERASE, 47884791468032, 47884791492607,
+STORE, 47884791468032, 47884791492607,
+ERASE, 47884791492608, 47884791508991,
+STORE, 47884791492608, 47884791508991,
+STORE, 47884791508992, 47884791644159,
+ERASE, 47884791508992, 47884791644159,
+STORE, 47884791508992, 47884791533567,
+STORE, 47884791533568, 47884791644159,
+STORE, 47884791595008, 47884791644159,
+STORE, 47884791533568, 47884791595007,
+ERASE, 47884791533568, 47884791595007,
+STORE, 47884791533568, 47884791595007,
+STORE, 47884791619584, 47884791644159,
+STORE, 47884791595008, 47884791619583,
+ERASE, 47884791595008, 47884791619583,
+STORE, 47884791595008, 47884791644159,
+ERASE, 47884791595008, 47884791644159,
+STORE, 47884791595008, 47884791619583,
+STORE, 47884791619584, 47884791644159,
+STORE, 47884791627776, 47884791644159,
+STORE, 47884791619584, 47884791627775,
+ERASE, 47884791619584, 47884791627775,
+STORE, 47884791619584, 47884791627775,
+ERASE, 47884791627776, 47884791644159,
+STORE, 47884791627776, 47884791644159,
+STORE, 47884791644160, 47884791664639,
+ERASE, 47884791644160, 47884791664639,
+STORE, 47884791644160, 47884791648255,
+STORE, 47884791648256, 47884791664639,
+STORE, 47884791652352, 47884791664639,
+STORE, 47884791648256, 47884791652351,
+ERASE, 47884791648256, 47884791652351,
+STORE, 47884791648256, 47884791652351,
+STORE, 47884791656448, 47884791664639,
+STORE, 47884791652352, 47884791656447,
+ERASE, 47884791652352, 47884791656447,
+STORE, 47884791652352, 47884791664639,
+ERASE, 47884791652352, 47884791664639,
+STORE, 47884791652352, 47884791656447,
+STORE, 47884791656448, 47884791664639,
+ERASE, 47884791656448, 47884791664639,
+STORE, 47884791656448, 47884791664639,
+STORE, 47884791664640, 47884791672831,
+ERASE, 47884791468032, 47884791492607,
+STORE, 47884791468032, 47884791484415,
+STORE, 47884791484416, 47884791492607,
+ERASE, 47884791656448, 47884791664639,
+STORE, 47884791656448, 47884791660543,
+STORE, 47884791660544, 47884791664639,
+ERASE, 47884791619584, 47884791627775,
+STORE, 47884791619584, 47884791623679,
+STORE, 47884791623680, 47884791627775,
+       };
+
+       unsigned long set6[] = {
+STORE, 140737488347136, 140737488351231,
+STORE, 140722999021568, 140737488351231,
+ERASE, 140722999021568, 140737488351231,
+STORE, 140722999021568, 140722999025663,
+STORE, 94901500268544, 94901500440575,
+ERASE, 94901500268544, 94901500440575,
+STORE, 94901500268544, 94901500284927,
+STORE, 94901500284928, 94901500440575,
+ERASE, 94901500284928, 94901500440575,
+STORE, 94901500284928, 94901500387327,
+STORE, 94901500387328, 94901500428287,
+STORE, 94901500428288, 94901500440575,
+STORE, 47430426660864, 47430426832895,
+ERASE, 47430426660864, 47430426832895,
+STORE, 47430426660864, 47430426664959,
+STORE, 47430426664960, 47430426832895,
+ERASE, 47430426664960, 47430426832895,
+STORE, 47430426664960, 47430426787839,
+STORE, 47430426787840, 47430426820607,
+STORE, 47430426820608, 47430426828799,
+STORE, 47430426828800, 47430426832895,
+STORE, 140722999115776, 140722999119871,
+STORE, 140722999103488, 140722999115775,
+STORE, 47430426832896, 47430426841087,
+STORE, 47430426841088, 47430426849279,
+STORE, 47430426849280, 47430427013119,
+ERASE, 47430426849280, 47430427013119,
+STORE, 47430426849280, 47430426861567,
+STORE, 47430426861568, 47430427013119,
+STORE, 47430426959872, 47430427013119,
+STORE, 47430426861568, 47430426959871,
+ERASE, 47430426861568, 47430426959871,
+STORE, 47430426861568, 47430426959871,
+STORE, 47430427004928, 47430427013119,
+STORE, 47430426959872, 47430427004927,
+ERASE, 47430426959872, 47430427004927,
+STORE, 47430426959872, 47430427013119,
+ERASE, 47430426959872, 47430427013119,
+STORE, 47430426959872, 47430427004927,
+STORE, 47430427004928, 47430427013119,
+ERASE, 47430427004928, 47430427013119,
+STORE, 47430427004928, 47430427013119,
+STORE, 47430427013120, 47430430064639,
+STORE, 47430427557888, 47430430064639,
+STORE, 47430427013120, 47430427557887,
+ERASE, 47430427557888, 47430430064639,
+STORE, 47430427557888, 47430429843455,
+STORE, 47430429843456, 47430430064639,
+STORE, 47430429253632, 47430429843455,
+STORE, 47430427557888, 47430429253631,
+ERASE, 47430427557888, 47430429253631,
+STORE, 47430427557888, 47430429253631,
+STORE, 47430429839360, 47430429843455,
+STORE, 47430429253632, 47430429839359,
+ERASE, 47430429253632, 47430429839359,
+STORE, 47430429253632, 47430429839359,
+STORE, 47430430048256, 47430430064639,
+STORE, 47430429843456, 47430430048255,
+ERASE, 47430429843456, 47430430048255,
+STORE, 47430429843456, 47430430048255,
+ERASE, 47430430048256, 47430430064639,
+STORE, 47430430048256, 47430430064639,
+STORE, 47430430064640, 47430431903743,
+STORE, 47430430203904, 47430431903743,
+STORE, 47430430064640, 47430430203903,
+ERASE, 47430430203904, 47430431903743,
+STORE, 47430430203904, 47430431862783,
+STORE, 47430431862784, 47430431903743,
+STORE, 47430431547392, 47430431862783,
+STORE, 47430430203904, 47430431547391,
+ERASE, 47430430203904, 47430431547391,
+STORE, 47430430203904, 47430431547391,
+STORE, 47430431858688, 47430431862783,
+STORE, 47430431547392, 47430431858687,
+ERASE, 47430431547392, 47430431858687,
+STORE, 47430431547392, 47430431858687,
+STORE, 47430431887360, 47430431903743,
+STORE, 47430431862784, 47430431887359,
+ERASE, 47430431862784, 47430431887359,
+STORE, 47430431862784, 47430431887359,
+ERASE, 47430431887360, 47430431903743,
+STORE, 47430431887360, 47430431903743,
+STORE, 47430431903744, 47430432038911,
+ERASE, 47430431903744, 47430432038911,
+STORE, 47430431903744, 47430431928319,
+STORE, 47430431928320, 47430432038911,
+STORE, 47430431989760, 47430432038911,
+STORE, 47430431928320, 47430431989759,
+ERASE, 47430431928320, 47430431989759,
+STORE, 47430431928320, 47430431989759,
+STORE, 47430432014336, 47430432038911,
+STORE, 47430431989760, 47430432014335,
+ERASE, 47430431989760, 47430432014335,
+STORE, 47430431989760, 47430432038911,
+ERASE, 47430431989760, 47430432038911,
+STORE, 47430431989760, 47430432014335,
+STORE, 47430432014336, 47430432038911,
+STORE, 47430432022528, 47430432038911,
+STORE, 47430432014336, 47430432022527,
+ERASE, 47430432014336, 47430432022527,
+STORE, 47430432014336, 47430432022527,
+ERASE, 47430432022528, 47430432038911,
+STORE, 47430432022528, 47430432038911,
+STORE, 47430432038912, 47430432059391,
+ERASE, 47430432038912, 47430432059391,
+STORE, 47430432038912, 47430432043007,
+STORE, 47430432043008, 47430432059391,
+STORE, 47430432047104, 47430432059391,
+STORE, 47430432043008, 47430432047103,
+ERASE, 47430432043008, 47430432047103,
+STORE, 47430432043008, 47430432047103,
+STORE, 47430432051200, 47430432059391,
+STORE, 47430432047104, 47430432051199,
+ERASE, 47430432047104, 47430432051199,
+STORE, 47430432047104, 47430432059391,
+ERASE, 47430432047104, 47430432059391,
+STORE, 47430432047104, 47430432051199,
+STORE, 47430432051200, 47430432059391,
+ERASE, 47430432051200, 47430432059391,
+STORE, 47430432051200, 47430432059391,
+STORE, 47430432059392, 47430432067583,
+ERASE, 47430431862784, 47430431887359,
+STORE, 47430431862784, 47430431879167,
+STORE, 47430431879168, 47430431887359,
+ERASE, 47430432051200, 47430432059391,
+STORE, 47430432051200, 47430432055295,
+STORE, 47430432055296, 47430432059391,
+ERASE, 47430432014336, 47430432022527,
+STORE, 47430432014336, 47430432018431,
+STORE, 47430432018432, 47430432022527,
+       };
+       unsigned long set7[] = {
+STORE, 140737488347136, 140737488351231,
+STORE, 140729808330752, 140737488351231,
+ERASE, 140729808330752, 140737488351231,
+STORE, 140729808330752, 140729808334847,
+STORE, 94629632020480, 94629632192511,
+ERASE, 94629632020480, 94629632192511,
+STORE, 94629632020480, 94629632036863,
+STORE, 94629632036864, 94629632192511,
+ERASE, 94629632036864, 94629632192511,
+STORE, 94629632036864, 94629632139263,
+STORE, 94629632139264, 94629632180223,
+STORE, 94629632180224, 94629632192511,
+STORE, 47439981776896, 47439981948927,
+ERASE, 47439981776896, 47439981948927,
+STORE, 47439981776896, 47439981780991,
+STORE, 47439981780992, 47439981948927,
+ERASE, 47439981780992, 47439981948927,
+STORE, 47439981780992, 47439981903871,
+STORE, 47439981903872, 47439981936639,
+STORE, 47439981936640, 47439981944831,
+STORE, 47439981944832, 47439981948927,
+STORE, 140729808474112, 140729808478207,
+STORE, 140729808461824, 140729808474111,
+STORE, 47439981948928, 47439981957119,
+STORE, 47439981957120, 47439981965311,
+STORE, 47439981965312, 47439982129151,
+ERASE, 47439981965312, 47439982129151,
+STORE, 47439981965312, 47439981977599,
+STORE, 47439981977600, 47439982129151,
+STORE, 47439982075904, 47439982129151,
+STORE, 47439981977600, 47439982075903,
+ERASE, 47439981977600, 47439982075903,
+STORE, 47439981977600, 47439982075903,
+STORE, 47439982120960, 47439982129151,
+STORE, 47439982075904, 47439982120959,
+ERASE, 47439982075904, 47439982120959,
+STORE, 47439982075904, 47439982129151,
+ERASE, 47439982075904, 47439982129151,
+STORE, 47439982075904, 47439982120959,
+STORE, 47439982120960, 47439982129151,
+ERASE, 47439982120960, 47439982129151,
+STORE, 47439982120960, 47439982129151,
+STORE, 47439982129152, 47439985180671,
+STORE, 47439982673920, 47439985180671,
+STORE, 47439982129152, 47439982673919,
+ERASE, 47439982673920, 47439985180671,
+STORE, 47439982673920, 47439984959487,
+STORE, 47439984959488, 47439985180671,
+STORE, 47439984369664, 47439984959487,
+STORE, 47439982673920, 47439984369663,
+ERASE, 47439982673920, 47439984369663,
+STORE, 47439982673920, 47439984369663,
+STORE, 47439984955392, 47439984959487,
+STORE, 47439984369664, 47439984955391,
+ERASE, 47439984369664, 47439984955391,
+STORE, 47439984369664, 47439984955391,
+STORE, 47439985164288, 47439985180671,
+STORE, 47439984959488, 47439985164287,
+ERASE, 47439984959488, 47439985164287,
+STORE, 47439984959488, 47439985164287,
+ERASE, 47439985164288, 47439985180671,
+STORE, 47439985164288, 47439985180671,
+STORE, 47439985180672, 47439987019775,
+STORE, 47439985319936, 47439987019775,
+STORE, 47439985180672, 47439985319935,
+ERASE, 47439985319936, 47439987019775,
+STORE, 47439985319936, 47439986978815,
+STORE, 47439986978816, 47439987019775,
+STORE, 47439986663424, 47439986978815,
+STORE, 47439985319936, 47439986663423,
+ERASE, 47439985319936, 47439986663423,
+STORE, 47439985319936, 47439986663423,
+STORE, 47439986974720, 47439986978815,
+STORE, 47439986663424, 47439986974719,
+ERASE, 47439986663424, 47439986974719,
+STORE, 47439986663424, 47439986974719,
+STORE, 47439987003392, 47439987019775,
+STORE, 47439986978816, 47439987003391,
+ERASE, 47439986978816, 47439987003391,
+STORE, 47439986978816, 47439987003391,
+ERASE, 47439987003392, 47439987019775,
+STORE, 47439987003392, 47439987019775,
+STORE, 47439987019776, 47439987154943,
+ERASE, 47439987019776, 47439987154943,
+STORE, 47439987019776, 47439987044351,
+STORE, 47439987044352, 47439987154943,
+STORE, 47439987105792, 47439987154943,
+STORE, 47439987044352, 47439987105791,
+ERASE, 47439987044352, 47439987105791,
+STORE, 47439987044352, 47439987105791,
+STORE, 47439987130368, 47439987154943,
+STORE, 47439987105792, 47439987130367,
+ERASE, 47439987105792, 47439987130367,
+STORE, 47439987105792, 47439987154943,
+ERASE, 47439987105792, 47439987154943,
+STORE, 47439987105792, 47439987130367,
+STORE, 47439987130368, 47439987154943,
+STORE, 47439987138560, 47439987154943,
+STORE, 47439987130368, 47439987138559,
+ERASE, 47439987130368, 47439987138559,
+STORE, 47439987130368, 47439987138559,
+ERASE, 47439987138560, 47439987154943,
+STORE, 47439987138560, 47439987154943,
+STORE, 47439987154944, 47439987175423,
+ERASE, 47439987154944, 47439987175423,
+STORE, 47439987154944, 47439987159039,
+STORE, 47439987159040, 47439987175423,
+STORE, 47439987163136, 47439987175423,
+STORE, 47439987159040, 47439987163135,
+ERASE, 47439987159040, 47439987163135,
+STORE, 47439987159040, 47439987163135,
+STORE, 47439987167232, 47439987175423,
+STORE, 47439987163136, 47439987167231,
+ERASE, 47439987163136, 47439987167231,
+STORE, 47439987163136, 47439987175423,
+ERASE, 47439987163136, 47439987175423,
+STORE, 47439987163136, 47439987167231,
+STORE, 47439987167232, 47439987175423,
+ERASE, 47439987167232, 47439987175423,
+STORE, 47439987167232, 47439987175423,
+STORE, 47439987175424, 47439987183615,
+ERASE, 47439986978816, 47439987003391,
+STORE, 47439986978816, 47439986995199,
+STORE, 47439986995200, 47439987003391,
+ERASE, 47439987167232, 47439987175423,
+STORE, 47439987167232, 47439987171327,
+STORE, 47439987171328, 47439987175423,
+ERASE, 47439987130368, 47439987138559,
+STORE, 47439987130368, 47439987134463,
+STORE, 47439987134464, 47439987138559,
+       };
+       unsigned long set8[] = {
+STORE, 140737488347136, 140737488351231,
+STORE, 140722482974720, 140737488351231,
+ERASE, 140722482974720, 140737488351231,
+STORE, 140722482974720, 140722482978815,
+STORE, 94121505034240, 94121505206271,
+ERASE, 94121505034240, 94121505206271,
+STORE, 94121505034240, 94121505050623,
+STORE, 94121505050624, 94121505206271,
+ERASE, 94121505050624, 94121505206271,
+STORE, 94121505050624, 94121505153023,
+STORE, 94121505153024, 94121505193983,
+STORE, 94121505193984, 94121505206271,
+STORE, 47708483284992, 47708483457023,
+ERASE, 47708483284992, 47708483457023,
+STORE, 47708483284992, 47708483289087,
+STORE, 47708483289088, 47708483457023,
+ERASE, 47708483289088, 47708483457023,
+STORE, 47708483289088, 47708483411967,
+STORE, 47708483411968, 47708483444735,
+STORE, 47708483444736, 47708483452927,
+STORE, 47708483452928, 47708483457023,
+STORE, 140722483142656, 140722483146751,
+STORE, 140722483130368, 140722483142655,
+STORE, 47708483457024, 47708483465215,
+STORE, 47708483465216, 47708483473407,
+STORE, 47708483473408, 47708483637247,
+ERASE, 47708483473408, 47708483637247,
+STORE, 47708483473408, 47708483485695,
+STORE, 47708483485696, 47708483637247,
+STORE, 47708483584000, 47708483637247,
+STORE, 47708483485696, 47708483583999,
+ERASE, 47708483485696, 47708483583999,
+STORE, 47708483485696, 47708483583999,
+STORE, 47708483629056, 47708483637247,
+STORE, 47708483584000, 47708483629055,
+ERASE, 47708483584000, 47708483629055,
+STORE, 47708483584000, 47708483637247,
+ERASE, 47708483584000, 47708483637247,
+STORE, 47708483584000, 47708483629055,
+STORE, 47708483629056, 47708483637247,
+ERASE, 47708483629056, 47708483637247,
+STORE, 47708483629056, 47708483637247,
+STORE, 47708483637248, 47708486688767,
+STORE, 47708484182016, 47708486688767,
+STORE, 47708483637248, 47708484182015,
+ERASE, 47708484182016, 47708486688767,
+STORE, 47708484182016, 47708486467583,
+STORE, 47708486467584, 47708486688767,
+STORE, 47708485877760, 47708486467583,
+STORE, 47708484182016, 47708485877759,
+ERASE, 47708484182016, 47708485877759,
+STORE, 47708484182016, 47708485877759,
+STORE, 47708486463488, 47708486467583,
+STORE, 47708485877760, 47708486463487,
+ERASE, 47708485877760, 47708486463487,
+STORE, 47708485877760, 47708486463487,
+STORE, 47708486672384, 47708486688767,
+STORE, 47708486467584, 47708486672383,
+ERASE, 47708486467584, 47708486672383,
+STORE, 47708486467584, 47708486672383,
+ERASE, 47708486672384, 47708486688767,
+STORE, 47708486672384, 47708486688767,
+STORE, 47708486688768, 47708488527871,
+STORE, 47708486828032, 47708488527871,
+STORE, 47708486688768, 47708486828031,
+ERASE, 47708486828032, 47708488527871,
+STORE, 47708486828032, 47708488486911,
+STORE, 47708488486912, 47708488527871,
+STORE, 47708488171520, 47708488486911,
+STORE, 47708486828032, 47708488171519,
+ERASE, 47708486828032, 47708488171519,
+STORE, 47708486828032, 47708488171519,
+STORE, 47708488482816, 47708488486911,
+STORE, 47708488171520, 47708488482815,
+ERASE, 47708488171520, 47708488482815,
+STORE, 47708488171520, 47708488482815,
+STORE, 47708488511488, 47708488527871,
+STORE, 47708488486912, 47708488511487,
+ERASE, 47708488486912, 47708488511487,
+STORE, 47708488486912, 47708488511487,
+ERASE, 47708488511488, 47708488527871,
+STORE, 47708488511488, 47708488527871,
+STORE, 47708488527872, 47708488663039,
+ERASE, 47708488527872, 47708488663039,
+STORE, 47708488527872, 47708488552447,
+STORE, 47708488552448, 47708488663039,
+STORE, 47708488613888, 47708488663039,
+STORE, 47708488552448, 47708488613887,
+ERASE, 47708488552448, 47708488613887,
+STORE, 47708488552448, 47708488613887,
+STORE, 47708488638464, 47708488663039,
+STORE, 47708488613888, 47708488638463,
+ERASE, 47708488613888, 47708488638463,
+STORE, 47708488613888, 47708488663039,
+ERASE, 47708488613888, 47708488663039,
+STORE, 47708488613888, 47708488638463,
+STORE, 47708488638464, 47708488663039,
+STORE, 47708488646656, 47708488663039,
+STORE, 47708488638464, 47708488646655,
+ERASE, 47708488638464, 47708488646655,
+STORE, 47708488638464, 47708488646655,
+ERASE, 47708488646656, 47708488663039,
+STORE, 47708488646656, 47708488663039,
+STORE, 47708488663040, 47708488683519,
+ERASE, 47708488663040, 47708488683519,
+STORE, 47708488663040, 47708488667135,
+STORE, 47708488667136, 47708488683519,
+STORE, 47708488671232, 47708488683519,
+STORE, 47708488667136, 47708488671231,
+ERASE, 47708488667136, 47708488671231,
+STORE, 47708488667136, 47708488671231,
+STORE, 47708488675328, 47708488683519,
+STORE, 47708488671232, 47708488675327,
+ERASE, 47708488671232, 47708488675327,
+STORE, 47708488671232, 47708488683519,
+ERASE, 47708488671232, 47708488683519,
+STORE, 47708488671232, 47708488675327,
+STORE, 47708488675328, 47708488683519,
+ERASE, 47708488675328, 47708488683519,
+STORE, 47708488675328, 47708488683519,
+STORE, 47708488683520, 47708488691711,
+ERASE, 47708488486912, 47708488511487,
+STORE, 47708488486912, 47708488503295,
+STORE, 47708488503296, 47708488511487,
+ERASE, 47708488675328, 47708488683519,
+STORE, 47708488675328, 47708488679423,
+STORE, 47708488679424, 47708488683519,
+ERASE, 47708488638464, 47708488646655,
+STORE, 47708488638464, 47708488642559,
+STORE, 47708488642560, 47708488646655,
+       };
+
+       unsigned long set9[] = {
+STORE, 140737488347136, 140737488351231,
+STORE, 140736427839488, 140737488351231,
+ERASE, 140736427839488, 140736427839488,
+STORE, 140736427839488, 140736427843583,
+STORE, 94071213395968, 94071213567999,
+ERASE, 94071213395968, 94071213395968,
+STORE, 94071213395968, 94071213412351,
+STORE, 94071213412352, 94071213567999,
+ERASE, 94071213412352, 94071213412352,
+STORE, 94071213412352, 94071213514751,
+STORE, 94071213514752, 94071213555711,
+STORE, 94071213555712, 94071213567999,
+STORE, 139968410644480, 139968410816511,
+ERASE, 139968410644480, 139968410644480,
+STORE, 139968410644480, 139968410648575,
+STORE, 139968410648576, 139968410816511,
+ERASE, 139968410648576, 139968410648576,
+STORE, 139968410648576, 139968410771455,
+STORE, 139968410771456, 139968410804223,
+STORE, 139968410804224, 139968410812415,
+STORE, 139968410812416, 139968410816511,
+STORE, 140736429277184, 140736429281279,
+STORE, 140736429264896, 140736429277183,
+STORE, 47664384352256, 47664384360447,
+STORE, 47664384360448, 47664384368639,
+STORE, 47664384368640, 47664384532479,
+ERASE, 47664384368640, 47664384368640,
+STORE, 47664384368640, 47664384380927,
+STORE, 47664384380928, 47664384532479,
+STORE, 47664384479232, 47664384532479,
+STORE, 47664384380928, 47664384479231,
+ERASE, 47664384380928, 47664384380928,
+STORE, 47664384380928, 47664384479231,
+STORE, 47664384524288, 47664384532479,
+STORE, 47664384479232, 47664384524287,
+ERASE, 47664384479232, 47664384479232,
+STORE, 47664384479232, 47664384532479,
+ERASE, 47664384479232, 47664384479232,
+STORE, 47664384479232, 47664384524287,
+STORE, 47664384524288, 47664384532479,
+ERASE, 47664384524288, 47664384524288,
+STORE, 47664384524288, 47664384532479,
+STORE, 47664384532480, 47664387583999,
+STORE, 47664385077248, 47664387583999,
+STORE, 47664384532480, 47664385077247,
+ERASE, 47664385077248, 47664385077248,
+STORE, 47664385077248, 47664387362815,
+STORE, 47664387362816, 47664387583999,
+STORE, 47664386772992, 47664387362815,
+STORE, 47664385077248, 47664386772991,
+ERASE, 47664385077248, 47664385077248,
+STORE, 47664385077248, 47664386772991,
+STORE, 47664387358720, 47664387362815,
+STORE, 47664386772992, 47664387358719,
+ERASE, 47664386772992, 47664386772992,
+STORE, 47664386772992, 47664387358719,
+STORE, 47664387567616, 47664387583999,
+STORE, 47664387362816, 47664387567615,
+ERASE, 47664387362816, 47664387362816,
+STORE, 47664387362816, 47664387567615,
+ERASE, 47664387567616, 47664387567616,
+STORE, 47664387567616, 47664387583999,
+STORE, 47664387584000, 47664389423103,
+STORE, 47664387723264, 47664389423103,
+STORE, 47664387584000, 47664387723263,
+ERASE, 47664387723264, 47664387723264,
+STORE, 47664387723264, 47664389382143,
+STORE, 47664389382144, 47664389423103,
+STORE, 47664389066752, 47664389382143,
+STORE, 47664387723264, 47664389066751,
+ERASE, 47664387723264, 47664387723264,
+STORE, 47664387723264, 47664389066751,
+STORE, 47664389378048, 47664389382143,
+STORE, 47664389066752, 47664389378047,
+ERASE, 47664389066752, 47664389066752,
+STORE, 47664389066752, 47664389378047,
+STORE, 47664389406720, 47664389423103,
+STORE, 47664389382144, 47664389406719,
+ERASE, 47664389382144, 47664389382144,
+STORE, 47664389382144, 47664389406719,
+ERASE, 47664389406720, 47664389406720,
+STORE, 47664389406720, 47664389423103,
+STORE, 47664389423104, 47664389558271,
+ERASE, 47664389423104, 47664389423104,
+STORE, 47664389423104, 47664389447679,
+STORE, 47664389447680, 47664389558271,
+STORE, 47664389509120, 47664389558271,
+STORE, 47664389447680, 47664389509119,
+ERASE, 47664389447680, 47664389447680,
+STORE, 47664389447680, 47664389509119,
+STORE, 47664389533696, 47664389558271,
+STORE, 47664389509120, 47664389533695,
+ERASE, 47664389509120, 47664389509120,
+STORE, 47664389509120, 47664389558271,
+ERASE, 47664389509120, 47664389509120,
+STORE, 47664389509120, 47664389533695,
+STORE, 47664389533696, 47664389558271,
+STORE, 47664389541888, 47664389558271,
+STORE, 47664389533696, 47664389541887,
+ERASE, 47664389533696, 47664389533696,
+STORE, 47664389533696, 47664389541887,
+ERASE, 47664389541888, 47664389541888,
+STORE, 47664389541888, 47664389558271,
+STORE, 47664389558272, 47664389578751,
+ERASE, 47664389558272, 47664389558272,
+STORE, 47664389558272, 47664389562367,
+STORE, 47664389562368, 47664389578751,
+STORE, 47664389566464, 47664389578751,
+STORE, 47664389562368, 47664389566463,
+ERASE, 47664389562368, 47664389562368,
+STORE, 47664389562368, 47664389566463,
+STORE, 47664389570560, 47664389578751,
+STORE, 47664389566464, 47664389570559,
+ERASE, 47664389566464, 47664389566464,
+STORE, 47664389566464, 47664389578751,
+ERASE, 47664389566464, 47664389566464,
+STORE, 47664389566464, 47664389570559,
+STORE, 47664389570560, 47664389578751,
+ERASE, 47664389570560, 47664389570560,
+STORE, 47664389570560, 47664389578751,
+STORE, 47664389578752, 47664389586943,
+ERASE, 47664389382144, 47664389382144,
+STORE, 47664389382144, 47664389398527,
+STORE, 47664389398528, 47664389406719,
+ERASE, 47664389570560, 47664389570560,
+STORE, 47664389570560, 47664389574655,
+STORE, 47664389574656, 47664389578751,
+ERASE, 47664389533696, 47664389533696,
+STORE, 47664389533696, 47664389537791,
+STORE, 47664389537792, 47664389541887,
+ERASE, 47664387362816, 47664387362816,
+STORE, 47664387362816, 47664387559423,
+STORE, 47664387559424, 47664387567615,
+ERASE, 47664384524288, 47664384524288,
+STORE, 47664384524288, 47664384528383,
+STORE, 47664384528384, 47664384532479,
+ERASE, 94071213555712, 94071213555712,
+STORE, 94071213555712, 94071213563903,
+STORE, 94071213563904, 94071213567999,
+ERASE, 139968410804224, 139968410804224,
+STORE, 139968410804224, 139968410808319,
+STORE, 139968410808320, 139968410812415,
+ERASE, 47664384352256, 47664384352256,
+STORE, 94071244402688, 94071244537855,
+STORE, 140737488347136, 140737488351231,
+STORE, 140728271503360, 140737488351231,
+ERASE, 140728271503360, 140728271503360,
+STORE, 140728271503360, 140728271507455,
+STORE, 94410361982976, 94410362155007,
+ERASE, 94410361982976, 94410361982976,
+STORE, 94410361982976, 94410361999359,
+STORE, 94410361999360, 94410362155007,
+ERASE, 94410361999360, 94410361999360,
+STORE, 94410361999360, 94410362101759,
+STORE, 94410362101760, 94410362142719,
+STORE, 94410362142720, 94410362155007,
+STORE, 140351953997824, 140351954169855,
+ERASE, 140351953997824, 140351953997824,
+STORE, 140351953997824, 140351954001919,
+STORE, 140351954001920, 140351954169855,
+ERASE, 140351954001920, 140351954001920,
+STORE, 140351954001920, 140351954124799,
+STORE, 140351954124800, 140351954157567,
+STORE, 140351954157568, 140351954165759,
+STORE, 140351954165760, 140351954169855,
+STORE, 140728272429056, 140728272433151,
+STORE, 140728272416768, 140728272429055,
+STORE, 47280840998912, 47280841007103,
+STORE, 47280841007104, 47280841015295,
+STORE, 47280841015296, 47280841179135,
+ERASE, 47280841015296, 47280841015296,
+STORE, 47280841015296, 47280841027583,
+STORE, 47280841027584, 47280841179135,
+STORE, 47280841125888, 47280841179135,
+STORE, 47280841027584, 47280841125887,
+ERASE, 47280841027584, 47280841027584,
+STORE, 47280841027584, 47280841125887,
+STORE, 47280841170944, 47280841179135,
+STORE, 47280841125888, 47280841170943,
+ERASE, 47280841125888, 47280841125888,
+STORE, 47280841125888, 47280841179135,
+ERASE, 47280841125888, 47280841125888,
+STORE, 47280841125888, 47280841170943,
+STORE, 47280841170944, 47280841179135,
+ERASE, 47280841170944, 47280841170944,
+STORE, 47280841170944, 47280841179135,
+STORE, 47280841179136, 47280844230655,
+STORE, 47280841723904, 47280844230655,
+STORE, 47280841179136, 47280841723903,
+ERASE, 47280841723904, 47280841723904,
+STORE, 47280841723904, 47280844009471,
+STORE, 47280844009472, 47280844230655,
+STORE, 47280843419648, 47280844009471,
+STORE, 47280841723904, 47280843419647,
+ERASE, 47280841723904, 47280841723904,
+STORE, 47280841723904, 47280843419647,
+STORE, 47280844005376, 47280844009471,
+STORE, 47280843419648, 47280844005375,
+ERASE, 47280843419648, 47280843419648,
+STORE, 47280843419648, 47280844005375,
+STORE, 47280844214272, 47280844230655,
+STORE, 47280844009472, 47280844214271,
+ERASE, 47280844009472, 47280844009472,
+STORE, 47280844009472, 47280844214271,
+ERASE, 47280844214272, 47280844214272,
+STORE, 47280844214272, 47280844230655,
+STORE, 47280844230656, 47280846069759,
+STORE, 47280844369920, 47280846069759,
+STORE, 47280844230656, 47280844369919,
+ERASE, 47280844369920, 47280844369920,
+STORE, 47280844369920, 47280846028799,
+STORE, 47280846028800, 47280846069759,
+STORE, 47280845713408, 47280846028799,
+STORE, 47280844369920, 47280845713407,
+ERASE, 47280844369920, 47280844369920,
+STORE, 47280844369920, 47280845713407,
+STORE, 47280846024704, 47280846028799,
+STORE, 47280845713408, 47280846024703,
+ERASE, 47280845713408, 47280845713408,
+STORE, 47280845713408, 47280846024703,
+STORE, 47280846053376, 47280846069759,
+STORE, 47280846028800, 47280846053375,
+ERASE, 47280846028800, 47280846028800,
+STORE, 47280846028800, 47280846053375,
+ERASE, 47280846053376, 47280846053376,
+STORE, 47280846053376, 47280846069759,
+STORE, 47280846069760, 47280846204927,
+ERASE, 47280846069760, 47280846069760,
+STORE, 47280846069760, 47280846094335,
+STORE, 47280846094336, 47280846204927,
+STORE, 47280846155776, 47280846204927,
+STORE, 47280846094336, 47280846155775,
+ERASE, 47280846094336, 47280846094336,
+STORE, 47280846094336, 47280846155775,
+STORE, 47280846180352, 47280846204927,
+STORE, 47280846155776, 47280846180351,
+ERASE, 47280846155776, 47280846155776,
+STORE, 47280846155776, 47280846204927,
+ERASE, 47280846155776, 47280846155776,
+STORE, 47280846155776, 47280846180351,
+STORE, 47280846180352, 47280846204927,
+STORE, 47280846188544, 47280846204927,
+STORE, 47280846180352, 47280846188543,
+ERASE, 47280846180352, 47280846180352,
+STORE, 47280846180352, 47280846188543,
+ERASE, 47280846188544, 47280846188544,
+STORE, 47280846188544, 47280846204927,
+STORE, 47280846204928, 47280846225407,
+ERASE, 47280846204928, 47280846204928,
+STORE, 47280846204928, 47280846209023,
+STORE, 47280846209024, 47280846225407,
+STORE, 47280846213120, 47280846225407,
+STORE, 47280846209024, 47280846213119,
+ERASE, 47280846209024, 47280846209024,
+STORE, 47280846209024, 47280846213119,
+STORE, 47280846217216, 47280846225407,
+STORE, 47280846213120, 47280846217215,
+ERASE, 47280846213120, 47280846213120,
+STORE, 47280846213120, 47280846225407,
+ERASE, 47280846213120, 47280846213120,
+STORE, 47280846213120, 47280846217215,
+STORE, 47280846217216, 47280846225407,
+ERASE, 47280846217216, 47280846217216,
+STORE, 47280846217216, 47280846225407,
+STORE, 47280846225408, 47280846233599,
+ERASE, 47280846028800, 47280846028800,
+STORE, 47280846028800, 47280846045183,
+STORE, 47280846045184, 47280846053375,
+ERASE, 47280846217216, 47280846217216,
+STORE, 47280846217216, 47280846221311,
+STORE, 47280846221312, 47280846225407,
+ERASE, 47280846180352, 47280846180352,
+STORE, 47280846180352, 47280846184447,
+STORE, 47280846184448, 47280846188543,
+ERASE, 47280844009472, 47280844009472,
+STORE, 47280844009472, 47280844206079,
+STORE, 47280844206080, 47280844214271,
+ERASE, 47280841170944, 47280841170944,
+STORE, 47280841170944, 47280841175039,
+STORE, 47280841175040, 47280841179135,
+ERASE, 94410362142720, 94410362142720,
+STORE, 94410362142720, 94410362150911,
+STORE, 94410362150912, 94410362155007,
+ERASE, 140351954157568, 140351954157568,
+STORE, 140351954157568, 140351954161663,
+STORE, 140351954161664, 140351954165759,
+ERASE, 47280840998912, 47280840998912,
+STORE, 94410379456512, 94410379591679,
+STORE, 140737488347136, 140737488351231,
+STORE, 140732946362368, 140737488351231,
+ERASE, 140732946362368, 140732946362368,
+STORE, 140732946362368, 140732946366463,
+STORE, 94352937934848, 94352938106879,
+ERASE, 94352937934848, 94352937934848,
+STORE, 94352937934848, 94352937951231,
+STORE, 94352937951232, 94352938106879,
+ERASE, 94352937951232, 94352937951232,
+STORE, 94352937951232, 94352938053631,
+STORE, 94352938053632, 94352938094591,
+STORE, 94352938094592, 94352938106879,
+STORE, 140595518742528, 140595518914559,
+ERASE, 140595518742528, 140595518742528,
+STORE, 140595518742528, 140595518746623,
+STORE, 140595518746624, 140595518914559,
+ERASE, 140595518746624, 140595518746624,
+STORE, 140595518746624, 140595518869503,
+STORE, 140595518869504, 140595518902271,
+STORE, 140595518902272, 140595518910463,
+STORE, 140595518910464, 140595518914559,
+STORE, 140732947468288, 140732947472383,
+STORE, 140732947456000, 140732947468287,
+STORE, 47037276254208, 47037276262399,
+STORE, 47037276262400, 47037276270591,
+STORE, 47037276270592, 47037276434431,
+ERASE, 47037276270592, 47037276270592,
+STORE, 47037276270592, 47037276282879,
+STORE, 47037276282880, 47037276434431,
+STORE, 47037276381184, 47037276434431,
+STORE, 47037276282880, 47037276381183,
+ERASE, 47037276282880, 47037276282880,
+STORE, 47037276282880, 47037276381183,
+STORE, 47037276426240, 47037276434431,
+STORE, 47037276381184, 47037276426239,
+ERASE, 47037276381184, 47037276381184,
+STORE, 47037276381184, 47037276434431,
+ERASE, 47037276381184, 47037276381184,
+STORE, 47037276381184, 47037276426239,
+STORE, 47037276426240, 47037276434431,
+ERASE, 47037276426240, 47037276426240,
+STORE, 47037276426240, 47037276434431,
+STORE, 47037276434432, 47037279485951,
+STORE, 47037276979200, 47037279485951,
+STORE, 47037276434432, 47037276979199,
+ERASE, 47037276979200, 47037276979200,
+STORE, 47037276979200, 47037279264767,
+STORE, 47037279264768, 47037279485951,
+STORE, 47037278674944, 47037279264767,
+STORE, 47037276979200, 47037278674943,
+ERASE, 47037276979200, 47037276979200,
+STORE, 47037276979200, 47037278674943,
+STORE, 47037279260672, 47037279264767,
+STORE, 47037278674944, 47037279260671,
+ERASE, 47037278674944, 47037278674944,
+STORE, 47037278674944, 47037279260671,
+STORE, 47037279469568, 47037279485951,
+STORE, 47037279264768, 47037279469567,
+ERASE, 47037279264768, 47037279264768,
+STORE, 47037279264768, 47037279469567,
+ERASE, 47037279469568, 47037279469568,
+STORE, 47037279469568, 47037279485951,
+STORE, 47037279485952, 47037281325055,
+STORE, 47037279625216, 47037281325055,
+STORE, 47037279485952, 47037279625215,
+ERASE, 47037279625216, 47037279625216,
+STORE, 47037279625216, 47037281284095,
+STORE, 47037281284096, 47037281325055,
+STORE, 47037280968704, 47037281284095,
+STORE, 47037279625216, 47037280968703,
+ERASE, 47037279625216, 47037279625216,
+STORE, 47037279625216, 47037280968703,
+STORE, 47037281280000, 47037281284095,
+STORE, 47037280968704, 47037281279999,
+ERASE, 47037280968704, 47037280968704,
+STORE, 47037280968704, 47037281279999,
+STORE, 47037281308672, 47037281325055,
+STORE, 47037281284096, 47037281308671,
+ERASE, 47037281284096, 47037281284096,
+STORE, 47037281284096, 47037281308671,
+ERASE, 47037281308672, 47037281308672,
+STORE, 47037281308672, 47037281325055,
+STORE, 47037281325056, 47037281460223,
+ERASE, 47037281325056, 47037281325056,
+STORE, 47037281325056, 47037281349631,
+STORE, 47037281349632, 47037281460223,
+STORE, 47037281411072, 47037281460223,
+STORE, 47037281349632, 47037281411071,
+ERASE, 47037281349632, 47037281349632,
+STORE, 47037281349632, 47037281411071,
+STORE, 47037281435648, 47037281460223,
+STORE, 47037281411072, 47037281435647,
+ERASE, 47037281411072, 47037281411072,
+STORE, 47037281411072, 47037281460223,
+ERASE, 47037281411072, 47037281411072,
+STORE, 47037281411072, 47037281435647,
+STORE, 47037281435648, 47037281460223,
+STORE, 47037281443840, 47037281460223,
+STORE, 47037281435648, 47037281443839,
+ERASE, 47037281435648, 47037281435648,
+STORE, 47037281435648, 47037281443839,
+ERASE, 47037281443840, 47037281443840,
+STORE, 47037281443840, 47037281460223,
+STORE, 47037281460224, 47037281480703,
+ERASE, 47037281460224, 47037281460224,
+STORE, 47037281460224, 47037281464319,
+STORE, 47037281464320, 47037281480703,
+STORE, 47037281468416, 47037281480703,
+STORE, 47037281464320, 47037281468415,
+ERASE, 47037281464320, 47037281464320,
+STORE, 47037281464320, 47037281468415,
+STORE, 47037281472512, 47037281480703,
+STORE, 47037281468416, 47037281472511,
+ERASE, 47037281468416, 47037281468416,
+STORE, 47037281468416, 47037281480703,
+ERASE, 47037281468416, 47037281468416,
+STORE, 47037281468416, 47037281472511,
+STORE, 47037281472512, 47037281480703,
+ERASE, 47037281472512, 47037281472512,
+STORE, 47037281472512, 47037281480703,
+STORE, 47037281480704, 47037281488895,
+ERASE, 47037281284096, 47037281284096,
+STORE, 47037281284096, 47037281300479,
+STORE, 47037281300480, 47037281308671,
+ERASE, 47037281472512, 47037281472512,
+STORE, 47037281472512, 47037281476607,
+STORE, 47037281476608, 47037281480703,
+ERASE, 47037281435648, 47037281435648,
+STORE, 47037281435648, 47037281439743,
+STORE, 47037281439744, 47037281443839,
+ERASE, 47037279264768, 47037279264768,
+STORE, 47037279264768, 47037279461375,
+STORE, 47037279461376, 47037279469567,
+ERASE, 47037276426240, 47037276426240,
+STORE, 47037276426240, 47037276430335,
+STORE, 47037276430336, 47037276434431,
+ERASE, 94352938094592, 94352938094592,
+STORE, 94352938094592, 94352938102783,
+STORE, 94352938102784, 94352938106879,
+ERASE, 140595518902272, 140595518902272,
+STORE, 140595518902272, 140595518906367,
+STORE, 140595518906368, 140595518910463,
+ERASE, 47037276254208, 47037276254208,
+STORE, 94352938438656, 94352938573823,
+STORE, 140737488347136, 140737488351231,
+STORE, 140733506027520, 140737488351231,
+ERASE, 140733506027520, 140733506027520,
+STORE, 140733506027520, 140733506031615,
+STORE, 94150123073536, 94150123245567,
+ERASE, 94150123073536, 94150123073536,
+STORE, 94150123073536, 94150123089919,
+STORE, 94150123089920, 94150123245567,
+ERASE, 94150123089920, 94150123089920,
+STORE, 94150123089920, 94150123192319,
+STORE, 94150123192320, 94150123233279,
+STORE, 94150123233280, 94150123245567,
+STORE, 140081290375168, 140081290547199,
+ERASE, 140081290375168, 140081290375168,
+STORE, 140081290375168, 140081290379263,
+STORE, 140081290379264, 140081290547199,
+ERASE, 140081290379264, 140081290379264,
+STORE, 140081290379264, 140081290502143,
+STORE, 140081290502144, 140081290534911,
+STORE, 140081290534912, 140081290543103,
+STORE, 140081290543104, 140081290547199,
+STORE, 140733506707456, 140733506711551,
+STORE, 140733506695168, 140733506707455,
+STORE, 47551504621568, 47551504629759,
+STORE, 47551504629760, 47551504637951,
+STORE, 47551504637952, 47551504801791,
+ERASE, 47551504637952, 47551504637952,
+STORE, 47551504637952, 47551504650239,
+STORE, 47551504650240, 47551504801791,
+STORE, 47551504748544, 47551504801791,
+STORE, 47551504650240, 47551504748543,
+ERASE, 47551504650240, 47551504650240,
+STORE, 47551504650240, 47551504748543,
+STORE, 47551504793600, 47551504801791,
+STORE, 47551504748544, 47551504793599,
+ERASE, 47551504748544, 47551504748544,
+STORE, 47551504748544, 47551504801791,
+ERASE, 47551504748544, 47551504748544,
+STORE, 47551504748544, 47551504793599,
+STORE, 47551504793600, 47551504801791,
+ERASE, 47551504793600, 47551504793600,
+STORE, 47551504793600, 47551504801791,
+STORE, 47551504801792, 47551507853311,
+STORE, 47551505346560, 47551507853311,
+STORE, 47551504801792, 47551505346559,
+ERASE, 47551505346560, 47551505346560,
+STORE, 47551505346560, 47551507632127,
+STORE, 47551507632128, 47551507853311,
+STORE, 47551507042304, 47551507632127,
+STORE, 47551505346560, 47551507042303,
+ERASE, 47551505346560, 47551505346560,
+STORE, 47551505346560, 47551507042303,
+STORE, 47551507628032, 47551507632127,
+STORE, 47551507042304, 47551507628031,
+ERASE, 47551507042304, 47551507042304,
+STORE, 47551507042304, 47551507628031,
+STORE, 47551507836928, 47551507853311,
+STORE, 47551507632128, 47551507836927,
+ERASE, 47551507632128, 47551507632128,
+STORE, 47551507632128, 47551507836927,
+ERASE, 47551507836928, 47551507836928,
+STORE, 47551507836928, 47551507853311,
+STORE, 47551507853312, 47551509692415,
+STORE, 47551507992576, 47551509692415,
+STORE, 47551507853312, 47551507992575,
+ERASE, 47551507992576, 47551507992576,
+STORE, 47551507992576, 47551509651455,
+STORE, 47551509651456, 47551509692415,
+STORE, 47551509336064, 47551509651455,
+STORE, 47551507992576, 47551509336063,
+ERASE, 47551507992576, 47551507992576,
+STORE, 47551507992576, 47551509336063,
+STORE, 47551509647360, 47551509651455,
+STORE, 47551509336064, 47551509647359,
+ERASE, 47551509336064, 47551509336064,
+STORE, 47551509336064, 47551509647359,
+STORE, 47551509676032, 47551509692415,
+STORE, 47551509651456, 47551509676031,
+ERASE, 47551509651456, 47551509651456,
+STORE, 47551509651456, 47551509676031,
+ERASE, 47551509676032, 47551509676032,
+STORE, 47551509676032, 47551509692415,
+STORE, 47551509692416, 47551509827583,
+ERASE, 47551509692416, 47551509692416,
+STORE, 47551509692416, 47551509716991,
+STORE, 47551509716992, 47551509827583,
+STORE, 47551509778432, 47551509827583,
+STORE, 47551509716992, 47551509778431,
+ERASE, 47551509716992, 47551509716992,
+STORE, 47551509716992, 47551509778431,
+STORE, 47551509803008, 47551509827583,
+STORE, 47551509778432, 47551509803007,
+ERASE, 47551509778432, 47551509778432,
+STORE, 47551509778432, 47551509827583,
+ERASE, 47551509778432, 47551509778432,
+STORE, 47551509778432, 47551509803007,
+STORE, 47551509803008, 47551509827583,
+STORE, 47551509811200, 47551509827583,
+STORE, 47551509803008, 47551509811199,
+ERASE, 47551509803008, 47551509803008,
+STORE, 47551509803008, 47551509811199,
+ERASE, 47551509811200, 47551509811200,
+STORE, 47551509811200, 47551509827583,
+STORE, 47551509827584, 47551509848063,
+ERASE, 47551509827584, 47551509827584,
+STORE, 47551509827584, 47551509831679,
+STORE, 47551509831680, 47551509848063,
+STORE, 47551509835776, 47551509848063,
+STORE, 47551509831680, 47551509835775,
+ERASE, 47551509831680, 47551509831680,
+STORE, 47551509831680, 47551509835775,
+STORE, 47551509839872, 47551509848063,
+STORE, 47551509835776, 47551509839871,
+ERASE, 47551509835776, 47551509835776,
+STORE, 47551509835776, 47551509848063,
+ERASE, 47551509835776, 47551509835776,
+STORE, 47551509835776, 47551509839871,
+STORE, 47551509839872, 47551509848063,
+ERASE, 47551509839872, 47551509839872,
+STORE, 47551509839872, 47551509848063,
+STORE, 47551509848064, 47551509856255,
+ERASE, 47551509651456, 47551509651456,
+STORE, 47551509651456, 47551509667839,
+STORE, 47551509667840, 47551509676031,
+ERASE, 47551509839872, 47551509839872,
+STORE, 47551509839872, 47551509843967,
+STORE, 47551509843968, 47551509848063,
+ERASE, 47551509803008, 47551509803008,
+STORE, 47551509803008, 47551509807103,
+STORE, 47551509807104, 47551509811199,
+ERASE, 47551507632128, 47551507632128,
+STORE, 47551507632128, 47551507828735,
+STORE, 47551507828736, 47551507836927,
+ERASE, 47551504793600, 47551504793600,
+STORE, 47551504793600, 47551504797695,
+STORE, 47551504797696, 47551504801791,
+ERASE, 94150123233280, 94150123233280,
+STORE, 94150123233280, 94150123241471,
+STORE, 94150123241472, 94150123245567,
+ERASE, 140081290534912, 140081290534912,
+STORE, 140081290534912, 140081290539007,
+STORE, 140081290539008, 140081290543103,
+ERASE, 47551504621568, 47551504621568,
+STORE, 94150148112384, 94150148247551,
+STORE, 140737488347136, 140737488351231,
+STORE, 140734389334016, 140737488351231,
+ERASE, 140734389334016, 140734389334016,
+STORE, 140734389334016, 140734389338111,
+STORE, 94844636606464, 94844636778495,
+ERASE, 94844636606464, 94844636606464,
+STORE, 94844636606464, 94844636622847,
+STORE, 94844636622848, 94844636778495,
+ERASE, 94844636622848, 94844636622848,
+STORE, 94844636622848, 94844636725247,
+STORE, 94844636725248, 94844636766207,
+STORE, 94844636766208, 94844636778495,
+STORE, 139922765217792, 139922765389823,
+ERASE, 139922765217792, 139922765217792,
+STORE, 139922765217792, 139922765221887,
+STORE, 139922765221888, 139922765389823,
+ERASE, 139922765221888, 139922765221888,
+STORE, 139922765221888, 139922765344767,
+STORE, 139922765344768, 139922765377535,
+STORE, 139922765377536, 139922765385727,
+STORE, 139922765385728, 139922765389823,
+STORE, 140734389678080, 140734389682175,
+STORE, 140734389665792, 140734389678079,
+STORE, 47710029778944, 47710029787135,
+STORE, 47710029787136, 47710029795327,
+STORE, 47710029795328, 47710029959167,
+ERASE, 47710029795328, 47710029795328,
+STORE, 47710029795328, 47710029807615,
+STORE, 47710029807616, 47710029959167,
+STORE, 47710029905920, 47710029959167,
+STORE, 47710029807616, 47710029905919,
+ERASE, 47710029807616, 47710029807616,
+STORE, 47710029807616, 47710029905919,
+STORE, 47710029950976, 47710029959167,
+STORE, 47710029905920, 47710029950975,
+ERASE, 47710029905920, 47710029905920,
+STORE, 47710029905920, 47710029959167,
+ERASE, 47710029905920, 47710029905920,
+STORE, 47710029905920, 47710029950975,
+STORE, 47710029950976, 47710029959167,
+ERASE, 47710029950976, 47710029950976,
+STORE, 47710029950976, 47710029959167,
+STORE, 47710029959168, 47710033010687,
+STORE, 47710030503936, 47710033010687,
+STORE, 47710029959168, 47710030503935,
+ERASE, 47710030503936, 47710030503936,
+STORE, 47710030503936, 47710032789503,
+STORE, 47710032789504, 47710033010687,
+STORE, 47710032199680, 47710032789503,
+STORE, 47710030503936, 47710032199679,
+ERASE, 47710030503936, 47710030503936,
+STORE, 47710030503936, 47710032199679,
+STORE, 47710032785408, 47710032789503,
+STORE, 47710032199680, 47710032785407,
+ERASE, 47710032199680, 47710032199680,
+STORE, 47710032199680, 47710032785407,
+STORE, 47710032994304, 47710033010687,
+STORE, 47710032789504, 47710032994303,
+ERASE, 47710032789504, 47710032789504,
+STORE, 47710032789504, 47710032994303,
+ERASE, 47710032994304, 47710032994304,
+STORE, 47710032994304, 47710033010687,
+STORE, 47710033010688, 47710034849791,
+STORE, 47710033149952, 47710034849791,
+STORE, 47710033010688, 47710033149951,
+ERASE, 47710033149952, 47710033149952,
+STORE, 47710033149952, 47710034808831,
+STORE, 47710034808832, 47710034849791,
+STORE, 47710034493440, 47710034808831,
+STORE, 47710033149952, 47710034493439,
+ERASE, 47710033149952, 47710033149952,
+STORE, 47710033149952, 47710034493439,
+STORE, 47710034804736, 47710034808831,
+STORE, 47710034493440, 47710034804735,
+ERASE, 47710034493440, 47710034493440,
+STORE, 47710034493440, 47710034804735,
+STORE, 47710034833408, 47710034849791,
+STORE, 47710034808832, 47710034833407,
+ERASE, 47710034808832, 47710034808832,
+STORE, 47710034808832, 47710034833407,
+ERASE, 47710034833408, 47710034833408,
+STORE, 47710034833408, 47710034849791,
+STORE, 47710034849792, 47710034984959,
+ERASE, 47710034849792, 47710034849792,
+STORE, 47710034849792, 47710034874367,
+STORE, 47710034874368, 47710034984959,
+STORE, 47710034935808, 47710034984959,
+STORE, 47710034874368, 47710034935807,
+ERASE, 47710034874368, 47710034874368,
+STORE, 47710034874368, 47710034935807,
+STORE, 47710034960384, 47710034984959,
+STORE, 47710034935808, 47710034960383,
+ERASE, 47710034935808, 47710034935808,
+STORE, 47710034935808, 47710034984959,
+ERASE, 47710034935808, 47710034935808,
+STORE, 47710034935808, 47710034960383,
+STORE, 47710034960384, 47710034984959,
+STORE, 47710034968576, 47710034984959,
+STORE, 47710034960384, 47710034968575,
+ERASE, 47710034960384, 47710034960384,
+STORE, 47710034960384, 47710034968575,
+ERASE, 47710034968576, 47710034968576,
+STORE, 47710034968576, 47710034984959,
+STORE, 47710034984960, 47710035005439,
+ERASE, 47710034984960, 47710034984960,
+STORE, 47710034984960, 47710034989055,
+STORE, 47710034989056, 47710035005439,
+STORE, 47710034993152, 47710035005439,
+STORE, 47710034989056, 47710034993151,
+ERASE, 47710034989056, 47710034989056,
+STORE, 47710034989056, 47710034993151,
+STORE, 47710034997248, 47710035005439,
+STORE, 47710034993152, 47710034997247,
+ERASE, 47710034993152, 47710034993152,
+STORE, 47710034993152, 47710035005439,
+ERASE, 47710034993152, 47710034993152,
+STORE, 47710034993152, 47710034997247,
+STORE, 47710034997248, 47710035005439,
+ERASE, 47710034997248, 47710034997248,
+STORE, 47710034997248, 47710035005439,
+STORE, 47710035005440, 47710035013631,
+ERASE, 47710034808832, 47710034808832,
+STORE, 47710034808832, 47710034825215,
+STORE, 47710034825216, 47710034833407,
+ERASE, 47710034997248, 47710034997248,
+STORE, 47710034997248, 47710035001343,
+STORE, 47710035001344, 47710035005439,
+ERASE, 47710034960384, 47710034960384,
+STORE, 47710034960384, 47710034964479,
+STORE, 47710034964480, 47710034968575,
+ERASE, 47710032789504, 47710032789504,
+STORE, 47710032789504, 47710032986111,
+STORE, 47710032986112, 47710032994303,
+ERASE, 47710029950976, 47710029950976,
+STORE, 47710029950976, 47710029955071,
+STORE, 47710029955072, 47710029959167,
+ERASE, 94844636766208, 94844636766208,
+STORE, 94844636766208, 94844636774399,
+STORE, 94844636774400, 94844636778495,
+ERASE, 139922765377536, 139922765377536,
+STORE, 139922765377536, 139922765381631,
+STORE, 139922765381632, 139922765385727,
+ERASE, 47710029778944, 47710029778944,
+STORE, 94844641775616, 94844641910783,
+STORE, 140737488347136, 140737488351231,
+STORE, 140732213886976, 140737488351231,
+ERASE, 140732213886976, 140732213886976,
+STORE, 140732213886976, 140732213891071,
+STORE, 94240508887040, 94240509059071,
+ERASE, 94240508887040, 94240508887040,
+STORE, 94240508887040, 94240508903423,
+STORE, 94240508903424, 94240509059071,
+ERASE, 94240508903424, 94240508903424,
+STORE, 94240508903424, 94240509005823,
+STORE, 94240509005824, 94240509046783,
+STORE, 94240509046784, 94240509059071,
+STORE, 140275106516992, 140275106689023,
+ERASE, 140275106516992, 140275106516992,
+STORE, 140275106516992, 140275106521087,
+STORE, 140275106521088, 140275106689023,
+ERASE, 140275106521088, 140275106521088,
+STORE, 140275106521088, 140275106643967,
+STORE, 140275106643968, 140275106676735,
+STORE, 140275106676736, 140275106684927,
+STORE, 140275106684928, 140275106689023,
+STORE, 140732213977088, 140732213981183,
+STORE, 140732213964800, 140732213977087,
+STORE, 47357688479744, 47357688487935,
+STORE, 47357688487936, 47357688496127,
+STORE, 47357688496128, 47357688659967,
+ERASE, 47357688496128, 47357688496128,
+STORE, 47357688496128, 47357688508415,
+STORE, 47357688508416, 47357688659967,
+STORE, 47357688606720, 47357688659967,
+STORE, 47357688508416, 47357688606719,
+ERASE, 47357688508416, 47357688508416,
+STORE, 47357688508416, 47357688606719,
+STORE, 47357688651776, 47357688659967,
+STORE, 47357688606720, 47357688651775,
+ERASE, 47357688606720, 47357688606720,
+STORE, 47357688606720, 47357688659967,
+ERASE, 47357688606720, 47357688606720,
+STORE, 47357688606720, 47357688651775,
+STORE, 47357688651776, 47357688659967,
+ERASE, 47357688651776, 47357688651776,
+STORE, 47357688651776, 47357688659967,
+STORE, 47357688659968, 47357691711487,
+STORE, 47357689204736, 47357691711487,
+STORE, 47357688659968, 47357689204735,
+ERASE, 47357689204736, 47357689204736,
+STORE, 47357689204736, 47357691490303,
+STORE, 47357691490304, 47357691711487,
+STORE, 47357690900480, 47357691490303,
+STORE, 47357689204736, 47357690900479,
+ERASE, 47357689204736, 47357689204736,
+STORE, 47357689204736, 47357690900479,
+STORE, 47357691486208, 47357691490303,
+STORE, 47357690900480, 47357691486207,
+ERASE, 47357690900480, 47357690900480,
+STORE, 47357690900480, 47357691486207,
+STORE, 47357691695104, 47357691711487,
+STORE, 47357691490304, 47357691695103,
+ERASE, 47357691490304, 47357691490304,
+STORE, 47357691490304, 47357691695103,
+ERASE, 47357691695104, 47357691695104,
+STORE, 47357691695104, 47357691711487,
+STORE, 47357691711488, 47357693550591,
+STORE, 47357691850752, 47357693550591,
+STORE, 47357691711488, 47357691850751,
+ERASE, 47357691850752, 47357691850752,
+STORE, 47357691850752, 47357693509631,
+STORE, 47357693509632, 47357693550591,
+STORE, 47357693194240, 47357693509631,
+STORE, 47357691850752, 47357693194239,
+ERASE, 47357691850752, 47357691850752,
+STORE, 47357691850752, 47357693194239,
+STORE, 47357693505536, 47357693509631,
+STORE, 47357693194240, 47357693505535,
+ERASE, 47357693194240, 47357693194240,
+STORE, 47357693194240, 47357693505535,
+STORE, 47357693534208, 47357693550591,
+STORE, 47357693509632, 47357693534207,
+ERASE, 47357693509632, 47357693509632,
+STORE, 47357693509632, 47357693534207,
+ERASE, 47357693534208, 47357693534208,
+STORE, 47357693534208, 47357693550591,
+STORE, 47357693550592, 47357693685759,
+ERASE, 47357693550592, 47357693550592,
+STORE, 47357693550592, 47357693575167,
+STORE, 47357693575168, 47357693685759,
+STORE, 47357693636608, 47357693685759,
+STORE, 47357693575168, 47357693636607,
+ERASE, 47357693575168, 47357693575168,
+STORE, 47357693575168, 47357693636607,
+STORE, 47357693661184, 47357693685759,
+STORE, 47357693636608, 47357693661183,
+ERASE, 47357693636608, 47357693636608,
+STORE, 47357693636608, 47357693685759,
+ERASE, 47357693636608, 47357693636608,
+STORE, 47357693636608, 47357693661183,
+STORE, 47357693661184, 47357693685759,
+STORE, 47357693669376, 47357693685759,
+STORE, 47357693661184, 47357693669375,
+ERASE, 47357693661184, 47357693661184,
+STORE, 47357693661184, 47357693669375,
+ERASE, 47357693669376, 47357693669376,
+STORE, 47357693669376, 47357693685759,
+STORE, 47357693685760, 47357693706239,
+ERASE, 47357693685760, 47357693685760,
+STORE, 47357693685760, 47357693689855,
+STORE, 47357693689856, 47357693706239,
+STORE, 47357693693952, 47357693706239,
+STORE, 47357693689856, 47357693693951,
+ERASE, 47357693689856, 47357693689856,
+STORE, 47357693689856, 47357693693951,
+STORE, 47357693698048, 47357693706239,
+STORE, 47357693693952, 47357693698047,
+ERASE, 47357693693952, 47357693693952,
+STORE, 47357693693952, 47357693706239,
+ERASE, 47357693693952, 47357693693952,
+STORE, 47357693693952, 47357693698047,
+STORE, 47357693698048, 47357693706239,
+ERASE, 47357693698048, 47357693698048,
+STORE, 47357693698048, 47357693706239,
+STORE, 47357693706240, 47357693714431,
+ERASE, 47357693509632, 47357693509632,
+STORE, 47357693509632, 47357693526015,
+STORE, 47357693526016, 47357693534207,
+ERASE, 47357693698048, 47357693698048,
+STORE, 47357693698048, 47357693702143,
+STORE, 47357693702144, 47357693706239,
+ERASE, 47357693661184, 47357693661184,
+STORE, 47357693661184, 47357693665279,
+STORE, 47357693665280, 47357693669375,
+ERASE, 47357691490304, 47357691490304,
+STORE, 47357691490304, 47357691686911,
+STORE, 47357691686912, 47357691695103,
+ERASE, 47357688651776, 47357688651776,
+STORE, 47357688651776, 47357688655871,
+STORE, 47357688655872, 47357688659967,
+ERASE, 94240509046784, 94240509046784,
+STORE, 94240509046784, 94240509054975,
+STORE, 94240509054976, 94240509059071,
+ERASE, 140275106676736, 140275106676736,
+STORE, 140275106676736, 140275106680831,
+STORE, 140275106680832, 140275106684927,
+ERASE, 47357688479744, 47357688479744,
+STORE, 94240518361088, 94240518496255,
+STORE, 140737488347136, 140737488351231,
+STORE, 140732688277504, 140737488351231,
+ERASE, 140732688277504, 140732688277504,
+STORE, 140732688277504, 140732688281599,
+STORE, 94629171351552, 94629172064255,
+ERASE, 94629171351552, 94629171351552,
+STORE, 94629171351552, 94629171400703,
+STORE, 94629171400704, 94629172064255,
+ERASE, 94629171400704, 94629171400704,
+STORE, 94629171400704, 94629171945471,
+STORE, 94629171945472, 94629172043775,
+STORE, 94629172043776, 94629172064255,
+STORE, 139770707644416, 139770707816447,
+ERASE, 139770707644416, 139770707644416,
+STORE, 139770707644416, 139770707648511,
+STORE, 139770707648512, 139770707816447,
+ERASE, 139770707648512, 139770707648512,
+STORE, 139770707648512, 139770707771391,
+STORE, 139770707771392, 139770707804159,
+STORE, 139770707804160, 139770707812351,
+STORE, 139770707812352, 139770707816447,
+STORE, 140732689121280, 140732689125375,
+STORE, 140732689108992, 140732689121279,
+STORE, 47862087352320, 47862087360511,
+STORE, 47862087360512, 47862087368703,
+STORE, 47862087368704, 47862087475199,
+STORE, 47862087385088, 47862087475199,
+STORE, 47862087368704, 47862087385087,
+ERASE, 47862087385088, 47862087385088,
+STORE, 47862087385088, 47862087458815,
+STORE, 47862087458816, 47862087475199,
+STORE, 47862087438336, 47862087458815,
+STORE, 47862087385088, 47862087438335,
+ERASE, 47862087385088, 47862087385088,
+STORE, 47862087385088, 47862087438335,
+STORE, 47862087454720, 47862087458815,
+STORE, 47862087438336, 47862087454719,
+ERASE, 47862087438336, 47862087438336,
+STORE, 47862087438336, 47862087454719,
+STORE, 47862087467008, 47862087475199,
+STORE, 47862087458816, 47862087467007,
+ERASE, 47862087458816, 47862087458816,
+STORE, 47862087458816, 47862087467007,
+ERASE, 47862087467008, 47862087467008,
+STORE, 47862087467008, 47862087475199,
+STORE, 47862087475200, 47862089314303,
+STORE, 47862087614464, 47862089314303,
+STORE, 47862087475200, 47862087614463,
+ERASE, 47862087614464, 47862087614464,
+STORE, 47862087614464, 47862089273343,
+STORE, 47862089273344, 47862089314303,
+STORE, 47862088957952, 47862089273343,
+STORE, 47862087614464, 47862088957951,
+ERASE, 47862087614464, 47862087614464,
+STORE, 47862087614464, 47862088957951,
+STORE, 47862089269248, 47862089273343,
+STORE, 47862088957952, 47862089269247,
+ERASE, 47862088957952, 47862088957952,
+STORE, 47862088957952, 47862089269247,
+STORE, 47862089297920, 47862089314303,
+STORE, 47862089273344, 47862089297919,
+ERASE, 47862089273344, 47862089273344,
+STORE, 47862089273344, 47862089297919,
+ERASE, 47862089297920, 47862089297920,
+STORE, 47862089297920, 47862089314303,
+STORE, 47862089297920, 47862089326591,
+ERASE, 47862089273344, 47862089273344,
+STORE, 47862089273344, 47862089289727,
+STORE, 47862089289728, 47862089297919,
+ERASE, 47862087458816, 47862087458816,
+STORE, 47862087458816, 47862087462911,
+STORE, 47862087462912, 47862087467007,
+ERASE, 94629172043776, 94629172043776,
+STORE, 94629172043776, 94629172060159,
+STORE, 94629172060160, 94629172064255,
+ERASE, 139770707804160, 139770707804160,
+STORE, 139770707804160, 139770707808255,
+STORE, 139770707808256, 139770707812351,
+ERASE, 47862087352320, 47862087352320,
+STORE, 94629197533184, 94629197668351,
+STORE, 140737488347136, 140737488351231,
+STORE, 140727540711424, 140737488351231,
+ERASE, 140727540711424, 140727540711424,
+STORE, 140727540711424, 140727540715519,
+STORE, 94299865313280, 94299866025983,
+ERASE, 94299865313280, 94299865313280,
+STORE, 94299865313280, 94299865362431,
+STORE, 94299865362432, 94299866025983,
+ERASE, 94299865362432, 94299865362432,
+STORE, 94299865362432, 94299865907199,
+STORE, 94299865907200, 94299866005503,
+STORE, 94299866005504, 94299866025983,
+STORE, 140680268763136, 140680268935167,
+ERASE, 140680268763136, 140680268763136,
+STORE, 140680268763136, 140680268767231,
+STORE, 140680268767232, 140680268935167,
+ERASE, 140680268767232, 140680268767232,
+STORE, 140680268767232, 140680268890111,
+STORE, 140680268890112, 140680268922879,
+STORE, 140680268922880, 140680268931071,
+STORE, 140680268931072, 140680268935167,
+STORE, 140727541424128, 140727541428223,
+STORE, 140727541411840, 140727541424127,
+STORE, 46952526233600, 46952526241791,
+STORE, 46952526241792, 46952526249983,
+STORE, 46952526249984, 46952526356479,
+STORE, 46952526266368, 46952526356479,
+STORE, 46952526249984, 46952526266367,
+ERASE, 46952526266368, 46952526266368,
+STORE, 46952526266368, 46952526340095,
+STORE, 46952526340096, 46952526356479,
+STORE, 46952526319616, 46952526340095,
+STORE, 46952526266368, 46952526319615,
+ERASE, 46952526266368, 46952526266368,
+STORE, 46952526266368, 46952526319615,
+STORE, 46952526336000, 46952526340095,
+STORE, 46952526319616, 46952526335999,
+ERASE, 46952526319616, 46952526319616,
+STORE, 46952526319616, 46952526335999,
+STORE, 46952526348288, 46952526356479,
+STORE, 46952526340096, 46952526348287,
+ERASE, 46952526340096, 46952526340096,
+STORE, 46952526340096, 46952526348287,
+ERASE, 46952526348288, 46952526348288,
+STORE, 46952526348288, 46952526356479,
+STORE, 46952526356480, 46952528195583,
+STORE, 46952526495744, 46952528195583,
+STORE, 46952526356480, 46952526495743,
+ERASE, 46952526495744, 46952526495744,
+STORE, 46952526495744, 46952528154623,
+STORE, 46952528154624, 46952528195583,
+STORE, 46952527839232, 46952528154623,
+STORE, 46952526495744, 46952527839231,
+ERASE, 46952526495744, 46952526495744,
+STORE, 46952526495744, 46952527839231,
+STORE, 46952528150528, 46952528154623,
+STORE, 46952527839232, 46952528150527,
+ERASE, 46952527839232, 46952527839232,
+STORE, 46952527839232, 46952528150527,
+STORE, 46952528179200, 46952528195583,
+STORE, 46952528154624, 46952528179199,
+ERASE, 46952528154624, 46952528154624,
+STORE, 46952528154624, 46952528179199,
+ERASE, 46952528179200, 46952528179200,
+STORE, 46952528179200, 46952528195583,
+STORE, 46952528179200, 46952528207871,
+ERASE, 46952528154624, 46952528154624,
+STORE, 46952528154624, 46952528171007,
+STORE, 46952528171008, 46952528179199,
+ERASE, 46952526340096, 46952526340096,
+STORE, 46952526340096, 46952526344191,
+STORE, 46952526344192, 46952526348287,
+ERASE, 94299866005504, 94299866005504,
+STORE, 94299866005504, 94299866021887,
+STORE, 94299866021888, 94299866025983,
+ERASE, 140680268922880, 140680268922880,
+STORE, 140680268922880, 140680268926975,
+STORE, 140680268926976, 140680268931071,
+ERASE, 46952526233600, 46952526233600,
+STORE, 140737488347136, 140737488351231,
+STORE, 140722874793984, 140737488351231,
+ERASE, 140722874793984, 140722874793984,
+STORE, 140722874793984, 140722874798079,
+STORE, 94448916213760, 94448916926463,
+ERASE, 94448916213760, 94448916213760,
+STORE, 94448916213760, 94448916262911,
+STORE, 94448916262912, 94448916926463,
+ERASE, 94448916262912, 94448916262912,
+STORE, 94448916262912, 94448916807679,
+STORE, 94448916807680, 94448916905983,
+STORE, 94448916905984, 94448916926463,
+STORE, 140389117046784, 140389117218815,
+ERASE, 140389117046784, 140389117046784,
+STORE, 140389117046784, 140389117050879,
+STORE, 140389117050880, 140389117218815,
+ERASE, 140389117050880, 140389117050880,
+STORE, 140389117050880, 140389117173759,
+STORE, 140389117173760, 140389117206527,
+STORE, 140389117206528, 140389117214719,
+STORE, 140389117214720, 140389117218815,
+STORE, 140722875297792, 140722875301887,
+STORE, 140722875285504, 140722875297791,
+STORE, 47243677949952, 47243677958143,
+STORE, 47243677958144, 47243677966335,
+STORE, 47243677966336, 47243678072831,
+STORE, 47243677982720, 47243678072831,
+STORE, 47243677966336, 47243677982719,
+ERASE, 47243677982720, 47243677982720,
+STORE, 47243677982720, 47243678056447,
+STORE, 47243678056448, 47243678072831,
+STORE, 47243678035968, 47243678056447,
+STORE, 47243677982720, 47243678035967,
+ERASE, 47243677982720, 47243677982720,
+STORE, 47243677982720, 47243678035967,
+STORE, 47243678052352, 47243678056447,
+STORE, 47243678035968, 47243678052351,
+ERASE, 47243678035968, 47243678035968,
+STORE, 47243678035968, 47243678052351,
+STORE, 47243678064640, 47243678072831,
+STORE, 47243678056448, 47243678064639,
+ERASE, 47243678056448, 47243678056448,
+STORE, 47243678056448, 47243678064639,
+ERASE, 47243678064640, 47243678064640,
+STORE, 47243678064640, 47243678072831,
+STORE, 47243678072832, 47243679911935,
+STORE, 47243678212096, 47243679911935,
+STORE, 47243678072832, 47243678212095,
+ERASE, 47243678212096, 47243678212096,
+STORE, 47243678212096, 47243679870975,
+STORE, 47243679870976, 47243679911935,
+STORE, 47243679555584, 47243679870975,
+STORE, 47243678212096, 47243679555583,
+ERASE, 47243678212096, 47243678212096,
+STORE, 47243678212096, 47243679555583,
+STORE, 47243679866880, 47243679870975,
+STORE, 47243679555584, 47243679866879,
+ERASE, 47243679555584, 47243679555584,
+STORE, 47243679555584, 47243679866879,
+STORE, 47243679895552, 47243679911935,
+STORE, 47243679870976, 47243679895551,
+ERASE, 47243679870976, 47243679870976,
+STORE, 47243679870976, 47243679895551,
+ERASE, 47243679895552, 47243679895552,
+STORE, 47243679895552, 47243679911935,
+STORE, 47243679895552, 47243679924223,
+ERASE, 47243679870976, 47243679870976,
+STORE, 47243679870976, 47243679887359,
+STORE, 47243679887360, 47243679895551,
+ERASE, 47243678056448, 47243678056448,
+STORE, 47243678056448, 47243678060543,
+STORE, 47243678060544, 47243678064639,
+ERASE, 94448916905984, 94448916905984,
+STORE, 94448916905984, 94448916922367,
+STORE, 94448916922368, 94448916926463,
+ERASE, 140389117206528, 140389117206528,
+STORE, 140389117206528, 140389117210623,
+STORE, 140389117210624, 140389117214719,
+ERASE, 47243677949952, 47243677949952,
+STORE, 140737488347136, 140737488351231,
+STORE, 140733068505088, 140737488351231,
+ERASE, 140733068505088, 140733068505088,
+STORE, 140733068505088, 140733068509183,
+STORE, 94207145750528, 94207146463231,
+ERASE, 94207145750528, 94207145750528,
+STORE, 94207145750528, 94207145799679,
+STORE, 94207145799680, 94207146463231,
+ERASE, 94207145799680, 94207145799680,
+STORE, 94207145799680, 94207146344447,
+STORE, 94207146344448, 94207146442751,
+STORE, 94207146442752, 94207146463231,
+STORE, 140684504911872, 140684505083903,
+ERASE, 140684504911872, 140684504911872,
+STORE, 140684504911872, 140684504915967,
+STORE, 140684504915968, 140684505083903,
+ERASE, 140684504915968, 140684504915968,
+STORE, 140684504915968, 140684505038847,
+STORE, 140684505038848, 140684505071615,
+STORE, 140684505071616, 140684505079807,
+STORE, 140684505079808, 140684505083903,
+STORE, 140733068607488, 140733068611583,
+STORE, 140733068595200, 140733068607487,
+STORE, 46948290084864, 46948290093055,
+STORE, 46948290093056, 46948290101247,
+STORE, 46948290101248, 46948290207743,
+STORE, 46948290117632, 46948290207743,
+STORE, 46948290101248, 46948290117631,
+ERASE, 46948290117632, 46948290117632,
+STORE, 46948290117632, 46948290191359,
+STORE, 46948290191360, 46948290207743,
+STORE, 46948290170880, 46948290191359,
+STORE, 46948290117632, 46948290170879,
+ERASE, 46948290117632, 46948290117632,
+STORE, 46948290117632, 46948290170879,
+STORE, 46948290187264, 46948290191359,
+STORE, 46948290170880, 46948290187263,
+ERASE, 46948290170880, 46948290170880,
+STORE, 46948290170880, 46948290187263,
+STORE, 46948290199552, 46948290207743,
+STORE, 46948290191360, 46948290199551,
+ERASE, 46948290191360, 46948290191360,
+STORE, 46948290191360, 46948290199551,
+ERASE, 46948290199552, 46948290199552,
+STORE, 46948290199552, 46948290207743,
+STORE, 46948290207744, 46948292046847,
+STORE, 46948290347008, 46948292046847,
+STORE, 46948290207744, 46948290347007,
+ERASE, 46948290347008, 46948290347008,
+STORE, 46948290347008, 46948292005887,
+STORE, 46948292005888, 46948292046847,
+STORE, 46948291690496, 46948292005887,
+STORE, 46948290347008, 46948291690495,
+ERASE, 46948290347008, 46948290347008,
+STORE, 46948290347008, 46948291690495,
+STORE, 46948292001792, 46948292005887,
+STORE, 46948291690496, 46948292001791,
+ERASE, 46948291690496, 46948291690496,
+STORE, 46948291690496, 46948292001791,
+STORE, 46948292030464, 46948292046847,
+STORE, 46948292005888, 46948292030463,
+ERASE, 46948292005888, 46948292005888,
+STORE, 46948292005888, 46948292030463,
+ERASE, 46948292030464, 46948292030464,
+STORE, 46948292030464, 46948292046847,
+STORE, 46948292030464, 46948292059135,
+ERASE, 46948292005888, 46948292005888,
+STORE, 46948292005888, 46948292022271,
+STORE, 46948292022272, 46948292030463,
+ERASE, 46948290191360, 46948290191360,
+STORE, 46948290191360, 46948290195455,
+STORE, 46948290195456, 46948290199551,
+ERASE, 94207146442752, 94207146442752,
+STORE, 94207146442752, 94207146459135,
+STORE, 94207146459136, 94207146463231,
+ERASE, 140684505071616, 140684505071616,
+STORE, 140684505071616, 140684505075711,
+STORE, 140684505075712, 140684505079807,
+ERASE, 46948290084864, 46948290084864,
+STORE, 140737488347136, 140737488351231,
+STORE, 140726367158272, 140737488351231,
+ERASE, 140726367158272, 140726367158272,
+STORE, 140726367158272, 140726367162367,
+STORE, 94436124106752, 94436124819455,
+ERASE, 94436124106752, 94436124106752,
+STORE, 94436124106752, 94436124155903,
+STORE, 94436124155904, 94436124819455,
+ERASE, 94436124155904, 94436124155904,
+STORE, 94436124155904, 94436124700671,
+STORE, 94436124700672, 94436124798975,
+STORE, 94436124798976, 94436124819455,
+STORE, 140049025044480, 140049025216511,
+ERASE, 140049025044480, 140049025044480,
+STORE, 140049025044480, 140049025048575,
+STORE, 140049025048576, 140049025216511,
+ERASE, 140049025048576, 140049025048576,
+STORE, 140049025048576, 140049025171455,
+STORE, 140049025171456, 140049025204223,
+STORE, 140049025204224, 140049025212415,
+STORE, 140049025212416, 140049025216511,
+STORE, 140726367256576, 140726367260671,
+STORE, 140726367244288, 140726367256575,
+STORE, 47583769952256, 47583769960447,
+STORE, 47583769960448, 47583769968639,
+STORE, 47583769968640, 47583770075135,
+STORE, 47583769985024, 47583770075135,
+STORE, 47583769968640, 47583769985023,
+ERASE, 47583769985024, 47583769985024,
+STORE, 47583769985024, 47583770058751,
+STORE, 47583770058752, 47583770075135,
+STORE, 47583770038272, 47583770058751,
+STORE, 47583769985024, 47583770038271,
+ERASE, 47583769985024, 47583769985024,
+STORE, 47583769985024, 47583770038271,
+STORE, 47583770054656, 47583770058751,
+STORE, 47583770038272, 47583770054655,
+ERASE, 47583770038272, 47583770038272,
+STORE, 47583770038272, 47583770054655,
+STORE, 47583770066944, 47583770075135,
+STORE, 47583770058752, 47583770066943,
+ERASE, 47583770058752, 47583770058752,
+STORE, 47583770058752, 47583770066943,
+ERASE, 47583770066944, 47583770066944,
+STORE, 47583770066944, 47583770075135,
+STORE, 47583770075136, 47583771914239,
+STORE, 47583770214400, 47583771914239,
+STORE, 47583770075136, 47583770214399,
+ERASE, 47583770214400, 47583770214400,
+STORE, 47583770214400, 47583771873279,
+STORE, 47583771873280, 47583771914239,
+STORE, 47583771557888, 47583771873279,
+STORE, 47583770214400, 47583771557887,
+ERASE, 47583770214400, 47583770214400,
+STORE, 47583770214400, 47583771557887,
+STORE, 47583771869184, 47583771873279,
+STORE, 47583771557888, 47583771869183,
+ERASE, 47583771557888, 47583771557888,
+STORE, 47583771557888, 47583771869183,
+STORE, 47583771897856, 47583771914239,
+STORE, 47583771873280, 47583771897855,
+ERASE, 47583771873280, 47583771873280,
+STORE, 47583771873280, 47583771897855,
+ERASE, 47583771897856, 47583771897856,
+STORE, 47583771897856, 47583771914239,
+STORE, 47583771897856, 47583771926527,
+ERASE, 47583771873280, 47583771873280,
+STORE, 47583771873280, 47583771889663,
+STORE, 47583771889664, 47583771897855,
+ERASE, 47583770058752, 47583770058752,
+STORE, 47583770058752, 47583770062847,
+STORE, 47583770062848, 47583770066943,
+ERASE, 94436124798976, 94436124798976,
+STORE, 94436124798976, 94436124815359,
+STORE, 94436124815360, 94436124819455,
+ERASE, 140049025204224, 140049025204224,
+STORE, 140049025204224, 140049025208319,
+STORE, 140049025208320, 140049025212415,
+ERASE, 47583769952256, 47583769952256,
+STORE, 140737488347136, 140737488351231,
+STORE, 140727116099584, 140737488351231,
+ERASE, 140727116099584, 140727116099584,
+STORE, 140727116099584, 140727116103679,
+STORE, 94166319734784, 94166320447487,
+ERASE, 94166319734784, 94166319734784,
+STORE, 94166319734784, 94166319783935,
+STORE, 94166319783936, 94166320447487,
+ERASE, 94166319783936, 94166319783936,
+STORE, 94166319783936, 94166320328703,
+STORE, 94166320328704, 94166320427007,
+STORE, 94166320427008, 94166320447487,
+STORE, 139976559542272, 139976559714303,
+ERASE, 139976559542272, 139976559542272,
+STORE, 139976559542272, 139976559546367,
+STORE, 139976559546368, 139976559714303,
+ERASE, 139976559546368, 139976559546368,
+STORE, 139976559546368, 139976559669247,
+STORE, 139976559669248, 139976559702015,
+STORE, 139976559702016, 139976559710207,
+STORE, 139976559710208, 139976559714303,
+STORE, 140727116222464, 140727116226559,
+STORE, 140727116210176, 140727116222463,
+STORE, 47656235454464, 47656235462655,
+STORE, 47656235462656, 47656235470847,
+STORE, 47656235470848, 47656235577343,
+STORE, 47656235487232, 47656235577343,
+STORE, 47656235470848, 47656235487231,
+ERASE, 47656235487232, 47656235487232,
+STORE, 47656235487232, 47656235560959,
+STORE, 47656235560960, 47656235577343,
+STORE, 47656235540480, 47656235560959,
+STORE, 47656235487232, 47656235540479,
+ERASE, 47656235487232, 47656235487232,
+STORE, 47656235487232, 47656235540479,
+STORE, 47656235556864, 47656235560959,
+STORE, 47656235540480, 47656235556863,
+ERASE, 47656235540480, 47656235540480,
+STORE, 47656235540480, 47656235556863,
+STORE, 47656235569152, 47656235577343,
+STORE, 47656235560960, 47656235569151,
+ERASE, 47656235560960, 47656235560960,
+STORE, 47656235560960, 47656235569151,
+ERASE, 47656235569152, 47656235569152,
+STORE, 47656235569152, 47656235577343,
+STORE, 47656235577344, 47656237416447,
+STORE, 47656235716608, 47656237416447,
+STORE, 47656235577344, 47656235716607,
+ERASE, 47656235716608, 47656235716608,
+STORE, 47656235716608, 47656237375487,
+STORE, 47656237375488, 47656237416447,
+STORE, 47656237060096, 47656237375487,
+STORE, 47656235716608, 47656237060095,
+ERASE, 47656235716608, 47656235716608,
+STORE, 47656235716608, 47656237060095,
+STORE, 47656237371392, 47656237375487,
+STORE, 47656237060096, 47656237371391,
+ERASE, 47656237060096, 47656237060096,
+STORE, 47656237060096, 47656237371391,
+STORE, 47656237400064, 47656237416447,
+STORE, 47656237375488, 47656237400063,
+ERASE, 47656237375488, 47656237375488,
+STORE, 47656237375488, 47656237400063,
+ERASE, 47656237400064, 47656237400064,
+STORE, 47656237400064, 47656237416447,
+STORE, 47656237400064, 47656237428735,
+ERASE, 47656237375488, 47656237375488,
+STORE, 47656237375488, 47656237391871,
+STORE, 47656237391872, 47656237400063,
+ERASE, 47656235560960, 47656235560960,
+STORE, 47656235560960, 47656235565055,
+STORE, 47656235565056, 47656235569151,
+ERASE, 94166320427008, 94166320427008,
+STORE, 94166320427008, 94166320443391,
+STORE, 94166320443392, 94166320447487,
+ERASE, 139976559702016, 139976559702016,
+STORE, 139976559702016, 139976559706111,
+STORE, 139976559706112, 139976559710207,
+ERASE, 47656235454464, 47656235454464,
+STORE, 94166332153856, 94166332289023,
+STORE, 140737488347136, 140737488351231,
+STORE, 140726412816384, 140737488351231,
+ERASE, 140726412816384, 140726412816384,
+STORE, 140726412816384, 140726412820479,
+STORE, 94094884507648, 94094885220351,
+ERASE, 94094884507648, 94094884507648,
+STORE, 94094884507648, 94094884556799,
+STORE, 94094884556800, 94094885220351,
+ERASE, 94094884556800, 94094884556800,
+STORE, 94094884556800, 94094885101567,
+STORE, 94094885101568, 94094885199871,
+STORE, 94094885199872, 94094885220351,
+STORE, 139773773938688, 139773774110719,
+ERASE, 139773773938688, 139773773938688,
+STORE, 139773773938688, 139773773942783,
+STORE, 139773773942784, 139773774110719,
+ERASE, 139773773942784, 139773773942784,
+STORE, 139773773942784, 139773774065663,
+STORE, 139773774065664, 139773774098431,
+STORE, 139773774098432, 139773774106623,
+STORE, 139773774106624, 139773774110719,
+STORE, 140726412963840, 140726412967935,
+STORE, 140726412951552, 140726412963839,
+STORE, 47859021058048, 47859021066239,
+STORE, 47859021066240, 47859021074431,
+STORE, 47859021074432, 47859021180927,
+STORE, 47859021090816, 47859021180927,
+STORE, 47859021074432, 47859021090815,
+ERASE, 47859021090816, 47859021090816,
+STORE, 47859021090816, 47859021164543,
+STORE, 47859021164544, 47859021180927,
+STORE, 47859021144064, 47859021164543,
+STORE, 47859021090816, 47859021144063,
+ERASE, 47859021090816, 47859021090816,
+STORE, 47859021090816, 47859021144063,
+STORE, 47859021160448, 47859021164543,
+STORE, 47859021144064, 47859021160447,
+ERASE, 47859021144064, 47859021144064,
+STORE, 47859021144064, 47859021160447,
+STORE, 47859021172736, 47859021180927,
+STORE, 47859021164544, 47859021172735,
+ERASE, 47859021164544, 47859021164544,
+STORE, 47859021164544, 47859021172735,
+ERASE, 47859021172736, 47859021172736,
+STORE, 47859021172736, 47859021180927,
+STORE, 47859021180928, 47859023020031,
+STORE, 47859021320192, 47859023020031,
+STORE, 47859021180928, 47859021320191,
+ERASE, 47859021320192, 47859021320192,
+STORE, 47859021320192, 47859022979071,
+STORE, 47859022979072, 47859023020031,
+STORE, 47859022663680, 47859022979071,
+STORE, 47859021320192, 47859022663679,
+ERASE, 47859021320192, 47859021320192,
+STORE, 47859021320192, 47859022663679,
+STORE, 47859022974976, 47859022979071,
+STORE, 47859022663680, 47859022974975,
+ERASE, 47859022663680, 47859022663680,
+STORE, 47859022663680, 47859022974975,
+STORE, 47859023003648, 47859023020031,
+STORE, 47859022979072, 47859023003647,
+ERASE, 47859022979072, 47859022979072,
+STORE, 47859022979072, 47859023003647,
+ERASE, 47859023003648, 47859023003648,
+STORE, 47859023003648, 47859023020031,
+STORE, 47859023003648, 47859023032319,
+ERASE, 47859022979072, 47859022979072,
+STORE, 47859022979072, 47859022995455,
+STORE, 47859022995456, 47859023003647,
+ERASE, 47859021164544, 47859021164544,
+STORE, 47859021164544, 47859021168639,
+STORE, 47859021168640, 47859021172735,
+ERASE, 94094885199872, 94094885199872,
+STORE, 94094885199872, 94094885216255,
+STORE, 94094885216256, 94094885220351,
+ERASE, 139773774098432, 139773774098432,
+STORE, 139773774098432, 139773774102527,
+STORE, 139773774102528, 139773774106623,
+ERASE, 47859021058048, 47859021058048,
+STORE, 94094901108736, 94094901243903,
+STORE, 140737488347136, 140737488351231,
+STORE, 140736567963648, 140737488351231,
+ERASE, 140736567963648, 140736567963648,
+STORE, 140736567963648, 140736567967743,
+STORE, 94924425748480, 94924426461183,
+ERASE, 94924425748480, 94924425748480,
+STORE, 94924425748480, 94924425797631,
+STORE, 94924425797632, 94924426461183,
+ERASE, 94924425797632, 94924425797632,
+STORE, 94924425797632, 94924426342399,
+STORE, 94924426342400, 94924426440703,
+STORE, 94924426440704, 94924426461183,
+STORE, 140042126319616, 140042126491647,
+ERASE, 140042126319616, 140042126319616,
+STORE, 140042126319616, 140042126323711,
+STORE, 140042126323712, 140042126491647,
+ERASE, 140042126323712, 140042126323712,
+STORE, 140042126323712, 140042126446591,
+STORE, 140042126446592, 140042126479359,
+STORE, 140042126479360, 140042126487551,
+STORE, 140042126487552, 140042126491647,
+STORE, 140736568672256, 140736568676351,
+STORE, 140736568659968, 140736568672255,
+STORE, 47590668677120, 47590668685311,
+STORE, 47590668685312, 47590668693503,
+STORE, 47590668693504, 47590668799999,
+STORE, 47590668709888, 47590668799999,
+STORE, 47590668693504, 47590668709887,
+ERASE, 47590668709888, 47590668709888,
+STORE, 47590668709888, 47590668783615,
+STORE, 47590668783616, 47590668799999,
+STORE, 47590668763136, 47590668783615,
+STORE, 47590668709888, 47590668763135,
+ERASE, 47590668709888, 47590668709888,
+STORE, 47590668709888, 47590668763135,
+STORE, 47590668779520, 47590668783615,
+STORE, 47590668763136, 47590668779519,
+ERASE, 47590668763136, 47590668763136,
+STORE, 47590668763136, 47590668779519,
+STORE, 47590668791808, 47590668799999,
+STORE, 47590668783616, 47590668791807,
+ERASE, 47590668783616, 47590668783616,
+STORE, 47590668783616, 47590668791807,
+ERASE, 47590668791808, 47590668791808,
+STORE, 47590668791808, 47590668799999,
+STORE, 47590668800000, 47590670639103,
+STORE, 47590668939264, 47590670639103,
+STORE, 47590668800000, 47590668939263,
+ERASE, 47590668939264, 47590668939264,
+STORE, 47590668939264, 47590670598143,
+STORE, 47590670598144, 47590670639103,
+STORE, 47590670282752, 47590670598143,
+STORE, 47590668939264, 47590670282751,
+ERASE, 47590668939264, 47590668939264,
+STORE, 47590668939264, 47590670282751,
+STORE, 47590670594048, 47590670598143,
+STORE, 47590670282752, 47590670594047,
+ERASE, 47590670282752, 47590670282752,
+STORE, 47590670282752, 47590670594047,
+STORE, 47590670622720, 47590670639103,
+STORE, 47590670598144, 47590670622719,
+ERASE, 47590670598144, 47590670598144,
+STORE, 47590670598144, 47590670622719,
+ERASE, 47590670622720, 47590670622720,
+STORE, 47590670622720, 47590670639103,
+STORE, 47590670622720, 47590670651391,
+ERASE, 47590670598144, 47590670598144,
+STORE, 47590670598144, 47590670614527,
+STORE, 47590670614528, 47590670622719,
+ERASE, 47590668783616, 47590668783616,
+STORE, 47590668783616, 47590668787711,
+STORE, 47590668787712, 47590668791807,
+ERASE, 94924426440704, 94924426440704,
+STORE, 94924426440704, 94924426457087,
+STORE, 94924426457088, 94924426461183,
+ERASE, 140042126479360, 140042126479360,
+STORE, 140042126479360, 140042126483455,
+STORE, 140042126483456, 140042126487551,
+ERASE, 47590668677120, 47590668677120,
+STORE, 140737488347136, 140737488351231,
+STORE, 140733281439744, 140737488351231,
+ERASE, 140733281439744, 140733281439744,
+STORE, 140733281439744, 140733281443839,
+STORE, 94490667069440, 94490667782143,
+ERASE, 94490667069440, 94490667069440,
+STORE, 94490667069440, 94490667118591,
+STORE, 94490667118592, 94490667782143,
+ERASE, 94490667118592, 94490667118592,
+STORE, 94490667118592, 94490667663359,
+STORE, 94490667663360, 94490667761663,
+STORE, 94490667761664, 94490667782143,
+STORE, 139878215118848, 139878215290879,
+ERASE, 139878215118848, 139878215118848,
+STORE, 139878215118848, 139878215122943,
+STORE, 139878215122944, 139878215290879,
+ERASE, 139878215122944, 139878215122944,
+STORE, 139878215122944, 139878215245823,
+STORE, 139878215245824, 139878215278591,
+STORE, 139878215278592, 139878215286783,
+STORE, 139878215286784, 139878215290879,
+STORE, 140733281464320, 140733281468415,
+STORE, 140733281452032, 140733281464319,
+STORE, 47754579877888, 47754579886079,
+STORE, 47754579886080, 47754579894271,
+STORE, 47754579894272, 47754580000767,
+STORE, 47754579910656, 47754580000767,
+STORE, 47754579894272, 47754579910655,
+ERASE, 47754579910656, 47754579910656,
+STORE, 47754579910656, 47754579984383,
+STORE, 47754579984384, 47754580000767,
+STORE, 47754579963904, 47754579984383,
+STORE, 47754579910656, 47754579963903,
+ERASE, 47754579910656, 47754579910656,
+STORE, 47754579910656, 47754579963903,
+STORE, 47754579980288, 47754579984383,
+STORE, 47754579963904, 47754579980287,
+ERASE, 47754579963904, 47754579963904,
+STORE, 47754579963904, 47754579980287,
+STORE, 47754579992576, 47754580000767,
+STORE, 47754579984384, 47754579992575,
+ERASE, 47754579984384, 47754579984384,
+STORE, 47754579984384, 47754579992575,
+ERASE, 47754579992576, 47754579992576,
+STORE, 47754579992576, 47754580000767,
+STORE, 47754580000768, 47754581839871,
+STORE, 47754580140032, 47754581839871,
+STORE, 47754580000768, 47754580140031,
+ERASE, 47754580140032, 47754580140032,
+STORE, 47754580140032, 47754581798911,
+STORE, 47754581798912, 47754581839871,
+STORE, 47754581483520, 47754581798911,
+STORE, 47754580140032, 47754581483519,
+ERASE, 47754580140032, 47754580140032,
+STORE, 47754580140032, 47754581483519,
+STORE, 47754581794816, 47754581798911,
+STORE, 47754581483520, 47754581794815,
+ERASE, 47754581483520, 47754581483520,
+STORE, 47754581483520, 47754581794815,
+STORE, 47754581823488, 47754581839871,
+STORE, 47754581798912, 47754581823487,
+ERASE, 47754581798912, 47754581798912,
+STORE, 47754581798912, 47754581823487,
+ERASE, 47754581823488, 47754581823488,
+STORE, 47754581823488, 47754581839871,
+STORE, 47754581823488, 47754581852159,
+ERASE, 47754581798912, 47754581798912,
+STORE, 47754581798912, 47754581815295,
+STORE, 47754581815296, 47754581823487,
+ERASE, 47754579984384, 47754579984384,
+STORE, 47754579984384, 47754579988479,
+STORE, 47754579988480, 47754579992575,
+ERASE, 94490667761664, 94490667761664,
+STORE, 94490667761664, 94490667778047,
+STORE, 94490667778048, 94490667782143,
+ERASE, 139878215278592, 139878215278592,
+STORE, 139878215278592, 139878215282687,
+STORE, 139878215282688, 139878215286783,
+ERASE, 47754579877888, 47754579877888,
+STORE, 94490669649920, 94490669785087,
+STORE, 140737488347136, 140737488351231,
+STORE, 140735382188032, 140737488351231,
+ERASE, 140735382188032, 140735382188032,
+STORE, 140735382188032, 140735382192127,
+STORE, 94150181302272, 94150182014975,
+ERASE, 94150181302272, 94150181302272,
+STORE, 94150181302272, 94150181351423,
+STORE, 94150181351424, 94150182014975,
+ERASE, 94150181351424, 94150181351424,
+STORE, 94150181351424, 94150181896191,
+STORE, 94150181896192, 94150181994495,
+STORE, 94150181994496, 94150182014975,
+STORE, 139679752458240, 139679752630271,
+ERASE, 139679752458240, 139679752458240,
+STORE, 139679752458240, 139679752462335,
+STORE, 139679752462336, 139679752630271,
+ERASE, 139679752462336, 139679752462336,
+STORE, 139679752462336, 139679752585215,
+STORE, 139679752585216, 139679752617983,
+STORE, 139679752617984, 139679752626175,
+STORE, 139679752626176, 139679752630271,
+STORE, 140735382536192, 140735382540287,
+STORE, 140735382523904, 140735382536191,
+STORE, 47953042538496, 47953042546687,
+STORE, 47953042546688, 47953042554879,
+STORE, 47953042554880, 47953042661375,
+STORE, 47953042571264, 47953042661375,
+STORE, 47953042554880, 47953042571263,
+ERASE, 47953042571264, 47953042571264,
+STORE, 47953042571264, 47953042644991,
+STORE, 47953042644992, 47953042661375,
+STORE, 47953042624512, 47953042644991,
+STORE, 47953042571264, 47953042624511,
+ERASE, 47953042571264, 47953042571264,
+STORE, 47953042571264, 47953042624511,
+STORE, 47953042640896, 47953042644991,
+STORE, 47953042624512, 47953042640895,
+ERASE, 47953042624512, 47953042624512,
+STORE, 47953042624512, 47953042640895,
+STORE, 47953042653184, 47953042661375,
+STORE, 47953042644992, 47953042653183,
+ERASE, 47953042644992, 47953042644992,
+STORE, 47953042644992, 47953042653183,
+ERASE, 47953042653184, 47953042653184,
+STORE, 47953042653184, 47953042661375,
+STORE, 47953042661376, 47953044500479,
+STORE, 47953042800640, 47953044500479,
+STORE, 47953042661376, 47953042800639,
+ERASE, 47953042800640, 47953042800640,
+STORE, 47953042800640, 47953044459519,
+STORE, 47953044459520, 47953044500479,
+STORE, 47953044144128, 47953044459519,
+STORE, 47953042800640, 47953044144127,
+ERASE, 47953042800640, 47953042800640,
+STORE, 47953042800640, 47953044144127,
+STORE, 47953044455424, 47953044459519,
+STORE, 47953044144128, 47953044455423,
+ERASE, 47953044144128, 47953044144128,
+STORE, 47953044144128, 47953044455423,
+STORE, 47953044484096, 47953044500479,
+STORE, 47953044459520, 47953044484095,
+ERASE, 47953044459520, 47953044459520,
+STORE, 47953044459520, 47953044484095,
+ERASE, 47953044484096, 47953044484096,
+STORE, 47953044484096, 47953044500479,
+STORE, 47953044484096, 47953044512767,
+ERASE, 47953044459520, 47953044459520,
+STORE, 47953044459520, 47953044475903,
+STORE, 47953044475904, 47953044484095,
+ERASE, 47953042644992, 47953042644992,
+STORE, 47953042644992, 47953042649087,
+STORE, 47953042649088, 47953042653183,
+ERASE, 94150181994496, 94150181994496,
+STORE, 94150181994496, 94150182010879,
+STORE, 94150182010880, 94150182014975,
+ERASE, 139679752617984, 139679752617984,
+STORE, 139679752617984, 139679752622079,
+STORE, 139679752622080, 139679752626175,
+ERASE, 47953042538496, 47953042538496,
+STORE, 140737488347136, 140737488351231,
+STORE, 140737044123648, 140737488351231,
+ERASE, 140737044123648, 140737044123648,
+STORE, 140737044123648, 140737044127743,
+STORE, 94425324294144, 94425325006847,
+ERASE, 94425324294144, 94425324294144,
+STORE, 94425324294144, 94425324343295,
+STORE, 94425324343296, 94425325006847,
+ERASE, 94425324343296, 94425324343296,
+STORE, 94425324343296, 94425324888063,
+STORE, 94425324888064, 94425324986367,
+STORE, 94425324986368, 94425325006847,
+STORE, 140382015016960, 140382015188991,
+ERASE, 140382015016960, 140382015016960,
+STORE, 140382015016960, 140382015021055,
+STORE, 140382015021056, 140382015188991,
+ERASE, 140382015021056, 140382015021056,
+STORE, 140382015021056, 140382015143935,
+STORE, 140382015143936, 140382015176703,
+STORE, 140382015176704, 140382015184895,
+STORE, 140382015184896, 140382015188991,
+STORE, 140737045585920, 140737045590015,
+STORE, 140737045573632, 140737045585919,
+STORE, 47250779979776, 47250779987967,
+STORE, 47250779987968, 47250779996159,
+STORE, 47250779996160, 47250780102655,
+STORE, 47250780012544, 47250780102655,
+STORE, 47250779996160, 47250780012543,
+ERASE, 47250780012544, 47250780012544,
+STORE, 47250780012544, 47250780086271,
+STORE, 47250780086272, 47250780102655,
+STORE, 47250780065792, 47250780086271,
+STORE, 47250780012544, 47250780065791,
+ERASE, 47250780012544, 47250780012544,
+STORE, 47250780012544, 47250780065791,
+STORE, 47250780082176, 47250780086271,
+STORE, 47250780065792, 47250780082175,
+ERASE, 47250780065792, 47250780065792,
+STORE, 47250780065792, 47250780082175,
+STORE, 47250780094464, 47250780102655,
+STORE, 47250780086272, 47250780094463,
+ERASE, 47250780086272, 47250780086272,
+STORE, 47250780086272, 47250780094463,
+ERASE, 47250780094464, 47250780094464,
+STORE, 47250780094464, 47250780102655,
+STORE, 47250780102656, 47250781941759,
+STORE, 47250780241920, 47250781941759,
+STORE, 47250780102656, 47250780241919,
+ERASE, 47250780241920, 47250780241920,
+STORE, 47250780241920, 47250781900799,
+STORE, 47250781900800, 47250781941759,
+STORE, 47250781585408, 47250781900799,
+STORE, 47250780241920, 47250781585407,
+ERASE, 47250780241920, 47250780241920,
+STORE, 47250780241920, 47250781585407,
+STORE, 47250781896704, 47250781900799,
+STORE, 47250781585408, 47250781896703,
+ERASE, 47250781585408, 47250781585408,
+STORE, 47250781585408, 47250781896703,
+STORE, 47250781925376, 47250781941759,
+STORE, 47250781900800, 47250781925375,
+ERASE, 47250781900800, 47250781900800,
+STORE, 47250781900800, 47250781925375,
+ERASE, 47250781925376, 47250781925376,
+STORE, 47250781925376, 47250781941759,
+STORE, 47250781925376, 47250781954047,
+ERASE, 47250781900800, 47250781900800,
+STORE, 47250781900800, 47250781917183,
+STORE, 47250781917184, 47250781925375,
+ERASE, 47250780086272, 47250780086272,
+STORE, 47250780086272, 47250780090367,
+STORE, 47250780090368, 47250780094463,
+ERASE, 94425324986368, 94425324986368,
+STORE, 94425324986368, 94425325002751,
+STORE, 94425325002752, 94425325006847,
+ERASE, 140382015176704, 140382015176704,
+STORE, 140382015176704, 140382015180799,
+STORE, 140382015180800, 140382015184895,
+ERASE, 47250779979776, 47250779979776,
+STORE, 94425351438336, 94425351573503,
+STORE, 140737488347136, 140737488351231,
+STORE, 140736801144832, 140737488351231,
+ERASE, 140736801144832, 140736801144832,
+STORE, 140736801144832, 140736801148927,
+STORE, 94629429358592, 94629430071295,
+ERASE, 94629429358592, 94629429358592,
+STORE, 94629429358592, 94629429407743,
+STORE, 94629429407744, 94629430071295,
+ERASE, 94629429407744, 94629429407744,
+STORE, 94629429407744, 94629429952511,
+STORE, 94629429952512, 94629430050815,
+STORE, 94629430050816, 94629430071295,
+STORE, 139801685483520, 139801685655551,
+ERASE, 139801685483520, 139801685483520,
+STORE, 139801685483520, 139801685487615,
+STORE, 139801685487616, 139801685655551,
+ERASE, 139801685487616, 139801685487616,
+STORE, 139801685487616, 139801685610495,
+STORE, 139801685610496, 139801685643263,
+STORE, 139801685643264, 139801685651455,
+STORE, 139801685651456, 139801685655551,
+STORE, 140736801198080, 140736801202175,
+STORE, 140736801185792, 140736801198079,
+STORE, 47831109513216, 47831109521407,
+STORE, 47831109521408, 47831109529599,
+STORE, 47831109529600, 47831109636095,
+STORE, 47831109545984, 47831109636095,
+STORE, 47831109529600, 47831109545983,
+ERASE, 47831109545984, 47831109545984,
+STORE, 47831109545984, 47831109619711,
+STORE, 47831109619712, 47831109636095,
+STORE, 47831109599232, 47831109619711,
+STORE, 47831109545984, 47831109599231,
+ERASE, 47831109545984, 47831109545984,
+STORE, 47831109545984, 47831109599231,
+STORE, 47831109615616, 47831109619711,
+STORE, 47831109599232, 47831109615615,
+ERASE, 47831109599232, 47831109599232,
+STORE, 47831109599232, 47831109615615,
+STORE, 47831109627904, 47831109636095,
+STORE, 47831109619712, 47831109627903,
+ERASE, 47831109619712, 47831109619712,
+STORE, 47831109619712, 47831109627903,
+ERASE, 47831109627904, 47831109627904,
+STORE, 47831109627904, 47831109636095,
+STORE, 47831109636096, 47831111475199,
+STORE, 47831109775360, 47831111475199,
+STORE, 47831109636096, 47831109775359,
+ERASE, 47831109775360, 47831109775360,
+STORE, 47831109775360, 47831111434239,
+STORE, 47831111434240, 47831111475199,
+STORE, 47831111118848, 47831111434239,
+STORE, 47831109775360, 47831111118847,
+ERASE, 47831109775360, 47831109775360,
+STORE, 47831109775360, 47831111118847,
+STORE, 47831111430144, 47831111434239,
+STORE, 47831111118848, 47831111430143,
+ERASE, 47831111118848, 47831111118848,
+STORE, 47831111118848, 47831111430143,
+STORE, 47831111458816, 47831111475199,
+STORE, 47831111434240, 47831111458815,
+ERASE, 47831111434240, 47831111434240,
+STORE, 47831111434240, 47831111458815,
+ERASE, 47831111458816, 47831111458816,
+STORE, 47831111458816, 47831111475199,
+STORE, 47831111458816, 47831111487487,
+ERASE, 47831111434240, 47831111434240,
+STORE, 47831111434240, 47831111450623,
+STORE, 47831111450624, 47831111458815,
+ERASE, 47831109619712, 47831109619712,
+STORE, 47831109619712, 47831109623807,
+STORE, 47831109623808, 47831109627903,
+ERASE, 94629430050816, 94629430050816,
+STORE, 94629430050816, 94629430067199,
+STORE, 94629430067200, 94629430071295,
+ERASE, 139801685643264, 139801685643264,
+STORE, 139801685643264, 139801685647359,
+STORE, 139801685647360, 139801685651455,
+ERASE, 47831109513216, 47831109513216,
+STORE, 140737488347136, 140737488351231,
+STORE, 140729419612160, 140737488351231,
+ERASE, 140729419612160, 140729419612160,
+STORE, 140729419612160, 140729419616255,
+STORE, 94443354148864, 94443354861567,
+ERASE, 94443354148864, 94443354148864,
+STORE, 94443354148864, 94443354198015,
+STORE, 94443354198016, 94443354861567,
+ERASE, 94443354198016, 94443354198016,
+STORE, 94443354198016, 94443354742783,
+STORE, 94443354742784, 94443354841087,
+STORE, 94443354841088, 94443354861567,
+STORE, 139741700038656, 139741700210687,
+ERASE, 139741700038656, 139741700038656,
+STORE, 139741700038656, 139741700042751,
+STORE, 139741700042752, 139741700210687,
+ERASE, 139741700042752, 139741700042752,
+STORE, 139741700042752, 139741700165631,
+STORE, 139741700165632, 139741700198399,
+STORE, 139741700198400, 139741700206591,
+STORE, 139741700206592, 139741700210687,
+STORE, 140729420574720, 140729420578815,
+STORE, 140729420562432, 140729420574719,
+STORE, 47891094958080, 47891094966271,
+STORE, 47891094966272, 47891094974463,
+STORE, 47891094974464, 47891095080959,
+STORE, 47891094990848, 47891095080959,
+STORE, 47891094974464, 47891094990847,
+ERASE, 47891094990848, 47891094990848,
+STORE, 47891094990848, 47891095064575,
+STORE, 47891095064576, 47891095080959,
+STORE, 47891095044096, 47891095064575,
+STORE, 47891094990848, 47891095044095,
+ERASE, 47891094990848, 47891094990848,
+STORE, 47891094990848, 47891095044095,
+STORE, 47891095060480, 47891095064575,
+STORE, 47891095044096, 47891095060479,
+ERASE, 47891095044096, 47891095044096,
+STORE, 47891095044096, 47891095060479,
+STORE, 47891095072768, 47891095080959,
+STORE, 47891095064576, 47891095072767,
+ERASE, 47891095064576, 47891095064576,
+STORE, 47891095064576, 47891095072767,
+ERASE, 47891095072768, 47891095072768,
+STORE, 47891095072768, 47891095080959,
+STORE, 47891095080960, 47891096920063,
+STORE, 47891095220224, 47891096920063,
+STORE, 47891095080960, 47891095220223,
+ERASE, 47891095220224, 47891095220224,
+STORE, 47891095220224, 47891096879103,
+STORE, 47891096879104, 47891096920063,
+STORE, 47891096563712, 47891096879103,
+STORE, 47891095220224, 47891096563711,
+ERASE, 47891095220224, 47891095220224,
+STORE, 47891095220224, 47891096563711,
+STORE, 47891096875008, 47891096879103,
+STORE, 47891096563712, 47891096875007,
+ERASE, 47891096563712, 47891096563712,
+STORE, 47891096563712, 47891096875007,
+STORE, 47891096903680, 47891096920063,
+STORE, 47891096879104, 47891096903679,
+ERASE, 47891096879104, 47891096879104,
+STORE, 47891096879104, 47891096903679,
+ERASE, 47891096903680, 47891096903680,
+STORE, 47891096903680, 47891096920063,
+STORE, 47891096903680, 47891096932351,
+ERASE, 47891096879104, 47891096879104,
+STORE, 47891096879104, 47891096895487,
+STORE, 47891096895488, 47891096903679,
+ERASE, 47891095064576, 47891095064576,
+STORE, 47891095064576, 47891095068671,
+STORE, 47891095068672, 47891095072767,
+ERASE, 94443354841088, 94443354841088,
+STORE, 94443354841088, 94443354857471,
+STORE, 94443354857472, 94443354861567,
+ERASE, 139741700198400, 139741700198400,
+STORE, 139741700198400, 139741700202495,
+STORE, 139741700202496, 139741700206591,
+ERASE, 47891094958080, 47891094958080,
+STORE, 94443360825344, 94443360960511,
+STORE, 140737488347136, 140737488351231,
+STORE, 140722961661952, 140737488351231,
+ERASE, 140722961661952, 140722961661952,
+STORE, 140722961661952, 140722961666047,
+STORE, 94878388944896, 94878389657599,
+ERASE, 94878388944896, 94878388944896,
+STORE, 94878388944896, 94878388994047,
+STORE, 94878388994048, 94878389657599,
+ERASE, 94878388994048, 94878388994048,
+STORE, 94878388994048, 94878389538815,
+STORE, 94878389538816, 94878389637119,
+STORE, 94878389637120, 94878389657599,
+STORE, 140210690056192, 140210690228223,
+ERASE, 140210690056192, 140210690056192,
+STORE, 140210690056192, 140210690060287,
+STORE, 140210690060288, 140210690228223,
+ERASE, 140210690060288, 140210690060288,
+STORE, 140210690060288, 140210690183167,
+STORE, 140210690183168, 140210690215935,
+STORE, 140210690215936, 140210690224127,
+STORE, 140210690224128, 140210690228223,
+STORE, 140722963148800, 140722963152895,
+STORE, 140722963136512, 140722963148799,
+STORE, 47422104940544, 47422104948735,
+STORE, 47422104948736, 47422104956927,
+STORE, 47422104956928, 47422105063423,
+STORE, 47422104973312, 47422105063423,
+STORE, 47422104956928, 47422104973311,
+ERASE, 47422104973312, 47422104973312,
+STORE, 47422104973312, 47422105047039,
+STORE, 47422105047040, 47422105063423,
+STORE, 47422105026560, 47422105047039,
+STORE, 47422104973312, 47422105026559,
+ERASE, 47422104973312, 47422104973312,
+STORE, 47422104973312, 47422105026559,
+STORE, 47422105042944, 47422105047039,
+STORE, 47422105026560, 47422105042943,
+ERASE, 47422105026560, 47422105026560,
+STORE, 47422105026560, 47422105042943,
+STORE, 47422105055232, 47422105063423,
+STORE, 47422105047040, 47422105055231,
+ERASE, 47422105047040, 47422105047040,
+STORE, 47422105047040, 47422105055231,
+ERASE, 47422105055232, 47422105055232,
+STORE, 47422105055232, 47422105063423,
+STORE, 47422105063424, 47422106902527,
+STORE, 47422105202688, 47422106902527,
+STORE, 47422105063424, 47422105202687,
+ERASE, 47422105202688, 47422105202688,
+STORE, 47422105202688, 47422106861567,
+STORE, 47422106861568, 47422106902527,
+STORE, 47422106546176, 47422106861567,
+STORE, 47422105202688, 47422106546175,
+ERASE, 47422105202688, 47422105202688,
+STORE, 47422105202688, 47422106546175,
+STORE, 47422106857472, 47422106861567,
+STORE, 47422106546176, 47422106857471,
+ERASE, 47422106546176, 47422106546176,
+STORE, 47422106546176, 47422106857471,
+STORE, 47422106886144, 47422106902527,
+STORE, 47422106861568, 47422106886143,
+ERASE, 47422106861568, 47422106861568,
+STORE, 47422106861568, 47422106886143,
+ERASE, 47422106886144, 47422106886144,
+STORE, 47422106886144, 47422106902527,
+STORE, 47422106886144, 47422106914815,
+ERASE, 47422106861568, 47422106861568,
+STORE, 47422106861568, 47422106877951,
+STORE, 47422106877952, 47422106886143,
+ERASE, 47422105047040, 47422105047040,
+STORE, 47422105047040, 47422105051135,
+STORE, 47422105051136, 47422105055231,
+ERASE, 94878389637120, 94878389637120,
+STORE, 94878389637120, 94878389653503,
+STORE, 94878389653504, 94878389657599,
+ERASE, 140210690215936, 140210690215936,
+STORE, 140210690215936, 140210690220031,
+STORE, 140210690220032, 140210690224127,
+ERASE, 47422104940544, 47422104940544,
+STORE, 140737488347136, 140737488351231,
+STORE, 140727690309632, 140737488351231,
+ERASE, 140727690309632, 140727690309632,
+STORE, 140727690309632, 140727690313727,
+STORE, 94121892208640, 94121892921343,
+ERASE, 94121892208640, 94121892208640,
+STORE, 94121892208640, 94121892257791,
+STORE, 94121892257792, 94121892921343,
+ERASE, 94121892257792, 94121892257792,
+STORE, 94121892257792, 94121892802559,
+STORE, 94121892802560, 94121892900863,
+STORE, 94121892900864, 94121892921343,
+STORE, 140662438326272, 140662438498303,
+ERASE, 140662438326272, 140662438326272,
+STORE, 140662438326272, 140662438330367,
+STORE, 140662438330368, 140662438498303,
+ERASE, 140662438330368, 140662438330368,
+STORE, 140662438330368, 140662438453247,
+STORE, 140662438453248, 140662438486015,
+STORE, 140662438486016, 140662438494207,
+STORE, 140662438494208, 140662438498303,
+STORE, 140727690379264, 140727690383359,
+STORE, 140727690366976, 140727690379263,
+STORE, 46970356670464, 46970356678655,
+STORE, 46970356678656, 46970356686847,
+STORE, 46970356686848, 46970356793343,
+STORE, 46970356703232, 46970356793343,
+STORE, 46970356686848, 46970356703231,
+ERASE, 46970356703232, 46970356703232,
+STORE, 46970356703232, 46970356776959,
+STORE, 46970356776960, 46970356793343,
+STORE, 46970356756480, 46970356776959,
+STORE, 46970356703232, 46970356756479,
+ERASE, 46970356703232, 46970356703232,
+STORE, 46970356703232, 46970356756479,
+STORE, 46970356772864, 46970356776959,
+STORE, 46970356756480, 46970356772863,
+ERASE, 46970356756480, 46970356756480,
+STORE, 46970356756480, 46970356772863,
+STORE, 46970356785152, 46970356793343,
+STORE, 46970356776960, 46970356785151,
+ERASE, 46970356776960, 46970356776960,
+STORE, 46970356776960, 46970356785151,
+ERASE, 46970356785152, 46970356785152,
+STORE, 46970356785152, 46970356793343,
+STORE, 46970356793344, 46970358632447,
+STORE, 46970356932608, 46970358632447,
+STORE, 46970356793344, 46970356932607,
+ERASE, 46970356932608, 46970356932608,
+STORE, 46970356932608, 46970358591487,
+STORE, 46970358591488, 46970358632447,
+STORE, 46970358276096, 46970358591487,
+STORE, 46970356932608, 46970358276095,
+ERASE, 46970356932608, 46970356932608,
+STORE, 46970356932608, 46970358276095,
+STORE, 46970358587392, 46970358591487,
+STORE, 46970358276096, 46970358587391,
+ERASE, 46970358276096, 46970358276096,
+STORE, 46970358276096, 46970358587391,
+STORE, 46970358616064, 46970358632447,
+STORE, 46970358591488, 46970358616063,
+ERASE, 46970358591488, 46970358591488,
+STORE, 46970358591488, 46970358616063,
+ERASE, 46970358616064, 46970358616064,
+STORE, 46970358616064, 46970358632447,
+STORE, 46970358616064, 46970358644735,
+ERASE, 46970358591488, 46970358591488,
+STORE, 46970358591488, 46970358607871,
+STORE, 46970358607872, 46970358616063,
+ERASE, 46970356776960, 46970356776960,
+STORE, 46970356776960, 46970356781055,
+STORE, 46970356781056, 46970356785151,
+ERASE, 94121892900864, 94121892900864,
+STORE, 94121892900864, 94121892917247,
+STORE, 94121892917248, 94121892921343,
+ERASE, 140662438486016, 140662438486016,
+STORE, 140662438486016, 140662438490111,
+STORE, 140662438490112, 140662438494207,
+ERASE, 46970356670464, 46970356670464,
+STORE, 94121898610688, 94121898745855,
+STORE, 140737488347136, 140737488351231,
+STORE, 140737189351424, 140737488351231,
+ERASE, 140737189351424, 140737189351424,
+STORE, 140737189351424, 140737189355519,
+STORE, 93847948832768, 93847949545471,
+ERASE, 93847948832768, 93847948832768,
+STORE, 93847948832768, 93847948881919,
+STORE, 93847948881920, 93847949545471,
+ERASE, 93847948881920, 93847948881920,
+STORE, 93847948881920, 93847949426687,
+STORE, 93847949426688, 93847949524991,
+STORE, 93847949524992, 93847949545471,
+STORE, 139698989985792, 139698990157823,
+ERASE, 139698989985792, 139698989985792,
+STORE, 139698989985792, 139698989989887,
+STORE, 139698989989888, 139698990157823,
+ERASE, 139698989989888, 139698989989888,
+STORE, 139698989989888, 139698990112767,
+STORE, 139698990112768, 139698990145535,
+STORE, 139698990145536, 139698990153727,
+STORE, 139698990153728, 139698990157823,
+STORE, 140737189744640, 140737189748735,
+STORE, 140737189732352, 140737189744639,
+STORE, 47933805010944, 47933805019135,
+STORE, 47933805019136, 47933805027327,
+STORE, 47933805027328, 47933805133823,
+STORE, 47933805043712, 47933805133823,
+STORE, 47933805027328, 47933805043711,
+ERASE, 47933805043712, 47933805043712,
+STORE, 47933805043712, 47933805117439,
+STORE, 47933805117440, 47933805133823,
+STORE, 47933805096960, 47933805117439,
+STORE, 47933805043712, 47933805096959,
+ERASE, 47933805043712, 47933805043712,
+STORE, 47933805043712, 47933805096959,
+STORE, 47933805113344, 47933805117439,
+STORE, 47933805096960, 47933805113343,
+ERASE, 47933805096960, 47933805096960,
+STORE, 47933805096960, 47933805113343,
+STORE, 47933805125632, 47933805133823,
+STORE, 47933805117440, 47933805125631,
+ERASE, 47933805117440, 47933805117440,
+STORE, 47933805117440, 47933805125631,
+ERASE, 47933805125632, 47933805125632,
+STORE, 47933805125632, 47933805133823,
+STORE, 47933805133824, 47933806972927,
+STORE, 47933805273088, 47933806972927,
+STORE, 47933805133824, 47933805273087,
+ERASE, 47933805273088, 47933805273088,
+STORE, 47933805273088, 47933806931967,
+STORE, 47933806931968, 47933806972927,
+STORE, 47933806616576, 47933806931967,
+STORE, 47933805273088, 47933806616575,
+ERASE, 47933805273088, 47933805273088,
+STORE, 47933805273088, 47933806616575,
+STORE, 47933806927872, 47933806931967,
+STORE, 47933806616576, 47933806927871,
+ERASE, 47933806616576, 47933806616576,
+STORE, 47933806616576, 47933806927871,
+STORE, 47933806956544, 47933806972927,
+STORE, 47933806931968, 47933806956543,
+ERASE, 47933806931968, 47933806931968,
+STORE, 47933806931968, 47933806956543,
+ERASE, 47933806956544, 47933806956544,
+STORE, 47933806956544, 47933806972927,
+STORE, 47933806956544, 47933806985215,
+ERASE, 47933806931968, 47933806931968,
+STORE, 47933806931968, 47933806948351,
+STORE, 47933806948352, 47933806956543,
+ERASE, 47933805117440, 47933805117440,
+STORE, 47933805117440, 47933805121535,
+STORE, 47933805121536, 47933805125631,
+ERASE, 93847949524992, 93847949524992,
+STORE, 93847949524992, 93847949541375,
+STORE, 93847949541376, 93847949545471,
+ERASE, 139698990145536, 139698990145536,
+STORE, 139698990145536, 139698990149631,
+STORE, 139698990149632, 139698990153727,
+ERASE, 47933805010944, 47933805010944,
+STORE, 140737488347136, 140737488351231,
+STORE, 140725553991680, 140737488351231,
+ERASE, 140725553991680, 140725553991680,
+STORE, 140725553991680, 140725553995775,
+STORE, 93980056248320, 93980056961023,
+ERASE, 93980056248320, 93980056248320,
+STORE, 93980056248320, 93980056297471,
+STORE, 93980056297472, 93980056961023,
+ERASE, 93980056297472, 93980056297472,
+STORE, 93980056297472, 93980056842239,
+STORE, 93980056842240, 93980056940543,
+STORE, 93980056940544, 93980056961023,
+STORE, 140146588971008, 140146589143039,
+ERASE, 140146588971008, 140146588971008,
+STORE, 140146588971008, 140146588975103,
+STORE, 140146588975104, 140146589143039,
+ERASE, 140146588975104, 140146588975104,
+STORE, 140146588975104, 140146589097983,
+STORE, 140146589097984, 140146589130751,
+STORE, 140146589130752, 140146589138943,
+STORE, 140146589138944, 140146589143039,
+STORE, 140725554860032, 140725554864127,
+STORE, 140725554847744, 140725554860031,
+STORE, 47486206025728, 47486206033919,
+STORE, 47486206033920, 47486206042111,
+STORE, 47486206042112, 47486206148607,
+STORE, 47486206058496, 47486206148607,
+STORE, 47486206042112, 47486206058495,
+ERASE, 47486206058496, 47486206058496,
+STORE, 47486206058496, 47486206132223,
+STORE, 47486206132224, 47486206148607,
+STORE, 47486206111744, 47486206132223,
+STORE, 47486206058496, 47486206111743,
+ERASE, 47486206058496, 47486206058496,
+STORE, 47486206058496, 47486206111743,
+STORE, 47486206128128, 47486206132223,
+STORE, 47486206111744, 47486206128127,
+ERASE, 47486206111744, 47486206111744,
+STORE, 47486206111744, 47486206128127,
+STORE, 47486206140416, 47486206148607,
+STORE, 47486206132224, 47486206140415,
+ERASE, 47486206132224, 47486206132224,
+STORE, 47486206132224, 47486206140415,
+ERASE, 47486206140416, 47486206140416,
+STORE, 47486206140416, 47486206148607,
+STORE, 47486206148608, 47486207987711,
+STORE, 47486206287872, 47486207987711,
+STORE, 47486206148608, 47486206287871,
+ERASE, 47486206287872, 47486206287872,
+STORE, 47486206287872, 47486207946751,
+STORE, 47486207946752, 47486207987711,
+STORE, 47486207631360, 47486207946751,
+STORE, 47486206287872, 47486207631359,
+ERASE, 47486206287872, 47486206287872,
+STORE, 47486206287872, 47486207631359,
+STORE, 47486207942656, 47486207946751,
+STORE, 47486207631360, 47486207942655,
+ERASE, 47486207631360, 47486207631360,
+STORE, 47486207631360, 47486207942655,
+STORE, 47486207971328, 47486207987711,
+STORE, 47486207946752, 47486207971327,
+ERASE, 47486207946752, 47486207946752,
+STORE, 47486207946752, 47486207971327,
+ERASE, 47486207971328, 47486207971328,
+STORE, 47486207971328, 47486207987711,
+STORE, 47486207971328, 47486207999999,
+ERASE, 47486207946752, 47486207946752,
+STORE, 47486207946752, 47486207963135,
+STORE, 47486207963136, 47486207971327,
+ERASE, 47486206132224, 47486206132224,
+STORE, 47486206132224, 47486206136319,
+STORE, 47486206136320, 47486206140415,
+ERASE, 93980056940544, 93980056940544,
+STORE, 93980056940544, 93980056956927,
+STORE, 93980056956928, 93980056961023,
+ERASE, 140146589130752, 140146589130752,
+STORE, 140146589130752, 140146589134847,
+STORE, 140146589134848, 140146589138943,
+ERASE, 47486206025728, 47486206025728,
+STORE, 93980070006784, 93980070141951,
+STORE, 140737488347136, 140737488351231,
+STORE, 140727334776832, 140737488351231,
+ERASE, 140727334776832, 140727334776832,
+STORE, 140727334776832, 140727334780927,
+STORE, 94049747247104, 94049747959807,
+ERASE, 94049747247104, 94049747247104,
+STORE, 94049747247104, 94049747296255,
+STORE, 94049747296256, 94049747959807,
+ERASE, 94049747296256, 94049747296256,
+STORE, 94049747296256, 94049747841023,
+STORE, 94049747841024, 94049747939327,
+STORE, 94049747939328, 94049747959807,
+STORE, 140227307216896, 140227307388927,
+ERASE, 140227307216896, 140227307216896,
+STORE, 140227307216896, 140227307220991,
+STORE, 140227307220992, 140227307388927,
+ERASE, 140227307220992, 140227307220992,
+STORE, 140227307220992, 140227307343871,
+STORE, 140227307343872, 140227307376639,
+STORE, 140227307376640, 140227307384831,
+STORE, 140227307384832, 140227307388927,
+STORE, 140727335337984, 140727335342079,
+STORE, 140727335325696, 140727335337983,
+STORE, 47405487779840, 47405487788031,
+STORE, 47405487788032, 47405487796223,
+STORE, 47405487796224, 47405487902719,
+STORE, 47405487812608, 47405487902719,
+STORE, 47405487796224, 47405487812607,
+ERASE, 47405487812608, 47405487812608,
+STORE, 47405487812608, 47405487886335,
+STORE, 47405487886336, 47405487902719,
+STORE, 47405487865856, 47405487886335,
+STORE, 47405487812608, 47405487865855,
+ERASE, 47405487812608, 47405487812608,
+STORE, 47405487812608, 47405487865855,
+STORE, 47405487882240, 47405487886335,
+STORE, 47405487865856, 47405487882239,
+ERASE, 47405487865856, 47405487865856,
+STORE, 47405487865856, 47405487882239,
+STORE, 47405487894528, 47405487902719,
+STORE, 47405487886336, 47405487894527,
+ERASE, 47405487886336, 47405487886336,
+STORE, 47405487886336, 47405487894527,
+ERASE, 47405487894528, 47405487894528,
+STORE, 47405487894528, 47405487902719,
+STORE, 47405487902720, 47405489741823,
+STORE, 47405488041984, 47405489741823,
+STORE, 47405487902720, 47405488041983,
+ERASE, 47405488041984, 47405488041984,
+STORE, 47405488041984, 47405489700863,
+STORE, 47405489700864, 47405489741823,
+STORE, 47405489385472, 47405489700863,
+STORE, 47405488041984, 47405489385471,
+ERASE, 47405488041984, 47405488041984,
+STORE, 47405488041984, 47405489385471,
+STORE, 47405489696768, 47405489700863,
+STORE, 47405489385472, 47405489696767,
+ERASE, 47405489385472, 47405489385472,
+STORE, 47405489385472, 47405489696767,
+STORE, 47405489725440, 47405489741823,
+STORE, 47405489700864, 47405489725439,
+ERASE, 47405489700864, 47405489700864,
+STORE, 47405489700864, 47405489725439,
+ERASE, 47405489725440, 47405489725440,
+STORE, 47405489725440, 47405489741823,
+STORE, 47405489725440, 47405489754111,
+ERASE, 47405489700864, 47405489700864,
+STORE, 47405489700864, 47405489717247,
+STORE, 47405489717248, 47405489725439,
+ERASE, 47405487886336, 47405487886336,
+STORE, 47405487886336, 47405487890431,
+STORE, 47405487890432, 47405487894527,
+ERASE, 94049747939328, 94049747939328,
+STORE, 94049747939328, 94049747955711,
+STORE, 94049747955712, 94049747959807,
+ERASE, 140227307376640, 140227307376640,
+STORE, 140227307376640, 140227307380735,
+STORE, 140227307380736, 140227307384831,
+ERASE, 47405487779840, 47405487779840,
+STORE, 94049758810112, 94049758945279,
+STORE, 140737488347136, 140737488351231,
+STORE, 140727079718912, 140737488351231,
+ERASE, 140727079718912, 140727079718912,
+STORE, 140727079718912, 140727079723007,
+STORE, 94250996527104, 94250997239807,
+ERASE, 94250996527104, 94250996527104,
+STORE, 94250996527104, 94250996576255,
+STORE, 94250996576256, 94250997239807,
+ERASE, 94250996576256, 94250996576256,
+STORE, 94250996576256, 94250997121023,
+STORE, 94250997121024, 94250997219327,
+STORE, 94250997219328, 94250997239807,
+STORE, 140060022587392, 140060022759423,
+ERASE, 140060022587392, 140060022587392,
+STORE, 140060022587392, 140060022591487,
+STORE, 140060022591488, 140060022759423,
+ERASE, 140060022591488, 140060022591488,
+STORE, 140060022591488, 140060022714367,
+STORE, 140060022714368, 140060022747135,
+STORE, 140060022747136, 140060022755327,
+STORE, 140060022755328, 140060022759423,
+STORE, 140727079788544, 140727079792639,
+STORE, 140727079776256, 140727079788543,
+STORE, 47572772409344, 47572772417535,
+STORE, 47572772417536, 47572772425727,
+STORE, 47572772425728, 47572772532223,
+STORE, 47572772442112, 47572772532223,
+STORE, 47572772425728, 47572772442111,
+ERASE, 47572772442112, 47572772442112,
+STORE, 47572772442112, 47572772515839,
+STORE, 47572772515840, 47572772532223,
+STORE, 47572772495360, 47572772515839,
+STORE, 47572772442112, 47572772495359,
+ERASE, 47572772442112, 47572772442112,
+STORE, 47572772442112, 47572772495359,
+STORE, 47572772511744, 47572772515839,
+STORE, 47572772495360, 47572772511743,
+ERASE, 47572772495360, 47572772495360,
+STORE, 47572772495360, 47572772511743,
+STORE, 47572772524032, 47572772532223,
+STORE, 47572772515840, 47572772524031,
+ERASE, 47572772515840, 47572772515840,
+STORE, 47572772515840, 47572772524031,
+ERASE, 47572772524032, 47572772524032,
+STORE, 47572772524032, 47572772532223,
+STORE, 47572772532224, 47572774371327,
+STORE, 47572772671488, 47572774371327,
+STORE, 47572772532224, 47572772671487,
+ERASE, 47572772671488, 47572772671488,
+STORE, 47572772671488, 47572774330367,
+STORE, 47572774330368, 47572774371327,
+STORE, 47572774014976, 47572774330367,
+STORE, 47572772671488, 47572774014975,
+ERASE, 47572772671488, 47572772671488,
+STORE, 47572772671488, 47572774014975,
+STORE, 47572774326272, 47572774330367,
+STORE, 47572774014976, 47572774326271,
+ERASE, 47572774014976, 47572774014976,
+STORE, 47572774014976, 47572774326271,
+STORE, 47572774354944, 47572774371327,
+STORE, 47572774330368, 47572774354943,
+ERASE, 47572774330368, 47572774330368,
+STORE, 47572774330368, 47572774354943,
+ERASE, 47572774354944, 47572774354944,
+STORE, 47572774354944, 47572774371327,
+STORE, 47572774354944, 47572774383615,
+ERASE, 47572774330368, 47572774330368,
+STORE, 47572774330368, 47572774346751,
+STORE, 47572774346752, 47572774354943,
+ERASE, 47572772515840, 47572772515840,
+STORE, 47572772515840, 47572772519935,
+STORE, 47572772519936, 47572772524031,
+ERASE, 94250997219328, 94250997219328,
+STORE, 94250997219328, 94250997235711,
+STORE, 94250997235712, 94250997239807,
+ERASE, 140060022747136, 140060022747136,
+STORE, 140060022747136, 140060022751231,
+STORE, 140060022751232, 140060022755327,
+ERASE, 47572772409344, 47572772409344,
+STORE, 94251018305536, 94251018440703,
+STORE, 140737488347136, 140737488351231,
+STORE, 140730012389376, 140737488351231,
+ERASE, 140730012389376, 140730012389376,
+STORE, 140730012389376, 140730012393471,
+STORE, 94382607675392, 94382607695871,
+ERASE, 94382607675392, 94382607675392,
+STORE, 94382607675392, 94382607679487,
+STORE, 94382607679488, 94382607695871,
+ERASE, 94382607679488, 94382607679488,
+STORE, 94382607679488, 94382607683583,
+STORE, 94382607683584, 94382607687679,
+STORE, 94382607687680, 94382607695871,
+STORE, 140252451454976, 140252451627007,
+ERASE, 140252451454976, 140252451454976,
+STORE, 140252451454976, 140252451459071,
+STORE, 140252451459072, 140252451627007,
+ERASE, 140252451459072, 140252451459072,
+STORE, 140252451459072, 140252451581951,
+STORE, 140252451581952, 140252451614719,
+STORE, 140252451614720, 140252451622911,
+STORE, 140252451622912, 140252451627007,
+STORE, 140730013548544, 140730013552639,
+STORE, 140730013536256, 140730013548543,
+STORE, 47380343541760, 47380343549951,
+STORE, 47380343549952, 47380343558143,
+STORE, 47380343558144, 47380345397247,
+STORE, 47380343697408, 47380345397247,
+STORE, 47380343558144, 47380343697407,
+ERASE, 47380343697408, 47380343697408,
+STORE, 47380343697408, 47380345356287,
+STORE, 47380345356288, 47380345397247,
+STORE, 47380345040896, 47380345356287,
+STORE, 47380343697408, 47380345040895,
+ERASE, 47380343697408, 47380343697408,
+STORE, 47380343697408, 47380345040895,
+STORE, 47380345352192, 47380345356287,
+STORE, 47380345040896, 47380345352191,
+ERASE, 47380345040896, 47380345040896,
+STORE, 47380345040896, 47380345352191,
+STORE, 47380345380864, 47380345397247,
+STORE, 47380345356288, 47380345380863,
+ERASE, 47380345356288, 47380345356288,
+STORE, 47380345356288, 47380345380863,
+ERASE, 47380345380864, 47380345380864,
+STORE, 47380345380864, 47380345397247,
+ERASE, 47380345356288, 47380345356288,
+STORE, 47380345356288, 47380345372671,
+STORE, 47380345372672, 47380345380863,
+ERASE, 94382607687680, 94382607687680,
+STORE, 94382607687680, 94382607691775,
+STORE, 94382607691776, 94382607695871,
+ERASE, 140252451614720, 140252451614720,
+STORE, 140252451614720, 140252451618815,
+STORE, 140252451618816, 140252451622911,
+ERASE, 47380343541760, 47380343541760,
+STORE, 94382626803712, 94382626938879,
+STORE, 140737488347136, 140737488351231,
+STORE, 140730900271104, 140737488351231,
+ERASE, 140730900271104, 140730900271104,
+STORE, 140730900271104, 140730900275199,
+STORE, 93855478120448, 93855478337535,
+ERASE, 93855478120448, 93855478120448,
+STORE, 93855478120448, 93855478198271,
+STORE, 93855478198272, 93855478337535,
+ERASE, 93855478198272, 93855478198272,
+STORE, 93855478198272, 93855478243327,
+STORE, 93855478243328, 93855478288383,
+STORE, 93855478288384, 93855478337535,
+STORE, 140092686573568, 140092686745599,
+ERASE, 140092686573568, 140092686573568,
+STORE, 140092686573568, 140092686577663,
+STORE, 140092686577664, 140092686745599,
+ERASE, 140092686577664, 140092686577664,
+STORE, 140092686577664, 140092686700543,
+STORE, 140092686700544, 140092686733311,
+STORE, 140092686733312, 140092686741503,
+STORE, 140092686741504, 140092686745599,
+STORE, 140730900537344, 140730900541439,
+STORE, 140730900525056, 140730900537343,
+STORE, 47540108423168, 47540108431359,
+STORE, 47540108431360, 47540108439551,
+STORE, 47540108439552, 47540110278655,
+STORE, 47540108578816, 47540110278655,
+STORE, 47540108439552, 47540108578815,
+ERASE, 47540108578816, 47540108578816,
+STORE, 47540108578816, 47540110237695,
+STORE, 47540110237696, 47540110278655,
+STORE, 47540109922304, 47540110237695,
+STORE, 47540108578816, 47540109922303,
+ERASE, 47540108578816, 47540108578816,
+STORE, 47540108578816, 47540109922303,
+STORE, 47540110233600, 47540110237695,
+STORE, 47540109922304, 47540110233599,
+ERASE, 47540109922304, 47540109922304,
+STORE, 47540109922304, 47540110233599,
+STORE, 47540110262272, 47540110278655,
+STORE, 47540110237696, 47540110262271,
+ERASE, 47540110237696, 47540110237696,
+STORE, 47540110237696, 47540110262271,
+ERASE, 47540110262272, 47540110262272,
+STORE, 47540110262272, 47540110278655,
+ERASE, 47540110237696, 47540110237696,
+STORE, 47540110237696, 47540110254079,
+STORE, 47540110254080, 47540110262271,
+ERASE, 93855478288384, 93855478288384,
+STORE, 93855478288384, 93855478333439,
+STORE, 93855478333440, 93855478337535,
+ERASE, 140092686733312, 140092686733312,
+STORE, 140092686733312, 140092686737407,
+STORE, 140092686737408, 140092686741503,
+ERASE, 47540108423168, 47540108423168,
+STORE, 93855492222976, 93855492358143,
+STORE, 93855492222976, 93855492493311,
+STORE, 140737488347136, 140737488351231,
+STORE, 140733498146816, 140737488351231,
+ERASE, 140733498146816, 140733498146816,
+STORE, 140733498146816, 140733498150911,
+STORE, 94170739654656, 94170740367359,
+ERASE, 94170739654656, 94170739654656,
+STORE, 94170739654656, 94170739703807,
+STORE, 94170739703808, 94170740367359,
+ERASE, 94170739703808, 94170739703808,
+STORE, 94170739703808, 94170740248575,
+STORE, 94170740248576, 94170740346879,
+STORE, 94170740346880, 94170740367359,
+STORE, 140024788877312, 140024789049343,
+ERASE, 140024788877312, 140024788877312,
+STORE, 140024788877312, 140024788881407,
+STORE, 140024788881408, 140024789049343,
+ERASE, 140024788881408, 140024788881408,
+STORE, 140024788881408, 140024789004287,
+STORE, 140024789004288, 140024789037055,
+STORE, 140024789037056, 140024789045247,
+STORE, 140024789045248, 140024789049343,
+STORE, 140733499023360, 140733499027455,
+STORE, 140733499011072, 140733499023359,
+STORE, 47608006119424, 47608006127615,
+STORE, 47608006127616, 47608006135807,
+STORE, 47608006135808, 47608006242303,
+STORE, 47608006152192, 47608006242303,
+STORE, 47608006135808, 47608006152191,
+ERASE, 47608006152192, 47608006152192,
+STORE, 47608006152192, 47608006225919,
+STORE, 47608006225920, 47608006242303,
+STORE, 47608006205440, 47608006225919,
+STORE, 47608006152192, 47608006205439,
+ERASE, 47608006152192, 47608006152192,
+STORE, 47608006152192, 47608006205439,
+STORE, 47608006221824, 47608006225919,
+STORE, 47608006205440, 47608006221823,
+ERASE, 47608006205440, 47608006205440,
+STORE, 47608006205440, 47608006221823,
+STORE, 47608006234112, 47608006242303,
+STORE, 47608006225920, 47608006234111,
+ERASE, 47608006225920, 47608006225920,
+STORE, 47608006225920, 47608006234111,
+ERASE, 47608006234112, 47608006234112,
+STORE, 47608006234112, 47608006242303,
+STORE, 47608006242304, 47608008081407,
+STORE, 47608006381568, 47608008081407,
+STORE, 47608006242304, 47608006381567,
+ERASE, 47608006381568, 47608006381568,
+STORE, 47608006381568, 47608008040447,
+STORE, 47608008040448, 47608008081407,
+STORE, 47608007725056, 47608008040447,
+STORE, 47608006381568, 47608007725055,
+ERASE, 47608006381568, 47608006381568,
+STORE, 47608006381568, 47608007725055,
+STORE, 47608008036352, 47608008040447,
+STORE, 47608007725056, 47608008036351,
+ERASE, 47608007725056, 47608007725056,
+STORE, 47608007725056, 47608008036351,
+STORE, 47608008065024, 47608008081407,
+STORE, 47608008040448, 47608008065023,
+ERASE, 47608008040448, 47608008040448,
+STORE, 47608008040448, 47608008065023,
+ERASE, 47608008065024, 47608008065024,
+STORE, 47608008065024, 47608008081407,
+STORE, 47608008065024, 47608008093695,
+ERASE, 47608008040448, 47608008040448,
+STORE, 47608008040448, 47608008056831,
+STORE, 47608008056832, 47608008065023,
+ERASE, 47608006225920, 47608006225920,
+STORE, 47608006225920, 47608006230015,
+STORE, 47608006230016, 47608006234111,
+ERASE, 94170740346880, 94170740346880,
+STORE, 94170740346880, 94170740363263,
+STORE, 94170740363264, 94170740367359,
+ERASE, 140024789037056, 140024789037056,
+STORE, 140024789037056, 140024789041151,
+STORE, 140024789041152, 140024789045247,
+ERASE, 47608006119424, 47608006119424,
+STORE, 140737488347136, 140737488351231,
+STORE, 140730264326144, 140737488351231,
+ERASE, 140730264326144, 140730264326144,
+STORE, 140730264326144, 140730264330239,
+STORE, 94653216407552, 94653217120255,
+ERASE, 94653216407552, 94653216407552,
+STORE, 94653216407552, 94653216456703,
+STORE, 94653216456704, 94653217120255,
+ERASE, 94653216456704, 94653216456704,
+STORE, 94653216456704, 94653217001471,
+STORE, 94653217001472, 94653217099775,
+STORE, 94653217099776, 94653217120255,
+STORE, 140103617011712, 140103617183743,
+ERASE, 140103617011712, 140103617011712,
+STORE, 140103617011712, 140103617015807,
+STORE, 140103617015808, 140103617183743,
+ERASE, 140103617015808, 140103617015808,
+STORE, 140103617015808, 140103617138687,
+STORE, 140103617138688, 140103617171455,
+STORE, 140103617171456, 140103617179647,
+STORE, 140103617179648, 140103617183743,
+STORE, 140730265427968, 140730265432063,
+STORE, 140730265415680, 140730265427967,
+STORE, 47529177985024, 47529177993215,
+STORE, 47529177993216, 47529178001407,
+STORE, 47529178001408, 47529178107903,
+STORE, 47529178017792, 47529178107903,
+STORE, 47529178001408, 47529178017791,
+ERASE, 47529178017792, 47529178017792,
+STORE, 47529178017792, 47529178091519,
+STORE, 47529178091520, 47529178107903,
+STORE, 47529178071040, 47529178091519,
+STORE, 47529178017792, 47529178071039,
+ERASE, 47529178017792, 47529178017792,
+STORE, 47529178017792, 47529178071039,
+STORE, 47529178087424, 47529178091519,
+STORE, 47529178071040, 47529178087423,
+ERASE, 47529178071040, 47529178071040,
+STORE, 47529178071040, 47529178087423,
+STORE, 47529178099712, 47529178107903,
+STORE, 47529178091520, 47529178099711,
+ERASE, 47529178091520, 47529178091520,
+STORE, 47529178091520, 47529178099711,
+ERASE, 47529178099712, 47529178099712,
+STORE, 47529178099712, 47529178107903,
+STORE, 47529178107904, 47529179947007,
+STORE, 47529178247168, 47529179947007,
+STORE, 47529178107904, 47529178247167,
+ERASE, 47529178247168, 47529178247168,
+STORE, 47529178247168, 47529179906047,
+STORE, 47529179906048, 47529179947007,
+STORE, 47529179590656, 47529179906047,
+STORE, 47529178247168, 47529179590655,
+ERASE, 47529178247168, 47529178247168,
+STORE, 47529178247168, 47529179590655,
+STORE, 47529179901952, 47529179906047,
+STORE, 47529179590656, 47529179901951,
+ERASE, 47529179590656, 47529179590656,
+STORE, 47529179590656, 47529179901951,
+STORE, 47529179930624, 47529179947007,
+STORE, 47529179906048, 47529179930623,
+ERASE, 47529179906048, 47529179906048,
+STORE, 47529179906048, 47529179930623,
+ERASE, 47529179930624, 47529179930624,
+STORE, 47529179930624, 47529179947007,
+STORE, 47529179930624, 47529179959295,
+ERASE, 47529179906048, 47529179906048,
+STORE, 47529179906048, 47529179922431,
+STORE, 47529179922432, 47529179930623,
+ERASE, 47529178091520, 47529178091520,
+STORE, 47529178091520, 47529178095615,
+STORE, 47529178095616, 47529178099711,
+ERASE, 94653217099776, 94653217099776,
+STORE, 94653217099776, 94653217116159,
+STORE, 94653217116160, 94653217120255,
+ERASE, 140103617171456, 140103617171456,
+STORE, 140103617171456, 140103617175551,
+STORE, 140103617175552, 140103617179647,
+ERASE, 47529177985024, 47529177985024,
+STORE, 94653241135104, 94653241270271,
+STORE, 140737488347136, 140737488351231,
+STORE, 140736284549120, 140737488351231,
+ERASE, 140736284549120, 140736284549120,
+STORE, 140736284549120, 140736284553215,
+STORE, 93963663822848, 93963664506879,
+ERASE, 93963663822848, 93963663822848,
+STORE, 93963663822848, 93963663884287,
+STORE, 93963663884288, 93963664506879,
+ERASE, 93963663884288, 93963663884288,
+STORE, 93963663884288, 93963664240639,
+STORE, 93963664240640, 93963664379903,
+STORE, 93963664379904, 93963664506879,
+STORE, 140450188439552, 140450188611583,
+ERASE, 140450188439552, 140450188439552,
+STORE, 140450188439552, 140450188443647,
+STORE, 140450188443648, 140450188611583,
+ERASE, 140450188443648, 140450188443648,
+STORE, 140450188443648, 140450188566527,
+STORE, 140450188566528, 140450188599295,
+STORE, 140450188599296, 140450188607487,
+STORE, 140450188607488, 140450188611583,
+STORE, 140736284577792, 140736284581887,
+STORE, 140736284565504, 140736284577791,
+STORE, 47182606557184, 47182606565375,
+STORE, 47182606565376, 47182606573567,
+STORE, 47182606573568, 47182608412671,
+STORE, 47182606712832, 47182608412671,
+STORE, 47182606573568, 47182606712831,
+ERASE, 47182606712832, 47182606712832,
+STORE, 47182606712832, 47182608371711,
+STORE, 47182608371712, 47182608412671,
+STORE, 47182608056320, 47182608371711,
+STORE, 47182606712832, 47182608056319,
+ERASE, 47182606712832, 47182606712832,
+STORE, 47182606712832, 47182608056319,
+STORE, 47182608367616, 47182608371711,
+STORE, 47182608056320, 47182608367615,
+ERASE, 47182608056320, 47182608056320,
+STORE, 47182608056320, 47182608367615,
+STORE, 47182608396288, 47182608412671,
+STORE, 47182608371712, 47182608396287,
+ERASE, 47182608371712, 47182608371712,
+STORE, 47182608371712, 47182608396287,
+ERASE, 47182608396288, 47182608396288,
+STORE, 47182608396288, 47182608412671,
+STORE, 47182608412672, 47182608523263,
+STORE, 47182608429056, 47182608523263,
+STORE, 47182608412672, 47182608429055,
+ERASE, 47182608429056, 47182608429056,
+STORE, 47182608429056, 47182608515071,
+STORE, 47182608515072, 47182608523263,
+STORE, 47182608490496, 47182608515071,
+STORE, 47182608429056, 47182608490495,
+ERASE, 47182608429056, 47182608429056,
+STORE, 47182608429056, 47182608490495,
+STORE, 47182608510976, 47182608515071,
+STORE, 47182608490496, 47182608510975,
+ERASE, 47182608490496, 47182608490496,
+STORE, 47182608490496, 47182608510975,
+ERASE, 47182608515072, 47182608515072,
+STORE, 47182608515072, 47182608523263,
+STORE, 47182608523264, 47182608568319,
+ERASE, 47182608523264, 47182608523264,
+STORE, 47182608523264, 47182608531455,
+STORE, 47182608531456, 47182608568319,
+STORE, 47182608551936, 47182608568319,
+STORE, 47182608531456, 47182608551935,
+ERASE, 47182608531456, 47182608531456,
+STORE, 47182608531456, 47182608551935,
+STORE, 47182608560128, 47182608568319,
+STORE, 47182608551936, 47182608560127,
+ERASE, 47182608551936, 47182608551936,
+STORE, 47182608551936, 47182608568319,
+ERASE, 47182608551936, 47182608551936,
+STORE, 47182608551936, 47182608560127,
+STORE, 47182608560128, 47182608568319,
+ERASE, 47182608560128, 47182608560128,
+STORE, 47182608560128, 47182608568319,
+STORE, 47182608568320, 47182608916479,
+STORE, 47182608609280, 47182608916479,
+STORE, 47182608568320, 47182608609279,
+ERASE, 47182608609280, 47182608609280,
+STORE, 47182608609280, 47182608891903,
+STORE, 47182608891904, 47182608916479,
+STORE, 47182608822272, 47182608891903,
+STORE, 47182608609280, 47182608822271,
+ERASE, 47182608609280, 47182608609280,
+STORE, 47182608609280, 47182608822271,
+STORE, 47182608887808, 47182608891903,
+STORE, 47182608822272, 47182608887807,
+ERASE, 47182608822272, 47182608822272,
+STORE, 47182608822272, 47182608887807,
+ERASE, 47182608891904, 47182608891904,
+STORE, 47182608891904, 47182608916479,
+STORE, 47182608916480, 47182611177471,
+STORE, 47182609068032, 47182611177471,
+STORE, 47182608916480, 47182609068031,
+ERASE, 47182609068032, 47182609068032,
+STORE, 47182609068032, 47182611161087,
+STORE, 47182611161088, 47182611177471,
+STORE, 47182611169280, 47182611177471,
+STORE, 47182611161088, 47182611169279,
+ERASE, 47182611161088, 47182611161088,
+STORE, 47182611161088, 47182611169279,
+ERASE, 47182611169280, 47182611169280,
+STORE, 47182611169280, 47182611177471,
+STORE, 47182611177472, 47182611312639,
+ERASE, 47182611177472, 47182611177472,
+STORE, 47182611177472, 47182611202047,
+STORE, 47182611202048, 47182611312639,
+STORE, 47182611263488, 47182611312639,
+STORE, 47182611202048, 47182611263487,
+ERASE, 47182611202048, 47182611202048,
+STORE, 47182611202048, 47182611263487,
+STORE, 47182611288064, 47182611312639,
+STORE, 47182611263488, 47182611288063,
+ERASE, 47182611263488, 47182611263488,
+STORE, 47182611263488, 47182611312639,
+ERASE, 47182611263488, 47182611263488,
+STORE, 47182611263488, 47182611288063,
+STORE, 47182611288064, 47182611312639,
+STORE, 47182611296256, 47182611312639,
+STORE, 47182611288064, 47182611296255,
+ERASE, 47182611288064, 47182611288064,
+STORE, 47182611288064, 47182611296255,
+ERASE, 47182611296256, 47182611296256,
+STORE, 47182611296256, 47182611312639,
+STORE, 47182611296256, 47182611320831,
+STORE, 47182611320832, 47182611484671,
+ERASE, 47182611320832, 47182611320832,
+STORE, 47182611320832, 47182611333119,
+STORE, 47182611333120, 47182611484671,
+STORE, 47182611431424, 47182611484671,
+STORE, 47182611333120, 47182611431423,
+ERASE, 47182611333120, 47182611333120,
+STORE, 47182611333120, 47182611431423,
+STORE, 47182611476480, 47182611484671,
+STORE, 47182611431424, 47182611476479,
+ERASE, 47182611431424, 47182611431424,
+STORE, 47182611431424, 47182611484671,
+ERASE, 47182611431424, 47182611431424,
+STORE, 47182611431424, 47182611476479,
+STORE, 47182611476480, 47182611484671,
+ERASE, 47182611476480, 47182611476480,
+STORE, 47182611476480, 47182611484671,
+STORE, 47182611484672, 47182612082687,
+STORE, 47182611603456, 47182612082687,
+STORE, 47182611484672, 47182611603455,
+ERASE, 47182611603456, 47182611603456,
+STORE, 47182611603456, 47182612029439,
+STORE, 47182612029440, 47182612082687,
+STORE, 47182611918848, 47182612029439,
+STORE, 47182611603456, 47182611918847,
+ERASE, 47182611603456, 47182611603456,
+STORE, 47182611603456, 47182611918847,
+STORE, 47182612025344, 47182612029439,
+STORE, 47182611918848, 47182612025343,
+ERASE, 47182611918848, 47182611918848,
+STORE, 47182611918848, 47182612025343,
+ERASE, 47182612029440, 47182612029440,
+STORE, 47182612029440, 47182612082687,
+STORE, 47182612082688, 47182615134207,
+STORE, 47182612627456, 47182615134207,
+STORE, 47182612082688, 47182612627455,
+ERASE, 47182612627456, 47182612627456,
+STORE, 47182612627456, 47182614913023,
+STORE, 47182614913024, 47182615134207,
+STORE, 47182614323200, 47182614913023,
+STORE, 47182612627456, 47182614323199,
+ERASE, 47182612627456, 47182612627456,
+STORE, 47182612627456, 47182614323199,
+STORE, 47182614908928, 47182614913023,
+STORE, 47182614323200, 47182614908927,
+ERASE, 47182614323200, 47182614323200,
+STORE, 47182614323200, 47182614908927,
+STORE, 47182615117824, 47182615134207,
+STORE, 47182614913024, 47182615117823,
+ERASE, 47182614913024, 47182614913024,
+STORE, 47182614913024, 47182615117823,
+ERASE, 47182615117824, 47182615117824,
+STORE, 47182615117824, 47182615134207,
+STORE, 47182615134208, 47182615166975,
+ERASE, 47182615134208, 47182615134208,
+STORE, 47182615134208, 47182615142399,
+STORE, 47182615142400, 47182615166975,
+STORE, 47182615154688, 47182615166975,
+STORE, 47182615142400, 47182615154687,
+ERASE, 47182615142400, 47182615142400,
+STORE, 47182615142400, 47182615154687,
+STORE, 47182615158784, 47182615166975,
+STORE, 47182615154688, 47182615158783,
+ERASE, 47182615154688, 47182615154688,
+STORE, 47182615154688, 47182615166975,
+ERASE, 47182615154688, 47182615154688,
+STORE, 47182615154688, 47182615158783,
+STORE, 47182615158784, 47182615166975,
+ERASE, 47182615158784, 47182615158784,
+STORE, 47182615158784, 47182615166975,
+STORE, 47182615166976, 47182615203839,
+ERASE, 47182615166976, 47182615166976,
+STORE, 47182615166976, 47182615175167,
+STORE, 47182615175168, 47182615203839,
+STORE, 47182615191552, 47182615203839,
+STORE, 47182615175168, 47182615191551,
+ERASE, 47182615175168, 47182615175168,
+STORE, 47182615175168, 47182615191551,
+STORE, 47182615195648, 47182615203839,
+STORE, 47182615191552, 47182615195647,
+ERASE, 47182615191552, 47182615191552,
+STORE, 47182615191552, 47182615203839,
+ERASE, 47182615191552, 47182615191552,
+STORE, 47182615191552, 47182615195647,
+STORE, 47182615195648, 47182615203839,
+ERASE, 47182615195648, 47182615195648,
+STORE, 47182615195648, 47182615203839,
+STORE, 47182615203840, 47182615678975,
+ERASE, 47182615203840, 47182615203840,
+STORE, 47182615203840, 47182615212031,
+STORE, 47182615212032, 47182615678975,
+STORE, 47182615547904, 47182615678975,
+STORE, 47182615212032, 47182615547903,
+ERASE, 47182615212032, 47182615212032,
+STORE, 47182615212032, 47182615547903,
+STORE, 47182615670784, 47182615678975,
+STORE, 47182615547904, 47182615670783,
+ERASE, 47182615547904, 47182615547904,
+STORE, 47182615547904, 47182615678975,
+ERASE, 47182615547904, 47182615547904,
+STORE, 47182615547904, 47182615670783,
+STORE, 47182615670784, 47182615678975,
+ERASE, 47182615670784, 47182615670784,
+STORE, 47182615670784, 47182615678975,
+STORE, 47182615678976, 47182615687167,
+STORE, 47182615687168, 47182615707647,
+ERASE, 47182615687168, 47182615687168,
+STORE, 47182615687168, 47182615691263,
+STORE, 47182615691264, 47182615707647,
+STORE, 47182615695360, 47182615707647,
+STORE, 47182615691264, 47182615695359,
+ERASE, 47182615691264, 47182615691264,
+STORE, 47182615691264, 47182615695359,
+STORE, 47182615699456, 47182615707647,
+STORE, 47182615695360, 47182615699455,
+ERASE, 47182615695360, 47182615695360,
+STORE, 47182615695360, 47182615707647,
+ERASE, 47182615695360, 47182615695360,
+STORE, 47182615695360, 47182615699455,
+STORE, 47182615699456, 47182615707647,
+ERASE, 47182615699456, 47182615699456,
+STORE, 47182615699456, 47182615707647,
+STORE, 47182615707648, 47182615715839,
+ERASE, 47182608371712, 47182608371712,
+STORE, 47182608371712, 47182608388095,
+STORE, 47182608388096, 47182608396287,
+ERASE, 47182615699456, 47182615699456,
+STORE, 47182615699456, 47182615703551,
+STORE, 47182615703552, 47182615707647,
+ERASE, 47182611288064, 47182611288064,
+STORE, 47182611288064, 47182611292159,
+STORE, 47182611292160, 47182611296255,
+ERASE, 47182615670784, 47182615670784,
+STORE, 47182615670784, 47182615674879,
+STORE, 47182615674880, 47182615678975,
+ERASE, 47182615195648, 47182615195648,
+STORE, 47182615195648, 47182615199743,
+STORE, 47182615199744, 47182615203839,
+ERASE, 47182615158784, 47182615158784,
+STORE, 47182615158784, 47182615162879,
+STORE, 47182615162880, 47182615166975,
+ERASE, 47182614913024, 47182614913024,
+STORE, 47182614913024, 47182615109631,
+STORE, 47182615109632, 47182615117823,
+ERASE, 47182612029440, 47182612029440,
+STORE, 47182612029440, 47182612066303,
+STORE, 47182612066304, 47182612082687,
+ERASE, 47182611476480, 47182611476480,
+STORE, 47182611476480, 47182611480575,
+STORE, 47182611480576, 47182611484671,
+ERASE, 47182611161088, 47182611161088,
+STORE, 47182611161088, 47182611165183,
+STORE, 47182611165184, 47182611169279,
+ERASE, 47182608891904, 47182608891904,
+STORE, 47182608891904, 47182608912383,
+STORE, 47182608912384, 47182608916479,
+ERASE, 47182608560128, 47182608560128,
+STORE, 47182608560128, 47182608564223,
+STORE, 47182608564224, 47182608568319,
+ERASE, 47182608515072, 47182608515072,
+STORE, 47182608515072, 47182608519167,
+STORE, 47182608519168, 47182608523263,
+ERASE, 93963664379904, 93963664379904,
+STORE, 93963664379904, 93963664502783,
+STORE, 93963664502784, 93963664506879,
+ERASE, 140450188599296, 140450188599296,
+STORE, 140450188599296, 140450188603391,
+STORE, 140450188603392, 140450188607487,
+ERASE, 47182606557184, 47182606557184,
+STORE, 93963694723072, 93963694858239,
+STORE, 140737488347136, 140737488351231,
+STORE, 140730313261056, 140737488351231,
+ERASE, 140730313261056, 140730313261056,
+STORE, 140730313261056, 140730313265151,
+STORE, 94386579017728, 94386579697663,
+ERASE, 94386579017728, 94386579017728,
+STORE, 94386579017728, 94386579083263,
+STORE, 94386579083264, 94386579697663,
+ERASE, 94386579083264, 94386579083264,
+STORE, 94386579083264, 94386579431423,
+STORE, 94386579431424, 94386579570687,
+STORE, 94386579570688, 94386579697663,
+STORE, 140124810838016, 140124811010047,
+ERASE, 140124810838016, 140124810838016,
+STORE, 140124810838016, 140124810842111,
+STORE, 140124810842112, 140124811010047,
+ERASE, 140124810842112, 140124810842112,
+STORE, 140124810842112, 140124810964991,
+STORE, 140124810964992, 140124810997759,
+STORE, 140124810997760, 140124811005951,
+STORE, 140124811005952, 140124811010047,
+STORE, 140730313601024, 140730313605119,
+STORE, 140730313588736, 140730313601023,
+STORE, 47507984158720, 47507984166911,
+STORE, 47507984166912, 47507984175103,
+STORE, 47507984175104, 47507986014207,
+STORE, 47507984314368, 47507986014207,
+STORE, 47507984175104, 47507984314367,
+ERASE, 47507984314368, 47507984314368,
+STORE, 47507984314368, 47507985973247,
+STORE, 47507985973248, 47507986014207,
+STORE, 47507985657856, 47507985973247,
+STORE, 47507984314368, 47507985657855,
+ERASE, 47507984314368, 47507984314368,
+STORE, 47507984314368, 47507985657855,
+STORE, 47507985969152, 47507985973247,
+STORE, 47507985657856, 47507985969151,
+ERASE, 47507985657856, 47507985657856,
+STORE, 47507985657856, 47507985969151,
+STORE, 47507985997824, 47507986014207,
+STORE, 47507985973248, 47507985997823,
+ERASE, 47507985973248, 47507985973248,
+STORE, 47507985973248, 47507985997823,
+ERASE, 47507985997824, 47507985997824,
+STORE, 47507985997824, 47507986014207,
+STORE, 47507986014208, 47507986124799,
+STORE, 47507986030592, 47507986124799,
+STORE, 47507986014208, 47507986030591,
+ERASE, 47507986030592, 47507986030592,
+STORE, 47507986030592, 47507986116607,
+STORE, 47507986116608, 47507986124799,
+STORE, 47507986092032, 47507986116607,
+STORE, 47507986030592, 47507986092031,
+ERASE, 47507986030592, 47507986030592,
+STORE, 47507986030592, 47507986092031,
+STORE, 47507986112512, 47507986116607,
+STORE, 47507986092032, 47507986112511,
+ERASE, 47507986092032, 47507986092032,
+STORE, 47507986092032, 47507986112511,
+ERASE, 47507986116608, 47507986116608,
+STORE, 47507986116608, 47507986124799,
+STORE, 47507986124800, 47507986169855,
+ERASE, 47507986124800, 47507986124800,
+STORE, 47507986124800, 47507986132991,
+STORE, 47507986132992, 47507986169855,
+STORE, 47507986153472, 47507986169855,
+STORE, 47507986132992, 47507986153471,
+ERASE, 47507986132992, 47507986132992,
+STORE, 47507986132992, 47507986153471,
+STORE, 47507986161664, 47507986169855,
+STORE, 47507986153472, 47507986161663,
+ERASE, 47507986153472, 47507986153472,
+STORE, 47507986153472, 47507986169855,
+ERASE, 47507986153472, 47507986153472,
+STORE, 47507986153472, 47507986161663,
+STORE, 47507986161664, 47507986169855,
+ERASE, 47507986161664, 47507986161664,
+STORE, 47507986161664, 47507986169855,
+STORE, 47507986169856, 47507986518015,
+STORE, 47507986210816, 47507986518015,
+STORE, 47507986169856, 47507986210815,
+ERASE, 47507986210816, 47507986210816,
+STORE, 47507986210816, 47507986493439,
+STORE, 47507986493440, 47507986518015,
+STORE, 47507986423808, 47507986493439,
+STORE, 47507986210816, 47507986423807,
+ERASE, 47507986210816, 47507986210816,
+STORE, 47507986210816, 47507986423807,
+STORE, 47507986489344, 47507986493439,
+STORE, 47507986423808, 47507986489343,
+ERASE, 47507986423808, 47507986423808,
+STORE, 47507986423808, 47507986489343,
+ERASE, 47507986493440, 47507986493440,
+STORE, 47507986493440, 47507986518015,
+STORE, 47507986518016, 47507988779007,
+STORE, 47507986669568, 47507988779007,
+STORE, 47507986518016, 47507986669567,
+ERASE, 47507986669568, 47507986669568,
+STORE, 47507986669568, 47507988762623,
+STORE, 47507988762624, 47507988779007,
+STORE, 47507988770816, 47507988779007,
+STORE, 47507988762624, 47507988770815,
+ERASE, 47507988762624, 47507988762624,
+STORE, 47507988762624, 47507988770815,
+ERASE, 47507988770816, 47507988770816,
+STORE, 47507988770816, 47507988779007,
+STORE, 47507988779008, 47507988914175,
+ERASE, 47507988779008, 47507988779008,
+STORE, 47507988779008, 47507988803583,
+STORE, 47507988803584, 47507988914175,
+STORE, 47507988865024, 47507988914175,
+STORE, 47507988803584, 47507988865023,
+ERASE, 47507988803584, 47507988803584,
+STORE, 47507988803584, 47507988865023,
+STORE, 47507988889600, 47507988914175,
+STORE, 47507988865024, 47507988889599,
+ERASE, 47507988865024, 47507988865024,
+STORE, 47507988865024, 47507988914175,
+ERASE, 47507988865024, 47507988865024,
+STORE, 47507988865024, 47507988889599,
+STORE, 47507988889600, 47507988914175,
+STORE, 47507988897792, 47507988914175,
+STORE, 47507988889600, 47507988897791,
+ERASE, 47507988889600, 47507988889600,
+STORE, 47507988889600, 47507988897791,
+ERASE, 47507988897792, 47507988897792,
+STORE, 47507988897792, 47507988914175,
+STORE, 47507988897792, 47507988922367,
+STORE, 47507988922368, 47507989086207,
+ERASE, 47507988922368, 47507988922368,
+STORE, 47507988922368, 47507988934655,
+STORE, 47507988934656, 47507989086207,
+STORE, 47507989032960, 47507989086207,
+STORE, 47507988934656, 47507989032959,
+ERASE, 47507988934656, 47507988934656,
+STORE, 47507988934656, 47507989032959,
+STORE, 47507989078016, 47507989086207,
+STORE, 47507989032960, 47507989078015,
+ERASE, 47507989032960, 47507989032960,
+STORE, 47507989032960, 47507989086207,
+ERASE, 47507989032960, 47507989032960,
+STORE, 47507989032960, 47507989078015,
+STORE, 47507989078016, 47507989086207,
+ERASE, 47507989078016, 47507989078016,
+STORE, 47507989078016, 47507989086207,
+STORE, 47507989086208, 47507989684223,
+STORE, 47507989204992, 47507989684223,
+STORE, 47507989086208, 47507989204991,
+ERASE, 47507989204992, 47507989204992,
+STORE, 47507989204992, 47507989630975,
+STORE, 47507989630976, 47507989684223,
+STORE, 47507989520384, 47507989630975,
+STORE, 47507989204992, 47507989520383,
+ERASE, 47507989204992, 47507989204992,
+STORE, 47507989204992, 47507989520383,
+STORE, 47507989626880, 47507989630975,
+STORE, 47507989520384, 47507989626879,
+ERASE, 47507989520384, 47507989520384,
+STORE, 47507989520384, 47507989626879,
+ERASE, 47507989630976, 47507989630976,
+STORE, 47507989630976, 47507989684223,
+STORE, 47507989684224, 47507992735743,
+STORE, 47507990228992, 47507992735743,
+STORE, 47507989684224, 47507990228991,
+ERASE, 47507990228992, 47507990228992,
+STORE, 47507990228992, 47507992514559,
+STORE, 47507992514560, 47507992735743,
+STORE, 47507991924736, 47507992514559,
+STORE, 47507990228992, 47507991924735,
+ERASE, 47507990228992, 47507990228992,
+STORE, 47507990228992, 47507991924735,
+STORE, 47507992510464, 47507992514559,
+STORE, 47507991924736, 47507992510463,
+ERASE, 47507991924736, 47507991924736,
+STORE, 47507991924736, 47507992510463,
+STORE, 47507992719360, 47507992735743,
+STORE, 47507992514560, 47507992719359,
+ERASE, 47507992514560, 47507992514560,
+STORE, 47507992514560, 47507992719359,
+ERASE, 47507992719360, 47507992719360,
+STORE, 47507992719360, 47507992735743,
+STORE, 47507992735744, 47507992768511,
+ERASE, 47507992735744, 47507992735744,
+STORE, 47507992735744, 47507992743935,
+STORE, 47507992743936, 47507992768511,
+STORE, 47507992756224, 47507992768511,
+STORE, 47507992743936, 47507992756223,
+ERASE, 47507992743936, 47507992743936,
+STORE, 47507992743936, 47507992756223,
+STORE, 47507992760320, 47507992768511,
+STORE, 47507992756224, 47507992760319,
+ERASE, 47507992756224, 47507992756224,
+STORE, 47507992756224, 47507992768511,
+ERASE, 47507992756224, 47507992756224,
+STORE, 47507992756224, 47507992760319,
+STORE, 47507992760320, 47507992768511,
+ERASE, 47507992760320, 47507992760320,
+STORE, 47507992760320, 47507992768511,
+STORE, 47507992768512, 47507992805375,
+ERASE, 47507992768512, 47507992768512,
+STORE, 47507992768512, 47507992776703,
+STORE, 47507992776704, 47507992805375,
+STORE, 47507992793088, 47507992805375,
+STORE, 47507992776704, 47507992793087,
+ERASE, 47507992776704, 47507992776704,
+STORE, 47507992776704, 47507992793087,
+STORE, 47507992797184, 47507992805375,
+STORE, 47507992793088, 47507992797183,
+ERASE, 47507992793088, 47507992793088,
+STORE, 47507992793088, 47507992805375,
+ERASE, 47507992793088, 47507992793088,
+STORE, 47507992793088, 47507992797183,
+STORE, 47507992797184, 47507992805375,
+ERASE, 47507992797184, 47507992797184,
+STORE, 47507992797184, 47507992805375,
+STORE, 47507992805376, 47507993280511,
+ERASE, 47507992805376, 47507992805376,
+STORE, 47507992805376, 47507992813567,
+STORE, 47507992813568, 47507993280511,
+STORE, 47507993149440, 47507993280511,
+STORE, 47507992813568, 47507993149439,
+ERASE, 47507992813568, 47507992813568,
+STORE, 47507992813568, 47507993149439,
+STORE, 47507993272320, 47507993280511,
+STORE, 47507993149440, 47507993272319,
+ERASE, 47507993149440, 47507993149440,
+STORE, 47507993149440, 47507993280511,
+ERASE, 47507993149440, 47507993149440,
+STORE, 47507993149440, 47507993272319,
+STORE, 47507993272320, 47507993280511,
+ERASE, 47507993272320, 47507993272320,
+STORE, 47507993272320, 47507993280511,
+STORE, 47507993280512, 47507993288703,
+STORE, 47507993288704, 47507993309183,
+ERASE, 47507993288704, 47507993288704,
+STORE, 47507993288704, 47507993292799,
+STORE, 47507993292800, 47507993309183,
+STORE, 47507993296896, 47507993309183,
+STORE, 47507993292800, 47507993296895,
+ERASE, 47507993292800, 47507993292800,
+STORE, 47507993292800, 47507993296895,
+STORE, 47507993300992, 47507993309183,
+STORE, 47507993296896, 47507993300991,
+ERASE, 47507993296896, 47507993296896,
+STORE, 47507993296896, 47507993309183,
+ERASE, 47507993296896, 47507993296896,
+STORE, 47507993296896, 47507993300991,
+STORE, 47507993300992, 47507993309183,
+ERASE, 47507993300992, 47507993300992,
+STORE, 47507993300992, 47507993309183,
+STORE, 47507993309184, 47507993317375,
+ERASE, 47507985973248, 47507985973248,
+STORE, 47507985973248, 47507985989631,
+STORE, 47507985989632, 47507985997823,
+ERASE, 47507993300992, 47507993300992,
+STORE, 47507993300992, 47507993305087,
+STORE, 47507993305088, 47507993309183,
+ERASE, 47507988889600, 47507988889600,
+STORE, 47507988889600, 47507988893695,
+STORE, 47507988893696, 47507988897791,
+ERASE, 47507993272320, 47507993272320,
+STORE, 47507993272320, 47507993276415,
+STORE, 47507993276416, 47507993280511,
+ERASE, 47507992797184, 47507992797184,
+STORE, 47507992797184, 47507992801279,
+STORE, 47507992801280, 47507992805375,
+ERASE, 47507992760320, 47507992760320,
+STORE, 47507992760320, 47507992764415,
+STORE, 47507992764416, 47507992768511,
+ERASE, 47507992514560, 47507992514560,
+STORE, 47507992514560, 47507992711167,
+STORE, 47507992711168, 47507992719359,
+ERASE, 47507989630976, 47507989630976,
+STORE, 47507989630976, 47507989667839,
+STORE, 47507989667840, 47507989684223,
+ERASE, 47507989078016, 47507989078016,
+STORE, 47507989078016, 47507989082111,
+STORE, 47507989082112, 47507989086207,
+ERASE, 47507988762624, 47507988762624,
+STORE, 47507988762624, 47507988766719,
+STORE, 47507988766720, 47507988770815,
+ERASE, 47507986493440, 47507986493440,
+STORE, 47507986493440, 47507986513919,
+STORE, 47507986513920, 47507986518015,
+ERASE, 47507986161664, 47507986161664,
+STORE, 47507986161664, 47507986165759,
+STORE, 47507986165760, 47507986169855,
+ERASE, 47507986116608, 47507986116608,
+STORE, 47507986116608, 47507986120703,
+STORE, 47507986120704, 47507986124799,
+ERASE, 94386579570688, 94386579570688,
+STORE, 94386579570688, 94386579693567,
+STORE, 94386579693568, 94386579697663,
+ERASE, 140124810997760, 140124810997760,
+STORE, 140124810997760, 140124811001855,
+STORE, 140124811001856, 140124811005951,
+ERASE, 47507984158720, 47507984158720,
+STORE, 94386583982080, 94386584117247,
+STORE, 94386583982080, 94386584256511,
+ERASE, 94386583982080, 94386583982080,
+STORE, 94386583982080, 94386584223743,
+STORE, 94386584223744, 94386584256511,
+ERASE, 94386584223744, 94386584223744,
+STORE, 140737488347136, 140737488351231,
+STORE, 140733763395584, 140737488351231,
+ERASE, 140733763395584, 140733763395584,
+STORE, 140733763395584, 140733763399679,
+STORE, 94011546472448, 94011547152383,
+ERASE, 94011546472448, 94011546472448,
+STORE, 94011546472448, 94011546537983,
+STORE, 94011546537984, 94011547152383,
+ERASE, 94011546537984, 94011546537984,
+STORE, 94011546537984, 94011546886143,
+STORE, 94011546886144, 94011547025407,
+STORE, 94011547025408, 94011547152383,
+STORE, 139757597949952, 139757598121983,
+ERASE, 139757597949952, 139757597949952,
+STORE, 139757597949952, 139757597954047,
+STORE, 139757597954048, 139757598121983,
+ERASE, 139757597954048, 139757597954048,
+STORE, 139757597954048, 139757598076927,
+STORE, 139757598076928, 139757598109695,
+STORE, 139757598109696, 139757598117887,
+STORE, 139757598117888, 139757598121983,
+STORE, 140733763596288, 140733763600383,
+STORE, 140733763584000, 140733763596287,
+STORE, 47875197046784, 47875197054975,
+STORE, 47875197054976, 47875197063167,
+STORE, 47875197063168, 47875198902271,
+STORE, 47875197202432, 47875198902271,
+STORE, 47875197063168, 47875197202431,
+ERASE, 47875197202432, 47875197202432,
+STORE, 47875197202432, 47875198861311,
+STORE, 47875198861312, 47875198902271,
+STORE, 47875198545920, 47875198861311,
+STORE, 47875197202432, 47875198545919,
+ERASE, 47875197202432, 47875197202432,
+STORE, 47875197202432, 47875198545919,
+STORE, 47875198857216, 47875198861311,
+STORE, 47875198545920, 47875198857215,
+ERASE, 47875198545920, 47875198545920,
+STORE, 47875198545920, 47875198857215,
+STORE, 47875198885888, 47875198902271,
+STORE, 47875198861312, 47875198885887,
+ERASE, 47875198861312, 47875198861312,
+STORE, 47875198861312, 47875198885887,
+ERASE, 47875198885888, 47875198885888,
+STORE, 47875198885888, 47875198902271,
+STORE, 47875198902272, 47875199012863,
+STORE, 47875198918656, 47875199012863,
+STORE, 47875198902272, 47875198918655,
+ERASE, 47875198918656, 47875198918656,
+STORE, 47875198918656, 47875199004671,
+STORE, 47875199004672, 47875199012863,
+STORE, 47875198980096, 47875199004671,
+STORE, 47875198918656, 47875198980095,
+ERASE, 47875198918656, 47875198918656,
+STORE, 47875198918656, 47875198980095,
+STORE, 47875199000576, 47875199004671,
+STORE, 47875198980096, 47875199000575,
+ERASE, 47875198980096, 47875198980096,
+STORE, 47875198980096, 47875199000575,
+ERASE, 47875199004672, 47875199004672,
+STORE, 47875199004672, 47875199012863,
+STORE, 47875199012864, 47875199057919,
+ERASE, 47875199012864, 47875199012864,
+STORE, 47875199012864, 47875199021055,
+STORE, 47875199021056, 47875199057919,
+STORE, 47875199041536, 47875199057919,
+STORE, 47875199021056, 47875199041535,
+ERASE, 47875199021056, 47875199021056,
+STORE, 47875199021056, 47875199041535,
+STORE, 47875199049728, 47875199057919,
+STORE, 47875199041536, 47875199049727,
+ERASE, 47875199041536, 47875199041536,
+STORE, 47875199041536, 47875199057919,
+ERASE, 47875199041536, 47875199041536,
+STORE, 47875199041536, 47875199049727,
+STORE, 47875199049728, 47875199057919,
+ERASE, 47875199049728, 47875199049728,
+STORE, 47875199049728, 47875199057919,
+STORE, 47875199057920, 47875199406079,
+STORE, 47875199098880, 47875199406079,
+STORE, 47875199057920, 47875199098879,
+ERASE, 47875199098880, 47875199098880,
+STORE, 47875199098880, 47875199381503,
+STORE, 47875199381504, 47875199406079,
+STORE, 47875199311872, 47875199381503,
+STORE, 47875199098880, 47875199311871,
+ERASE, 47875199098880, 47875199098880,
+STORE, 47875199098880, 47875199311871,
+STORE, 47875199377408, 47875199381503,
+STORE, 47875199311872, 47875199377407,
+ERASE, 47875199311872, 47875199311872,
+STORE, 47875199311872, 47875199377407,
+ERASE, 47875199381504, 47875199381504,
+STORE, 47875199381504, 47875199406079,
+STORE, 47875199406080, 47875201667071,
+STORE, 47875199557632, 47875201667071,
+STORE, 47875199406080, 47875199557631,
+ERASE, 47875199557632, 47875199557632,
+STORE, 47875199557632, 47875201650687,
+STORE, 47875201650688, 47875201667071,
+STORE, 47875201658880, 47875201667071,
+STORE, 47875201650688, 47875201658879,
+ERASE, 47875201650688, 47875201650688,
+STORE, 47875201650688, 47875201658879,
+ERASE, 47875201658880, 47875201658880,
+STORE, 47875201658880, 47875201667071,
+STORE, 47875201667072, 47875201802239,
+ERASE, 47875201667072, 47875201667072,
+STORE, 47875201667072, 47875201691647,
+STORE, 47875201691648, 47875201802239,
+STORE, 47875201753088, 47875201802239,
+STORE, 47875201691648, 47875201753087,
+ERASE, 47875201691648, 47875201691648,
+STORE, 47875201691648, 47875201753087,
+STORE, 47875201777664, 47875201802239,
+STORE, 47875201753088, 47875201777663,
+ERASE, 47875201753088, 47875201753088,
+STORE, 47875201753088, 47875201802239,
+ERASE, 47875201753088, 47875201753088,
+STORE, 47875201753088, 47875201777663,
+STORE, 47875201777664, 47875201802239,
+STORE, 47875201785856, 47875201802239,
+STORE, 47875201777664, 47875201785855,
+ERASE, 47875201777664, 47875201777664,
+STORE, 47875201777664, 47875201785855,
+ERASE, 47875201785856, 47875201785856,
+STORE, 47875201785856, 47875201802239,
+STORE, 47875201785856, 47875201810431,
+STORE, 47875201810432, 47875201974271,
+ERASE, 47875201810432, 47875201810432,
+STORE, 47875201810432, 47875201822719,
+STORE, 47875201822720, 47875201974271,
+STORE, 47875201921024, 47875201974271,
+STORE, 47875201822720, 47875201921023,
+ERASE, 47875201822720, 47875201822720,
+STORE, 47875201822720, 47875201921023,
+STORE, 47875201966080, 47875201974271,
+STORE, 47875201921024, 47875201966079,
+ERASE, 47875201921024, 47875201921024,
+STORE, 47875201921024, 47875201974271,
+ERASE, 47875201921024, 47875201921024,
+STORE, 47875201921024, 47875201966079,
+STORE, 47875201966080, 47875201974271,
+ERASE, 47875201966080, 47875201966080,
+STORE, 47875201966080, 47875201974271,
+STORE, 47875201974272, 47875202572287,
+STORE, 47875202093056, 47875202572287,
+STORE, 47875201974272, 47875202093055,
+ERASE, 47875202093056, 47875202093056,
+STORE, 47875202093056, 47875202519039,
+STORE, 47875202519040, 47875202572287,
+STORE, 47875202408448, 47875202519039,
+STORE, 47875202093056, 47875202408447,
+ERASE, 47875202093056, 47875202093056,
+STORE, 47875202093056, 47875202408447,
+STORE, 47875202514944, 47875202519039,
+STORE, 47875202408448, 47875202514943,
+ERASE, 47875202408448, 47875202408448,
+STORE, 47875202408448, 47875202514943,
+ERASE, 47875202519040, 47875202519040,
+STORE, 47875202519040, 47875202572287,
+STORE, 47875202572288, 47875205623807,
+STORE, 47875203117056, 47875205623807,
+STORE, 47875202572288, 47875203117055,
+ERASE, 47875203117056, 47875203117056,
+STORE, 47875203117056, 47875205402623,
+STORE, 47875205402624, 47875205623807,
+STORE, 47875204812800, 47875205402623,
+STORE, 47875203117056, 47875204812799,
+ERASE, 47875203117056, 47875203117056,
+STORE, 47875203117056, 47875204812799,
+STORE, 47875205398528, 47875205402623,
+STORE, 47875204812800, 47875205398527,
+ERASE, 47875204812800, 47875204812800,
+STORE, 47875204812800, 47875205398527,
+STORE, 47875205607424, 47875205623807,
+STORE, 47875205402624, 47875205607423,
+ERASE, 47875205402624, 47875205402624,
+STORE, 47875205402624, 47875205607423,
+ERASE, 47875205607424, 47875205607424,
+STORE, 47875205607424, 47875205623807,
+STORE, 47875205623808, 47875205656575,
+ERASE, 47875205623808, 47875205623808,
+STORE, 47875205623808, 47875205631999,
+STORE, 47875205632000, 47875205656575,
+STORE, 47875205644288, 47875205656575,
+STORE, 47875205632000, 47875205644287,
+ERASE, 47875205632000, 47875205632000,
+STORE, 47875205632000, 47875205644287,
+STORE, 47875205648384, 47875205656575,
+STORE, 47875205644288, 47875205648383,
+ERASE, 47875205644288, 47875205644288,
+STORE, 47875205644288, 47875205656575,
+ERASE, 47875205644288, 47875205644288,
+STORE, 47875205644288, 47875205648383,
+STORE, 47875205648384, 47875205656575,
+ERASE, 47875205648384, 47875205648384,
+STORE, 47875205648384, 47875205656575,
+STORE, 47875205656576, 47875205693439,
+ERASE, 47875205656576, 47875205656576,
+STORE, 47875205656576, 47875205664767,
+STORE, 47875205664768, 47875205693439,
+STORE, 47875205681152, 47875205693439,
+STORE, 47875205664768, 47875205681151,
+ERASE, 47875205664768, 47875205664768,
+STORE, 47875205664768, 47875205681151,
+STORE, 47875205685248, 47875205693439,
+STORE, 47875205681152, 47875205685247,
+ERASE, 47875205681152, 47875205681152,
+STORE, 47875205681152, 47875205693439,
+ERASE, 47875205681152, 47875205681152,
+STORE, 47875205681152, 47875205685247,
+STORE, 47875205685248, 47875205693439,
+ERASE, 47875205685248, 47875205685248,
+STORE, 47875205685248, 47875205693439,
+STORE, 47875205693440, 47875206168575,
+ERASE, 47875205693440, 47875205693440,
+STORE, 47875205693440, 47875205701631,
+STORE, 47875205701632, 47875206168575,
+STORE, 47875206037504, 47875206168575,
+STORE, 47875205701632, 47875206037503,
+ERASE, 47875205701632, 47875205701632,
+STORE, 47875205701632, 47875206037503,
+STORE, 47875206160384, 47875206168575,
+STORE, 47875206037504, 47875206160383,
+ERASE, 47875206037504, 47875206037504,
+STORE, 47875206037504, 47875206168575,
+ERASE, 47875206037504, 47875206037504,
+STORE, 47875206037504, 47875206160383,
+STORE, 47875206160384, 47875206168575,
+ERASE, 47875206160384, 47875206160384,
+STORE, 47875206160384, 47875206168575,
+STORE, 47875206168576, 47875206176767,
+STORE, 47875206176768, 47875206197247,
+ERASE, 47875206176768, 47875206176768,
+STORE, 47875206176768, 47875206180863,
+STORE, 47875206180864, 47875206197247,
+STORE, 47875206184960, 47875206197247,
+STORE, 47875206180864, 47875206184959,
+ERASE, 47875206180864, 47875206180864,
+STORE, 47875206180864, 47875206184959,
+STORE, 47875206189056, 47875206197247,
+STORE, 47875206184960, 47875206189055,
+ERASE, 47875206184960, 47875206184960,
+STORE, 47875206184960, 47875206197247,
+ERASE, 47875206184960, 47875206184960,
+STORE, 47875206184960, 47875206189055,
+STORE, 47875206189056, 47875206197247,
+ERASE, 47875206189056, 47875206189056,
+STORE, 47875206189056, 47875206197247,
+STORE, 47875206197248, 47875206205439,
+ERASE, 47875198861312, 47875198861312,
+STORE, 47875198861312, 47875198877695,
+STORE, 47875198877696, 47875198885887,
+ERASE, 47875206189056, 47875206189056,
+STORE, 47875206189056, 47875206193151,
+STORE, 47875206193152, 47875206197247,
+ERASE, 47875201777664, 47875201777664,
+STORE, 47875201777664, 47875201781759,
+STORE, 47875201781760, 47875201785855,
+ERASE, 47875206160384, 47875206160384,
+STORE, 47875206160384, 47875206164479,
+STORE, 47875206164480, 47875206168575,
+ERASE, 47875205685248, 47875205685248,
+STORE, 47875205685248, 47875205689343,
+STORE, 47875205689344, 47875205693439,
+ERASE, 47875205648384, 47875205648384,
+STORE, 47875205648384, 47875205652479,
+STORE, 47875205652480, 47875205656575,
+ERASE, 47875205402624, 47875205402624,
+STORE, 47875205402624, 47875205599231,
+STORE, 47875205599232, 47875205607423,
+ERASE, 47875202519040, 47875202519040,
+STORE, 47875202519040, 47875202555903,
+STORE, 47875202555904, 47875202572287,
+ERASE, 47875201966080, 47875201966080,
+STORE, 47875201966080, 47875201970175,
+STORE, 47875201970176, 47875201974271,
+ERASE, 47875201650688, 47875201650688,
+STORE, 47875201650688, 47875201654783,
+STORE, 47875201654784, 47875201658879,
+ERASE, 47875199381504, 47875199381504,
+STORE, 47875199381504, 47875199401983,
+STORE, 47875199401984, 47875199406079,
+ERASE, 47875199049728, 47875199049728,
+STORE, 47875199049728, 47875199053823,
+STORE, 47875199053824, 47875199057919,
+ERASE, 47875199004672, 47875199004672,
+STORE, 47875199004672, 47875199008767,
+STORE, 47875199008768, 47875199012863,
+ERASE, 94011547025408, 94011547025408,
+STORE, 94011547025408, 94011547148287,
+STORE, 94011547148288, 94011547152383,
+ERASE, 139757598109696, 139757598109696,
+STORE, 139757598109696, 139757598113791,
+STORE, 139757598113792, 139757598117887,
+ERASE, 47875197046784, 47875197046784,
+STORE, 94011557584896, 94011557720063,
+STORE, 94011557584896, 94011557855231,
+ERASE, 94011557584896, 94011557584896,
+STORE, 94011557584896, 94011557851135,
+STORE, 94011557851136, 94011557855231,
+ERASE, 94011557851136, 94011557851136,
+ERASE, 94011557584896, 94011557584896,
+STORE, 94011557584896, 94011557847039,
+STORE, 94011557847040, 94011557851135,
+ERASE, 94011557847040, 94011557847040,
+STORE, 94011557584896, 94011557982207,
+ERASE, 94011557584896, 94011557584896,
+STORE, 94011557584896, 94011557978111,
+STORE, 94011557978112, 94011557982207,
+ERASE, 94011557978112, 94011557978112,
+ERASE, 94011557584896, 94011557584896,
+STORE, 94011557584896, 94011557974015,
+STORE, 94011557974016, 94011557978111,
+ERASE, 94011557974016, 94011557974016,
+STORE, 140737488347136, 140737488351231,
+STORE, 140734130360320, 140737488351231,
+ERASE, 140734130360320, 140734130360320,
+STORE, 140734130360320, 140734130364415,
+STORE, 94641232105472, 94641232785407,
+ERASE, 94641232105472, 94641232105472,
+STORE, 94641232105472, 94641232171007,
+STORE, 94641232171008, 94641232785407,
+ERASE, 94641232171008, 94641232171008,
+STORE, 94641232171008, 94641232519167,
+STORE, 94641232519168, 94641232658431,
+STORE, 94641232658432, 94641232785407,
+STORE, 139726599516160, 139726599688191,
+ERASE, 139726599516160, 139726599516160,
+STORE, 139726599516160, 139726599520255,
+STORE, 139726599520256, 139726599688191,
+ERASE, 139726599520256, 139726599520256,
+STORE, 139726599520256, 139726599643135,
+STORE, 139726599643136, 139726599675903,
+STORE, 139726599675904, 139726599684095,
+STORE, 139726599684096, 139726599688191,
+STORE, 140734130446336, 140734130450431,
+STORE, 140734130434048, 140734130446335,
+STORE, 47906195480576, 47906195488767,
+STORE, 47906195488768, 47906195496959,
+STORE, 47906195496960, 47906197336063,
+STORE, 47906195636224, 47906197336063,
+STORE, 47906195496960, 47906195636223,
+ERASE, 47906195636224, 47906195636224,
+STORE, 47906195636224, 47906197295103,
+STORE, 47906197295104, 47906197336063,
+STORE, 47906196979712, 47906197295103,
+STORE, 47906195636224, 47906196979711,
+ERASE, 47906195636224, 47906195636224,
+STORE, 47906195636224, 47906196979711,
+STORE, 47906197291008, 47906197295103,
+STORE, 47906196979712, 47906197291007,
+ERASE, 47906196979712, 47906196979712,
+STORE, 47906196979712, 47906197291007,
+STORE, 47906197319680, 47906197336063,
+STORE, 47906197295104, 47906197319679,
+ERASE, 47906197295104, 47906197295104,
+STORE, 47906197295104, 47906197319679,
+ERASE, 47906197319680, 47906197319680,
+STORE, 47906197319680, 47906197336063,
+STORE, 47906197336064, 47906197446655,
+STORE, 47906197352448, 47906197446655,
+STORE, 47906197336064, 47906197352447,
+ERASE, 47906197352448, 47906197352448,
+STORE, 47906197352448, 47906197438463,
+STORE, 47906197438464, 47906197446655,
+STORE, 47906197413888, 47906197438463,
+STORE, 47906197352448, 47906197413887,
+ERASE, 47906197352448, 47906197352448,
+STORE, 47906197352448, 47906197413887,
+STORE, 47906197434368, 47906197438463,
+STORE, 47906197413888, 47906197434367,
+ERASE, 47906197413888, 47906197413888,
+STORE, 47906197413888, 47906197434367,
+ERASE, 47906197438464, 47906197438464,
+STORE, 47906197438464, 47906197446655,
+STORE, 47906197446656, 47906197491711,
+ERASE, 47906197446656, 47906197446656,
+STORE, 47906197446656, 47906197454847,
+STORE, 47906197454848, 47906197491711,
+STORE, 47906197475328, 47906197491711,
+STORE, 47906197454848, 47906197475327,
+ERASE, 47906197454848, 47906197454848,
+STORE, 47906197454848, 47906197475327,
+STORE, 47906197483520, 47906197491711,
+STORE, 47906197475328, 47906197483519,
+ERASE, 47906197475328, 47906197475328,
+STORE, 47906197475328, 47906197491711,
+ERASE, 47906197475328, 47906197475328,
+STORE, 47906197475328, 47906197483519,
+STORE, 47906197483520, 47906197491711,
+ERASE, 47906197483520, 47906197483520,
+STORE, 47906197483520, 47906197491711,
+STORE, 47906197491712, 47906197839871,
+STORE, 47906197532672, 47906197839871,
+STORE, 47906197491712, 47906197532671,
+ERASE, 47906197532672, 47906197532672,
+STORE, 47906197532672, 47906197815295,
+STORE, 47906197815296, 47906197839871,
+STORE, 47906197745664, 47906197815295,
+STORE, 47906197532672, 47906197745663,
+ERASE, 47906197532672, 47906197532672,
+STORE, 47906197532672, 47906197745663,
+STORE, 47906197811200, 47906197815295,
+STORE, 47906197745664, 47906197811199,
+ERASE, 47906197745664, 47906197745664,
+STORE, 47906197745664, 47906197811199,
+ERASE, 47906197815296, 47906197815296,
+STORE, 47906197815296, 47906197839871,
+STORE, 47906197839872, 47906200100863,
+STORE, 47906197991424, 47906200100863,
+STORE, 47906197839872, 47906197991423,
+ERASE, 47906197991424, 47906197991424,
+STORE, 47906197991424, 47906200084479,
+STORE, 47906200084480, 47906200100863,
+STORE, 47906200092672, 47906200100863,
+STORE, 47906200084480, 47906200092671,
+ERASE, 47906200084480, 47906200084480,
+STORE, 47906200084480, 47906200092671,
+ERASE, 47906200092672, 47906200092672,
+STORE, 47906200092672, 47906200100863,
+STORE, 47906200100864, 47906200236031,
+ERASE, 47906200100864, 47906200100864,
+STORE, 47906200100864, 47906200125439,
+STORE, 47906200125440, 47906200236031,
+STORE, 47906200186880, 47906200236031,
+STORE, 47906200125440, 47906200186879,
+ERASE, 47906200125440, 47906200125440,
+STORE, 47906200125440, 47906200186879,
+STORE, 47906200211456, 47906200236031,
+STORE, 47906200186880, 47906200211455,
+ERASE, 47906200186880, 47906200186880,
+STORE, 47906200186880, 47906200236031,
+ERASE, 47906200186880, 47906200186880,
+STORE, 47906200186880, 47906200211455,
+STORE, 47906200211456, 47906200236031,
+STORE, 47906200219648, 47906200236031,
+STORE, 47906200211456, 47906200219647,
+ERASE, 47906200211456, 47906200211456,
+STORE, 47906200211456, 47906200219647,
+ERASE, 47906200219648, 47906200219648,
+STORE, 47906200219648, 47906200236031,
+STORE, 47906200219648, 47906200244223,
+STORE, 47906200244224, 47906200408063,
+ERASE, 47906200244224, 47906200244224,
+STORE, 47906200244224, 47906200256511,
+STORE, 47906200256512, 47906200408063,
+STORE, 47906200354816, 47906200408063,
+STORE, 47906200256512, 47906200354815,
+ERASE, 47906200256512, 47906200256512,
+STORE, 47906200256512, 47906200354815,
+STORE, 47906200399872, 47906200408063,
+STORE, 47906200354816, 47906200399871,
+ERASE, 47906200354816, 47906200354816,
+STORE, 47906200354816, 47906200408063,
+ERASE, 47906200354816, 47906200354816,
+STORE, 47906200354816, 47906200399871,
+STORE, 47906200399872, 47906200408063,
+ERASE, 47906200399872, 47906200399872,
+STORE, 47906200399872, 47906200408063,
+STORE, 47906200408064, 47906201006079,
+STORE, 47906200526848, 47906201006079,
+STORE, 47906200408064, 47906200526847,
+ERASE, 47906200526848, 47906200526848,
+STORE, 47906200526848, 47906200952831,
+STORE, 47906200952832, 47906201006079,
+STORE, 47906200842240, 47906200952831,
+STORE, 47906200526848, 47906200842239,
+ERASE, 47906200526848, 47906200526848,
+STORE, 47906200526848, 47906200842239,
+STORE, 47906200948736, 47906200952831,
+STORE, 47906200842240, 47906200948735,
+ERASE, 47906200842240, 47906200842240,
+STORE, 47906200842240, 47906200948735,
+ERASE, 47906200952832, 47906200952832,
+STORE, 47906200952832, 47906201006079,
+STORE, 47906201006080, 47906204057599,
+STORE, 47906201550848, 47906204057599,
+STORE, 47906201006080, 47906201550847,
+ERASE, 47906201550848, 47906201550848,
+STORE, 47906201550848, 47906203836415,
+STORE, 47906203836416, 47906204057599,
+STORE, 47906203246592, 47906203836415,
+STORE, 47906201550848, 47906203246591,
+ERASE, 47906201550848, 47906201550848,
+STORE, 47906201550848, 47906203246591,
+STORE, 47906203832320, 47906203836415,
+STORE, 47906203246592, 47906203832319,
+ERASE, 47906203246592, 47906203246592,
+STORE, 47906203246592, 47906203832319,
+STORE, 47906204041216, 47906204057599,
+STORE, 47906203836416, 47906204041215,
+ERASE, 47906203836416, 47906203836416,
+STORE, 47906203836416, 47906204041215,
+ERASE, 47906204041216, 47906204041216,
+STORE, 47906204041216, 47906204057599,
+STORE, 47906204057600, 47906204090367,
+ERASE, 47906204057600, 47906204057600,
+STORE, 47906204057600, 47906204065791,
+STORE, 47906204065792, 47906204090367,
+STORE, 47906204078080, 47906204090367,
+STORE, 47906204065792, 47906204078079,
+ERASE, 47906204065792, 47906204065792,
+STORE, 47906204065792, 47906204078079,
+STORE, 47906204082176, 47906204090367,
+STORE, 47906204078080, 47906204082175,
+ERASE, 47906204078080, 47906204078080,
+STORE, 47906204078080, 47906204090367,
+ERASE, 47906204078080, 47906204078080,
+STORE, 47906204078080, 47906204082175,
+STORE, 47906204082176, 47906204090367,
+ERASE, 47906204082176, 47906204082176,
+STORE, 47906204082176, 47906204090367,
+STORE, 47906204090368, 47906204127231,
+ERASE, 47906204090368, 47906204090368,
+STORE, 47906204090368, 47906204098559,
+STORE, 47906204098560, 47906204127231,
+STORE, 47906204114944, 47906204127231,
+STORE, 47906204098560, 47906204114943,
+ERASE, 47906204098560, 47906204098560,
+STORE, 47906204098560, 47906204114943,
+STORE, 47906204119040, 47906204127231,
+STORE, 47906204114944, 47906204119039,
+ERASE, 47906204114944, 47906204114944,
+STORE, 47906204114944, 47906204127231,
+ERASE, 47906204114944, 47906204114944,
+STORE, 47906204114944, 47906204119039,
+STORE, 47906204119040, 47906204127231,
+ERASE, 47906204119040, 47906204119040,
+STORE, 47906204119040, 47906204127231,
+STORE, 47906204127232, 47906204602367,
+ERASE, 47906204127232, 47906204127232,
+STORE, 47906204127232, 47906204135423,
+STORE, 47906204135424, 47906204602367,
+STORE, 47906204471296, 47906204602367,
+STORE, 47906204135424, 47906204471295,
+ERASE, 47906204135424, 47906204135424,
+STORE, 47906204135424, 47906204471295,
+STORE, 47906204594176, 47906204602367,
+STORE, 47906204471296, 47906204594175,
+ERASE, 47906204471296, 47906204471296,
+STORE, 47906204471296, 47906204602367,
+ERASE, 47906204471296, 47906204471296,
+STORE, 47906204471296, 47906204594175,
+STORE, 47906204594176, 47906204602367,
+ERASE, 47906204594176, 47906204594176,
+STORE, 47906204594176, 47906204602367,
+STORE, 47906204602368, 47906204610559,
+STORE, 47906204610560, 47906204631039,
+ERASE, 47906204610560, 47906204610560,
+STORE, 47906204610560, 47906204614655,
+STORE, 47906204614656, 47906204631039,
+STORE, 47906204618752, 47906204631039,
+STORE, 47906204614656, 47906204618751,
+ERASE, 47906204614656, 47906204614656,
+STORE, 47906204614656, 47906204618751,
+STORE, 47906204622848, 47906204631039,
+STORE, 47906204618752, 47906204622847,
+ERASE, 47906204618752, 47906204618752,
+STORE, 47906204618752, 47906204631039,
+ERASE, 47906204618752, 47906204618752,
+STORE, 47906204618752, 47906204622847,
+STORE, 47906204622848, 47906204631039,
+ERASE, 47906204622848, 47906204622848,
+STORE, 47906204622848, 47906204631039,
+STORE, 47906204631040, 47906204639231,
+ERASE, 47906197295104, 47906197295104,
+STORE, 47906197295104, 47906197311487,
+STORE, 47906197311488, 47906197319679,
+ERASE, 47906204622848, 47906204622848,
+STORE, 47906204622848, 47906204626943,
+STORE, 47906204626944, 47906204631039,
+ERASE, 47906200211456, 47906200211456,
+STORE, 47906200211456, 47906200215551,
+STORE, 47906200215552, 47906200219647,
+ERASE, 47906204594176, 47906204594176,
+STORE, 47906204594176, 47906204598271,
+STORE, 47906204598272, 47906204602367,
+ERASE, 47906204119040, 47906204119040,
+STORE, 47906204119040, 47906204123135,
+STORE, 47906204123136, 47906204127231,
+ERASE, 47906204082176, 47906204082176,
+STORE, 47906204082176, 47906204086271,
+STORE, 47906204086272, 47906204090367,
+ERASE, 47906203836416, 47906203836416,
+STORE, 47906203836416, 47906204033023,
+STORE, 47906204033024, 47906204041215,
+ERASE, 47906200952832, 47906200952832,
+STORE, 47906200952832, 47906200989695,
+STORE, 47906200989696, 47906201006079,
+ERASE, 47906200399872, 47906200399872,
+STORE, 47906200399872, 47906200403967,
+STORE, 47906200403968, 47906200408063,
+ERASE, 47906200084480, 47906200084480,
+STORE, 47906200084480, 47906200088575,
+STORE, 47906200088576, 47906200092671,
+ERASE, 47906197815296, 47906197815296,
+STORE, 47906197815296, 47906197835775,
+STORE, 47906197835776, 47906197839871,
+ERASE, 47906197483520, 47906197483520,
+STORE, 47906197483520, 47906197487615,
+STORE, 47906197487616, 47906197491711,
+ERASE, 47906197438464, 47906197438464,
+STORE, 47906197438464, 47906197442559,
+STORE, 47906197442560, 47906197446655,
+ERASE, 94641232658432, 94641232658432,
+STORE, 94641232658432, 94641232781311,
+STORE, 94641232781312, 94641232785407,
+ERASE, 139726599675904, 139726599675904,
+STORE, 139726599675904, 139726599679999,
+STORE, 139726599680000, 139726599684095,
+ERASE, 47906195480576, 47906195480576,
+STORE, 94641242615808, 94641242750975,
+       };
+
+       unsigned long set10[] = {
+STORE, 140737488347136, 140737488351231,
+STORE, 140736427839488, 140737488351231,
+ERASE, 140736427839488, 140736427839488,
+STORE, 140736427839488, 140736427843583,
+STORE, 94071213395968, 94071213567999,
+ERASE, 94071213395968, 94071213395968,
+STORE, 94071213395968, 94071213412351,
+STORE, 94071213412352, 94071213567999,
+ERASE, 94071213412352, 94071213412352,
+STORE, 94071213412352, 94071213514751,
+STORE, 94071213514752, 94071213555711,
+STORE, 94071213555712, 94071213567999,
+STORE, 139968410644480, 139968410816511,
+ERASE, 139968410644480, 139968410644480,
+STORE, 139968410644480, 139968410648575,
+STORE, 139968410648576, 139968410816511,
+ERASE, 139968410648576, 139968410648576,
+STORE, 139968410648576, 139968410771455,
+STORE, 139968410771456, 139968410804223,
+STORE, 139968410804224, 139968410812415,
+STORE, 139968410812416, 139968410816511,
+STORE, 140736429277184, 140736429281279,
+STORE, 140736429264896, 140736429277183,
+STORE, 47664384352256, 47664384360447,
+STORE, 47664384360448, 47664384368639,
+STORE, 47664384368640, 47664384532479,
+ERASE, 47664384368640, 47664384368640,
+STORE, 47664384368640, 47664384380927,
+STORE, 47664384380928, 47664384532479,
+STORE, 47664384479232, 47664384532479,
+STORE, 47664384380928, 47664384479231,
+ERASE, 47664384380928, 47664384380928,
+STORE, 47664384380928, 47664384479231,
+STORE, 47664384524288, 47664384532479,
+STORE, 47664384479232, 47664384524287,
+ERASE, 47664384479232, 47664384479232,
+STORE, 47664384479232, 47664384532479,
+ERASE, 47664384479232, 47664384479232,
+STORE, 47664384479232, 47664384524287,
+STORE, 47664384524288, 47664384532479,
+ERASE, 47664384524288, 47664384524288,
+STORE, 47664384524288, 47664384532479,
+STORE, 47664384532480, 47664387583999,
+STORE, 47664385077248, 47664387583999,
+STORE, 47664384532480, 47664385077247,
+ERASE, 47664385077248, 47664385077248,
+STORE, 47664385077248, 47664387362815,
+STORE, 47664387362816, 47664387583999,
+STORE, 47664386772992, 47664387362815,
+STORE, 47664385077248, 47664386772991,
+ERASE, 47664385077248, 47664385077248,
+STORE, 47664385077248, 47664386772991,
+STORE, 47664387358720, 47664387362815,
+STORE, 47664386772992, 47664387358719,
+ERASE, 47664386772992, 47664386772992,
+STORE, 47664386772992, 47664387358719,
+STORE, 47664387567616, 47664387583999,
+STORE, 47664387362816, 47664387567615,
+ERASE, 47664387362816, 47664387362816,
+STORE, 47664387362816, 47664387567615,
+ERASE, 47664387567616, 47664387567616,
+STORE, 47664387567616, 47664387583999,
+STORE, 47664387584000, 47664389423103,
+STORE, 47664387723264, 47664389423103,
+STORE, 47664387584000, 47664387723263,
+ERASE, 47664387723264, 47664387723264,
+STORE, 47664387723264, 47664389382143,
+STORE, 47664389382144, 47664389423103,
+STORE, 47664389066752, 47664389382143,
+STORE, 47664387723264, 47664389066751,
+ERASE, 47664387723264, 47664387723264,
+STORE, 47664387723264, 47664389066751,
+STORE, 47664389378048, 47664389382143,
+STORE, 47664389066752, 47664389378047,
+ERASE, 47664389066752, 47664389066752,
+STORE, 47664389066752, 47664389378047,
+STORE, 47664389406720, 47664389423103,
+STORE, 47664389382144, 47664389406719,
+ERASE, 47664389382144, 47664389382144,
+STORE, 47664389382144, 47664389406719,
+ERASE, 47664389406720, 47664389406720,
+STORE, 47664389406720, 47664389423103,
+STORE, 47664389423104, 47664389558271,
+ERASE, 47664389423104, 47664389423104,
+STORE, 47664389423104, 47664389447679,
+STORE, 47664389447680, 47664389558271,
+STORE, 47664389509120, 47664389558271,
+STORE, 47664389447680, 47664389509119,
+ERASE, 47664389447680, 47664389447680,
+STORE, 47664389447680, 47664389509119,
+STORE, 47664389533696, 47664389558271,
+STORE, 47664389509120, 47664389533695,
+ERASE, 47664389509120, 47664389509120,
+STORE, 47664389509120, 47664389558271,
+ERASE, 47664389509120, 47664389509120,
+STORE, 47664389509120, 47664389533695,
+STORE, 47664389533696, 47664389558271,
+STORE, 47664389541888, 47664389558271,
+STORE, 47664389533696, 47664389541887,
+ERASE, 47664389533696, 47664389533696,
+STORE, 47664389533696, 47664389541887,
+ERASE, 47664389541888, 47664389541888,
+STORE, 47664389541888, 47664389558271,
+STORE, 47664389558272, 47664389578751,
+ERASE, 47664389558272, 47664389558272,
+STORE, 47664389558272, 47664389562367,
+STORE, 47664389562368, 47664389578751,
+STORE, 47664389566464, 47664389578751,
+STORE, 47664389562368, 47664389566463,
+ERASE, 47664389562368, 47664389562368,
+STORE, 47664389562368, 47664389566463,
+STORE, 47664389570560, 47664389578751,
+STORE, 47664389566464, 47664389570559,
+ERASE, 47664389566464, 47664389566464,
+STORE, 47664389566464, 47664389578751,
+ERASE, 47664389566464, 47664389566464,
+STORE, 47664389566464, 47664389570559,
+STORE, 47664389570560, 47664389578751,
+ERASE, 47664389570560, 47664389570560,
+STORE, 47664389570560, 47664389578751,
+STORE, 47664389578752, 47664389586943,
+ERASE, 47664389382144, 47664389382144,
+STORE, 47664389382144, 47664389398527,
+STORE, 47664389398528, 47664389406719,
+ERASE, 47664389570560, 47664389570560,
+STORE, 47664389570560, 47664389574655,
+STORE, 47664389574656, 47664389578751,
+ERASE, 47664389533696, 47664389533696,
+STORE, 47664389533696, 47664389537791,
+STORE, 47664389537792, 47664389541887,
+ERASE, 47664387362816, 47664387362816,
+STORE, 47664387362816, 47664387559423,
+STORE, 47664387559424, 47664387567615,
+ERASE, 47664384524288, 47664384524288,
+STORE, 47664384524288, 47664384528383,
+STORE, 47664384528384, 47664384532479,
+ERASE, 94071213555712, 94071213555712,
+STORE, 94071213555712, 94071213563903,
+STORE, 94071213563904, 94071213567999,
+ERASE, 139968410804224, 139968410804224,
+STORE, 139968410804224, 139968410808319,
+STORE, 139968410808320, 139968410812415,
+ERASE, 47664384352256, 47664384352256,
+STORE, 94071244402688, 94071244537855,
+STORE, 140737488347136, 140737488351231,
+STORE, 140728271503360, 140737488351231,
+ERASE, 140728271503360, 140728271503360,
+STORE, 140728271503360, 140728271507455,
+STORE, 94410361982976, 94410362155007,
+ERASE, 94410361982976, 94410361982976,
+STORE, 94410361982976, 94410361999359,
+STORE, 94410361999360, 94410362155007,
+ERASE, 94410361999360, 94410361999360,
+STORE, 94410361999360, 94410362101759,
+STORE, 94410362101760, 94410362142719,
+STORE, 94410362142720, 94410362155007,
+STORE, 140351953997824, 140351954169855,
+ERASE, 140351953997824, 140351953997824,
+STORE, 140351953997824, 140351954001919,
+STORE, 140351954001920, 140351954169855,
+ERASE, 140351954001920, 140351954001920,
+STORE, 140351954001920, 140351954124799,
+STORE, 140351954124800, 140351954157567,
+STORE, 140351954157568, 140351954165759,
+STORE, 140351954165760, 140351954169855,
+STORE, 140728272429056, 140728272433151,
+STORE, 140728272416768, 140728272429055,
+STORE, 47280840998912, 47280841007103,
+STORE, 47280841007104, 47280841015295,
+STORE, 47280841015296, 47280841179135,
+ERASE, 47280841015296, 47280841015296,
+STORE, 47280841015296, 47280841027583,
+STORE, 47280841027584, 47280841179135,
+STORE, 47280841125888, 47280841179135,
+STORE, 47280841027584, 47280841125887,
+ERASE, 47280841027584, 47280841027584,
+STORE, 47280841027584, 47280841125887,
+STORE, 47280841170944, 47280841179135,
+STORE, 47280841125888, 47280841170943,
+ERASE, 47280841125888, 47280841125888,
+STORE, 47280841125888, 47280841179135,
+ERASE, 47280841125888, 47280841125888,
+STORE, 47280841125888, 47280841170943,
+STORE, 47280841170944, 47280841179135,
+ERASE, 47280841170944, 47280841170944,
+STORE, 47280841170944, 47280841179135,
+STORE, 47280841179136, 47280844230655,
+STORE, 47280841723904, 47280844230655,
+STORE, 47280841179136, 47280841723903,
+ERASE, 47280841723904, 47280841723904,
+STORE, 47280841723904, 47280844009471,
+STORE, 47280844009472, 47280844230655,
+STORE, 47280843419648, 47280844009471,
+STORE, 47280841723904, 47280843419647,
+ERASE, 47280841723904, 47280841723904,
+STORE, 47280841723904, 47280843419647,
+STORE, 47280844005376, 47280844009471,
+STORE, 47280843419648, 47280844005375,
+ERASE, 47280843419648, 47280843419648,
+STORE, 47280843419648, 47280844005375,
+STORE, 47280844214272, 47280844230655,
+STORE, 47280844009472, 47280844214271,
+ERASE, 47280844009472, 47280844009472,
+STORE, 47280844009472, 47280844214271,
+ERASE, 47280844214272, 47280844214272,
+STORE, 47280844214272, 47280844230655,
+STORE, 47280844230656, 47280846069759,
+STORE, 47280844369920, 47280846069759,
+STORE, 47280844230656, 47280844369919,
+ERASE, 47280844369920, 47280844369920,
+STORE, 47280844369920, 47280846028799,
+STORE, 47280846028800, 47280846069759,
+STORE, 47280845713408, 47280846028799,
+STORE, 47280844369920, 47280845713407,
+ERASE, 47280844369920, 47280844369920,
+STORE, 47280844369920, 47280845713407,
+STORE, 47280846024704, 47280846028799,
+STORE, 47280845713408, 47280846024703,
+ERASE, 47280845713408, 47280845713408,
+STORE, 47280845713408, 47280846024703,
+STORE, 47280846053376, 47280846069759,
+STORE, 47280846028800, 47280846053375,
+ERASE, 47280846028800, 47280846028800,
+STORE, 47280846028800, 47280846053375,
+ERASE, 47280846053376, 47280846053376,
+STORE, 47280846053376, 47280846069759,
+STORE, 47280846069760, 47280846204927,
+ERASE, 47280846069760, 47280846069760,
+STORE, 47280846069760, 47280846094335,
+STORE, 47280846094336, 47280846204927,
+STORE, 47280846155776, 47280846204927,
+STORE, 47280846094336, 47280846155775,
+ERASE, 47280846094336, 47280846094336,
+STORE, 47280846094336, 47280846155775,
+STORE, 47280846180352, 47280846204927,
+STORE, 47280846155776, 47280846180351,
+ERASE, 47280846155776, 47280846155776,
+STORE, 47280846155776, 47280846204927,
+ERASE, 47280846155776, 47280846155776,
+STORE, 47280846155776, 47280846180351,
+STORE, 47280846180352, 47280846204927,
+STORE, 47280846188544, 47280846204927,
+STORE, 47280846180352, 47280846188543,
+ERASE, 47280846180352, 47280846180352,
+STORE, 47280846180352, 47280846188543,
+ERASE, 47280846188544, 47280846188544,
+STORE, 47280846188544, 47280846204927,
+STORE, 47280846204928, 47280846225407,
+ERASE, 47280846204928, 47280846204928,
+STORE, 47280846204928, 47280846209023,
+STORE, 47280846209024, 47280846225407,
+STORE, 47280846213120, 47280846225407,
+STORE, 47280846209024, 47280846213119,
+ERASE, 47280846209024, 47280846209024,
+STORE, 47280846209024, 47280846213119,
+STORE, 47280846217216, 47280846225407,
+STORE, 47280846213120, 47280846217215,
+ERASE, 47280846213120, 47280846213120,
+STORE, 47280846213120, 47280846225407,
+ERASE, 47280846213120, 47280846213120,
+STORE, 47280846213120, 47280846217215,
+STORE, 47280846217216, 47280846225407,
+ERASE, 47280846217216, 47280846217216,
+STORE, 47280846217216, 47280846225407,
+STORE, 47280846225408, 47280846233599,
+ERASE, 47280846028800, 47280846028800,
+STORE, 47280846028800, 47280846045183,
+STORE, 47280846045184, 47280846053375,
+ERASE, 47280846217216, 47280846217216,
+STORE, 47280846217216, 47280846221311,
+STORE, 47280846221312, 47280846225407,
+ERASE, 47280846180352, 47280846180352,
+STORE, 47280846180352, 47280846184447,
+STORE, 47280846184448, 47280846188543,
+ERASE, 47280844009472, 47280844009472,
+STORE, 47280844009472, 47280844206079,
+STORE, 47280844206080, 47280844214271,
+ERASE, 47280841170944, 47280841170944,
+STORE, 47280841170944, 47280841175039,
+STORE, 47280841175040, 47280841179135,
+ERASE, 94410362142720, 94410362142720,
+STORE, 94410362142720, 94410362150911,
+STORE, 94410362150912, 94410362155007,
+ERASE, 140351954157568, 140351954157568,
+STORE, 140351954157568, 140351954161663,
+STORE, 140351954161664, 140351954165759,
+ERASE, 47280840998912, 47280840998912,
+STORE, 94410379456512, 94410379591679,
+STORE, 140737488347136, 140737488351231,
+STORE, 140732946362368, 140737488351231,
+ERASE, 140732946362368, 140732946362368,
+STORE, 140732946362368, 140732946366463,
+STORE, 94352937934848, 94352938106879,
+ERASE, 94352937934848, 94352937934848,
+STORE, 94352937934848, 94352937951231,
+STORE, 94352937951232, 94352938106879,
+ERASE, 94352937951232, 94352937951232,
+STORE, 94352937951232, 94352938053631,
+STORE, 94352938053632, 94352938094591,
+STORE, 94352938094592, 94352938106879,
+STORE, 140595518742528, 140595518914559,
+ERASE, 140595518742528, 140595518742528,
+STORE, 140595518742528, 140595518746623,
+STORE, 140595518746624, 140595518914559,
+ERASE, 140595518746624, 140595518746624,
+STORE, 140595518746624, 140595518869503,
+STORE, 140595518869504, 140595518902271,
+STORE, 140595518902272, 140595518910463,
+STORE, 140595518910464, 140595518914559,
+STORE, 140732947468288, 140732947472383,
+STORE, 140732947456000, 140732947468287,
+STORE, 47037276254208, 47037276262399,
+STORE, 47037276262400, 47037276270591,
+STORE, 47037276270592, 47037276434431,
+ERASE, 47037276270592, 47037276270592,
+STORE, 47037276270592, 47037276282879,
+STORE, 47037276282880, 47037276434431,
+STORE, 47037276381184, 47037276434431,
+STORE, 47037276282880, 47037276381183,
+ERASE, 47037276282880, 47037276282880,
+STORE, 47037276282880, 47037276381183,
+STORE, 47037276426240, 47037276434431,
+STORE, 47037276381184, 47037276426239,
+ERASE, 47037276381184, 47037276381184,
+STORE, 47037276381184, 47037276434431,
+ERASE, 47037276381184, 47037276381184,
+STORE, 47037276381184, 47037276426239,
+STORE, 47037276426240, 47037276434431,
+ERASE, 47037276426240, 47037276426240,
+STORE, 47037276426240, 47037276434431,
+STORE, 47037276434432, 47037279485951,
+STORE, 47037276979200, 47037279485951,
+STORE, 47037276434432, 47037276979199,
+ERASE, 47037276979200, 47037276979200,
+STORE, 47037276979200, 47037279264767,
+STORE, 47037279264768, 47037279485951,
+STORE, 47037278674944, 47037279264767,
+STORE, 47037276979200, 47037278674943,
+ERASE, 47037276979200, 47037276979200,
+STORE, 47037276979200, 47037278674943,
+STORE, 47037279260672, 47037279264767,
+STORE, 47037278674944, 47037279260671,
+ERASE, 47037278674944, 47037278674944,
+STORE, 47037278674944, 47037279260671,
+STORE, 47037279469568, 47037279485951,
+STORE, 47037279264768, 47037279469567,
+ERASE, 47037279264768, 47037279264768,
+STORE, 47037279264768, 47037279469567,
+ERASE, 47037279469568, 47037279469568,
+STORE, 47037279469568, 47037279485951,
+STORE, 47037279485952, 47037281325055,
+STORE, 47037279625216, 47037281325055,
+STORE, 47037279485952, 47037279625215,
+ERASE, 47037279625216, 47037279625216,
+STORE, 47037279625216, 47037281284095,
+STORE, 47037281284096, 47037281325055,
+STORE, 47037280968704, 47037281284095,
+STORE, 47037279625216, 47037280968703,
+ERASE, 47037279625216, 47037279625216,
+STORE, 47037279625216, 47037280968703,
+STORE, 47037281280000, 47037281284095,
+STORE, 47037280968704, 47037281279999,
+ERASE, 47037280968704, 47037280968704,
+STORE, 47037280968704, 47037281279999,
+STORE, 47037281308672, 47037281325055,
+STORE, 47037281284096, 47037281308671,
+ERASE, 47037281284096, 47037281284096,
+STORE, 47037281284096, 47037281308671,
+ERASE, 47037281308672, 47037281308672,
+STORE, 47037281308672, 47037281325055,
+STORE, 47037281325056, 47037281460223,
+ERASE, 47037281325056, 47037281325056,
+STORE, 47037281325056, 47037281349631,
+STORE, 47037281349632, 47037281460223,
+STORE, 47037281411072, 47037281460223,
+STORE, 47037281349632, 47037281411071,
+ERASE, 47037281349632, 47037281349632,
+STORE, 47037281349632, 47037281411071,
+STORE, 47037281435648, 47037281460223,
+STORE, 47037281411072, 47037281435647,
+ERASE, 47037281411072, 47037281411072,
+STORE, 47037281411072, 47037281460223,
+ERASE, 47037281411072, 47037281411072,
+STORE, 47037281411072, 47037281435647,
+STORE, 47037281435648, 47037281460223,
+STORE, 47037281443840, 47037281460223,
+STORE, 47037281435648, 47037281443839,
+ERASE, 47037281435648, 47037281435648,
+STORE, 47037281435648, 47037281443839,
+ERASE, 47037281443840, 47037281443840,
+STORE, 47037281443840, 47037281460223,
+STORE, 47037281460224, 47037281480703,
+ERASE, 47037281460224, 47037281460224,
+STORE, 47037281460224, 47037281464319,
+STORE, 47037281464320, 47037281480703,
+STORE, 47037281468416, 47037281480703,
+STORE, 47037281464320, 47037281468415,
+ERASE, 47037281464320, 47037281464320,
+STORE, 47037281464320, 47037281468415,
+STORE, 47037281472512, 47037281480703,
+STORE, 47037281468416, 47037281472511,
+ERASE, 47037281468416, 47037281468416,
+STORE, 47037281468416, 47037281480703,
+ERASE, 47037281468416, 47037281468416,
+STORE, 47037281468416, 47037281472511,
+STORE, 47037281472512, 47037281480703,
+ERASE, 47037281472512, 47037281472512,
+STORE, 47037281472512, 47037281480703,
+STORE, 47037281480704, 47037281488895,
+ERASE, 47037281284096, 47037281284096,
+STORE, 47037281284096, 47037281300479,
+STORE, 47037281300480, 47037281308671,
+ERASE, 47037281472512, 47037281472512,
+STORE, 47037281472512, 47037281476607,
+STORE, 47037281476608, 47037281480703,
+ERASE, 47037281435648, 47037281435648,
+STORE, 47037281435648, 47037281439743,
+STORE, 47037281439744, 47037281443839,
+ERASE, 47037279264768, 47037279264768,
+STORE, 47037279264768, 47037279461375,
+STORE, 47037279461376, 47037279469567,
+ERASE, 47037276426240, 47037276426240,
+STORE, 47037276426240, 47037276430335,
+STORE, 47037276430336, 47037276434431,
+ERASE, 94352938094592, 94352938094592,
+STORE, 94352938094592, 94352938102783,
+STORE, 94352938102784, 94352938106879,
+ERASE, 140595518902272, 140595518902272,
+STORE, 140595518902272, 140595518906367,
+STORE, 140595518906368, 140595518910463,
+ERASE, 47037276254208, 47037276254208,
+STORE, 94352938438656, 94352938573823,
+STORE, 140737488347136, 140737488351231,
+STORE, 140733506027520, 140737488351231,
+ERASE, 140733506027520, 140733506027520,
+STORE, 140733506027520, 140733506031615,
+STORE, 94150123073536, 94150123245567,
+ERASE, 94150123073536, 94150123073536,
+STORE, 94150123073536, 94150123089919,
+STORE, 94150123089920, 94150123245567,
+ERASE, 94150123089920, 94150123089920,
+STORE, 94150123089920, 94150123192319,
+STORE, 94150123192320, 94150123233279,
+STORE, 94150123233280, 94150123245567,
+STORE, 140081290375168, 140081290547199,
+ERASE, 140081290375168, 140081290375168,
+STORE, 140081290375168, 140081290379263,
+STORE, 140081290379264, 140081290547199,
+ERASE, 140081290379264, 140081290379264,
+STORE, 140081290379264, 140081290502143,
+STORE, 140081290502144, 140081290534911,
+STORE, 140081290534912, 140081290543103,
+STORE, 140081290543104, 140081290547199,
+STORE, 140733506707456, 140733506711551,
+STORE, 140733506695168, 140733506707455,
+STORE, 47551504621568, 47551504629759,
+STORE, 47551504629760, 47551504637951,
+STORE, 47551504637952, 47551504801791,
+ERASE, 47551504637952, 47551504637952,
+STORE, 47551504637952, 47551504650239,
+STORE, 47551504650240, 47551504801791,
+STORE, 47551504748544, 47551504801791,
+STORE, 47551504650240, 47551504748543,
+ERASE, 47551504650240, 47551504650240,
+STORE, 47551504650240, 47551504748543,
+STORE, 47551504793600, 47551504801791,
+STORE, 47551504748544, 47551504793599,
+ERASE, 47551504748544, 47551504748544,
+STORE, 47551504748544, 47551504801791,
+ERASE, 47551504748544, 47551504748544,
+STORE, 47551504748544, 47551504793599,
+STORE, 47551504793600, 47551504801791,
+ERASE, 47551504793600, 47551504793600,
+STORE, 47551504793600, 47551504801791,
+STORE, 47551504801792, 47551507853311,
+STORE, 47551505346560, 47551507853311,
+STORE, 47551504801792, 47551505346559,
+ERASE, 47551505346560, 47551505346560,
+STORE, 47551505346560, 47551507632127,
+STORE, 47551507632128, 47551507853311,
+STORE, 47551507042304, 47551507632127,
+STORE, 47551505346560, 47551507042303,
+ERASE, 47551505346560, 47551505346560,
+STORE, 47551505346560, 47551507042303,
+STORE, 47551507628032, 47551507632127,
+STORE, 47551507042304, 47551507628031,
+ERASE, 47551507042304, 47551507042304,
+STORE, 47551507042304, 47551507628031,
+STORE, 47551507836928, 47551507853311,
+STORE, 47551507632128, 47551507836927,
+ERASE, 47551507632128, 47551507632128,
+STORE, 47551507632128, 47551507836927,
+ERASE, 47551507836928, 47551507836928,
+STORE, 47551507836928, 47551507853311,
+STORE, 47551507853312, 47551509692415,
+STORE, 47551507992576, 47551509692415,
+STORE, 47551507853312, 47551507992575,
+ERASE, 47551507992576, 47551507992576,
+STORE, 47551507992576, 47551509651455,
+STORE, 47551509651456, 47551509692415,
+STORE, 47551509336064, 47551509651455,
+STORE, 47551507992576, 47551509336063,
+ERASE, 47551507992576, 47551507992576,
+STORE, 47551507992576, 47551509336063,
+STORE, 47551509647360, 47551509651455,
+STORE, 47551509336064, 47551509647359,
+ERASE, 47551509336064, 47551509336064,
+STORE, 47551509336064, 47551509647359,
+STORE, 47551509676032, 47551509692415,
+STORE, 47551509651456, 47551509676031,
+ERASE, 47551509651456, 47551509651456,
+STORE, 47551509651456, 47551509676031,
+ERASE, 47551509676032, 47551509676032,
+STORE, 47551509676032, 47551509692415,
+STORE, 47551509692416, 47551509827583,
+ERASE, 47551509692416, 47551509692416,
+STORE, 47551509692416, 47551509716991,
+STORE, 47551509716992, 47551509827583,
+STORE, 47551509778432, 47551509827583,
+STORE, 47551509716992, 47551509778431,
+ERASE, 47551509716992, 47551509716992,
+STORE, 47551509716992, 47551509778431,
+STORE, 47551509803008, 47551509827583,
+STORE, 47551509778432, 47551509803007,
+ERASE, 47551509778432, 47551509778432,
+STORE, 47551509778432, 47551509827583,
+ERASE, 47551509778432, 47551509778432,
+STORE, 47551509778432, 47551509803007,
+STORE, 47551509803008, 47551509827583,
+STORE, 47551509811200, 47551509827583,
+STORE, 47551509803008, 47551509811199,
+ERASE, 47551509803008, 47551509803008,
+STORE, 47551509803008, 47551509811199,
+ERASE, 47551509811200, 47551509811200,
+STORE, 47551509811200, 47551509827583,
+STORE, 47551509827584, 47551509848063,
+ERASE, 47551509827584, 47551509827584,
+STORE, 47551509827584, 47551509831679,
+STORE, 47551509831680, 47551509848063,
+STORE, 47551509835776, 47551509848063,
+STORE, 47551509831680, 47551509835775,
+ERASE, 47551509831680, 47551509831680,
+STORE, 47551509831680, 47551509835775,
+STORE, 47551509839872, 47551509848063,
+STORE, 47551509835776, 47551509839871,
+ERASE, 47551509835776, 47551509835776,
+STORE, 47551509835776, 47551509848063,
+ERASE, 47551509835776, 47551509835776,
+STORE, 47551509835776, 47551509839871,
+STORE, 47551509839872, 47551509848063,
+ERASE, 47551509839872, 47551509839872,
+STORE, 47551509839872, 47551509848063,
+STORE, 47551509848064, 47551509856255,
+ERASE, 47551509651456, 47551509651456,
+STORE, 47551509651456, 47551509667839,
+STORE, 47551509667840, 47551509676031,
+ERASE, 47551509839872, 47551509839872,
+STORE, 47551509839872, 47551509843967,
+STORE, 47551509843968, 47551509848063,
+ERASE, 47551509803008, 47551509803008,
+STORE, 47551509803008, 47551509807103,
+STORE, 47551509807104, 47551509811199,
+ERASE, 47551507632128, 47551507632128,
+STORE, 47551507632128, 47551507828735,
+STORE, 47551507828736, 47551507836927,
+ERASE, 47551504793600, 47551504793600,
+STORE, 47551504793600, 47551504797695,
+STORE, 47551504797696, 47551504801791,
+ERASE, 94150123233280, 94150123233280,
+STORE, 94150123233280, 94150123241471,
+STORE, 94150123241472, 94150123245567,
+ERASE, 140081290534912, 140081290534912,
+STORE, 140081290534912, 140081290539007,
+STORE, 140081290539008, 140081290543103,
+ERASE, 47551504621568, 47551504621568,
+STORE, 94150148112384, 94150148247551,
+STORE, 140737488347136, 140737488351231,
+STORE, 140734389334016, 140737488351231,
+ERASE, 140734389334016, 140734389334016,
+STORE, 140734389334016, 140734389338111,
+STORE, 94844636606464, 94844636778495,
+ERASE, 94844636606464, 94844636606464,
+STORE, 94844636606464, 94844636622847,
+STORE, 94844636622848, 94844636778495,
+ERASE, 94844636622848, 94844636622848,
+STORE, 94844636622848, 94844636725247,
+STORE, 94844636725248, 94844636766207,
+STORE, 94844636766208, 94844636778495,
+STORE, 139922765217792, 139922765389823,
+ERASE, 139922765217792, 139922765217792,
+STORE, 139922765217792, 139922765221887,
+STORE, 139922765221888, 139922765389823,
+ERASE, 139922765221888, 139922765221888,
+STORE, 139922765221888, 139922765344767,
+STORE, 139922765344768, 139922765377535,
+STORE, 139922765377536, 139922765385727,
+STORE, 139922765385728, 139922765389823,
+STORE, 140734389678080, 140734389682175,
+STORE, 140734389665792, 140734389678079,
+STORE, 47710029778944, 47710029787135,
+STORE, 47710029787136, 47710029795327,
+STORE, 47710029795328, 47710029959167,
+ERASE, 47710029795328, 47710029795328,
+STORE, 47710029795328, 47710029807615,
+STORE, 47710029807616, 47710029959167,
+STORE, 47710029905920, 47710029959167,
+STORE, 47710029807616, 47710029905919,
+ERASE, 47710029807616, 47710029807616,
+STORE, 47710029807616, 47710029905919,
+STORE, 47710029950976, 47710029959167,
+STORE, 47710029905920, 47710029950975,
+ERASE, 47710029905920, 47710029905920,
+STORE, 47710029905920, 47710029959167,
+ERASE, 47710029905920, 47710029905920,
+STORE, 47710029905920, 47710029950975,
+STORE, 47710029950976, 47710029959167,
+ERASE, 47710029950976, 47710029950976,
+STORE, 47710029950976, 47710029959167,
+STORE, 47710029959168, 47710033010687,
+STORE, 47710030503936, 47710033010687,
+STORE, 47710029959168, 47710030503935,
+ERASE, 47710030503936, 47710030503936,
+STORE, 47710030503936, 47710032789503,
+STORE, 47710032789504, 47710033010687,
+STORE, 47710032199680, 47710032789503,
+STORE, 47710030503936, 47710032199679,
+ERASE, 47710030503936, 47710030503936,
+STORE, 47710030503936, 47710032199679,
+STORE, 47710032785408, 47710032789503,
+STORE, 47710032199680, 47710032785407,
+ERASE, 47710032199680, 47710032199680,
+STORE, 47710032199680, 47710032785407,
+STORE, 47710032994304, 47710033010687,
+STORE, 47710032789504, 47710032994303,
+ERASE, 47710032789504, 47710032789504,
+STORE, 47710032789504, 47710032994303,
+ERASE, 47710032994304, 47710032994304,
+STORE, 47710032994304, 47710033010687,
+STORE, 47710033010688, 47710034849791,
+STORE, 47710033149952, 47710034849791,
+STORE, 47710033010688, 47710033149951,
+ERASE, 47710033149952, 47710033149952,
+STORE, 47710033149952, 47710034808831,
+STORE, 47710034808832, 47710034849791,
+STORE, 47710034493440, 47710034808831,
+STORE, 47710033149952, 47710034493439,
+ERASE, 47710033149952, 47710033149952,
+STORE, 47710033149952, 47710034493439,
+STORE, 47710034804736, 47710034808831,
+STORE, 47710034493440, 47710034804735,
+ERASE, 47710034493440, 47710034493440,
+STORE, 47710034493440, 47710034804735,
+STORE, 47710034833408, 47710034849791,
+STORE, 47710034808832, 47710034833407,
+ERASE, 47710034808832, 47710034808832,
+STORE, 47710034808832, 47710034833407,
+ERASE, 47710034833408, 47710034833408,
+STORE, 47710034833408, 47710034849791,
+STORE, 47710034849792, 47710034984959,
+ERASE, 47710034849792, 47710034849792,
+STORE, 47710034849792, 47710034874367,
+STORE, 47710034874368, 47710034984959,
+STORE, 47710034935808, 47710034984959,
+STORE, 47710034874368, 47710034935807,
+ERASE, 47710034874368, 47710034874368,
+STORE, 47710034874368, 47710034935807,
+STORE, 47710034960384, 47710034984959,
+STORE, 47710034935808, 47710034960383,
+ERASE, 47710034935808, 47710034935808,
+STORE, 47710034935808, 47710034984959,
+ERASE, 47710034935808, 47710034935808,
+STORE, 47710034935808, 47710034960383,
+STORE, 47710034960384, 47710034984959,
+STORE, 47710034968576, 47710034984959,
+STORE, 47710034960384, 47710034968575,
+ERASE, 47710034960384, 47710034960384,
+STORE, 47710034960384, 47710034968575,
+ERASE, 47710034968576, 47710034968576,
+STORE, 47710034968576, 47710034984959,
+STORE, 47710034984960, 47710035005439,
+ERASE, 47710034984960, 47710034984960,
+STORE, 47710034984960, 47710034989055,
+STORE, 47710034989056, 47710035005439,
+STORE, 47710034993152, 47710035005439,
+STORE, 47710034989056, 47710034993151,
+ERASE, 47710034989056, 47710034989056,
+STORE, 47710034989056, 47710034993151,
+STORE, 47710034997248, 47710035005439,
+STORE, 47710034993152, 47710034997247,
+ERASE, 47710034993152, 47710034993152,
+STORE, 47710034993152, 47710035005439,
+ERASE, 47710034993152, 47710034993152,
+STORE, 47710034993152, 47710034997247,
+STORE, 47710034997248, 47710035005439,
+ERASE, 47710034997248, 47710034997248,
+STORE, 47710034997248, 47710035005439,
+STORE, 47710035005440, 47710035013631,
+ERASE, 47710034808832, 47710034808832,
+STORE, 47710034808832, 47710034825215,
+STORE, 47710034825216, 47710034833407,
+ERASE, 47710034997248, 47710034997248,
+STORE, 47710034997248, 47710035001343,
+STORE, 47710035001344, 47710035005439,
+ERASE, 47710034960384, 47710034960384,
+STORE, 47710034960384, 47710034964479,
+STORE, 47710034964480, 47710034968575,
+ERASE, 47710032789504, 47710032789504,
+STORE, 47710032789504, 47710032986111,
+STORE, 47710032986112, 47710032994303,
+ERASE, 47710029950976, 47710029950976,
+STORE, 47710029950976, 47710029955071,
+STORE, 47710029955072, 47710029959167,
+ERASE, 94844636766208, 94844636766208,
+STORE, 94844636766208, 94844636774399,
+STORE, 94844636774400, 94844636778495,
+ERASE, 139922765377536, 139922765377536,
+STORE, 139922765377536, 139922765381631,
+STORE, 139922765381632, 139922765385727,
+ERASE, 47710029778944, 47710029778944,
+STORE, 94844641775616, 94844641910783,
+STORE, 140737488347136, 140737488351231,
+STORE, 140732213886976, 140737488351231,
+ERASE, 140732213886976, 140732213886976,
+STORE, 140732213886976, 140732213891071,
+STORE, 94240508887040, 94240509059071,
+ERASE, 94240508887040, 94240508887040,
+STORE, 94240508887040, 94240508903423,
+STORE, 94240508903424, 94240509059071,
+ERASE, 94240508903424, 94240508903424,
+STORE, 94240508903424, 94240509005823,
+STORE, 94240509005824, 94240509046783,
+STORE, 94240509046784, 94240509059071,
+STORE, 140275106516992, 140275106689023,
+ERASE, 140275106516992, 140275106516992,
+STORE, 140275106516992, 140275106521087,
+STORE, 140275106521088, 140275106689023,
+ERASE, 140275106521088, 140275106521088,
+STORE, 140275106521088, 140275106643967,
+STORE, 140275106643968, 140275106676735,
+STORE, 140275106676736, 140275106684927,
+STORE, 140275106684928, 140275106689023,
+STORE, 140732213977088, 140732213981183,
+STORE, 140732213964800, 140732213977087,
+STORE, 47357688479744, 47357688487935,
+STORE, 47357688487936, 47357688496127,
+STORE, 47357688496128, 47357688659967,
+ERASE, 47357688496128, 47357688496128,
+STORE, 47357688496128, 47357688508415,
+STORE, 47357688508416, 47357688659967,
+STORE, 47357688606720, 47357688659967,
+STORE, 47357688508416, 47357688606719,
+ERASE, 47357688508416, 47357688508416,
+STORE, 47357688508416, 47357688606719,
+STORE, 47357688651776, 47357688659967,
+STORE, 47357688606720, 47357688651775,
+ERASE, 47357688606720, 47357688606720,
+STORE, 47357688606720, 47357688659967,
+ERASE, 47357688606720, 47357688606720,
+STORE, 47357688606720, 47357688651775,
+STORE, 47357688651776, 47357688659967,
+ERASE, 47357688651776, 47357688651776,
+STORE, 47357688651776, 47357688659967,
+STORE, 47357688659968, 47357691711487,
+STORE, 47357689204736, 47357691711487,
+STORE, 47357688659968, 47357689204735,
+ERASE, 47357689204736, 47357689204736,
+STORE, 47357689204736, 47357691490303,
+STORE, 47357691490304, 47357691711487,
+STORE, 47357690900480, 47357691490303,
+STORE, 47357689204736, 47357690900479,
+ERASE, 47357689204736, 47357689204736,
+STORE, 47357689204736, 47357690900479,
+STORE, 47357691486208, 47357691490303,
+STORE, 47357690900480, 47357691486207,
+ERASE, 47357690900480, 47357690900480,
+STORE, 47357690900480, 47357691486207,
+STORE, 47357691695104, 47357691711487,
+STORE, 47357691490304, 47357691695103,
+ERASE, 47357691490304, 47357691490304,
+STORE, 47357691490304, 47357691695103,
+ERASE, 47357691695104, 47357691695104,
+STORE, 47357691695104, 47357691711487,
+STORE, 47357691711488, 47357693550591,
+STORE, 47357691850752, 47357693550591,
+STORE, 47357691711488, 47357691850751,
+ERASE, 47357691850752, 47357691850752,
+STORE, 47357691850752, 47357693509631,
+STORE, 47357693509632, 47357693550591,
+STORE, 47357693194240, 47357693509631,
+STORE, 47357691850752, 47357693194239,
+ERASE, 47357691850752, 47357691850752,
+STORE, 47357691850752, 47357693194239,
+STORE, 47357693505536, 47357693509631,
+STORE, 47357693194240, 47357693505535,
+ERASE, 47357693194240, 47357693194240,
+STORE, 47357693194240, 47357693505535,
+STORE, 47357693534208, 47357693550591,
+STORE, 47357693509632, 47357693534207,
+ERASE, 47357693509632, 47357693509632,
+STORE, 47357693509632, 47357693534207,
+ERASE, 47357693534208, 47357693534208,
+STORE, 47357693534208, 47357693550591,
+STORE, 47357693550592, 47357693685759,
+ERASE, 47357693550592, 47357693550592,
+STORE, 47357693550592, 47357693575167,
+STORE, 47357693575168, 47357693685759,
+STORE, 47357693636608, 47357693685759,
+STORE, 47357693575168, 47357693636607,
+ERASE, 47357693575168, 47357693575168,
+STORE, 47357693575168, 47357693636607,
+STORE, 47357693661184, 47357693685759,
+STORE, 47357693636608, 47357693661183,
+ERASE, 47357693636608, 47357693636608,
+STORE, 47357693636608, 47357693685759,
+ERASE, 47357693636608, 47357693636608,
+STORE, 47357693636608, 47357693661183,
+STORE, 47357693661184, 47357693685759,
+STORE, 47357693669376, 47357693685759,
+STORE, 47357693661184, 47357693669375,
+ERASE, 47357693661184, 47357693661184,
+STORE, 47357693661184, 47357693669375,
+ERASE, 47357693669376, 47357693669376,
+STORE, 47357693669376, 47357693685759,
+STORE, 47357693685760, 47357693706239,
+ERASE, 47357693685760, 47357693685760,
+STORE, 47357693685760, 47357693689855,
+STORE, 47357693689856, 47357693706239,
+STORE, 47357693693952, 47357693706239,
+STORE, 47357693689856, 47357693693951,
+ERASE, 47357693689856, 47357693689856,
+STORE, 47357693689856, 47357693693951,
+STORE, 47357693698048, 47357693706239,
+STORE, 47357693693952, 47357693698047,
+ERASE, 47357693693952, 47357693693952,
+STORE, 47357693693952, 47357693706239,
+ERASE, 47357693693952, 47357693693952,
+STORE, 47357693693952, 47357693698047,
+STORE, 47357693698048, 47357693706239,
+ERASE, 47357693698048, 47357693698048,
+STORE, 47357693698048, 47357693706239,
+STORE, 47357693706240, 47357693714431,
+ERASE, 47357693509632, 47357693509632,
+STORE, 47357693509632, 47357693526015,
+STORE, 47357693526016, 47357693534207,
+ERASE, 47357693698048, 47357693698048,
+STORE, 47357693698048, 47357693702143,
+STORE, 47357693702144, 47357693706239,
+ERASE, 47357693661184, 47357693661184,
+STORE, 47357693661184, 47357693665279,
+STORE, 47357693665280, 47357693669375,
+ERASE, 47357691490304, 47357691490304,
+STORE, 47357691490304, 47357691686911,
+STORE, 47357691686912, 47357691695103,
+ERASE, 47357688651776, 47357688651776,
+STORE, 47357688651776, 47357688655871,
+STORE, 47357688655872, 47357688659967,
+ERASE, 94240509046784, 94240509046784,
+STORE, 94240509046784, 94240509054975,
+STORE, 94240509054976, 94240509059071,
+ERASE, 140275106676736, 140275106676736,
+STORE, 140275106676736, 140275106680831,
+STORE, 140275106680832, 140275106684927,
+ERASE, 47357688479744, 47357688479744,
+STORE, 94240518361088, 94240518496255,
+STORE, 140737488347136, 140737488351231,
+STORE, 140732688277504, 140737488351231,
+ERASE, 140732688277504, 140732688277504,
+STORE, 140732688277504, 140732688281599,
+STORE, 94629171351552, 94629172064255,
+ERASE, 94629171351552, 94629171351552,
+STORE, 94629171351552, 94629171400703,
+STORE, 94629171400704, 94629172064255,
+ERASE, 94629171400704, 94629171400704,
+STORE, 94629171400704, 94629171945471,
+STORE, 94629171945472, 94629172043775,
+STORE, 94629172043776, 94629172064255,
+STORE, 139770707644416, 139770707816447,
+ERASE, 139770707644416, 139770707644416,
+STORE, 139770707644416, 139770707648511,
+STORE, 139770707648512, 139770707816447,
+ERASE, 139770707648512, 139770707648512,
+STORE, 139770707648512, 139770707771391,
+STORE, 139770707771392, 139770707804159,
+STORE, 139770707804160, 139770707812351,
+STORE, 139770707812352, 139770707816447,
+STORE, 140732689121280, 140732689125375,
+STORE, 140732689108992, 140732689121279,
+STORE, 47862087352320, 47862087360511,
+STORE, 47862087360512, 47862087368703,
+STORE, 47862087368704, 47862087475199,
+STORE, 47862087385088, 47862087475199,
+STORE, 47862087368704, 47862087385087,
+ERASE, 47862087385088, 47862087385088,
+STORE, 47862087385088, 47862087458815,
+STORE, 47862087458816, 47862087475199,
+STORE, 47862087438336, 47862087458815,
+STORE, 47862087385088, 47862087438335,
+ERASE, 47862087385088, 47862087385088,
+STORE, 47862087385088, 47862087438335,
+STORE, 47862087454720, 47862087458815,
+STORE, 47862087438336, 47862087454719,
+ERASE, 47862087438336, 47862087438336,
+STORE, 47862087438336, 47862087454719,
+STORE, 47862087467008, 47862087475199,
+STORE, 47862087458816, 47862087467007,
+ERASE, 47862087458816, 47862087458816,
+STORE, 47862087458816, 47862087467007,
+ERASE, 47862087467008, 47862087467008,
+STORE, 47862087467008, 47862087475199,
+STORE, 47862087475200, 47862089314303,
+STORE, 47862087614464, 47862089314303,
+STORE, 47862087475200, 47862087614463,
+ERASE, 47862087614464, 47862087614464,
+STORE, 47862087614464, 47862089273343,
+STORE, 47862089273344, 47862089314303,
+STORE, 47862088957952, 47862089273343,
+STORE, 47862087614464, 47862088957951,
+ERASE, 47862087614464, 47862087614464,
+STORE, 47862087614464, 47862088957951,
+STORE, 47862089269248, 47862089273343,
+STORE, 47862088957952, 47862089269247,
+ERASE, 47862088957952, 47862088957952,
+STORE, 47862088957952, 47862089269247,
+STORE, 47862089297920, 47862089314303,
+STORE, 47862089273344, 47862089297919,
+ERASE, 47862089273344, 47862089273344,
+STORE, 47862089273344, 47862089297919,
+ERASE, 47862089297920, 47862089297920,
+STORE, 47862089297920, 47862089314303,
+STORE, 47862089297920, 47862089326591,
+ERASE, 47862089273344, 47862089273344,
+STORE, 47862089273344, 47862089289727,
+STORE, 47862089289728, 47862089297919,
+ERASE, 47862087458816, 47862087458816,
+STORE, 47862087458816, 47862087462911,
+STORE, 47862087462912, 47862087467007,
+ERASE, 94629172043776, 94629172043776,
+STORE, 94629172043776, 94629172060159,
+STORE, 94629172060160, 94629172064255,
+ERASE, 139770707804160, 139770707804160,
+STORE, 139770707804160, 139770707808255,
+STORE, 139770707808256, 139770707812351,
+ERASE, 47862087352320, 47862087352320,
+STORE, 94629197533184, 94629197668351,
+STORE, 140737488347136, 140737488351231,
+STORE, 140727540711424, 140737488351231,
+ERASE, 140727540711424, 140727540711424,
+STORE, 140727540711424, 140727540715519,
+STORE, 94299865313280, 94299866025983,
+ERASE, 94299865313280, 94299865313280,
+STORE, 94299865313280, 94299865362431,
+STORE, 94299865362432, 94299866025983,
+ERASE, 94299865362432, 94299865362432,
+STORE, 94299865362432, 94299865907199,
+STORE, 94299865907200, 94299866005503,
+STORE, 94299866005504, 94299866025983,
+STORE, 140680268763136, 140680268935167,
+ERASE, 140680268763136, 140680268763136,
+STORE, 140680268763136, 140680268767231,
+STORE, 140680268767232, 140680268935167,
+ERASE, 140680268767232, 140680268767232,
+STORE, 140680268767232, 140680268890111,
+STORE, 140680268890112, 140680268922879,
+STORE, 140680268922880, 140680268931071,
+STORE, 140680268931072, 140680268935167,
+STORE, 140727541424128, 140727541428223,
+STORE, 140727541411840, 140727541424127,
+STORE, 46952526233600, 46952526241791,
+STORE, 46952526241792, 46952526249983,
+STORE, 46952526249984, 46952526356479,
+STORE, 46952526266368, 46952526356479,
+STORE, 46952526249984, 46952526266367,
+ERASE, 46952526266368, 46952526266368,
+STORE, 46952526266368, 46952526340095,
+STORE, 46952526340096, 46952526356479,
+STORE, 46952526319616, 46952526340095,
+STORE, 46952526266368, 46952526319615,
+ERASE, 46952526266368, 46952526266368,
+STORE, 46952526266368, 46952526319615,
+STORE, 46952526336000, 46952526340095,
+STORE, 46952526319616, 46952526335999,
+ERASE, 46952526319616, 46952526319616,
+STORE, 46952526319616, 46952526335999,
+STORE, 46952526348288, 46952526356479,
+STORE, 46952526340096, 46952526348287,
+ERASE, 46952526340096, 46952526340096,
+STORE, 46952526340096, 46952526348287,
+ERASE, 46952526348288, 46952526348288,
+STORE, 46952526348288, 46952526356479,
+STORE, 46952526356480, 46952528195583,
+STORE, 46952526495744, 46952528195583,
+STORE, 46952526356480, 46952526495743,
+ERASE, 46952526495744, 46952526495744,
+STORE, 46952526495744, 46952528154623,
+STORE, 46952528154624, 46952528195583,
+STORE, 46952527839232, 46952528154623,
+STORE, 46952526495744, 46952527839231,
+ERASE, 46952526495744, 46952526495744,
+STORE, 46952526495744, 46952527839231,
+STORE, 46952528150528, 46952528154623,
+STORE, 46952527839232, 46952528150527,
+ERASE, 46952527839232, 46952527839232,
+STORE, 46952527839232, 46952528150527,
+STORE, 46952528179200, 46952528195583,
+STORE, 46952528154624, 46952528179199,
+ERASE, 46952528154624, 46952528154624,
+STORE, 46952528154624, 46952528179199,
+ERASE, 46952528179200, 46952528179200,
+STORE, 46952528179200, 46952528195583,
+STORE, 46952528179200, 46952528207871,
+ERASE, 46952528154624, 46952528154624,
+STORE, 46952528154624, 46952528171007,
+STORE, 46952528171008, 46952528179199,
+ERASE, 46952526340096, 46952526340096,
+STORE, 46952526340096, 46952526344191,
+STORE, 46952526344192, 46952526348287,
+ERASE, 94299866005504, 94299866005504,
+STORE, 94299866005504, 94299866021887,
+STORE, 94299866021888, 94299866025983,
+ERASE, 140680268922880, 140680268922880,
+STORE, 140680268922880, 140680268926975,
+STORE, 140680268926976, 140680268931071,
+ERASE, 46952526233600, 46952526233600,
+STORE, 140737488347136, 140737488351231,
+STORE, 140722874793984, 140737488351231,
+ERASE, 140722874793984, 140722874793984,
+STORE, 140722874793984, 140722874798079,
+STORE, 94448916213760, 94448916926463,
+ERASE, 94448916213760, 94448916213760,
+STORE, 94448916213760, 94448916262911,
+STORE, 94448916262912, 94448916926463,
+ERASE, 94448916262912, 94448916262912,
+STORE, 94448916262912, 94448916807679,
+STORE, 94448916807680, 94448916905983,
+STORE, 94448916905984, 94448916926463,
+STORE, 140389117046784, 140389117218815,
+ERASE, 140389117046784, 140389117046784,
+STORE, 140389117046784, 140389117050879,
+STORE, 140389117050880, 140389117218815,
+ERASE, 140389117050880, 140389117050880,
+STORE, 140389117050880, 140389117173759,
+STORE, 140389117173760, 140389117206527,
+STORE, 140389117206528, 140389117214719,
+STORE, 140389117214720, 140389117218815,
+STORE, 140722875297792, 140722875301887,
+STORE, 140722875285504, 140722875297791,
+STORE, 47243677949952, 47243677958143,
+STORE, 47243677958144, 47243677966335,
+STORE, 47243677966336, 47243678072831,
+STORE, 47243677982720, 47243678072831,
+STORE, 47243677966336, 47243677982719,
+ERASE, 47243677982720, 47243677982720,
+STORE, 47243677982720, 47243678056447,
+STORE, 47243678056448, 47243678072831,
+STORE, 47243678035968, 47243678056447,
+STORE, 47243677982720, 47243678035967,
+ERASE, 47243677982720, 47243677982720,
+STORE, 47243677982720, 47243678035967,
+STORE, 47243678052352, 47243678056447,
+STORE, 47243678035968, 47243678052351,
+ERASE, 47243678035968, 47243678035968,
+STORE, 47243678035968, 47243678052351,
+STORE, 47243678064640, 47243678072831,
+STORE, 47243678056448, 47243678064639,
+ERASE, 47243678056448, 47243678056448,
+STORE, 47243678056448, 47243678064639,
+ERASE, 47243678064640, 47243678064640,
+STORE, 47243678064640, 47243678072831,
+STORE, 47243678072832, 47243679911935,
+STORE, 47243678212096, 47243679911935,
+STORE, 47243678072832, 47243678212095,
+ERASE, 47243678212096, 47243678212096,
+STORE, 47243678212096, 47243679870975,
+STORE, 47243679870976, 47243679911935,
+STORE, 47243679555584, 47243679870975,
+STORE, 47243678212096, 47243679555583,
+ERASE, 47243678212096, 47243678212096,
+STORE, 47243678212096, 47243679555583,
+STORE, 47243679866880, 47243679870975,
+STORE, 47243679555584, 47243679866879,
+ERASE, 47243679555584, 47243679555584,
+STORE, 47243679555584, 47243679866879,
+STORE, 47243679895552, 47243679911935,
+STORE, 47243679870976, 47243679895551,
+ERASE, 47243679870976, 47243679870976,
+STORE, 47243679870976, 47243679895551,
+ERASE, 47243679895552, 47243679895552,
+STORE, 47243679895552, 47243679911935,
+STORE, 47243679895552, 47243679924223,
+ERASE, 47243679870976, 47243679870976,
+STORE, 47243679870976, 47243679887359,
+STORE, 47243679887360, 47243679895551,
+ERASE, 47243678056448, 47243678056448,
+STORE, 47243678056448, 47243678060543,
+STORE, 47243678060544, 47243678064639,
+ERASE, 94448916905984, 94448916905984,
+STORE, 94448916905984, 94448916922367,
+STORE, 94448916922368, 94448916926463,
+ERASE, 140389117206528, 140389117206528,
+STORE, 140389117206528, 140389117210623,
+STORE, 140389117210624, 140389117214719,
+ERASE, 47243677949952, 47243677949952,
+STORE, 140737488347136, 140737488351231,
+STORE, 140733068505088, 140737488351231,
+ERASE, 140733068505088, 140733068505088,
+STORE, 140733068505088, 140733068509183,
+STORE, 94207145750528, 94207146463231,
+ERASE, 94207145750528, 94207145750528,
+STORE, 94207145750528, 94207145799679,
+STORE, 94207145799680, 94207146463231,
+ERASE, 94207145799680, 94207145799680,
+STORE, 94207145799680, 94207146344447,
+STORE, 94207146344448, 94207146442751,
+STORE, 94207146442752, 94207146463231,
+STORE, 140684504911872, 140684505083903,
+ERASE, 140684504911872, 140684504911872,
+STORE, 140684504911872, 140684504915967,
+STORE, 140684504915968, 140684505083903,
+ERASE, 140684504915968, 140684504915968,
+STORE, 140684504915968, 140684505038847,
+STORE, 140684505038848, 140684505071615,
+STORE, 140684505071616, 140684505079807,
+STORE, 140684505079808, 140684505083903,
+STORE, 140733068607488, 140733068611583,
+STORE, 140733068595200, 140733068607487,
+STORE, 46948290084864, 46948290093055,
+STORE, 46948290093056, 46948290101247,
+STORE, 46948290101248, 46948290207743,
+STORE, 46948290117632, 46948290207743,
+STORE, 46948290101248, 46948290117631,
+ERASE, 46948290117632, 46948290117632,
+STORE, 46948290117632, 46948290191359,
+STORE, 46948290191360, 46948290207743,
+STORE, 46948290170880, 46948290191359,
+STORE, 46948290117632, 46948290170879,
+ERASE, 46948290117632, 46948290117632,
+STORE, 46948290117632, 46948290170879,
+STORE, 46948290187264, 46948290191359,
+STORE, 46948290170880, 46948290187263,
+ERASE, 46948290170880, 46948290170880,
+STORE, 46948290170880, 46948290187263,
+STORE, 46948290199552, 46948290207743,
+STORE, 46948290191360, 46948290199551,
+ERASE, 46948290191360, 46948290191360,
+STORE, 46948290191360, 46948290199551,
+ERASE, 46948290199552, 46948290199552,
+STORE, 46948290199552, 46948290207743,
+STORE, 46948290207744, 46948292046847,
+STORE, 46948290347008, 46948292046847,
+STORE, 46948290207744, 46948290347007,
+ERASE, 46948290347008, 46948290347008,
+STORE, 46948290347008, 46948292005887,
+STORE, 46948292005888, 46948292046847,
+STORE, 46948291690496, 46948292005887,
+STORE, 46948290347008, 46948291690495,
+ERASE, 46948290347008, 46948290347008,
+STORE, 46948290347008, 46948291690495,
+STORE, 46948292001792, 46948292005887,
+STORE, 46948291690496, 46948292001791,
+ERASE, 46948291690496, 46948291690496,
+STORE, 46948291690496, 46948292001791,
+STORE, 46948292030464, 46948292046847,
+STORE, 46948292005888, 46948292030463,
+ERASE, 46948292005888, 46948292005888,
+STORE, 46948292005888, 46948292030463,
+ERASE, 46948292030464, 46948292030464,
+STORE, 46948292030464, 46948292046847,
+STORE, 46948292030464, 46948292059135,
+ERASE, 46948292005888, 46948292005888,
+STORE, 46948292005888, 46948292022271,
+STORE, 46948292022272, 46948292030463,
+ERASE, 46948290191360, 46948290191360,
+STORE, 46948290191360, 46948290195455,
+STORE, 46948290195456, 46948290199551,
+ERASE, 94207146442752, 94207146442752,
+STORE, 94207146442752, 94207146459135,
+STORE, 94207146459136, 94207146463231,
+ERASE, 140684505071616, 140684505071616,
+STORE, 140684505071616, 140684505075711,
+STORE, 140684505075712, 140684505079807,
+ERASE, 46948290084864, 46948290084864,
+STORE, 140737488347136, 140737488351231,
+STORE, 140726367158272, 140737488351231,
+ERASE, 140726367158272, 140726367158272,
+STORE, 140726367158272, 140726367162367,
+STORE, 94436124106752, 94436124819455,
+ERASE, 94436124106752, 94436124106752,
+STORE, 94436124106752, 94436124155903,
+STORE, 94436124155904, 94436124819455,
+ERASE, 94436124155904, 94436124155904,
+STORE, 94436124155904, 94436124700671,
+STORE, 94436124700672, 94436124798975,
+STORE, 94436124798976, 94436124819455,
+STORE, 140049025044480, 140049025216511,
+ERASE, 140049025044480, 140049025044480,
+STORE, 140049025044480, 140049025048575,
+STORE, 140049025048576, 140049025216511,
+ERASE, 140049025048576, 140049025048576,
+STORE, 140049025048576, 140049025171455,
+STORE, 140049025171456, 140049025204223,
+STORE, 140049025204224, 140049025212415,
+STORE, 140049025212416, 140049025216511,
+STORE, 140726367256576, 140726367260671,
+STORE, 140726367244288, 140726367256575,
+STORE, 47583769952256, 47583769960447,
+STORE, 47583769960448, 47583769968639,
+STORE, 47583769968640, 47583770075135,
+STORE, 47583769985024, 47583770075135,
+STORE, 47583769968640, 47583769985023,
+ERASE, 47583769985024, 47583769985024,
+STORE, 47583769985024, 47583770058751,
+STORE, 47583770058752, 47583770075135,
+STORE, 47583770038272, 47583770058751,
+STORE, 47583769985024, 47583770038271,
+ERASE, 47583769985024, 47583769985024,
+STORE, 47583769985024, 47583770038271,
+STORE, 47583770054656, 47583770058751,
+STORE, 47583770038272, 47583770054655,
+ERASE, 47583770038272, 47583770038272,
+STORE, 47583770038272, 47583770054655,
+STORE, 47583770066944, 47583770075135,
+STORE, 47583770058752, 47583770066943,
+ERASE, 47583770058752, 47583770058752,
+STORE, 47583770058752, 47583770066943,
+ERASE, 47583770066944, 47583770066944,
+STORE, 47583770066944, 47583770075135,
+STORE, 47583770075136, 47583771914239,
+STORE, 47583770214400, 47583771914239,
+STORE, 47583770075136, 47583770214399,
+ERASE, 47583770214400, 47583770214400,
+STORE, 47583770214400, 47583771873279,
+STORE, 47583771873280, 47583771914239,
+STORE, 47583771557888, 47583771873279,
+STORE, 47583770214400, 47583771557887,
+ERASE, 47583770214400, 47583770214400,
+STORE, 47583770214400, 47583771557887,
+STORE, 47583771869184, 47583771873279,
+STORE, 47583771557888, 47583771869183,
+ERASE, 47583771557888, 47583771557888,
+STORE, 47583771557888, 47583771869183,
+STORE, 47583771897856, 47583771914239,
+STORE, 47583771873280, 47583771897855,
+ERASE, 47583771873280, 47583771873280,
+STORE, 47583771873280, 47583771897855,
+ERASE, 47583771897856, 47583771897856,
+STORE, 47583771897856, 47583771914239,
+STORE, 47583771897856, 47583771926527,
+ERASE, 47583771873280, 47583771873280,
+STORE, 47583771873280, 47583771889663,
+STORE, 47583771889664, 47583771897855,
+ERASE, 47583770058752, 47583770058752,
+STORE, 47583770058752, 47583770062847,
+STORE, 47583770062848, 47583770066943,
+ERASE, 94436124798976, 94436124798976,
+STORE, 94436124798976, 94436124815359,
+STORE, 94436124815360, 94436124819455,
+ERASE, 140049025204224, 140049025204224,
+STORE, 140049025204224, 140049025208319,
+STORE, 140049025208320, 140049025212415,
+ERASE, 47583769952256, 47583769952256,
+STORE, 140737488347136, 140737488351231,
+STORE, 140727116099584, 140737488351231,
+ERASE, 140727116099584, 140727116099584,
+STORE, 140727116099584, 140727116103679,
+STORE, 94166319734784, 94166320447487,
+ERASE, 94166319734784, 94166319734784,
+STORE, 94166319734784, 94166319783935,
+STORE, 94166319783936, 94166320447487,
+ERASE, 94166319783936, 94166319783936,
+STORE, 94166319783936, 94166320328703,
+STORE, 94166320328704, 94166320427007,
+STORE, 94166320427008, 94166320447487,
+STORE, 139976559542272, 139976559714303,
+ERASE, 139976559542272, 139976559542272,
+STORE, 139976559542272, 139976559546367,
+STORE, 139976559546368, 139976559714303,
+ERASE, 139976559546368, 139976559546368,
+STORE, 139976559546368, 139976559669247,
+STORE, 139976559669248, 139976559702015,
+STORE, 139976559702016, 139976559710207,
+STORE, 139976559710208, 139976559714303,
+STORE, 140727116222464, 140727116226559,
+STORE, 140727116210176, 140727116222463,
+STORE, 47656235454464, 47656235462655,
+STORE, 47656235462656, 47656235470847,
+STORE, 47656235470848, 47656235577343,
+STORE, 47656235487232, 47656235577343,
+STORE, 47656235470848, 47656235487231,
+ERASE, 47656235487232, 47656235487232,
+STORE, 47656235487232, 47656235560959,
+STORE, 47656235560960, 47656235577343,
+STORE, 47656235540480, 47656235560959,
+STORE, 47656235487232, 47656235540479,
+ERASE, 47656235487232, 47656235487232,
+STORE, 47656235487232, 47656235540479,
+STORE, 47656235556864, 47656235560959,
+STORE, 47656235540480, 47656235556863,
+ERASE, 47656235540480, 47656235540480,
+STORE, 47656235540480, 47656235556863,
+STORE, 47656235569152, 47656235577343,
+STORE, 47656235560960, 47656235569151,
+ERASE, 47656235560960, 47656235560960,
+STORE, 47656235560960, 47656235569151,
+ERASE, 47656235569152, 47656235569152,
+STORE, 47656235569152, 47656235577343,
+STORE, 47656235577344, 47656237416447,
+STORE, 47656235716608, 47656237416447,
+STORE, 47656235577344, 47656235716607,
+ERASE, 47656235716608, 47656235716608,
+STORE, 47656235716608, 47656237375487,
+STORE, 47656237375488, 47656237416447,
+STORE, 47656237060096, 47656237375487,
+STORE, 47656235716608, 47656237060095,
+ERASE, 47656235716608, 47656235716608,
+STORE, 47656235716608, 47656237060095,
+STORE, 47656237371392, 47656237375487,
+STORE, 47656237060096, 47656237371391,
+ERASE, 47656237060096, 47656237060096,
+STORE, 47656237060096, 47656237371391,
+STORE, 47656237400064, 47656237416447,
+STORE, 47656237375488, 47656237400063,
+ERASE, 47656237375488, 47656237375488,
+STORE, 47656237375488, 47656237400063,
+ERASE, 47656237400064, 47656237400064,
+STORE, 47656237400064, 47656237416447,
+STORE, 47656237400064, 47656237428735,
+ERASE, 47656237375488, 47656237375488,
+STORE, 47656237375488, 47656237391871,
+STORE, 47656237391872, 47656237400063,
+ERASE, 47656235560960, 47656235560960,
+STORE, 47656235560960, 47656235565055,
+STORE, 47656235565056, 47656235569151,
+ERASE, 94166320427008, 94166320427008,
+STORE, 94166320427008, 94166320443391,
+STORE, 94166320443392, 94166320447487,
+ERASE, 139976559702016, 139976559702016,
+STORE, 139976559702016, 139976559706111,
+STORE, 139976559706112, 139976559710207,
+ERASE, 47656235454464, 47656235454464,
+STORE, 94166332153856, 94166332289023,
+STORE, 140737488347136, 140737488351231,
+STORE, 140726412816384, 140737488351231,
+ERASE, 140726412816384, 140726412816384,
+STORE, 140726412816384, 140726412820479,
+STORE, 94094884507648, 94094885220351,
+ERASE, 94094884507648, 94094884507648,
+STORE, 94094884507648, 94094884556799,
+STORE, 94094884556800, 94094885220351,
+ERASE, 94094884556800, 94094884556800,
+STORE, 94094884556800, 94094885101567,
+STORE, 94094885101568, 94094885199871,
+STORE, 94094885199872, 94094885220351,
+STORE, 139773773938688, 139773774110719,
+ERASE, 139773773938688, 139773773938688,
+STORE, 139773773938688, 139773773942783,
+STORE, 139773773942784, 139773774110719,
+ERASE, 139773773942784, 139773773942784,
+STORE, 139773773942784, 139773774065663,
+STORE, 139773774065664, 139773774098431,
+STORE, 139773774098432, 139773774106623,
+STORE, 139773774106624, 139773774110719,
+STORE, 140726412963840, 140726412967935,
+STORE, 140726412951552, 140726412963839,
+STORE, 47859021058048, 47859021066239,
+STORE, 47859021066240, 47859021074431,
+STORE, 47859021074432, 47859021180927,
+STORE, 47859021090816, 47859021180927,
+STORE, 47859021074432, 47859021090815,
+ERASE, 47859021090816, 47859021090816,
+STORE, 47859021090816, 47859021164543,
+STORE, 47859021164544, 47859021180927,
+STORE, 47859021144064, 47859021164543,
+STORE, 47859021090816, 47859021144063,
+ERASE, 47859021090816, 47859021090816,
+STORE, 47859021090816, 47859021144063,
+STORE, 47859021160448, 47859021164543,
+STORE, 47859021144064, 47859021160447,
+ERASE, 47859021144064, 47859021144064,
+STORE, 47859021144064, 47859021160447,
+STORE, 47859021172736, 47859021180927,
+STORE, 47859021164544, 47859021172735,
+ERASE, 47859021164544, 47859021164544,
+STORE, 47859021164544, 47859021172735,
+ERASE, 47859021172736, 47859021172736,
+STORE, 47859021172736, 47859021180927,
+STORE, 47859021180928, 47859023020031,
+STORE, 47859021320192, 47859023020031,
+STORE, 47859021180928, 47859021320191,
+ERASE, 47859021320192, 47859021320192,
+STORE, 47859021320192, 47859022979071,
+STORE, 47859022979072, 47859023020031,
+STORE, 47859022663680, 47859022979071,
+STORE, 47859021320192, 47859022663679,
+ERASE, 47859021320192, 47859021320192,
+STORE, 47859021320192, 47859022663679,
+STORE, 47859022974976, 47859022979071,
+STORE, 47859022663680, 47859022974975,
+ERASE, 47859022663680, 47859022663680,
+STORE, 47859022663680, 47859022974975,
+STORE, 47859023003648, 47859023020031,
+STORE, 47859022979072, 47859023003647,
+ERASE, 47859022979072, 47859022979072,
+STORE, 47859022979072, 47859023003647,
+ERASE, 47859023003648, 47859023003648,
+STORE, 47859023003648, 47859023020031,
+STORE, 47859023003648, 47859023032319,
+ERASE, 47859022979072, 47859022979072,
+STORE, 47859022979072, 47859022995455,
+STORE, 47859022995456, 47859023003647,
+ERASE, 47859021164544, 47859021164544,
+STORE, 47859021164544, 47859021168639,
+STORE, 47859021168640, 47859021172735,
+ERASE, 94094885199872, 94094885199872,
+STORE, 94094885199872, 94094885216255,
+STORE, 94094885216256, 94094885220351,
+ERASE, 139773774098432, 139773774098432,
+STORE, 139773774098432, 139773774102527,
+STORE, 139773774102528, 139773774106623,
+ERASE, 47859021058048, 47859021058048,
+STORE, 94094901108736, 94094901243903,
+STORE, 140737488347136, 140737488351231,
+STORE, 140736567963648, 140737488351231,
+ERASE, 140736567963648, 140736567963648,
+STORE, 140736567963648, 140736567967743,
+STORE, 94924425748480, 94924426461183,
+ERASE, 94924425748480, 94924425748480,
+STORE, 94924425748480, 94924425797631,
+STORE, 94924425797632, 94924426461183,
+ERASE, 94924425797632, 94924425797632,
+STORE, 94924425797632, 94924426342399,
+STORE, 94924426342400, 94924426440703,
+STORE, 94924426440704, 94924426461183,
+STORE, 140042126319616, 140042126491647,
+ERASE, 140042126319616, 140042126319616,
+STORE, 140042126319616, 140042126323711,
+STORE, 140042126323712, 140042126491647,
+ERASE, 140042126323712, 140042126323712,
+STORE, 140042126323712, 140042126446591,
+STORE, 140042126446592, 140042126479359,
+STORE, 140042126479360, 140042126487551,
+STORE, 140042126487552, 140042126491647,
+STORE, 140736568672256, 140736568676351,
+STORE, 140736568659968, 140736568672255,
+STORE, 47590668677120, 47590668685311,
+STORE, 47590668685312, 47590668693503,
+STORE, 47590668693504, 47590668799999,
+STORE, 47590668709888, 47590668799999,
+STORE, 47590668693504, 47590668709887,
+ERASE, 47590668709888, 47590668709888,
+STORE, 47590668709888, 47590668783615,
+STORE, 47590668783616, 47590668799999,
+STORE, 47590668763136, 47590668783615,
+STORE, 47590668709888, 47590668763135,
+ERASE, 47590668709888, 47590668709888,
+STORE, 47590668709888, 47590668763135,
+STORE, 47590668779520, 47590668783615,
+STORE, 47590668763136, 47590668779519,
+ERASE, 47590668763136, 47590668763136,
+STORE, 47590668763136, 47590668779519,
+STORE, 47590668791808, 47590668799999,
+STORE, 47590668783616, 47590668791807,
+ERASE, 47590668783616, 47590668783616,
+STORE, 47590668783616, 47590668791807,
+ERASE, 47590668791808, 47590668791808,
+STORE, 47590668791808, 47590668799999,
+STORE, 47590668800000, 47590670639103,
+STORE, 47590668939264, 47590670639103,
+STORE, 47590668800000, 47590668939263,
+ERASE, 47590668939264, 47590668939264,
+STORE, 47590668939264, 47590670598143,
+STORE, 47590670598144, 47590670639103,
+STORE, 47590670282752, 47590670598143,
+STORE, 47590668939264, 47590670282751,
+ERASE, 47590668939264, 47590668939264,
+STORE, 47590668939264, 47590670282751,
+STORE, 47590670594048, 47590670598143,
+STORE, 47590670282752, 47590670594047,
+ERASE, 47590670282752, 47590670282752,
+STORE, 47590670282752, 47590670594047,
+STORE, 47590670622720, 47590670639103,
+STORE, 47590670598144, 47590670622719,
+ERASE, 47590670598144, 47590670598144,
+STORE, 47590670598144, 47590670622719,
+ERASE, 47590670622720, 47590670622720,
+STORE, 47590670622720, 47590670639103,
+STORE, 47590670622720, 47590670651391,
+ERASE, 47590670598144, 47590670598144,
+STORE, 47590670598144, 47590670614527,
+STORE, 47590670614528, 47590670622719,
+ERASE, 47590668783616, 47590668783616,
+STORE, 47590668783616, 47590668787711,
+STORE, 47590668787712, 47590668791807,
+ERASE, 94924426440704, 94924426440704,
+STORE, 94924426440704, 94924426457087,
+STORE, 94924426457088, 94924426461183,
+ERASE, 140042126479360, 140042126479360,
+STORE, 140042126479360, 140042126483455,
+STORE, 140042126483456, 140042126487551,
+ERASE, 47590668677120, 47590668677120,
+STORE, 140737488347136, 140737488351231,
+STORE, 140733281439744, 140737488351231,
+ERASE, 140733281439744, 140733281439744,
+STORE, 140733281439744, 140733281443839,
+STORE, 94490667069440, 94490667782143,
+ERASE, 94490667069440, 94490667069440,
+STORE, 94490667069440, 94490667118591,
+STORE, 94490667118592, 94490667782143,
+ERASE, 94490667118592, 94490667118592,
+STORE, 94490667118592, 94490667663359,
+STORE, 94490667663360, 94490667761663,
+STORE, 94490667761664, 94490667782143,
+STORE, 139878215118848, 139878215290879,
+ERASE, 139878215118848, 139878215118848,
+STORE, 139878215118848, 139878215122943,
+STORE, 139878215122944, 139878215290879,
+ERASE, 139878215122944, 139878215122944,
+STORE, 139878215122944, 139878215245823,
+STORE, 139878215245824, 139878215278591,
+STORE, 139878215278592, 139878215286783,
+STORE, 139878215286784, 139878215290879,
+STORE, 140733281464320, 140733281468415,
+STORE, 140733281452032, 140733281464319,
+STORE, 47754579877888, 47754579886079,
+STORE, 47754579886080, 47754579894271,
+STORE, 47754579894272, 47754580000767,
+STORE, 47754579910656, 47754580000767,
+STORE, 47754579894272, 47754579910655,
+ERASE, 47754579910656, 47754579910656,
+STORE, 47754579910656, 47754579984383,
+STORE, 47754579984384, 47754580000767,
+STORE, 47754579963904, 47754579984383,
+STORE, 47754579910656, 47754579963903,
+ERASE, 47754579910656, 47754579910656,
+STORE, 47754579910656, 47754579963903,
+STORE, 47754579980288, 47754579984383,
+STORE, 47754579963904, 47754579980287,
+ERASE, 47754579963904, 47754579963904,
+STORE, 47754579963904, 47754579980287,
+STORE, 47754579992576, 47754580000767,
+STORE, 47754579984384, 47754579992575,
+ERASE, 47754579984384, 47754579984384,
+STORE, 47754579984384, 47754579992575,
+ERASE, 47754579992576, 47754579992576,
+STORE, 47754579992576, 47754580000767,
+STORE, 47754580000768, 47754581839871,
+STORE, 47754580140032, 47754581839871,
+STORE, 47754580000768, 47754580140031,
+ERASE, 47754580140032, 47754580140032,
+STORE, 47754580140032, 47754581798911,
+STORE, 47754581798912, 47754581839871,
+STORE, 47754581483520, 47754581798911,
+STORE, 47754580140032, 47754581483519,
+ERASE, 47754580140032, 47754580140032,
+STORE, 47754580140032, 47754581483519,
+STORE, 47754581794816, 47754581798911,
+STORE, 47754581483520, 47754581794815,
+ERASE, 47754581483520, 47754581483520,
+STORE, 47754581483520, 47754581794815,
+STORE, 47754581823488, 47754581839871,
+STORE, 47754581798912, 47754581823487,
+ERASE, 47754581798912, 47754581798912,
+STORE, 47754581798912, 47754581823487,
+ERASE, 47754581823488, 47754581823488,
+STORE, 47754581823488, 47754581839871,
+STORE, 47754581823488, 47754581852159,
+ERASE, 47754581798912, 47754581798912,
+STORE, 47754581798912, 47754581815295,
+STORE, 47754581815296, 47754581823487,
+ERASE, 47754579984384, 47754579984384,
+STORE, 47754579984384, 47754579988479,
+STORE, 47754579988480, 47754579992575,
+ERASE, 94490667761664, 94490667761664,
+STORE, 94490667761664, 94490667778047,
+STORE, 94490667778048, 94490667782143,
+ERASE, 139878215278592, 139878215278592,
+STORE, 139878215278592, 139878215282687,
+STORE, 139878215282688, 139878215286783,
+ERASE, 47754579877888, 47754579877888,
+STORE, 94490669649920, 94490669785087,
+STORE, 140737488347136, 140737488351231,
+STORE, 140735382188032, 140737488351231,
+ERASE, 140735382188032, 140735382188032,
+STORE, 140735382188032, 140735382192127,
+STORE, 94150181302272, 94150182014975,
+ERASE, 94150181302272, 94150181302272,
+STORE, 94150181302272, 94150181351423,
+STORE, 94150181351424, 94150182014975,
+ERASE, 94150181351424, 94150181351424,
+STORE, 94150181351424, 94150181896191,
+STORE, 94150181896192, 94150181994495,
+STORE, 94150181994496, 94150182014975,
+STORE, 139679752458240, 139679752630271,
+ERASE, 139679752458240, 139679752458240,
+STORE, 139679752458240, 139679752462335,
+STORE, 139679752462336, 139679752630271,
+ERASE, 139679752462336, 139679752462336,
+STORE, 139679752462336, 139679752585215,
+STORE, 139679752585216, 139679752617983,
+STORE, 139679752617984, 139679752626175,
+STORE, 139679752626176, 139679752630271,
+STORE, 140735382536192, 140735382540287,
+STORE, 140735382523904, 140735382536191,
+STORE, 47953042538496, 47953042546687,
+STORE, 47953042546688, 47953042554879,
+STORE, 47953042554880, 47953042661375,
+STORE, 47953042571264, 47953042661375,
+STORE, 47953042554880, 47953042571263,
+ERASE, 47953042571264, 47953042571264,
+STORE, 47953042571264, 47953042644991,
+STORE, 47953042644992, 47953042661375,
+STORE, 47953042624512, 47953042644991,
+STORE, 47953042571264, 47953042624511,
+ERASE, 47953042571264, 47953042571264,
+STORE, 47953042571264, 47953042624511,
+STORE, 47953042640896, 47953042644991,
+STORE, 47953042624512, 47953042640895,
+ERASE, 47953042624512, 47953042624512,
+STORE, 47953042624512, 47953042640895,
+STORE, 47953042653184, 47953042661375,
+STORE, 47953042644992, 47953042653183,
+ERASE, 47953042644992, 47953042644992,
+STORE, 47953042644992, 47953042653183,
+ERASE, 47953042653184, 47953042653184,
+STORE, 47953042653184, 47953042661375,
+STORE, 47953042661376, 47953044500479,
+STORE, 47953042800640, 47953044500479,
+STORE, 47953042661376, 47953042800639,
+ERASE, 47953042800640, 47953042800640,
+STORE, 47953042800640, 47953044459519,
+STORE, 47953044459520, 47953044500479,
+STORE, 47953044144128, 47953044459519,
+STORE, 47953042800640, 47953044144127,
+ERASE, 47953042800640, 47953042800640,
+STORE, 47953042800640, 47953044144127,
+STORE, 47953044455424, 47953044459519,
+STORE, 47953044144128, 47953044455423,
+ERASE, 47953044144128, 47953044144128,
+STORE, 47953044144128, 47953044455423,
+STORE, 47953044484096, 47953044500479,
+STORE, 47953044459520, 47953044484095,
+ERASE, 47953044459520, 47953044459520,
+STORE, 47953044459520, 47953044484095,
+ERASE, 47953044484096, 47953044484096,
+STORE, 47953044484096, 47953044500479,
+STORE, 47953044484096, 47953044512767,
+ERASE, 47953044459520, 47953044459520,
+STORE, 47953044459520, 47953044475903,
+STORE, 47953044475904, 47953044484095,
+ERASE, 47953042644992, 47953042644992,
+STORE, 47953042644992, 47953042649087,
+STORE, 47953042649088, 47953042653183,
+ERASE, 94150181994496, 94150181994496,
+STORE, 94150181994496, 94150182010879,
+STORE, 94150182010880, 94150182014975,
+ERASE, 139679752617984, 139679752617984,
+STORE, 139679752617984, 139679752622079,
+STORE, 139679752622080, 139679752626175,
+ERASE, 47953042538496, 47953042538496,
+STORE, 140737488347136, 140737488351231,
+STORE, 140737044123648, 140737488351231,
+ERASE, 140737044123648, 140737044123648,
+STORE, 140737044123648, 140737044127743,
+STORE, 94425324294144, 94425325006847,
+ERASE, 94425324294144, 94425324294144,
+STORE, 94425324294144, 94425324343295,
+STORE, 94425324343296, 94425325006847,
+ERASE, 94425324343296, 94425324343296,
+STORE, 94425324343296, 94425324888063,
+STORE, 94425324888064, 94425324986367,
+STORE, 94425324986368, 94425325006847,
+STORE, 140382015016960, 140382015188991,
+ERASE, 140382015016960, 140382015016960,
+STORE, 140382015016960, 140382015021055,
+STORE, 140382015021056, 140382015188991,
+ERASE, 140382015021056, 140382015021056,
+STORE, 140382015021056, 140382015143935,
+STORE, 140382015143936, 140382015176703,
+STORE, 140382015176704, 140382015184895,
+STORE, 140382015184896, 140382015188991,
+STORE, 140737045585920, 140737045590015,
+STORE, 140737045573632, 140737045585919,
+STORE, 47250779979776, 47250779987967,
+STORE, 47250779987968, 47250779996159,
+STORE, 47250779996160, 47250780102655,
+STORE, 47250780012544, 47250780102655,
+STORE, 47250779996160, 47250780012543,
+ERASE, 47250780012544, 47250780012544,
+STORE, 47250780012544, 47250780086271,
+STORE, 47250780086272, 47250780102655,
+STORE, 47250780065792, 47250780086271,
+STORE, 47250780012544, 47250780065791,
+ERASE, 47250780012544, 47250780012544,
+STORE, 47250780012544, 47250780065791,
+STORE, 47250780082176, 47250780086271,
+STORE, 47250780065792, 47250780082175,
+ERASE, 47250780065792, 47250780065792,
+STORE, 47250780065792, 47250780082175,
+STORE, 47250780094464, 47250780102655,
+STORE, 47250780086272, 47250780094463,
+ERASE, 47250780086272, 47250780086272,
+STORE, 47250780086272, 47250780094463,
+ERASE, 47250780094464, 47250780094464,
+STORE, 47250780094464, 47250780102655,
+STORE, 47250780102656, 47250781941759,
+STORE, 47250780241920, 47250781941759,
+STORE, 47250780102656, 47250780241919,
+ERASE, 47250780241920, 47250780241920,
+STORE, 47250780241920, 47250781900799,
+STORE, 47250781900800, 47250781941759,
+STORE, 47250781585408, 47250781900799,
+STORE, 47250780241920, 47250781585407,
+ERASE, 47250780241920, 47250780241920,
+STORE, 47250780241920, 47250781585407,
+STORE, 47250781896704, 47250781900799,
+STORE, 47250781585408, 47250781896703,
+ERASE, 47250781585408, 47250781585408,
+STORE, 47250781585408, 47250781896703,
+STORE, 47250781925376, 47250781941759,
+STORE, 47250781900800, 47250781925375,
+ERASE, 47250781900800, 47250781900800,
+STORE, 47250781900800, 47250781925375,
+ERASE, 47250781925376, 47250781925376,
+STORE, 47250781925376, 47250781941759,
+STORE, 47250781925376, 47250781954047,
+ERASE, 47250781900800, 47250781900800,
+STORE, 47250781900800, 47250781917183,
+STORE, 47250781917184, 47250781925375,
+ERASE, 47250780086272, 47250780086272,
+STORE, 47250780086272, 47250780090367,
+STORE, 47250780090368, 47250780094463,
+ERASE, 94425324986368, 94425324986368,
+STORE, 94425324986368, 94425325002751,
+STORE, 94425325002752, 94425325006847,
+ERASE, 140382015176704, 140382015176704,
+STORE, 140382015176704, 140382015180799,
+STORE, 140382015180800, 140382015184895,
+ERASE, 47250779979776, 47250779979776,
+STORE, 94425351438336, 94425351573503,
+STORE, 140737488347136, 140737488351231,
+STORE, 140736801144832, 140737488351231,
+ERASE, 140736801144832, 140736801144832,
+STORE, 140736801144832, 140736801148927,
+STORE, 94629429358592, 94629430071295,
+ERASE, 94629429358592, 94629429358592,
+STORE, 94629429358592, 94629429407743,
+STORE, 94629429407744, 94629430071295,
+ERASE, 94629429407744, 94629429407744,
+STORE, 94629429407744, 94629429952511,
+STORE, 94629429952512, 94629430050815,
+STORE, 94629430050816, 94629430071295,
+STORE, 139801685483520, 139801685655551,
+ERASE, 139801685483520, 139801685483520,
+STORE, 139801685483520, 139801685487615,
+STORE, 139801685487616, 139801685655551,
+ERASE, 139801685487616, 139801685487616,
+STORE, 139801685487616, 139801685610495,
+STORE, 139801685610496, 139801685643263,
+STORE, 139801685643264, 139801685651455,
+STORE, 139801685651456, 139801685655551,
+STORE, 140736801198080, 140736801202175,
+STORE, 140736801185792, 140736801198079,
+STORE, 47831109513216, 47831109521407,
+STORE, 47831109521408, 47831109529599,
+STORE, 47831109529600, 47831109636095,
+STORE, 47831109545984, 47831109636095,
+STORE, 47831109529600, 47831109545983,
+ERASE, 47831109545984, 47831109545984,
+STORE, 47831109545984, 47831109619711,
+STORE, 47831109619712, 47831109636095,
+STORE, 47831109599232, 47831109619711,
+STORE, 47831109545984, 47831109599231,
+ERASE, 47831109545984, 47831109545984,
+STORE, 47831109545984, 47831109599231,
+STORE, 47831109615616, 47831109619711,
+STORE, 47831109599232, 47831109615615,
+ERASE, 47831109599232, 47831109599232,
+STORE, 47831109599232, 47831109615615,
+STORE, 47831109627904, 47831109636095,
+STORE, 47831109619712, 47831109627903,
+ERASE, 47831109619712, 47831109619712,
+STORE, 47831109619712, 47831109627903,
+ERASE, 47831109627904, 47831109627904,
+STORE, 47831109627904, 47831109636095,
+STORE, 47831109636096, 47831111475199,
+STORE, 47831109775360, 47831111475199,
+STORE, 47831109636096, 47831109775359,
+ERASE, 47831109775360, 47831109775360,
+STORE, 47831109775360, 47831111434239,
+STORE, 47831111434240, 47831111475199,
+STORE, 47831111118848, 47831111434239,
+STORE, 47831109775360, 47831111118847,
+ERASE, 47831109775360, 47831109775360,
+STORE, 47831109775360, 47831111118847,
+STORE, 47831111430144, 47831111434239,
+STORE, 47831111118848, 47831111430143,
+ERASE, 47831111118848, 47831111118848,
+STORE, 47831111118848, 47831111430143,
+STORE, 47831111458816, 47831111475199,
+STORE, 47831111434240, 47831111458815,
+ERASE, 47831111434240, 47831111434240,
+STORE, 47831111434240, 47831111458815,
+ERASE, 47831111458816, 47831111458816,
+STORE, 47831111458816, 47831111475199,
+STORE, 47831111458816, 47831111487487,
+ERASE, 47831111434240, 47831111434240,
+STORE, 47831111434240, 47831111450623,
+STORE, 47831111450624, 47831111458815,
+ERASE, 47831109619712, 47831109619712,
+STORE, 47831109619712, 47831109623807,
+STORE, 47831109623808, 47831109627903,
+ERASE, 94629430050816, 94629430050816,
+STORE, 94629430050816, 94629430067199,
+STORE, 94629430067200, 94629430071295,
+ERASE, 139801685643264, 139801685643264,
+STORE, 139801685643264, 139801685647359,
+STORE, 139801685647360, 139801685651455,
+ERASE, 47831109513216, 47831109513216,
+STORE, 140737488347136, 140737488351231,
+STORE, 140729419612160, 140737488351231,
+ERASE, 140729419612160, 140729419612160,
+STORE, 140729419612160, 140729419616255,
+STORE, 94443354148864, 94443354861567,
+ERASE, 94443354148864, 94443354148864,
+STORE, 94443354148864, 94443354198015,
+STORE, 94443354198016, 94443354861567,
+ERASE, 94443354198016, 94443354198016,
+STORE, 94443354198016, 94443354742783,
+STORE, 94443354742784, 94443354841087,
+STORE, 94443354841088, 94443354861567,
+STORE, 139741700038656, 139741700210687,
+ERASE, 139741700038656, 139741700038656,
+STORE, 139741700038656, 139741700042751,
+STORE, 139741700042752, 139741700210687,
+ERASE, 139741700042752, 139741700042752,
+STORE, 139741700042752, 139741700165631,
+STORE, 139741700165632, 139741700198399,
+STORE, 139741700198400, 139741700206591,
+STORE, 139741700206592, 139741700210687,
+STORE, 140729420574720, 140729420578815,
+STORE, 140729420562432, 140729420574719,
+STORE, 47891094958080, 47891094966271,
+STORE, 47891094966272, 47891094974463,
+STORE, 47891094974464, 47891095080959,
+STORE, 47891094990848, 47891095080959,
+STORE, 47891094974464, 47891094990847,
+ERASE, 47891094990848, 47891094990848,
+STORE, 47891094990848, 47891095064575,
+STORE, 47891095064576, 47891095080959,
+STORE, 47891095044096, 47891095064575,
+STORE, 47891094990848, 47891095044095,
+ERASE, 47891094990848, 47891094990848,
+STORE, 47891094990848, 47891095044095,
+STORE, 47891095060480, 47891095064575,
+STORE, 47891095044096, 47891095060479,
+ERASE, 47891095044096, 47891095044096,
+STORE, 47891095044096, 47891095060479,
+STORE, 47891095072768, 47891095080959,
+STORE, 47891095064576, 47891095072767,
+ERASE, 47891095064576, 47891095064576,
+STORE, 47891095064576, 47891095072767,
+ERASE, 47891095072768, 47891095072768,
+STORE, 47891095072768, 47891095080959,
+STORE, 47891095080960, 47891096920063,
+STORE, 47891095220224, 47891096920063,
+STORE, 47891095080960, 47891095220223,
+ERASE, 47891095220224, 47891095220224,
+STORE, 47891095220224, 47891096879103,
+STORE, 47891096879104, 47891096920063,
+STORE, 47891096563712, 47891096879103,
+STORE, 47891095220224, 47891096563711,
+ERASE, 47891095220224, 47891095220224,
+STORE, 47891095220224, 47891096563711,
+STORE, 47891096875008, 47891096879103,
+STORE, 47891096563712, 47891096875007,
+ERASE, 47891096563712, 47891096563712,
+STORE, 47891096563712, 47891096875007,
+STORE, 47891096903680, 47891096920063,
+STORE, 47891096879104, 47891096903679,
+ERASE, 47891096879104, 47891096879104,
+STORE, 47891096879104, 47891096903679,
+ERASE, 47891096903680, 47891096903680,
+STORE, 47891096903680, 47891096920063,
+STORE, 47891096903680, 47891096932351,
+ERASE, 47891096879104, 47891096879104,
+STORE, 47891096879104, 47891096895487,
+STORE, 47891096895488, 47891096903679,
+ERASE, 47891095064576, 47891095064576,
+STORE, 47891095064576, 47891095068671,
+STORE, 47891095068672, 47891095072767,
+ERASE, 94443354841088, 94443354841088,
+STORE, 94443354841088, 94443354857471,
+STORE, 94443354857472, 94443354861567,
+ERASE, 139741700198400, 139741700198400,
+STORE, 139741700198400, 139741700202495,
+STORE, 139741700202496, 139741700206591,
+ERASE, 47891094958080, 47891094958080,
+STORE, 94443360825344, 94443360960511,
+STORE, 140737488347136, 140737488351231,
+STORE, 140722961661952, 140737488351231,
+ERASE, 140722961661952, 140722961661952,
+STORE, 140722961661952, 140722961666047,
+STORE, 94878388944896, 94878389657599,
+ERASE, 94878388944896, 94878388944896,
+STORE, 94878388944896, 94878388994047,
+STORE, 94878388994048, 94878389657599,
+ERASE, 94878388994048, 94878388994048,
+STORE, 94878388994048, 94878389538815,
+STORE, 94878389538816, 94878389637119,
+STORE, 94878389637120, 94878389657599,
+STORE, 140210690056192, 140210690228223,
+ERASE, 140210690056192, 140210690056192,
+STORE, 140210690056192, 140210690060287,
+STORE, 140210690060288, 140210690228223,
+ERASE, 140210690060288, 140210690060288,
+STORE, 140210690060288, 140210690183167,
+STORE, 140210690183168, 140210690215935,
+STORE, 140210690215936, 140210690224127,
+STORE, 140210690224128, 140210690228223,
+STORE, 140722963148800, 140722963152895,
+STORE, 140722963136512, 140722963148799,
+STORE, 47422104940544, 47422104948735,
+STORE, 47422104948736, 47422104956927,
+STORE, 47422104956928, 47422105063423,
+STORE, 47422104973312, 47422105063423,
+STORE, 47422104956928, 47422104973311,
+ERASE, 47422104973312, 47422104973312,
+STORE, 47422104973312, 47422105047039,
+STORE, 47422105047040, 47422105063423,
+STORE, 47422105026560, 47422105047039,
+STORE, 47422104973312, 47422105026559,
+ERASE, 47422104973312, 47422104973312,
+STORE, 47422104973312, 47422105026559,
+STORE, 47422105042944, 47422105047039,
+STORE, 47422105026560, 47422105042943,
+ERASE, 47422105026560, 47422105026560,
+STORE, 47422105026560, 47422105042943,
+STORE, 47422105055232, 47422105063423,
+STORE, 47422105047040, 47422105055231,
+ERASE, 47422105047040, 47422105047040,
+STORE, 47422105047040, 47422105055231,
+ERASE, 47422105055232, 47422105055232,
+STORE, 47422105055232, 47422105063423,
+STORE, 47422105063424, 47422106902527,
+STORE, 47422105202688, 47422106902527,
+STORE, 47422105063424, 47422105202687,
+ERASE, 47422105202688, 47422105202688,
+STORE, 47422105202688, 47422106861567,
+STORE, 47422106861568, 47422106902527,
+STORE, 47422106546176, 47422106861567,
+STORE, 47422105202688, 47422106546175,
+ERASE, 47422105202688, 47422105202688,
+STORE, 47422105202688, 47422106546175,
+STORE, 47422106857472, 47422106861567,
+STORE, 47422106546176, 47422106857471,
+ERASE, 47422106546176, 47422106546176,
+STORE, 47422106546176, 47422106857471,
+STORE, 47422106886144, 47422106902527,
+STORE, 47422106861568, 47422106886143,
+ERASE, 47422106861568, 47422106861568,
+STORE, 47422106861568, 47422106886143,
+ERASE, 47422106886144, 47422106886144,
+STORE, 47422106886144, 47422106902527,
+STORE, 47422106886144, 47422106914815,
+ERASE, 47422106861568, 47422106861568,
+STORE, 47422106861568, 47422106877951,
+STORE, 47422106877952, 47422106886143,
+ERASE, 47422105047040, 47422105047040,
+STORE, 47422105047040, 47422105051135,
+STORE, 47422105051136, 47422105055231,
+ERASE, 94878389637120, 94878389637120,
+STORE, 94878389637120, 94878389653503,
+STORE, 94878389653504, 94878389657599,
+ERASE, 140210690215936, 140210690215936,
+STORE, 140210690215936, 140210690220031,
+STORE, 140210690220032, 140210690224127,
+ERASE, 47422104940544, 47422104940544,
+STORE, 140737488347136, 140737488351231,
+STORE, 140727690309632, 140737488351231,
+ERASE, 140727690309632, 140727690309632,
+STORE, 140727690309632, 140727690313727,
+STORE, 94121892208640, 94121892921343,
+ERASE, 94121892208640, 94121892208640,
+STORE, 94121892208640, 94121892257791,
+STORE, 94121892257792, 94121892921343,
+ERASE, 94121892257792, 94121892257792,
+STORE, 94121892257792, 94121892802559,
+STORE, 94121892802560, 94121892900863,
+STORE, 94121892900864, 94121892921343,
+STORE, 140662438326272, 140662438498303,
+ERASE, 140662438326272, 140662438326272,
+STORE, 140662438326272, 140662438330367,
+STORE, 140662438330368, 140662438498303,
+ERASE, 140662438330368, 140662438330368,
+STORE, 140662438330368, 140662438453247,
+STORE, 140662438453248, 140662438486015,
+STORE, 140662438486016, 140662438494207,
+STORE, 140662438494208, 140662438498303,
+STORE, 140727690379264, 140727690383359,
+STORE, 140727690366976, 140727690379263,
+STORE, 46970356670464, 46970356678655,
+STORE, 46970356678656, 46970356686847,
+STORE, 46970356686848, 46970356793343,
+STORE, 46970356703232, 46970356793343,
+STORE, 46970356686848, 46970356703231,
+ERASE, 46970356703232, 46970356703232,
+STORE, 46970356703232, 46970356776959,
+STORE, 46970356776960, 46970356793343,
+STORE, 46970356756480, 46970356776959,
+STORE, 46970356703232, 46970356756479,
+ERASE, 46970356703232, 46970356703232,
+STORE, 46970356703232, 46970356756479,
+STORE, 46970356772864, 46970356776959,
+STORE, 46970356756480, 46970356772863,
+ERASE, 46970356756480, 46970356756480,
+STORE, 46970356756480, 46970356772863,
+STORE, 46970356785152, 46970356793343,
+STORE, 46970356776960, 46970356785151,
+ERASE, 46970356776960, 46970356776960,
+STORE, 46970356776960, 46970356785151,
+ERASE, 46970356785152, 46970356785152,
+STORE, 46970356785152, 46970356793343,
+STORE, 46970356793344, 46970358632447,
+STORE, 46970356932608, 46970358632447,
+STORE, 46970356793344, 46970356932607,
+ERASE, 46970356932608, 46970356932608,
+STORE, 46970356932608, 46970358591487,
+STORE, 46970358591488, 46970358632447,
+STORE, 46970358276096, 46970358591487,
+STORE, 46970356932608, 46970358276095,
+ERASE, 46970356932608, 46970356932608,
+STORE, 46970356932608, 46970358276095,
+STORE, 46970358587392, 46970358591487,
+STORE, 46970358276096, 46970358587391,
+ERASE, 46970358276096, 46970358276096,
+STORE, 46970358276096, 46970358587391,
+STORE, 46970358616064, 46970358632447,
+STORE, 46970358591488, 46970358616063,
+ERASE, 46970358591488, 46970358591488,
+STORE, 46970358591488, 46970358616063,
+ERASE, 46970358616064, 46970358616064,
+STORE, 46970358616064, 46970358632447,
+STORE, 46970358616064, 46970358644735,
+ERASE, 46970358591488, 46970358591488,
+STORE, 46970358591488, 46970358607871,
+STORE, 46970358607872, 46970358616063,
+ERASE, 46970356776960, 46970356776960,
+STORE, 46970356776960, 46970356781055,
+STORE, 46970356781056, 46970356785151,
+ERASE, 94121892900864, 94121892900864,
+STORE, 94121892900864, 94121892917247,
+STORE, 94121892917248, 94121892921343,
+ERASE, 140662438486016, 140662438486016,
+STORE, 140662438486016, 140662438490111,
+STORE, 140662438490112, 140662438494207,
+ERASE, 46970356670464, 46970356670464,
+STORE, 94121898610688, 94121898745855,
+STORE, 140737488347136, 140737488351231,
+STORE, 140737189351424, 140737488351231,
+ERASE, 140737189351424, 140737189351424,
+STORE, 140737189351424, 140737189355519,
+STORE, 93847948832768, 93847949545471,
+ERASE, 93847948832768, 93847948832768,
+STORE, 93847948832768, 93847948881919,
+STORE, 93847948881920, 93847949545471,
+ERASE, 93847948881920, 93847948881920,
+STORE, 93847948881920, 93847949426687,
+STORE, 93847949426688, 93847949524991,
+STORE, 93847949524992, 93847949545471,
+STORE, 139698989985792, 139698990157823,
+ERASE, 139698989985792, 139698989985792,
+STORE, 139698989985792, 139698989989887,
+STORE, 139698989989888, 139698990157823,
+ERASE, 139698989989888, 139698989989888,
+STORE, 139698989989888, 139698990112767,
+STORE, 139698990112768, 139698990145535,
+STORE, 139698990145536, 139698990153727,
+STORE, 139698990153728, 139698990157823,
+STORE, 140737189744640, 140737189748735,
+STORE, 140737189732352, 140737189744639,
+STORE, 47933805010944, 47933805019135,
+STORE, 47933805019136, 47933805027327,
+STORE, 47933805027328, 47933805133823,
+STORE, 47933805043712, 47933805133823,
+STORE, 47933805027328, 47933805043711,
+ERASE, 47933805043712, 47933805043712,
+STORE, 47933805043712, 47933805117439,
+STORE, 47933805117440, 47933805133823,
+STORE, 47933805096960, 47933805117439,
+STORE, 47933805043712, 47933805096959,
+ERASE, 47933805043712, 47933805043712,
+STORE, 47933805043712, 47933805096959,
+STORE, 47933805113344, 47933805117439,
+STORE, 47933805096960, 47933805113343,
+ERASE, 47933805096960, 47933805096960,
+STORE, 47933805096960, 47933805113343,
+STORE, 47933805125632, 47933805133823,
+STORE, 47933805117440, 47933805125631,
+ERASE, 47933805117440, 47933805117440,
+STORE, 47933805117440, 47933805125631,
+ERASE, 47933805125632, 47933805125632,
+STORE, 47933805125632, 47933805133823,
+STORE, 47933805133824, 47933806972927,
+STORE, 47933805273088, 47933806972927,
+STORE, 47933805133824, 47933805273087,
+ERASE, 47933805273088, 47933805273088,
+STORE, 47933805273088, 47933806931967,
+STORE, 47933806931968, 47933806972927,
+STORE, 47933806616576, 47933806931967,
+STORE, 47933805273088, 47933806616575,
+ERASE, 47933805273088, 47933805273088,
+STORE, 47933805273088, 47933806616575,
+STORE, 47933806927872, 47933806931967,
+STORE, 47933806616576, 47933806927871,
+ERASE, 47933806616576, 47933806616576,
+STORE, 47933806616576, 47933806927871,
+STORE, 47933806956544, 47933806972927,
+STORE, 47933806931968, 47933806956543,
+ERASE, 47933806931968, 47933806931968,
+STORE, 47933806931968, 47933806956543,
+ERASE, 47933806956544, 47933806956544,
+STORE, 47933806956544, 47933806972927,
+STORE, 47933806956544, 47933806985215,
+ERASE, 47933806931968, 47933806931968,
+STORE, 47933806931968, 47933806948351,
+STORE, 47933806948352, 47933806956543,
+ERASE, 47933805117440, 47933805117440,
+STORE, 47933805117440, 47933805121535,
+STORE, 47933805121536, 47933805125631,
+ERASE, 93847949524992, 93847949524992,
+STORE, 93847949524992, 93847949541375,
+STORE, 93847949541376, 93847949545471,
+ERASE, 139698990145536, 139698990145536,
+STORE, 139698990145536, 139698990149631,
+STORE, 139698990149632, 139698990153727,
+ERASE, 47933805010944, 47933805010944,
+STORE, 140737488347136, 140737488351231,
+STORE, 140725553991680, 140737488351231,
+ERASE, 140725553991680, 140725553991680,
+STORE, 140725553991680, 140725553995775,
+STORE, 93980056248320, 93980056961023,
+ERASE, 93980056248320, 93980056248320,
+STORE, 93980056248320, 93980056297471,
+STORE, 93980056297472, 93980056961023,
+ERASE, 93980056297472, 93980056297472,
+STORE, 93980056297472, 93980056842239,
+STORE, 93980056842240, 93980056940543,
+STORE, 93980056940544, 93980056961023,
+STORE, 140146588971008, 140146589143039,
+ERASE, 140146588971008, 140146588971008,
+STORE, 140146588971008, 140146588975103,
+STORE, 140146588975104, 140146589143039,
+ERASE, 140146588975104, 140146588975104,
+STORE, 140146588975104, 140146589097983,
+STORE, 140146589097984, 140146589130751,
+STORE, 140146589130752, 140146589138943,
+STORE, 140146589138944, 140146589143039,
+STORE, 140725554860032, 140725554864127,
+STORE, 140725554847744, 140725554860031,
+STORE, 47486206025728, 47486206033919,
+STORE, 47486206033920, 47486206042111,
+STORE, 47486206042112, 47486206148607,
+STORE, 47486206058496, 47486206148607,
+STORE, 47486206042112, 47486206058495,
+ERASE, 47486206058496, 47486206058496,
+STORE, 47486206058496, 47486206132223,
+STORE, 47486206132224, 47486206148607,
+STORE, 47486206111744, 47486206132223,
+STORE, 47486206058496, 47486206111743,
+ERASE, 47486206058496, 47486206058496,
+STORE, 47486206058496, 47486206111743,
+STORE, 47486206128128, 47486206132223,
+STORE, 47486206111744, 47486206128127,
+ERASE, 47486206111744, 47486206111744,
+STORE, 47486206111744, 47486206128127,
+STORE, 47486206140416, 47486206148607,
+STORE, 47486206132224, 47486206140415,
+ERASE, 47486206132224, 47486206132224,
+STORE, 47486206132224, 47486206140415,
+ERASE, 47486206140416, 47486206140416,
+STORE, 47486206140416, 47486206148607,
+STORE, 47486206148608, 47486207987711,
+STORE, 47486206287872, 47486207987711,
+STORE, 47486206148608, 47486206287871,
+ERASE, 47486206287872, 47486206287872,
+STORE, 47486206287872, 47486207946751,
+STORE, 47486207946752, 47486207987711,
+STORE, 47486207631360, 47486207946751,
+STORE, 47486206287872, 47486207631359,
+ERASE, 47486206287872, 47486206287872,
+STORE, 47486206287872, 47486207631359,
+STORE, 47486207942656, 47486207946751,
+STORE, 47486207631360, 47486207942655,
+ERASE, 47486207631360, 47486207631360,
+STORE, 47486207631360, 47486207942655,
+STORE, 47486207971328, 47486207987711,
+STORE, 47486207946752, 47486207971327,
+ERASE, 47486207946752, 47486207946752,
+STORE, 47486207946752, 47486207971327,
+ERASE, 47486207971328, 47486207971328,
+STORE, 47486207971328, 47486207987711,
+STORE, 47486207971328, 47486207999999,
+ERASE, 47486207946752, 47486207946752,
+STORE, 47486207946752, 47486207963135,
+STORE, 47486207963136, 47486207971327,
+ERASE, 47486206132224, 47486206132224,
+STORE, 47486206132224, 47486206136319,
+STORE, 47486206136320, 47486206140415,
+ERASE, 93980056940544, 93980056940544,
+STORE, 93980056940544, 93980056956927,
+STORE, 93980056956928, 93980056961023,
+ERASE, 140146589130752, 140146589130752,
+STORE, 140146589130752, 140146589134847,
+STORE, 140146589134848, 140146589138943,
+ERASE, 47486206025728, 47486206025728,
+STORE, 93980070006784, 93980070141951,
+STORE, 140737488347136, 140737488351231,
+STORE, 140727334776832, 140737488351231,
+ERASE, 140727334776832, 140727334776832,
+STORE, 140727334776832, 140727334780927,
+STORE, 94049747247104, 94049747959807,
+ERASE, 94049747247104, 94049747247104,
+STORE, 94049747247104, 94049747296255,
+STORE, 94049747296256, 94049747959807,
+ERASE, 94049747296256, 94049747296256,
+STORE, 94049747296256, 94049747841023,
+STORE, 94049747841024, 94049747939327,
+STORE, 94049747939328, 94049747959807,
+STORE, 140227307216896, 140227307388927,
+ERASE, 140227307216896, 140227307216896,
+STORE, 140227307216896, 140227307220991,
+STORE, 140227307220992, 140227307388927,
+ERASE, 140227307220992, 140227307220992,
+STORE, 140227307220992, 140227307343871,
+STORE, 140227307343872, 140227307376639,
+STORE, 140227307376640, 140227307384831,
+STORE, 140227307384832, 140227307388927,
+STORE, 140727335337984, 140727335342079,
+STORE, 140727335325696, 140727335337983,
+STORE, 47405487779840, 47405487788031,
+STORE, 47405487788032, 47405487796223,
+STORE, 47405487796224, 47405487902719,
+STORE, 47405487812608, 47405487902719,
+STORE, 47405487796224, 47405487812607,
+ERASE, 47405487812608, 47405487812608,
+STORE, 47405487812608, 47405487886335,
+STORE, 47405487886336, 47405487902719,
+STORE, 47405487865856, 47405487886335,
+STORE, 47405487812608, 47405487865855,
+ERASE, 47405487812608, 47405487812608,
+STORE, 47405487812608, 47405487865855,
+STORE, 47405487882240, 47405487886335,
+STORE, 47405487865856, 47405487882239,
+ERASE, 47405487865856, 47405487865856,
+STORE, 47405487865856, 47405487882239,
+STORE, 47405487894528, 47405487902719,
+STORE, 47405487886336, 47405487894527,
+ERASE, 47405487886336, 47405487886336,
+STORE, 47405487886336, 47405487894527,
+ERASE, 47405487894528, 47405487894528,
+STORE, 47405487894528, 47405487902719,
+STORE, 47405487902720, 47405489741823,
+STORE, 47405488041984, 47405489741823,
+STORE, 47405487902720, 47405488041983,
+ERASE, 47405488041984, 47405488041984,
+STORE, 47405488041984, 47405489700863,
+STORE, 47405489700864, 47405489741823,
+STORE, 47405489385472, 47405489700863,
+STORE, 47405488041984, 47405489385471,
+ERASE, 47405488041984, 47405488041984,
+STORE, 47405488041984, 47405489385471,
+STORE, 47405489696768, 47405489700863,
+STORE, 47405489385472, 47405489696767,
+ERASE, 47405489385472, 47405489385472,
+STORE, 47405489385472, 47405489696767,
+STORE, 47405489725440, 47405489741823,
+STORE, 47405489700864, 47405489725439,
+ERASE, 47405489700864, 47405489700864,
+STORE, 47405489700864, 47405489725439,
+ERASE, 47405489725440, 47405489725440,
+STORE, 47405489725440, 47405489741823,
+STORE, 47405489725440, 47405489754111,
+ERASE, 47405489700864, 47405489700864,
+STORE, 47405489700864, 47405489717247,
+STORE, 47405489717248, 47405489725439,
+ERASE, 47405487886336, 47405487886336,
+STORE, 47405487886336, 47405487890431,
+STORE, 47405487890432, 47405487894527,
+ERASE, 94049747939328, 94049747939328,
+STORE, 94049747939328, 94049747955711,
+STORE, 94049747955712, 94049747959807,
+ERASE, 140227307376640, 140227307376640,
+STORE, 140227307376640, 140227307380735,
+STORE, 140227307380736, 140227307384831,
+ERASE, 47405487779840, 47405487779840,
+STORE, 94049758810112, 94049758945279,
+STORE, 140737488347136, 140737488351231,
+STORE, 140727079718912, 140737488351231,
+ERASE, 140727079718912, 140727079718912,
+STORE, 140727079718912, 140727079723007,
+STORE, 94250996527104, 94250997239807,
+ERASE, 94250996527104, 94250996527104,
+STORE, 94250996527104, 94250996576255,
+STORE, 94250996576256, 94250997239807,
+ERASE, 94250996576256, 94250996576256,
+STORE, 94250996576256, 94250997121023,
+STORE, 94250997121024, 94250997219327,
+STORE, 94250997219328, 94250997239807,
+STORE, 140060022587392, 140060022759423,
+ERASE, 140060022587392, 140060022587392,
+STORE, 140060022587392, 140060022591487,
+STORE, 140060022591488, 140060022759423,
+ERASE, 140060022591488, 140060022591488,
+STORE, 140060022591488, 140060022714367,
+STORE, 140060022714368, 140060022747135,
+STORE, 140060022747136, 140060022755327,
+STORE, 140060022755328, 140060022759423,
+STORE, 140727079788544, 140727079792639,
+STORE, 140727079776256, 140727079788543,
+STORE, 47572772409344, 47572772417535,
+STORE, 47572772417536, 47572772425727,
+STORE, 47572772425728, 47572772532223,
+STORE, 47572772442112, 47572772532223,
+STORE, 47572772425728, 47572772442111,
+ERASE, 47572772442112, 47572772442112,
+STORE, 47572772442112, 47572772515839,
+STORE, 47572772515840, 47572772532223,
+STORE, 47572772495360, 47572772515839,
+STORE, 47572772442112, 47572772495359,
+ERASE, 47572772442112, 47572772442112,
+STORE, 47572772442112, 47572772495359,
+STORE, 47572772511744, 47572772515839,
+STORE, 47572772495360, 47572772511743,
+ERASE, 47572772495360, 47572772495360,
+STORE, 47572772495360, 47572772511743,
+STORE, 47572772524032, 47572772532223,
+STORE, 47572772515840, 47572772524031,
+ERASE, 47572772515840, 47572772515840,
+STORE, 47572772515840, 47572772524031,
+ERASE, 47572772524032, 47572772524032,
+STORE, 47572772524032, 47572772532223,
+STORE, 47572772532224, 47572774371327,
+STORE, 47572772671488, 47572774371327,
+STORE, 47572772532224, 47572772671487,
+ERASE, 47572772671488, 47572772671488,
+STORE, 47572772671488, 47572774330367,
+STORE, 47572774330368, 47572774371327,
+STORE, 47572774014976, 47572774330367,
+STORE, 47572772671488, 47572774014975,
+ERASE, 47572772671488, 47572772671488,
+STORE, 47572772671488, 47572774014975,
+STORE, 47572774326272, 47572774330367,
+STORE, 47572774014976, 47572774326271,
+ERASE, 47572774014976, 47572774014976,
+STORE, 47572774014976, 47572774326271,
+STORE, 47572774354944, 47572774371327,
+STORE, 47572774330368, 47572774354943,
+ERASE, 47572774330368, 47572774330368,
+STORE, 47572774330368, 47572774354943,
+ERASE, 47572774354944, 47572774354944,
+STORE, 47572774354944, 47572774371327,
+STORE, 47572774354944, 47572774383615,
+ERASE, 47572774330368, 47572774330368,
+STORE, 47572774330368, 47572774346751,
+STORE, 47572774346752, 47572774354943,
+ERASE, 47572772515840, 47572772515840,
+STORE, 47572772515840, 47572772519935,
+STORE, 47572772519936, 47572772524031,
+ERASE, 94250997219328, 94250997219328,
+STORE, 94250997219328, 94250997235711,
+STORE, 94250997235712, 94250997239807,
+ERASE, 140060022747136, 140060022747136,
+STORE, 140060022747136, 140060022751231,
+STORE, 140060022751232, 140060022755327,
+ERASE, 47572772409344, 47572772409344,
+STORE, 94251018305536, 94251018440703,
+STORE, 140737488347136, 140737488351231,
+STORE, 140730012389376, 140737488351231,
+ERASE, 140730012389376, 140730012389376,
+STORE, 140730012389376, 140730012393471,
+STORE, 94382607675392, 94382607695871,
+ERASE, 94382607675392, 94382607675392,
+STORE, 94382607675392, 94382607679487,
+STORE, 94382607679488, 94382607695871,
+ERASE, 94382607679488, 94382607679488,
+STORE, 94382607679488, 94382607683583,
+STORE, 94382607683584, 94382607687679,
+STORE, 94382607687680, 94382607695871,
+STORE, 140252451454976, 140252451627007,
+ERASE, 140252451454976, 140252451454976,
+STORE, 140252451454976, 140252451459071,
+STORE, 140252451459072, 140252451627007,
+ERASE, 140252451459072, 140252451459072,
+STORE, 140252451459072, 140252451581951,
+STORE, 140252451581952, 140252451614719,
+STORE, 140252451614720, 140252451622911,
+STORE, 140252451622912, 140252451627007,
+STORE, 140730013548544, 140730013552639,
+STORE, 140730013536256, 140730013548543,
+STORE, 47380343541760, 47380343549951,
+STORE, 47380343549952, 47380343558143,
+STORE, 47380343558144, 47380345397247,
+STORE, 47380343697408, 47380345397247,
+STORE, 47380343558144, 47380343697407,
+ERASE, 47380343697408, 47380343697408,
+STORE, 47380343697408, 47380345356287,
+STORE, 47380345356288, 47380345397247,
+STORE, 47380345040896, 47380345356287,
+STORE, 47380343697408, 47380345040895,
+ERASE, 47380343697408, 47380343697408,
+STORE, 47380343697408, 47380345040895,
+STORE, 47380345352192, 47380345356287,
+STORE, 47380345040896, 47380345352191,
+ERASE, 47380345040896, 47380345040896,
+STORE, 47380345040896, 47380345352191,
+STORE, 47380345380864, 47380345397247,
+STORE, 47380345356288, 47380345380863,
+ERASE, 47380345356288, 47380345356288,
+STORE, 47380345356288, 47380345380863,
+ERASE, 47380345380864, 47380345380864,
+STORE, 47380345380864, 47380345397247,
+ERASE, 47380345356288, 47380345356288,
+STORE, 47380345356288, 47380345372671,
+STORE, 47380345372672, 47380345380863,
+ERASE, 94382607687680, 94382607687680,
+STORE, 94382607687680, 94382607691775,
+STORE, 94382607691776, 94382607695871,
+ERASE, 140252451614720, 140252451614720,
+STORE, 140252451614720, 140252451618815,
+STORE, 140252451618816, 140252451622911,
+ERASE, 47380343541760, 47380343541760,
+STORE, 94382626803712, 94382626938879,
+STORE, 140737488347136, 140737488351231,
+STORE, 140730900271104, 140737488351231,
+ERASE, 140730900271104, 140730900271104,
+STORE, 140730900271104, 140730900275199,
+STORE, 93855478120448, 93855478337535,
+ERASE, 93855478120448, 93855478120448,
+STORE, 93855478120448, 93855478198271,
+STORE, 93855478198272, 93855478337535,
+ERASE, 93855478198272, 93855478198272,
+STORE, 93855478198272, 93855478243327,
+STORE, 93855478243328, 93855478288383,
+STORE, 93855478288384, 93855478337535,
+STORE, 140092686573568, 140092686745599,
+ERASE, 140092686573568, 140092686573568,
+STORE, 140092686573568, 140092686577663,
+STORE, 140092686577664, 140092686745599,
+ERASE, 140092686577664, 140092686577664,
+STORE, 140092686577664, 140092686700543,
+STORE, 140092686700544, 140092686733311,
+STORE, 140092686733312, 140092686741503,
+STORE, 140092686741504, 140092686745599,
+STORE, 140730900537344, 140730900541439,
+STORE, 140730900525056, 140730900537343,
+STORE, 47540108423168, 47540108431359,
+STORE, 47540108431360, 47540108439551,
+STORE, 47540108439552, 47540110278655,
+STORE, 47540108578816, 47540110278655,
+STORE, 47540108439552, 47540108578815,
+ERASE, 47540108578816, 47540108578816,
+STORE, 47540108578816, 47540110237695,
+STORE, 47540110237696, 47540110278655,
+STORE, 47540109922304, 47540110237695,
+STORE, 47540108578816, 47540109922303,
+ERASE, 47540108578816, 47540108578816,
+STORE, 47540108578816, 47540109922303,
+STORE, 47540110233600, 47540110237695,
+STORE, 47540109922304, 47540110233599,
+ERASE, 47540109922304, 47540109922304,
+STORE, 47540109922304, 47540110233599,
+STORE, 47540110262272, 47540110278655,
+STORE, 47540110237696, 47540110262271,
+ERASE, 47540110237696, 47540110237696,
+STORE, 47540110237696, 47540110262271,
+ERASE, 47540110262272, 47540110262272,
+STORE, 47540110262272, 47540110278655,
+ERASE, 47540110237696, 47540110237696,
+STORE, 47540110237696, 47540110254079,
+STORE, 47540110254080, 47540110262271,
+ERASE, 93855478288384, 93855478288384,
+STORE, 93855478288384, 93855478333439,
+STORE, 93855478333440, 93855478337535,
+ERASE, 140092686733312, 140092686733312,
+STORE, 140092686733312, 140092686737407,
+STORE, 140092686737408, 140092686741503,
+ERASE, 47540108423168, 47540108423168,
+STORE, 93855492222976, 93855492358143,
+STORE, 93855492222976, 93855492493311,
+STORE, 140737488347136, 140737488351231,
+STORE, 140733498146816, 140737488351231,
+ERASE, 140733498146816, 140733498146816,
+STORE, 140733498146816, 140733498150911,
+STORE, 94170739654656, 94170740367359,
+ERASE, 94170739654656, 94170739654656,
+STORE, 94170739654656, 94170739703807,
+STORE, 94170739703808, 94170740367359,
+ERASE, 94170739703808, 94170739703808,
+STORE, 94170739703808, 94170740248575,
+STORE, 94170740248576, 94170740346879,
+STORE, 94170740346880, 94170740367359,
+STORE, 140024788877312, 140024789049343,
+ERASE, 140024788877312, 140024788877312,
+STORE, 140024788877312, 140024788881407,
+STORE, 140024788881408, 140024789049343,
+ERASE, 140024788881408, 140024788881408,
+STORE, 140024788881408, 140024789004287,
+STORE, 140024789004288, 140024789037055,
+STORE, 140024789037056, 140024789045247,
+STORE, 140024789045248, 140024789049343,
+STORE, 140733499023360, 140733499027455,
+STORE, 140733499011072, 140733499023359,
+STORE, 47608006119424, 47608006127615,
+STORE, 47608006127616, 47608006135807,
+STORE, 47608006135808, 47608006242303,
+STORE, 47608006152192, 47608006242303,
+STORE, 47608006135808, 47608006152191,
+ERASE, 47608006152192, 47608006152192,
+STORE, 47608006152192, 47608006225919,
+STORE, 47608006225920, 47608006242303,
+STORE, 47608006205440, 47608006225919,
+STORE, 47608006152192, 47608006205439,
+ERASE, 47608006152192, 47608006152192,
+STORE, 47608006152192, 47608006205439,
+STORE, 47608006221824, 47608006225919,
+STORE, 47608006205440, 47608006221823,
+ERASE, 47608006205440, 47608006205440,
+STORE, 47608006205440, 47608006221823,
+STORE, 47608006234112, 47608006242303,
+STORE, 47608006225920, 47608006234111,
+ERASE, 47608006225920, 47608006225920,
+STORE, 47608006225920, 47608006234111,
+ERASE, 47608006234112, 47608006234112,
+STORE, 47608006234112, 47608006242303,
+STORE, 47608006242304, 47608008081407,
+STORE, 47608006381568, 47608008081407,
+STORE, 47608006242304, 47608006381567,
+ERASE, 47608006381568, 47608006381568,
+STORE, 47608006381568, 47608008040447,
+STORE, 47608008040448, 47608008081407,
+STORE, 47608007725056, 47608008040447,
+STORE, 47608006381568, 47608007725055,
+ERASE, 47608006381568, 47608006381568,
+STORE, 47608006381568, 47608007725055,
+STORE, 47608008036352, 47608008040447,
+STORE, 47608007725056, 47608008036351,
+ERASE, 47608007725056, 47608007725056,
+STORE, 47608007725056, 47608008036351,
+STORE, 47608008065024, 47608008081407,
+STORE, 47608008040448, 47608008065023,
+ERASE, 47608008040448, 47608008040448,
+STORE, 47608008040448, 47608008065023,
+ERASE, 47608008065024, 47608008065024,
+STORE, 47608008065024, 47608008081407,
+STORE, 47608008065024, 47608008093695,
+ERASE, 47608008040448, 47608008040448,
+STORE, 47608008040448, 47608008056831,
+STORE, 47608008056832, 47608008065023,
+ERASE, 47608006225920, 47608006225920,
+STORE, 47608006225920, 47608006230015,
+STORE, 47608006230016, 47608006234111,
+ERASE, 94170740346880, 94170740346880,
+STORE, 94170740346880, 94170740363263,
+STORE, 94170740363264, 94170740367359,
+ERASE, 140024789037056, 140024789037056,
+STORE, 140024789037056, 140024789041151,
+STORE, 140024789041152, 140024789045247,
+ERASE, 47608006119424, 47608006119424,
+STORE, 140737488347136, 140737488351231,
+STORE, 140730264326144, 140737488351231,
+ERASE, 140730264326144, 140730264326144,
+STORE, 140730264326144, 140730264330239,
+STORE, 94653216407552, 94653217120255,
+ERASE, 94653216407552, 94653216407552,
+STORE, 94653216407552, 94653216456703,
+STORE, 94653216456704, 94653217120255,
+ERASE, 94653216456704, 94653216456704,
+STORE, 94653216456704, 94653217001471,
+STORE, 94653217001472, 94653217099775,
+STORE, 94653217099776, 94653217120255,
+STORE, 140103617011712, 140103617183743,
+ERASE, 140103617011712, 140103617011712,
+STORE, 140103617011712, 140103617015807,
+STORE, 140103617015808, 140103617183743,
+ERASE, 140103617015808, 140103617015808,
+STORE, 140103617015808, 140103617138687,
+STORE, 140103617138688, 140103617171455,
+STORE, 140103617171456, 140103617179647,
+STORE, 140103617179648, 140103617183743,
+STORE, 140730265427968, 140730265432063,
+STORE, 140730265415680, 140730265427967,
+STORE, 47529177985024, 47529177993215,
+STORE, 47529177993216, 47529178001407,
+STORE, 47529178001408, 47529178107903,
+STORE, 47529178017792, 47529178107903,
+STORE, 47529178001408, 47529178017791,
+ERASE, 47529178017792, 47529178017792,
+STORE, 47529178017792, 47529178091519,
+STORE, 47529178091520, 47529178107903,
+STORE, 47529178071040, 47529178091519,
+STORE, 47529178017792, 47529178071039,
+ERASE, 47529178017792, 47529178017792,
+STORE, 47529178017792, 47529178071039,
+STORE, 47529178087424, 47529178091519,
+STORE, 47529178071040, 47529178087423,
+ERASE, 47529178071040, 47529178071040,
+STORE, 47529178071040, 47529178087423,
+STORE, 47529178099712, 47529178107903,
+STORE, 47529178091520, 47529178099711,
+ERASE, 47529178091520, 47529178091520,
+STORE, 47529178091520, 47529178099711,
+ERASE, 47529178099712, 47529178099712,
+STORE, 47529178099712, 47529178107903,
+STORE, 47529178107904, 47529179947007,
+STORE, 47529178247168, 47529179947007,
+STORE, 47529178107904, 47529178247167,
+ERASE, 47529178247168, 47529178247168,
+STORE, 47529178247168, 47529179906047,
+STORE, 47529179906048, 47529179947007,
+STORE, 47529179590656, 47529179906047,
+STORE, 47529178247168, 47529179590655,
+ERASE, 47529178247168, 47529178247168,
+STORE, 47529178247168, 47529179590655,
+STORE, 47529179901952, 47529179906047,
+STORE, 47529179590656, 47529179901951,
+ERASE, 47529179590656, 47529179590656,
+STORE, 47529179590656, 47529179901951,
+STORE, 47529179930624, 47529179947007,
+STORE, 47529179906048, 47529179930623,
+ERASE, 47529179906048, 47529179906048,
+STORE, 47529179906048, 47529179930623,
+ERASE, 47529179930624, 47529179930624,
+STORE, 47529179930624, 47529179947007,
+STORE, 47529179930624, 47529179959295,
+ERASE, 47529179906048, 47529179906048,
+STORE, 47529179906048, 47529179922431,
+STORE, 47529179922432, 47529179930623,
+ERASE, 47529178091520, 47529178091520,
+STORE, 47529178091520, 47529178095615,
+STORE, 47529178095616, 47529178099711,
+ERASE, 94653217099776, 94653217099776,
+STORE, 94653217099776, 94653217116159,
+STORE, 94653217116160, 94653217120255,
+ERASE, 140103617171456, 140103617171456,
+STORE, 140103617171456, 140103617175551,
+STORE, 140103617175552, 140103617179647,
+ERASE, 47529177985024, 47529177985024,
+STORE, 94653241135104, 94653241270271,
+STORE, 140737488347136, 140737488351231,
+STORE, 140736284549120, 140737488351231,
+ERASE, 140736284549120, 140736284549120,
+STORE, 140736284549120, 140736284553215,
+STORE, 93963663822848, 93963664506879,
+ERASE, 93963663822848, 93963663822848,
+STORE, 93963663822848, 93963663884287,
+STORE, 93963663884288, 93963664506879,
+ERASE, 93963663884288, 93963663884288,
+STORE, 93963663884288, 93963664240639,
+STORE, 93963664240640, 93963664379903,
+STORE, 93963664379904, 93963664506879,
+STORE, 140450188439552, 140450188611583,
+ERASE, 140450188439552, 140450188439552,
+STORE, 140450188439552, 140450188443647,
+STORE, 140450188443648, 140450188611583,
+ERASE, 140450188443648, 140450188443648,
+STORE, 140450188443648, 140450188566527,
+STORE, 140450188566528, 140450188599295,
+STORE, 140450188599296, 140450188607487,
+STORE, 140450188607488, 140450188611583,
+STORE, 140736284577792, 140736284581887,
+STORE, 140736284565504, 140736284577791,
+STORE, 47182606557184, 47182606565375,
+STORE, 47182606565376, 47182606573567,
+STORE, 47182606573568, 47182608412671,
+STORE, 47182606712832, 47182608412671,
+STORE, 47182606573568, 47182606712831,
+ERASE, 47182606712832, 47182606712832,
+STORE, 47182606712832, 47182608371711,
+STORE, 47182608371712, 47182608412671,
+STORE, 47182608056320, 47182608371711,
+STORE, 47182606712832, 47182608056319,
+ERASE, 47182606712832, 47182606712832,
+STORE, 47182606712832, 47182608056319,
+STORE, 47182608367616, 47182608371711,
+STORE, 47182608056320, 47182608367615,
+ERASE, 47182608056320, 47182608056320,
+STORE, 47182608056320, 47182608367615,
+STORE, 47182608396288, 47182608412671,
+STORE, 47182608371712, 47182608396287,
+ERASE, 47182608371712, 47182608371712,
+STORE, 47182608371712, 47182608396287,
+ERASE, 47182608396288, 47182608396288,
+STORE, 47182608396288, 47182608412671,
+STORE, 47182608412672, 47182608523263,
+STORE, 47182608429056, 47182608523263,
+STORE, 47182608412672, 47182608429055,
+ERASE, 47182608429056, 47182608429056,
+STORE, 47182608429056, 47182608515071,
+STORE, 47182608515072, 47182608523263,
+STORE, 47182608490496, 47182608515071,
+STORE, 47182608429056, 47182608490495,
+ERASE, 47182608429056, 47182608429056,
+STORE, 47182608429056, 47182608490495,
+STORE, 47182608510976, 47182608515071,
+STORE, 47182608490496, 47182608510975,
+ERASE, 47182608490496, 47182608490496,
+STORE, 47182608490496, 47182608510975,
+ERASE, 47182608515072, 47182608515072,
+STORE, 47182608515072, 47182608523263,
+STORE, 47182608523264, 47182608568319,
+ERASE, 47182608523264, 47182608523264,
+STORE, 47182608523264, 47182608531455,
+STORE, 47182608531456, 47182608568319,
+STORE, 47182608551936, 47182608568319,
+STORE, 47182608531456, 47182608551935,
+ERASE, 47182608531456, 47182608531456,
+STORE, 47182608531456, 47182608551935,
+STORE, 47182608560128, 47182608568319,
+STORE, 47182608551936, 47182608560127,
+ERASE, 47182608551936, 47182608551936,
+STORE, 47182608551936, 47182608568319,
+ERASE, 47182608551936, 47182608551936,
+STORE, 47182608551936, 47182608560127,
+STORE, 47182608560128, 47182608568319,
+ERASE, 47182608560128, 47182608560128,
+STORE, 47182608560128, 47182608568319,
+STORE, 47182608568320, 47182608916479,
+STORE, 47182608609280, 47182608916479,
+STORE, 47182608568320, 47182608609279,
+ERASE, 47182608609280, 47182608609280,
+STORE, 47182608609280, 47182608891903,
+STORE, 47182608891904, 47182608916479,
+STORE, 47182608822272, 47182608891903,
+STORE, 47182608609280, 47182608822271,
+ERASE, 47182608609280, 47182608609280,
+STORE, 47182608609280, 47182608822271,
+STORE, 47182608887808, 47182608891903,
+STORE, 47182608822272, 47182608887807,
+ERASE, 47182608822272, 47182608822272,
+STORE, 47182608822272, 47182608887807,
+ERASE, 47182608891904, 47182608891904,
+STORE, 47182608891904, 47182608916479,
+STORE, 47182608916480, 47182611177471,
+STORE, 47182609068032, 47182611177471,
+STORE, 47182608916480, 47182609068031,
+ERASE, 47182609068032, 47182609068032,
+STORE, 47182609068032, 47182611161087,
+STORE, 47182611161088, 47182611177471,
+STORE, 47182611169280, 47182611177471,
+STORE, 47182611161088, 47182611169279,
+ERASE, 47182611161088, 47182611161088,
+STORE, 47182611161088, 47182611169279,
+ERASE, 47182611169280, 47182611169280,
+STORE, 47182611169280, 47182611177471,
+STORE, 47182611177472, 47182611312639,
+ERASE, 47182611177472, 47182611177472,
+STORE, 47182611177472, 47182611202047,
+STORE, 47182611202048, 47182611312639,
+STORE, 47182611263488, 47182611312639,
+STORE, 47182611202048, 47182611263487,
+ERASE, 47182611202048, 47182611202048,
+STORE, 47182611202048, 47182611263487,
+STORE, 47182611288064, 47182611312639,
+STORE, 47182611263488, 47182611288063,
+ERASE, 47182611263488, 47182611263488,
+STORE, 47182611263488, 47182611312639,
+ERASE, 47182611263488, 47182611263488,
+STORE, 47182611263488, 47182611288063,
+STORE, 47182611288064, 47182611312639,
+STORE, 47182611296256, 47182611312639,
+STORE, 47182611288064, 47182611296255,
+ERASE, 47182611288064, 47182611288064,
+STORE, 47182611288064, 47182611296255,
+ERASE, 47182611296256, 47182611296256,
+STORE, 47182611296256, 47182611312639,
+STORE, 47182611296256, 47182611320831,
+STORE, 47182611320832, 47182611484671,
+ERASE, 47182611320832, 47182611320832,
+STORE, 47182611320832, 47182611333119,
+STORE, 47182611333120, 47182611484671,
+STORE, 47182611431424, 47182611484671,
+STORE, 47182611333120, 47182611431423,
+ERASE, 47182611333120, 47182611333120,
+STORE, 47182611333120, 47182611431423,
+STORE, 47182611476480, 47182611484671,
+STORE, 47182611431424, 47182611476479,
+ERASE, 47182611431424, 47182611431424,
+STORE, 47182611431424, 47182611484671,
+ERASE, 47182611431424, 47182611431424,
+STORE, 47182611431424, 47182611476479,
+STORE, 47182611476480, 47182611484671,
+ERASE, 47182611476480, 47182611476480,
+STORE, 47182611476480, 47182611484671,
+STORE, 47182611484672, 47182612082687,
+STORE, 47182611603456, 47182612082687,
+STORE, 47182611484672, 47182611603455,
+ERASE, 47182611603456, 47182611603456,
+STORE, 47182611603456, 47182612029439,
+STORE, 47182612029440, 47182612082687,
+STORE, 47182611918848, 47182612029439,
+STORE, 47182611603456, 47182611918847,
+ERASE, 47182611603456, 47182611603456,
+STORE, 47182611603456, 47182611918847,
+STORE, 47182612025344, 47182612029439,
+STORE, 47182611918848, 47182612025343,
+ERASE, 47182611918848, 47182611918848,
+STORE, 47182611918848, 47182612025343,
+ERASE, 47182612029440, 47182612029440,
+STORE, 47182612029440, 47182612082687,
+STORE, 47182612082688, 47182615134207,
+STORE, 47182612627456, 47182615134207,
+STORE, 47182612082688, 47182612627455,
+ERASE, 47182612627456, 47182612627456,
+STORE, 47182612627456, 47182614913023,
+STORE, 47182614913024, 47182615134207,
+STORE, 47182614323200, 47182614913023,
+STORE, 47182612627456, 47182614323199,
+ERASE, 47182612627456, 47182612627456,
+STORE, 47182612627456, 47182614323199,
+STORE, 47182614908928, 47182614913023,
+STORE, 47182614323200, 47182614908927,
+ERASE, 47182614323200, 47182614323200,
+STORE, 47182614323200, 47182614908927,
+STORE, 47182615117824, 47182615134207,
+STORE, 47182614913024, 47182615117823,
+ERASE, 47182614913024, 47182614913024,
+STORE, 47182614913024, 47182615117823,
+ERASE, 47182615117824, 47182615117824,
+STORE, 47182615117824, 47182615134207,
+STORE, 47182615134208, 47182615166975,
+ERASE, 47182615134208, 47182615134208,
+STORE, 47182615134208, 47182615142399,
+STORE, 47182615142400, 47182615166975,
+STORE, 47182615154688, 47182615166975,
+STORE, 47182615142400, 47182615154687,
+ERASE, 47182615142400, 47182615142400,
+STORE, 47182615142400, 47182615154687,
+STORE, 47182615158784, 47182615166975,
+STORE, 47182615154688, 47182615158783,
+ERASE, 47182615154688, 47182615154688,
+STORE, 47182615154688, 47182615166975,
+ERASE, 47182615154688, 47182615154688,
+STORE, 47182615154688, 47182615158783,
+STORE, 47182615158784, 47182615166975,
+ERASE, 47182615158784, 47182615158784,
+STORE, 47182615158784, 47182615166975,
+STORE, 47182615166976, 47182615203839,
+ERASE, 47182615166976, 47182615166976,
+STORE, 47182615166976, 47182615175167,
+STORE, 47182615175168, 47182615203839,
+STORE, 47182615191552, 47182615203839,
+STORE, 47182615175168, 47182615191551,
+ERASE, 47182615175168, 47182615175168,
+STORE, 47182615175168, 47182615191551,
+STORE, 47182615195648, 47182615203839,
+STORE, 47182615191552, 47182615195647,
+ERASE, 47182615191552, 47182615191552,
+STORE, 47182615191552, 47182615203839,
+ERASE, 47182615191552, 47182615191552,
+STORE, 47182615191552, 47182615195647,
+STORE, 47182615195648, 47182615203839,
+ERASE, 47182615195648, 47182615195648,
+STORE, 47182615195648, 47182615203839,
+STORE, 47182615203840, 47182615678975,
+ERASE, 47182615203840, 47182615203840,
+STORE, 47182615203840, 47182615212031,
+STORE, 47182615212032, 47182615678975,
+STORE, 47182615547904, 47182615678975,
+STORE, 47182615212032, 47182615547903,
+ERASE, 47182615212032, 47182615212032,
+STORE, 47182615212032, 47182615547903,
+STORE, 47182615670784, 47182615678975,
+STORE, 47182615547904, 47182615670783,
+ERASE, 47182615547904, 47182615547904,
+STORE, 47182615547904, 47182615678975,
+ERASE, 47182615547904, 47182615547904,
+STORE, 47182615547904, 47182615670783,
+STORE, 47182615670784, 47182615678975,
+ERASE, 47182615670784, 47182615670784,
+STORE, 47182615670784, 47182615678975,
+STORE, 47182615678976, 47182615687167,
+STORE, 47182615687168, 47182615707647,
+ERASE, 47182615687168, 47182615687168,
+STORE, 47182615687168, 47182615691263,
+STORE, 47182615691264, 47182615707647,
+STORE, 47182615695360, 47182615707647,
+STORE, 47182615691264, 47182615695359,
+ERASE, 47182615691264, 47182615691264,
+STORE, 47182615691264, 47182615695359,
+STORE, 47182615699456, 47182615707647,
+STORE, 47182615695360, 47182615699455,
+ERASE, 47182615695360, 47182615695360,
+STORE, 47182615695360, 47182615707647,
+ERASE, 47182615695360, 47182615695360,
+STORE, 47182615695360, 47182615699455,
+STORE, 47182615699456, 47182615707647,
+ERASE, 47182615699456, 47182615699456,
+STORE, 47182615699456, 47182615707647,
+STORE, 47182615707648, 47182615715839,
+ERASE, 47182608371712, 47182608371712,
+STORE, 47182608371712, 47182608388095,
+STORE, 47182608388096, 47182608396287,
+ERASE, 47182615699456, 47182615699456,
+STORE, 47182615699456, 47182615703551,
+STORE, 47182615703552, 47182615707647,
+ERASE, 47182611288064, 47182611288064,
+STORE, 47182611288064, 47182611292159,
+STORE, 47182611292160, 47182611296255,
+ERASE, 47182615670784, 47182615670784,
+STORE, 47182615670784, 47182615674879,
+STORE, 47182615674880, 47182615678975,
+ERASE, 47182615195648, 47182615195648,
+STORE, 47182615195648, 47182615199743,
+STORE, 47182615199744, 47182615203839,
+ERASE, 47182615158784, 47182615158784,
+STORE, 47182615158784, 47182615162879,
+STORE, 47182615162880, 47182615166975,
+ERASE, 47182614913024, 47182614913024,
+STORE, 47182614913024, 47182615109631,
+STORE, 47182615109632, 47182615117823,
+ERASE, 47182612029440, 47182612029440,
+STORE, 47182612029440, 47182612066303,
+STORE, 47182612066304, 47182612082687,
+ERASE, 47182611476480, 47182611476480,
+STORE, 47182611476480, 47182611480575,
+STORE, 47182611480576, 47182611484671,
+ERASE, 47182611161088, 47182611161088,
+STORE, 47182611161088, 47182611165183,
+STORE, 47182611165184, 47182611169279,
+ERASE, 47182608891904, 47182608891904,
+STORE, 47182608891904, 47182608912383,
+STORE, 47182608912384, 47182608916479,
+ERASE, 47182608560128, 47182608560128,
+STORE, 47182608560128, 47182608564223,
+STORE, 47182608564224, 47182608568319,
+ERASE, 47182608515072, 47182608515072,
+STORE, 47182608515072, 47182608519167,
+STORE, 47182608519168, 47182608523263,
+ERASE, 93963664379904, 93963664379904,
+STORE, 93963664379904, 93963664502783,
+STORE, 93963664502784, 93963664506879,
+ERASE, 140450188599296, 140450188599296,
+STORE, 140450188599296, 140450188603391,
+STORE, 140450188603392, 140450188607487,
+ERASE, 47182606557184, 47182606557184,
+STORE, 93963694723072, 93963694858239,
+STORE, 140737488347136, 140737488351231,
+STORE, 140730313261056, 140737488351231,
+ERASE, 140730313261056, 140730313261056,
+STORE, 140730313261056, 140730313265151,
+STORE, 94386579017728, 94386579697663,
+ERASE, 94386579017728, 94386579017728,
+STORE, 94386579017728, 94386579083263,
+STORE, 94386579083264, 94386579697663,
+ERASE, 94386579083264, 94386579083264,
+STORE, 94386579083264, 94386579431423,
+STORE, 94386579431424, 94386579570687,
+STORE, 94386579570688, 94386579697663,
+STORE, 140124810838016, 140124811010047,
+ERASE, 140124810838016, 140124810838016,
+STORE, 140124810838016, 140124810842111,
+STORE, 140124810842112, 140124811010047,
+ERASE, 140124810842112, 140124810842112,
+STORE, 140124810842112, 140124810964991,
+STORE, 140124810964992, 140124810997759,
+STORE, 140124810997760, 140124811005951,
+STORE, 140124811005952, 140124811010047,
+STORE, 140730313601024, 140730313605119,
+STORE, 140730313588736, 140730313601023,
+STORE, 47507984158720, 47507984166911,
+STORE, 47507984166912, 47507984175103,
+STORE, 47507984175104, 47507986014207,
+STORE, 47507984314368, 47507986014207,
+STORE, 47507984175104, 47507984314367,
+ERASE, 47507984314368, 47507984314368,
+STORE, 47507984314368, 47507985973247,
+STORE, 47507985973248, 47507986014207,
+STORE, 47507985657856, 47507985973247,
+STORE, 47507984314368, 47507985657855,
+ERASE, 47507984314368, 47507984314368,
+STORE, 47507984314368, 47507985657855,
+STORE, 47507985969152, 47507985973247,
+STORE, 47507985657856, 47507985969151,
+ERASE, 47507985657856, 47507985657856,
+STORE, 47507985657856, 47507985969151,
+STORE, 47507985997824, 47507986014207,
+STORE, 47507985973248, 47507985997823,
+ERASE, 47507985973248, 47507985973248,
+STORE, 47507985973248, 47507985997823,
+ERASE, 47507985997824, 47507985997824,
+STORE, 47507985997824, 47507986014207,
+STORE, 47507986014208, 47507986124799,
+STORE, 47507986030592, 47507986124799,
+STORE, 47507986014208, 47507986030591,
+ERASE, 47507986030592, 47507986030592,
+STORE, 47507986030592, 47507986116607,
+STORE, 47507986116608, 47507986124799,
+STORE, 47507986092032, 47507986116607,
+STORE, 47507986030592, 47507986092031,
+ERASE, 47507986030592, 47507986030592,
+STORE, 47507986030592, 47507986092031,
+STORE, 47507986112512, 47507986116607,
+STORE, 47507986092032, 47507986112511,
+ERASE, 47507986092032, 47507986092032,
+STORE, 47507986092032, 47507986112511,
+ERASE, 47507986116608, 47507986116608,
+STORE, 47507986116608, 47507986124799,
+STORE, 47507986124800, 47507986169855,
+ERASE, 47507986124800, 47507986124800,
+STORE, 47507986124800, 47507986132991,
+STORE, 47507986132992, 47507986169855,
+STORE, 47507986153472, 47507986169855,
+STORE, 47507986132992, 47507986153471,
+ERASE, 47507986132992, 47507986132992,
+STORE, 47507986132992, 47507986153471,
+STORE, 47507986161664, 47507986169855,
+STORE, 47507986153472, 47507986161663,
+ERASE, 47507986153472, 47507986153472,
+STORE, 47507986153472, 47507986169855,
+ERASE, 47507986153472, 47507986153472,
+STORE, 47507986153472, 47507986161663,
+STORE, 47507986161664, 47507986169855,
+ERASE, 47507986161664, 47507986161664,
+STORE, 47507986161664, 47507986169855,
+STORE, 47507986169856, 47507986518015,
+STORE, 47507986210816, 47507986518015,
+STORE, 47507986169856, 47507986210815,
+ERASE, 47507986210816, 47507986210816,
+STORE, 47507986210816, 47507986493439,
+STORE, 47507986493440, 47507986518015,
+STORE, 47507986423808, 47507986493439,
+STORE, 47507986210816, 47507986423807,
+ERASE, 47507986210816, 47507986210816,
+STORE, 47507986210816, 47507986423807,
+STORE, 47507986489344, 47507986493439,
+STORE, 47507986423808, 47507986489343,
+ERASE, 47507986423808, 47507986423808,
+STORE, 47507986423808, 47507986489343,
+ERASE, 47507986493440, 47507986493440,
+STORE, 47507986493440, 47507986518015,
+STORE, 47507986518016, 47507988779007,
+STORE, 47507986669568, 47507988779007,
+STORE, 47507986518016, 47507986669567,
+ERASE, 47507986669568, 47507986669568,
+STORE, 47507986669568, 47507988762623,
+STORE, 47507988762624, 47507988779007,
+STORE, 47507988770816, 47507988779007,
+STORE, 47507988762624, 47507988770815,
+ERASE, 47507988762624, 47507988762624,
+STORE, 47507988762624, 47507988770815,
+ERASE, 47507988770816, 47507988770816,
+STORE, 47507988770816, 47507988779007,
+STORE, 47507988779008, 47507988914175,
+ERASE, 47507988779008, 47507988779008,
+STORE, 47507988779008, 47507988803583,
+STORE, 47507988803584, 47507988914175,
+STORE, 47507988865024, 47507988914175,
+STORE, 47507988803584, 47507988865023,
+ERASE, 47507988803584, 47507988803584,
+STORE, 47507988803584, 47507988865023,
+STORE, 47507988889600, 47507988914175,
+STORE, 47507988865024, 47507988889599,
+ERASE, 47507988865024, 47507988865024,
+STORE, 47507988865024, 47507988914175,
+ERASE, 47507988865024, 47507988865024,
+STORE, 47507988865024, 47507988889599,
+STORE, 47507988889600, 47507988914175,
+STORE, 47507988897792, 47507988914175,
+STORE, 47507988889600, 47507988897791,
+ERASE, 47507988889600, 47507988889600,
+STORE, 47507988889600, 47507988897791,
+ERASE, 47507988897792, 47507988897792,
+STORE, 47507988897792, 47507988914175,
+STORE, 47507988897792, 47507988922367,
+STORE, 47507988922368, 47507989086207,
+ERASE, 47507988922368, 47507988922368,
+STORE, 47507988922368, 47507988934655,
+STORE, 47507988934656, 47507989086207,
+STORE, 47507989032960, 47507989086207,
+STORE, 47507988934656, 47507989032959,
+ERASE, 47507988934656, 47507988934656,
+STORE, 47507988934656, 47507989032959,
+STORE, 47507989078016, 47507989086207,
+STORE, 47507989032960, 47507989078015,
+ERASE, 47507989032960, 47507989032960,
+STORE, 47507989032960, 47507989086207,
+ERASE, 47507989032960, 47507989032960,
+STORE, 47507989032960, 47507989078015,
+STORE, 47507989078016, 47507989086207,
+ERASE, 47507989078016, 47507989078016,
+STORE, 47507989078016, 47507989086207,
+STORE, 47507989086208, 47507989684223,
+STORE, 47507989204992, 47507989684223,
+STORE, 47507989086208, 47507989204991,
+ERASE, 47507989204992, 47507989204992,
+STORE, 47507989204992, 47507989630975,
+STORE, 47507989630976, 47507989684223,
+STORE, 47507989520384, 47507989630975,
+STORE, 47507989204992, 47507989520383,
+ERASE, 47507989204992, 47507989204992,
+STORE, 47507989204992, 47507989520383,
+STORE, 47507989626880, 47507989630975,
+STORE, 47507989520384, 47507989626879,
+ERASE, 47507989520384, 47507989520384,
+STORE, 47507989520384, 47507989626879,
+ERASE, 47507989630976, 47507989630976,
+STORE, 47507989630976, 47507989684223,
+STORE, 47507989684224, 47507992735743,
+STORE, 47507990228992, 47507992735743,
+STORE, 47507989684224, 47507990228991,
+ERASE, 47507990228992, 47507990228992,
+STORE, 47507990228992, 47507992514559,
+STORE, 47507992514560, 47507992735743,
+STORE, 47507991924736, 47507992514559,
+STORE, 47507990228992, 47507991924735,
+ERASE, 47507990228992, 47507990228992,
+STORE, 47507990228992, 47507991924735,
+STORE, 47507992510464, 47507992514559,
+STORE, 47507991924736, 47507992510463,
+ERASE, 47507991924736, 47507991924736,
+STORE, 47507991924736, 47507992510463,
+STORE, 47507992719360, 47507992735743,
+STORE, 47507992514560, 47507992719359,
+ERASE, 47507992514560, 47507992514560,
+STORE, 47507992514560, 47507992719359,
+ERASE, 47507992719360, 47507992719360,
+STORE, 47507992719360, 47507992735743,
+STORE, 47507992735744, 47507992768511,
+ERASE, 47507992735744, 47507992735744,
+STORE, 47507992735744, 47507992743935,
+STORE, 47507992743936, 47507992768511,
+STORE, 47507992756224, 47507992768511,
+STORE, 47507992743936, 47507992756223,
+ERASE, 47507992743936, 47507992743936,
+STORE, 47507992743936, 47507992756223,
+STORE, 47507992760320, 47507992768511,
+STORE, 47507992756224, 47507992760319,
+ERASE, 47507992756224, 47507992756224,
+STORE, 47507992756224, 47507992768511,
+ERASE, 47507992756224, 47507992756224,
+STORE, 47507992756224, 47507992760319,
+STORE, 47507992760320, 47507992768511,
+ERASE, 47507992760320, 47507992760320,
+STORE, 47507992760320, 47507992768511,
+STORE, 47507992768512, 47507992805375,
+ERASE, 47507992768512, 47507992768512,
+STORE, 47507992768512, 47507992776703,
+STORE, 47507992776704, 47507992805375,
+STORE, 47507992793088, 47507992805375,
+STORE, 47507992776704, 47507992793087,
+ERASE, 47507992776704, 47507992776704,
+STORE, 47507992776704, 47507992793087,
+STORE, 47507992797184, 47507992805375,
+STORE, 47507992793088, 47507992797183,
+ERASE, 47507992793088, 47507992793088,
+STORE, 47507992793088, 47507992805375,
+ERASE, 47507992793088, 47507992793088,
+STORE, 47507992793088, 47507992797183,
+STORE, 47507992797184, 47507992805375,
+ERASE, 47507992797184, 47507992797184,
+STORE, 47507992797184, 47507992805375,
+STORE, 47507992805376, 47507993280511,
+ERASE, 47507992805376, 47507992805376,
+STORE, 47507992805376, 47507992813567,
+STORE, 47507992813568, 47507993280511,
+STORE, 47507993149440, 47507993280511,
+STORE, 47507992813568, 47507993149439,
+ERASE, 47507992813568, 47507992813568,
+STORE, 47507992813568, 47507993149439,
+STORE, 47507993272320, 47507993280511,
+STORE, 47507993149440, 47507993272319,
+ERASE, 47507993149440, 47507993149440,
+STORE, 47507993149440, 47507993280511,
+ERASE, 47507993149440, 47507993149440,
+STORE, 47507993149440, 47507993272319,
+STORE, 47507993272320, 47507993280511,
+ERASE, 47507993272320, 47507993272320,
+STORE, 47507993272320, 47507993280511,
+STORE, 47507993280512, 47507993288703,
+STORE, 47507993288704, 47507993309183,
+ERASE, 47507993288704, 47507993288704,
+STORE, 47507993288704, 47507993292799,
+STORE, 47507993292800, 47507993309183,
+STORE, 47507993296896, 47507993309183,
+STORE, 47507993292800, 47507993296895,
+ERASE, 47507993292800, 47507993292800,
+STORE, 47507993292800, 47507993296895,
+STORE, 47507993300992, 47507993309183,
+STORE, 47507993296896, 47507993300991,
+ERASE, 47507993296896, 47507993296896,
+STORE, 47507993296896, 47507993309183,
+ERASE, 47507993296896, 47507993296896,
+STORE, 47507993296896, 47507993300991,
+STORE, 47507993300992, 47507993309183,
+ERASE, 47507993300992, 47507993300992,
+STORE, 47507993300992, 47507993309183,
+STORE, 47507993309184, 47507993317375,
+ERASE, 47507985973248, 47507985973248,
+STORE, 47507985973248, 47507985989631,
+STORE, 47507985989632, 47507985997823,
+ERASE, 47507993300992, 47507993300992,
+STORE, 47507993300992, 47507993305087,
+STORE, 47507993305088, 47507993309183,
+ERASE, 47507988889600, 47507988889600,
+STORE, 47507988889600, 47507988893695,
+STORE, 47507988893696, 47507988897791,
+ERASE, 47507993272320, 47507993272320,
+STORE, 47507993272320, 47507993276415,
+STORE, 47507993276416, 47507993280511,
+ERASE, 47507992797184, 47507992797184,
+STORE, 47507992797184, 47507992801279,
+STORE, 47507992801280, 47507992805375,
+ERASE, 47507992760320, 47507992760320,
+STORE, 47507992760320, 47507992764415,
+STORE, 47507992764416, 47507992768511,
+ERASE, 47507992514560, 47507992514560,
+STORE, 47507992514560, 47507992711167,
+STORE, 47507992711168, 47507992719359,
+ERASE, 47507989630976, 47507989630976,
+STORE, 47507989630976, 47507989667839,
+STORE, 47507989667840, 47507989684223,
+ERASE, 47507989078016, 47507989078016,
+STORE, 47507989078016, 47507989082111,
+STORE, 47507989082112, 47507989086207,
+ERASE, 47507988762624, 47507988762624,
+STORE, 47507988762624, 47507988766719,
+STORE, 47507988766720, 47507988770815,
+ERASE, 47507986493440, 47507986493440,
+STORE, 47507986493440, 47507986513919,
+STORE, 47507986513920, 47507986518015,
+ERASE, 47507986161664, 47507986161664,
+STORE, 47507986161664, 47507986165759,
+STORE, 47507986165760, 47507986169855,
+ERASE, 47507986116608, 47507986116608,
+STORE, 47507986116608, 47507986120703,
+STORE, 47507986120704, 47507986124799,
+ERASE, 94386579570688, 94386579570688,
+STORE, 94386579570688, 94386579693567,
+STORE, 94386579693568, 94386579697663,
+ERASE, 140124810997760, 140124810997760,
+STORE, 140124810997760, 140124811001855,
+STORE, 140124811001856, 140124811005951,
+ERASE, 47507984158720, 47507984158720,
+STORE, 94386583982080, 94386584117247,
+STORE, 94386583982080, 94386584256511,
+ERASE, 94386583982080, 94386583982080,
+STORE, 94386583982080, 94386584223743,
+STORE, 94386584223744, 94386584256511,
+ERASE, 94386584223744, 94386584223744,
+STORE, 140737488347136, 140737488351231,
+STORE, 140733763395584, 140737488351231,
+ERASE, 140733763395584, 140733763395584,
+STORE, 140733763395584, 140733763399679,
+STORE, 94011546472448, 94011547152383,
+ERASE, 94011546472448, 94011546472448,
+STORE, 94011546472448, 94011546537983,
+STORE, 94011546537984, 94011547152383,
+ERASE, 94011546537984, 94011546537984,
+STORE, 94011546537984, 94011546886143,
+STORE, 94011546886144, 94011547025407,
+STORE, 94011547025408, 94011547152383,
+STORE, 139757597949952, 139757598121983,
+ERASE, 139757597949952, 139757597949952,
+STORE, 139757597949952, 139757597954047,
+STORE, 139757597954048, 139757598121983,
+ERASE, 139757597954048, 139757597954048,
+STORE, 139757597954048, 139757598076927,
+STORE, 139757598076928, 139757598109695,
+STORE, 139757598109696, 139757598117887,
+STORE, 139757598117888, 139757598121983,
+STORE, 140733763596288, 140733763600383,
+STORE, 140733763584000, 140733763596287,
+STORE, 47875197046784, 47875197054975,
+STORE, 47875197054976, 47875197063167,
+STORE, 47875197063168, 47875198902271,
+STORE, 47875197202432, 47875198902271,
+STORE, 47875197063168, 47875197202431,
+ERASE, 47875197202432, 47875197202432,
+STORE, 47875197202432, 47875198861311,
+STORE, 47875198861312, 47875198902271,
+STORE, 47875198545920, 47875198861311,
+STORE, 47875197202432, 47875198545919,
+ERASE, 47875197202432, 47875197202432,
+STORE, 47875197202432, 47875198545919,
+STORE, 47875198857216, 47875198861311,
+STORE, 47875198545920, 47875198857215,
+ERASE, 47875198545920, 47875198545920,
+STORE, 47875198545920, 47875198857215,
+STORE, 47875198885888, 47875198902271,
+STORE, 47875198861312, 47875198885887,
+ERASE, 47875198861312, 47875198861312,
+STORE, 47875198861312, 47875198885887,
+ERASE, 47875198885888, 47875198885888,
+STORE, 47875198885888, 47875198902271,
+STORE, 47875198902272, 47875199012863,
+STORE, 47875198918656, 47875199012863,
+STORE, 47875198902272, 47875198918655,
+ERASE, 47875198918656, 47875198918656,
+STORE, 47875198918656, 47875199004671,
+STORE, 47875199004672, 47875199012863,
+STORE, 47875198980096, 47875199004671,
+STORE, 47875198918656, 47875198980095,
+ERASE, 47875198918656, 47875198918656,
+STORE, 47875198918656, 47875198980095,
+STORE, 47875199000576, 47875199004671,
+STORE, 47875198980096, 47875199000575,
+ERASE, 47875198980096, 47875198980096,
+STORE, 47875198980096, 47875199000575,
+ERASE, 47875199004672, 47875199004672,
+STORE, 47875199004672, 47875199012863,
+STORE, 47875199012864, 47875199057919,
+ERASE, 47875199012864, 47875199012864,
+STORE, 47875199012864, 47875199021055,
+STORE, 47875199021056, 47875199057919,
+STORE, 47875199041536, 47875199057919,
+STORE, 47875199021056, 47875199041535,
+ERASE, 47875199021056, 47875199021056,
+STORE, 47875199021056, 47875199041535,
+STORE, 47875199049728, 47875199057919,
+STORE, 47875199041536, 47875199049727,
+ERASE, 47875199041536, 47875199041536,
+STORE, 47875199041536, 47875199057919,
+ERASE, 47875199041536, 47875199041536,
+STORE, 47875199041536, 47875199049727,
+STORE, 47875199049728, 47875199057919,
+ERASE, 47875199049728, 47875199049728,
+STORE, 47875199049728, 47875199057919,
+STORE, 47875199057920, 47875199406079,
+STORE, 47875199098880, 47875199406079,
+STORE, 47875199057920, 47875199098879,
+ERASE, 47875199098880, 47875199098880,
+STORE, 47875199098880, 47875199381503,
+STORE, 47875199381504, 47875199406079,
+STORE, 47875199311872, 47875199381503,
+STORE, 47875199098880, 47875199311871,
+ERASE, 47875199098880, 47875199098880,
+STORE, 47875199098880, 47875199311871,
+STORE, 47875199377408, 47875199381503,
+STORE, 47875199311872, 47875199377407,
+ERASE, 47875199311872, 47875199311872,
+STORE, 47875199311872, 47875199377407,
+ERASE, 47875199381504, 47875199381504,
+STORE, 47875199381504, 47875199406079,
+STORE, 47875199406080, 47875201667071,
+STORE, 47875199557632, 47875201667071,
+STORE, 47875199406080, 47875199557631,
+ERASE, 47875199557632, 47875199557632,
+STORE, 47875199557632, 47875201650687,
+STORE, 47875201650688, 47875201667071,
+STORE, 47875201658880, 47875201667071,
+STORE, 47875201650688, 47875201658879,
+ERASE, 47875201650688, 47875201650688,
+STORE, 47875201650688, 47875201658879,
+ERASE, 47875201658880, 47875201658880,
+STORE, 47875201658880, 47875201667071,
+STORE, 47875201667072, 47875201802239,
+ERASE, 47875201667072, 47875201667072,
+STORE, 47875201667072, 47875201691647,
+STORE, 47875201691648, 47875201802239,
+STORE, 47875201753088, 47875201802239,
+STORE, 47875201691648, 47875201753087,
+ERASE, 47875201691648, 47875201691648,
+STORE, 47875201691648, 47875201753087,
+STORE, 47875201777664, 47875201802239,
+STORE, 47875201753088, 47875201777663,
+ERASE, 47875201753088, 47875201753088,
+STORE, 47875201753088, 47875201802239,
+ERASE, 47875201753088, 47875201753088,
+STORE, 47875201753088, 47875201777663,
+STORE, 47875201777664, 47875201802239,
+STORE, 47875201785856, 47875201802239,
+STORE, 47875201777664, 47875201785855,
+ERASE, 47875201777664, 47875201777664,
+STORE, 47875201777664, 47875201785855,
+ERASE, 47875201785856, 47875201785856,
+STORE, 47875201785856, 47875201802239,
+STORE, 47875201785856, 47875201810431,
+STORE, 47875201810432, 47875201974271,
+ERASE, 47875201810432, 47875201810432,
+STORE, 47875201810432, 47875201822719,
+STORE, 47875201822720, 47875201974271,
+STORE, 47875201921024, 47875201974271,
+STORE, 47875201822720, 47875201921023,
+ERASE, 47875201822720, 47875201822720,
+STORE, 47875201822720, 47875201921023,
+STORE, 47875201966080, 47875201974271,
+STORE, 47875201921024, 47875201966079,
+ERASE, 47875201921024, 47875201921024,
+STORE, 47875201921024, 47875201974271,
+ERASE, 47875201921024, 47875201921024,
+STORE, 47875201921024, 47875201966079,
+STORE, 47875201966080, 47875201974271,
+ERASE, 47875201966080, 47875201966080,
+STORE, 47875201966080, 47875201974271,
+STORE, 47875201974272, 47875202572287,
+STORE, 47875202093056, 47875202572287,
+STORE, 47875201974272, 47875202093055,
+ERASE, 47875202093056, 47875202093056,
+STORE, 47875202093056, 47875202519039,
+STORE, 47875202519040, 47875202572287,
+STORE, 47875202408448, 47875202519039,
+STORE, 47875202093056, 47875202408447,
+ERASE, 47875202093056, 47875202093056,
+STORE, 47875202093056, 47875202408447,
+STORE, 47875202514944, 47875202519039,
+STORE, 47875202408448, 47875202514943,
+ERASE, 47875202408448, 47875202408448,
+STORE, 47875202408448, 47875202514943,
+ERASE, 47875202519040, 47875202519040,
+STORE, 47875202519040, 47875202572287,
+STORE, 47875202572288, 47875205623807,
+STORE, 47875203117056, 47875205623807,
+STORE, 47875202572288, 47875203117055,
+ERASE, 47875203117056, 47875203117056,
+STORE, 47875203117056, 47875205402623,
+STORE, 47875205402624, 47875205623807,
+STORE, 47875204812800, 47875205402623,
+STORE, 47875203117056, 47875204812799,
+ERASE, 47875203117056, 47875203117056,
+STORE, 47875203117056, 47875204812799,
+STORE, 47875205398528, 47875205402623,
+STORE, 47875204812800, 47875205398527,
+ERASE, 47875204812800, 47875204812800,
+STORE, 47875204812800, 47875205398527,
+STORE, 47875205607424, 47875205623807,
+STORE, 47875205402624, 47875205607423,
+ERASE, 47875205402624, 47875205402624,
+STORE, 47875205402624, 47875205607423,
+ERASE, 47875205607424, 47875205607424,
+STORE, 47875205607424, 47875205623807,
+STORE, 47875205623808, 47875205656575,
+ERASE, 47875205623808, 47875205623808,
+STORE, 47875205623808, 47875205631999,
+STORE, 47875205632000, 47875205656575,
+STORE, 47875205644288, 47875205656575,
+STORE, 47875205632000, 47875205644287,
+ERASE, 47875205632000, 47875205632000,
+STORE, 47875205632000, 47875205644287,
+STORE, 47875205648384, 47875205656575,
+STORE, 47875205644288, 47875205648383,
+ERASE, 47875205644288, 47875205644288,
+STORE, 47875205644288, 47875205656575,
+ERASE, 47875205644288, 47875205644288,
+STORE, 47875205644288, 47875205648383,
+STORE, 47875205648384, 47875205656575,
+ERASE, 47875205648384, 47875205648384,
+STORE, 47875205648384, 47875205656575,
+STORE, 47875205656576, 47875205693439,
+ERASE, 47875205656576, 47875205656576,
+STORE, 47875205656576, 47875205664767,
+STORE, 47875205664768, 47875205693439,
+STORE, 47875205681152, 47875205693439,
+STORE, 47875205664768, 47875205681151,
+ERASE, 47875205664768, 47875205664768,
+STORE, 47875205664768, 47875205681151,
+STORE, 47875205685248, 47875205693439,
+STORE, 47875205681152, 47875205685247,
+ERASE, 47875205681152, 47875205681152,
+STORE, 47875205681152, 47875205693439,
+ERASE, 47875205681152, 47875205681152,
+STORE, 47875205681152, 47875205685247,
+STORE, 47875205685248, 47875205693439,
+ERASE, 47875205685248, 47875205685248,
+STORE, 47875205685248, 47875205693439,
+STORE, 47875205693440, 47875206168575,
+ERASE, 47875205693440, 47875205693440,
+STORE, 47875205693440, 47875205701631,
+STORE, 47875205701632, 47875206168575,
+STORE, 47875206037504, 47875206168575,
+STORE, 47875205701632, 47875206037503,
+ERASE, 47875205701632, 47875205701632,
+STORE, 47875205701632, 47875206037503,
+STORE, 47875206160384, 47875206168575,
+STORE, 47875206037504, 47875206160383,
+ERASE, 47875206037504, 47875206037504,
+STORE, 47875206037504, 47875206168575,
+ERASE, 47875206037504, 47875206037504,
+STORE, 47875206037504, 47875206160383,
+STORE, 47875206160384, 47875206168575,
+ERASE, 47875206160384, 47875206160384,
+STORE, 47875206160384, 47875206168575,
+STORE, 47875206168576, 47875206176767,
+STORE, 47875206176768, 47875206197247,
+ERASE, 47875206176768, 47875206176768,
+STORE, 47875206176768, 47875206180863,
+STORE, 47875206180864, 47875206197247,
+STORE, 47875206184960, 47875206197247,
+STORE, 47875206180864, 47875206184959,
+ERASE, 47875206180864, 47875206180864,
+STORE, 47875206180864, 47875206184959,
+STORE, 47875206189056, 47875206197247,
+STORE, 47875206184960, 47875206189055,
+ERASE, 47875206184960, 47875206184960,
+STORE, 47875206184960, 47875206197247,
+ERASE, 47875206184960, 47875206184960,
+STORE, 47875206184960, 47875206189055,
+STORE, 47875206189056, 47875206197247,
+ERASE, 47875206189056, 47875206189056,
+STORE, 47875206189056, 47875206197247,
+STORE, 47875206197248, 47875206205439,
+ERASE, 47875198861312, 47875198861312,
+STORE, 47875198861312, 47875198877695,
+STORE, 47875198877696, 47875198885887,
+ERASE, 47875206189056, 47875206189056,
+STORE, 47875206189056, 47875206193151,
+STORE, 47875206193152, 47875206197247,
+ERASE, 47875201777664, 47875201777664,
+STORE, 47875201777664, 47875201781759,
+STORE, 47875201781760, 47875201785855,
+ERASE, 47875206160384, 47875206160384,
+STORE, 47875206160384, 47875206164479,
+STORE, 47875206164480, 47875206168575,
+ERASE, 47875205685248, 47875205685248,
+STORE, 47875205685248, 47875205689343,
+STORE, 47875205689344, 47875205693439,
+ERASE, 47875205648384, 47875205648384,
+STORE, 47875205648384, 47875205652479,
+STORE, 47875205652480, 47875205656575,
+ERASE, 47875205402624, 47875205402624,
+STORE, 47875205402624, 47875205599231,
+STORE, 47875205599232, 47875205607423,
+ERASE, 47875202519040, 47875202519040,
+STORE, 47875202519040, 47875202555903,
+STORE, 47875202555904, 47875202572287,
+ERASE, 47875201966080, 47875201966080,
+STORE, 47875201966080, 47875201970175,
+STORE, 47875201970176, 47875201974271,
+ERASE, 47875201650688, 47875201650688,
+STORE, 47875201650688, 47875201654783,
+STORE, 47875201654784, 47875201658879,
+ERASE, 47875199381504, 47875199381504,
+STORE, 47875199381504, 47875199401983,
+STORE, 47875199401984, 47875199406079,
+ERASE, 47875199049728, 47875199049728,
+STORE, 47875199049728, 47875199053823,
+STORE, 47875199053824, 47875199057919,
+ERASE, 47875199004672, 47875199004672,
+STORE, 47875199004672, 47875199008767,
+STORE, 47875199008768, 47875199012863,
+ERASE, 94011547025408, 94011547025408,
+STORE, 94011547025408, 94011547148287,
+STORE, 94011547148288, 94011547152383,
+ERASE, 139757598109696, 139757598109696,
+STORE, 139757598109696, 139757598113791,
+STORE, 139757598113792, 139757598117887,
+ERASE, 47875197046784, 47875197046784,
+STORE, 94011557584896, 94011557720063,
+STORE, 94011557584896, 94011557855231,
+ERASE, 94011557584896, 94011557584896,
+STORE, 94011557584896, 94011557851135,
+STORE, 94011557851136, 94011557855231,
+ERASE, 94011557851136, 94011557851136,
+ERASE, 94011557584896, 94011557584896,
+STORE, 94011557584896, 94011557847039,
+STORE, 94011557847040, 94011557851135,
+ERASE, 94011557847040, 94011557847040,
+STORE, 94011557584896, 94011557982207,
+ERASE, 94011557584896, 94011557584896,
+STORE, 94011557584896, 94011557978111,
+STORE, 94011557978112, 94011557982207,
+ERASE, 94011557978112, 94011557978112,
+ERASE, 94011557584896, 94011557584896,
+STORE, 94011557584896, 94011557974015,
+STORE, 94011557974016, 94011557978111,
+ERASE, 94011557974016, 94011557974016,
+STORE, 140737488347136, 140737488351231,
+STORE, 140734130360320, 140737488351231,
+ERASE, 140734130360320, 140734130360320,
+STORE, 140734130360320, 140734130364415,
+STORE, 94641232105472, 94641232785407,
+ERASE, 94641232105472, 94641232105472,
+STORE, 94641232105472, 94641232171007,
+STORE, 94641232171008, 94641232785407,
+ERASE, 94641232171008, 94641232171008,
+STORE, 94641232171008, 94641232519167,
+STORE, 94641232519168, 94641232658431,
+STORE, 94641232658432, 94641232785407,
+STORE, 139726599516160, 139726599688191,
+ERASE, 139726599516160, 139726599516160,
+STORE, 139726599516160, 139726599520255,
+STORE, 139726599520256, 139726599688191,
+ERASE, 139726599520256, 139726599520256,
+STORE, 139726599520256, 139726599643135,
+STORE, 139726599643136, 139726599675903,
+STORE, 139726599675904, 139726599684095,
+STORE, 139726599684096, 139726599688191,
+STORE, 140734130446336, 140734130450431,
+STORE, 140734130434048, 140734130446335,
+STORE, 47906195480576, 47906195488767,
+STORE, 47906195488768, 47906195496959,
+STORE, 47906195496960, 47906197336063,
+STORE, 47906195636224, 47906197336063,
+STORE, 47906195496960, 47906195636223,
+ERASE, 47906195636224, 47906195636224,
+STORE, 47906195636224, 47906197295103,
+STORE, 47906197295104, 47906197336063,
+STORE, 47906196979712, 47906197295103,
+STORE, 47906195636224, 47906196979711,
+ERASE, 47906195636224, 47906195636224,
+STORE, 47906195636224, 47906196979711,
+STORE, 47906197291008, 47906197295103,
+STORE, 47906196979712, 47906197291007,
+ERASE, 47906196979712, 47906196979712,
+STORE, 47906196979712, 47906197291007,
+STORE, 47906197319680, 47906197336063,
+STORE, 47906197295104, 47906197319679,
+ERASE, 47906197295104, 47906197295104,
+STORE, 47906197295104, 47906197319679,
+ERASE, 47906197319680, 47906197319680,
+STORE, 47906197319680, 47906197336063,
+STORE, 47906197336064, 47906197446655,
+STORE, 47906197352448, 47906197446655,
+STORE, 47906197336064, 47906197352447,
+ERASE, 47906197352448, 47906197352448,
+STORE, 47906197352448, 47906197438463,
+STORE, 47906197438464, 47906197446655,
+STORE, 47906197413888, 47906197438463,
+STORE, 47906197352448, 47906197413887,
+ERASE, 47906197352448, 47906197352448,
+STORE, 47906197352448, 47906197413887,
+STORE, 47906197434368, 47906197438463,
+STORE, 47906197413888, 47906197434367,
+ERASE, 47906197413888, 47906197413888,
+STORE, 47906197413888, 47906197434367,
+ERASE, 47906197438464, 47906197438464,
+STORE, 47906197438464, 47906197446655,
+STORE, 47906197446656, 47906197491711,
+ERASE, 47906197446656, 47906197446656,
+STORE, 47906197446656, 47906197454847,
+STORE, 47906197454848, 47906197491711,
+STORE, 47906197475328, 47906197491711,
+STORE, 47906197454848, 47906197475327,
+ERASE, 47906197454848, 47906197454848,
+STORE, 47906197454848, 47906197475327,
+STORE, 47906197483520, 47906197491711,
+STORE, 47906197475328, 47906197483519,
+ERASE, 47906197475328, 47906197475328,
+STORE, 47906197475328, 47906197491711,
+ERASE, 47906197475328, 47906197475328,
+STORE, 47906197475328, 47906197483519,
+STORE, 47906197483520, 47906197491711,
+ERASE, 47906197483520, 47906197483520,
+STORE, 47906197483520, 47906197491711,
+STORE, 47906197491712, 47906197839871,
+STORE, 47906197532672, 47906197839871,
+STORE, 47906197491712, 47906197532671,
+ERASE, 47906197532672, 47906197532672,
+STORE, 47906197532672, 47906197815295,
+STORE, 47906197815296, 47906197839871,
+STORE, 47906197745664, 47906197815295,
+STORE, 47906197532672, 47906197745663,
+ERASE, 47906197532672, 47906197532672,
+STORE, 47906197532672, 47906197745663,
+STORE, 47906197811200, 47906197815295,
+STORE, 47906197745664, 47906197811199,
+ERASE, 47906197745664, 47906197745664,
+STORE, 47906197745664, 47906197811199,
+ERASE, 47906197815296, 47906197815296,
+STORE, 47906197815296, 47906197839871,
+STORE, 47906197839872, 47906200100863,
+STORE, 47906197991424, 47906200100863,
+STORE, 47906197839872, 47906197991423,
+ERASE, 47906197991424, 47906197991424,
+STORE, 47906197991424, 47906200084479,
+STORE, 47906200084480, 47906200100863,
+STORE, 47906200092672, 47906200100863,
+STORE, 47906200084480, 47906200092671,
+ERASE, 47906200084480, 47906200084480,
+STORE, 47906200084480, 47906200092671,
+ERASE, 47906200092672, 47906200092672,
+STORE, 47906200092672, 47906200100863,
+STORE, 47906200100864, 47906200236031,
+ERASE, 47906200100864, 47906200100864,
+STORE, 47906200100864, 47906200125439,
+STORE, 47906200125440, 47906200236031,
+STORE, 47906200186880, 47906200236031,
+STORE, 47906200125440, 47906200186879,
+ERASE, 47906200125440, 47906200125440,
+STORE, 47906200125440, 47906200186879,
+STORE, 47906200211456, 47906200236031,
+STORE, 47906200186880, 47906200211455,
+ERASE, 47906200186880, 47906200186880,
+STORE, 47906200186880, 47906200236031,
+ERASE, 47906200186880, 47906200186880,
+STORE, 47906200186880, 47906200211455,
+STORE, 47906200211456, 47906200236031,
+STORE, 47906200219648, 47906200236031,
+STORE, 47906200211456, 47906200219647,
+ERASE, 47906200211456, 47906200211456,
+STORE, 47906200211456, 47906200219647,
+ERASE, 47906200219648, 47906200219648,
+STORE, 47906200219648, 47906200236031,
+STORE, 47906200219648, 47906200244223,
+STORE, 47906200244224, 47906200408063,
+ERASE, 47906200244224, 47906200244224,
+STORE, 47906200244224, 47906200256511,
+STORE, 47906200256512, 47906200408063,
+STORE, 47906200354816, 47906200408063,
+STORE, 47906200256512, 47906200354815,
+ERASE, 47906200256512, 47906200256512,
+STORE, 47906200256512, 47906200354815,
+STORE, 47906200399872, 47906200408063,
+STORE, 47906200354816, 47906200399871,
+ERASE, 47906200354816, 47906200354816,
+STORE, 47906200354816, 47906200408063,
+ERASE, 47906200354816, 47906200354816,
+STORE, 47906200354816, 47906200399871,
+STORE, 47906200399872, 47906200408063,
+ERASE, 47906200399872, 47906200399872,
+STORE, 47906200399872, 47906200408063,
+STORE, 47906200408064, 47906201006079,
+STORE, 47906200526848, 47906201006079,
+STORE, 47906200408064, 47906200526847,
+ERASE, 47906200526848, 47906200526848,
+STORE, 47906200526848, 47906200952831,
+STORE, 47906200952832, 47906201006079,
+STORE, 47906200842240, 47906200952831,
+STORE, 47906200526848, 47906200842239,
+ERASE, 47906200526848, 47906200526848,
+STORE, 47906200526848, 47906200842239,
+STORE, 47906200948736, 47906200952831,
+STORE, 47906200842240, 47906200948735,
+ERASE, 47906200842240, 47906200842240,
+STORE, 47906200842240, 47906200948735,
+ERASE, 47906200952832, 47906200952832,
+STORE, 47906200952832, 47906201006079,
+STORE, 47906201006080, 47906204057599,
+STORE, 47906201550848, 47906204057599,
+STORE, 47906201006080, 47906201550847,
+ERASE, 47906201550848, 47906201550848,
+STORE, 47906201550848, 47906203836415,
+STORE, 47906203836416, 47906204057599,
+STORE, 47906203246592, 47906203836415,
+STORE, 47906201550848, 47906203246591,
+ERASE, 47906201550848, 47906201550848,
+STORE, 47906201550848, 47906203246591,
+STORE, 47906203832320, 47906203836415,
+STORE, 47906203246592, 47906203832319,
+ERASE, 47906203246592, 47906203246592,
+STORE, 47906203246592, 47906203832319,
+STORE, 47906204041216, 47906204057599,
+STORE, 47906203836416, 47906204041215,
+ERASE, 47906203836416, 47906203836416,
+STORE, 47906203836416, 47906204041215,
+ERASE, 47906204041216, 47906204041216,
+STORE, 47906204041216, 47906204057599,
+STORE, 47906204057600, 47906204090367,
+ERASE, 47906204057600, 47906204057600,
+STORE, 47906204057600, 47906204065791,
+STORE, 47906204065792, 47906204090367,
+STORE, 47906204078080, 47906204090367,
+STORE, 47906204065792, 47906204078079,
+ERASE, 47906204065792, 47906204065792,
+STORE, 47906204065792, 47906204078079,
+STORE, 47906204082176, 47906204090367,
+STORE, 47906204078080, 47906204082175,
+ERASE, 47906204078080, 47906204078080,
+STORE, 47906204078080, 47906204090367,
+ERASE, 47906204078080, 47906204078080,
+STORE, 47906204078080, 47906204082175,
+STORE, 47906204082176, 47906204090367,
+ERASE, 47906204082176, 47906204082176,
+STORE, 47906204082176, 47906204090367,
+STORE, 47906204090368, 47906204127231,
+ERASE, 47906204090368, 47906204090368,
+STORE, 47906204090368, 47906204098559,
+STORE, 47906204098560, 47906204127231,
+STORE, 47906204114944, 47906204127231,
+STORE, 47906204098560, 47906204114943,
+ERASE, 47906204098560, 47906204098560,
+STORE, 47906204098560, 47906204114943,
+STORE, 47906204119040, 47906204127231,
+STORE, 47906204114944, 47906204119039,
+ERASE, 47906204114944, 47906204114944,
+STORE, 47906204114944, 47906204127231,
+ERASE, 47906204114944, 47906204114944,
+STORE, 47906204114944, 47906204119039,
+STORE, 47906204119040, 47906204127231,
+ERASE, 47906204119040, 47906204119040,
+STORE, 47906204119040, 47906204127231,
+STORE, 47906204127232, 47906204602367,
+ERASE, 47906204127232, 47906204127232,
+STORE, 47906204127232, 47906204135423,
+STORE, 47906204135424, 47906204602367,
+STORE, 47906204471296, 47906204602367,
+STORE, 47906204135424, 47906204471295,
+ERASE, 47906204135424, 47906204135424,
+STORE, 47906204135424, 47906204471295,
+STORE, 47906204594176, 47906204602367,
+STORE, 47906204471296, 47906204594175,
+ERASE, 47906204471296, 47906204471296,
+STORE, 47906204471296, 47906204602367,
+ERASE, 47906204471296, 47906204471296,
+STORE, 47906204471296, 47906204594175,
+STORE, 47906204594176, 47906204602367,
+ERASE, 47906204594176, 47906204594176,
+STORE, 47906204594176, 47906204602367,
+STORE, 47906204602368, 47906204610559,
+STORE, 47906204610560, 47906204631039,
+ERASE, 47906204610560, 47906204610560,
+STORE, 47906204610560, 47906204614655,
+STORE, 47906204614656, 47906204631039,
+STORE, 47906204618752, 47906204631039,
+STORE, 47906204614656, 47906204618751,
+ERASE, 47906204614656, 47906204614656,
+STORE, 47906204614656, 47906204618751,
+STORE, 47906204622848, 47906204631039,
+STORE, 47906204618752, 47906204622847,
+ERASE, 47906204618752, 47906204618752,
+STORE, 47906204618752, 47906204631039,
+ERASE, 47906204618752, 47906204618752,
+STORE, 47906204618752, 47906204622847,
+STORE, 47906204622848, 47906204631039,
+ERASE, 47906204622848, 47906204622848,
+STORE, 47906204622848, 47906204631039,
+STORE, 47906204631040, 47906204639231,
+ERASE, 47906197295104, 47906197295104,
+STORE, 47906197295104, 47906197311487,
+STORE, 47906197311488, 47906197319679,
+ERASE, 47906204622848, 47906204622848,
+STORE, 47906204622848, 47906204626943,
+STORE, 47906204626944, 47906204631039,
+ERASE, 47906200211456, 47906200211456,
+STORE, 47906200211456, 47906200215551,
+STORE, 47906200215552, 47906200219647,
+ERASE, 47906204594176, 47906204594176,
+STORE, 47906204594176, 47906204598271,
+STORE, 47906204598272, 47906204602367,
+ERASE, 47906204119040, 47906204119040,
+STORE, 47906204119040, 47906204123135,
+STORE, 47906204123136, 47906204127231,
+ERASE, 47906204082176, 47906204082176,
+STORE, 47906204082176, 47906204086271,
+STORE, 47906204086272, 47906204090367,
+ERASE, 47906203836416, 47906203836416,
+STORE, 47906203836416, 47906204033023,
+STORE, 47906204033024, 47906204041215,
+ERASE, 47906200952832, 47906200952832,
+STORE, 47906200952832, 47906200989695,
+STORE, 47906200989696, 47906201006079,
+ERASE, 47906200399872, 47906200399872,
+STORE, 47906200399872, 47906200403967,
+STORE, 47906200403968, 47906200408063,
+ERASE, 47906200084480, 47906200084480,
+STORE, 47906200084480, 47906200088575,
+STORE, 47906200088576, 47906200092671,
+ERASE, 47906197815296, 47906197815296,
+STORE, 47906197815296, 47906197835775,
+STORE, 47906197835776, 47906197839871,
+ERASE, 47906197483520, 47906197483520,
+STORE, 47906197483520, 47906197487615,
+STORE, 47906197487616, 47906197491711,
+ERASE, 47906197438464, 47906197438464,
+STORE, 47906197438464, 47906197442559,
+STORE, 47906197442560, 47906197446655,
+ERASE, 94641232658432, 94641232658432,
+STORE, 94641232658432, 94641232781311,
+STORE, 94641232781312, 94641232785407,
+ERASE, 139726599675904, 139726599675904,
+STORE, 139726599675904, 139726599679999,
+STORE, 139726599680000, 139726599684095,
+ERASE, 47906195480576, 47906195480576,
+STORE, 94641242615808, 94641242750975,
+       };
+       unsigned long set11[] = {
+STORE, 140737488347136, 140737488351231,
+STORE, 140732658499584, 140737488351231,
+ERASE, 140732658499584, 140732658499584,
+STORE, 140732658499584, 140732658503679,
+STORE, 94029856579584, 94029856751615,
+ERASE, 94029856579584, 94029856579584,
+STORE, 94029856579584, 94029856595967,
+STORE, 94029856595968, 94029856751615,
+ERASE, 94029856595968, 94029856595968,
+STORE, 94029856595968, 94029856698367,
+STORE, 94029856698368, 94029856739327,
+STORE, 94029856739328, 94029856751615,
+STORE, 140014592573440, 140014592745471,
+ERASE, 140014592573440, 140014592573440,
+STORE, 140014592573440, 140014592577535,
+STORE, 140014592577536, 140014592745471,
+ERASE, 140014592577536, 140014592577536,
+STORE, 140014592577536, 140014592700415,
+STORE, 140014592700416, 140014592733183,
+STORE, 140014592733184, 140014592741375,
+STORE, 140014592741376, 140014592745471,
+STORE, 140732658565120, 140732658569215,
+STORE, 140732658552832, 140732658565119,
+       };
+
+       unsigned long set12[] = { // contains 12 values.
+STORE, 140737488347136, 140737488351231,
+STORE, 140732658499584, 140737488351231,
+ERASE, 140732658499584, 140732658499584,
+STORE, 140732658499584, 140732658503679,
+STORE, 94029856579584, 94029856751615,
+ERASE, 94029856579584, 94029856579584,
+STORE, 94029856579584, 94029856595967,
+STORE, 94029856595968, 94029856751615,
+ERASE, 94029856595968, 94029856595968,
+STORE, 94029856595968, 94029856698367,
+STORE, 94029856698368, 94029856739327,
+STORE, 94029856739328, 94029856751615,
+STORE, 140014592573440, 140014592745471,
+ERASE, 140014592573440, 140014592573440,
+STORE, 140014592573440, 140014592577535,
+STORE, 140014592577536, 140014592745471,
+ERASE, 140014592577536, 140014592577536,
+STORE, 140014592577536, 140014592700415,
+STORE, 140014592700416, 140014592733183,
+STORE, 140014592733184, 140014592741375,
+STORE, 140014592741376, 140014592745471,
+STORE, 140732658565120, 140732658569215,
+STORE, 140732658552832, 140732658565119,
+STORE, 140014592741375, 140014592741375, // contrived
+STORE, 140014592733184, 140014592741376, // creates first entry retry.
+       };
+       unsigned long set13[] = {
+STORE, 140373516247040, 140373516251135,//: ffffa2e7b0e10d80
+STORE, 140373516251136, 140373516255231,//: ffffa2e7b1195d80
+STORE, 140373516255232, 140373516443647,//: ffffa2e7b0e109c0
+STORE, 140373516443648, 140373516587007,//: ffffa2e7b05fecc0
+//STORE, 140373516587008, 140373516963839,//: 0000000000000000
+STORE, 140373516963840, 140373518647295,//: ffffa2e7bfbdcc00
+STORE, 140373518647296, 140373518663679,//: ffffa2e7bf5d59c0
+STORE, 140373518663680, 140373518684159,//: deleted (257)
+//STORE, 140373518684160, 140373518680063,//: 0000000000000000
+STORE, 140373518680064, 140373518684159,//: ffffa2e7b0e1cb40
+STORE, 140373518684160, 140373518688254,//: ffffa2e7b05fec00
+STORE, 140373518688256, 140373518692351,//: ffffa2e7bfbdcd80
+STORE, 140373518692352, 140373518696447,//: ffffa2e7b0749e40
+       };
+       unsigned long set14[] = {
+STORE, 140737488347136, 140737488351231,
+STORE, 140731667996672, 140737488351231,
+SNULL, 140731668000767, 140737488351231,
+STORE, 140731667996672, 140731668000767,
+STORE, 140731667865600, 140731668000767,
+STORE, 94077521272832, 94077521313791,
+SNULL, 94077521301503, 94077521313791,
+STORE, 94077521272832, 94077521301503,
+STORE, 94077521301504, 94077521313791,
+ERASE, 94077521301504, 94077521313791,
+STORE, 94077521305600, 94077521313791,
+STORE, 139826134630400, 139826136883199,
+SNULL, 139826134773759, 139826136883199,
+STORE, 139826134630400, 139826134773759,
+STORE, 139826134773760, 139826136883199,
+ERASE, 139826134773760, 139826136883199,
+STORE, 139826136870912, 139826136879103,
+STORE, 139826136879104, 139826136883199,
+STORE, 140731668013056, 140731668017151,
+STORE, 140731668000768, 140731668013055,
+STORE, 139826136862720, 139826136870911,
+STORE, 139826132406272, 139826134630399,
+SNULL, 139826134056959, 139826134630399,
+STORE, 139826132406272, 139826134056959,
+STORE, 139826134056960, 139826134630399,
+SNULL, 139826134056960, 139826134626303,
+STORE, 139826134626304, 139826134630399,
+STORE, 139826134056960, 139826134626303,
+ERASE, 139826134056960, 139826134626303,
+STORE, 139826134056960, 139826134626303,
+ERASE, 139826134626304, 139826134630399,
+STORE, 139826134626304, 139826134630399,
+STORE, 139826136842240, 139826136862719,
+STORE, 139826130022400, 139826132406271,
+SNULL, 139826130022400, 139826130288639,
+STORE, 139826130288640, 139826132406271,
+STORE, 139826130022400, 139826130288639,
+SNULL, 139826132381695, 139826132406271,
+STORE, 139826130288640, 139826132381695,
+STORE, 139826132381696, 139826132406271,
+SNULL, 139826132381696, 139826132402175,
+STORE, 139826132402176, 139826132406271,
+STORE, 139826132381696, 139826132402175,
+ERASE, 139826132381696, 139826132402175,
+STORE, 139826132381696, 139826132402175,
+ERASE, 139826132402176, 139826132406271,
+STORE, 139826132402176, 139826132406271,
+STORE, 139826127806464, 139826130022399,
+SNULL, 139826127806464, 139826127904767,
+STORE, 139826127904768, 139826130022399,
+STORE, 139826127806464, 139826127904767,
+SNULL, 139826129997823, 139826130022399,
+STORE, 139826127904768, 139826129997823,
+STORE, 139826129997824, 139826130022399,
+SNULL, 139826129997824, 139826130006015,
+STORE, 139826130006016, 139826130022399,
+STORE, 139826129997824, 139826130006015,
+ERASE, 139826129997824, 139826130006015,
+STORE, 139826129997824, 139826130006015,
+ERASE, 139826130006016, 139826130022399,
+STORE, 139826130006016, 139826130022399,
+STORE, 139826124009472, 139826127806463,
+SNULL, 139826124009472, 139826125668351,
+STORE, 139826125668352, 139826127806463,
+STORE, 139826124009472, 139826125668351,
+SNULL, 139826127765503, 139826127806463,
+STORE, 139826125668352, 139826127765503,
+STORE, 139826127765504, 139826127806463,
+SNULL, 139826127765504, 139826127790079,
+STORE, 139826127790080, 139826127806463,
+STORE, 139826127765504, 139826127790079,
+ERASE, 139826127765504, 139826127790079,
+STORE, 139826127765504, 139826127790079,
+ERASE, 139826127790080, 139826127806463,
+STORE, 139826127790080, 139826127806463,
+STORE, 139826121748480, 139826124009471,
+SNULL, 139826121748480, 139826121900031,
+STORE, 139826121900032, 139826124009471,
+STORE, 139826121748480, 139826121900031,
+SNULL, 139826123993087, 139826124009471,
+STORE, 139826121900032, 139826123993087,
+STORE, 139826123993088, 139826124009471,
+SNULL, 139826123993088, 139826124001279,
+STORE, 139826124001280, 139826124009471,
+STORE, 139826123993088, 139826124001279,
+ERASE, 139826123993088, 139826124001279,
+STORE, 139826123993088, 139826124001279,
+ERASE, 139826124001280, 139826124009471,
+STORE, 139826124001280, 139826124009471,
+STORE, 139826119626752, 139826121748479,
+SNULL, 139826119626752, 139826119643135,
+STORE, 139826119643136, 139826121748479,
+STORE, 139826119626752, 139826119643135,
+SNULL, 139826121740287, 139826121748479,
+STORE, 139826119643136, 139826121740287,
+STORE, 139826121740288, 139826121748479,
+ERASE, 139826121740288, 139826121748479,
+STORE, 139826121740288, 139826121748479,
+STORE, 139826136834048, 139826136842239,
+STORE, 139826117496832, 139826119626751,
+SNULL, 139826117496832, 139826117525503,
+STORE, 139826117525504, 139826119626751,
+STORE, 139826117496832, 139826117525503,
+SNULL, 139826119618559, 139826119626751,
+STORE, 139826117525504, 139826119618559,
+STORE, 139826119618560, 139826119626751,
+ERASE, 139826119618560, 139826119626751,
+STORE, 139826119618560, 139826119626751,
+STORE, 139826115244032, 139826117496831,
+SNULL, 139826115244032, 139826115395583,
+STORE, 139826115395584, 139826117496831,
+STORE, 139826115244032, 139826115395583,
+SNULL, 139826117488639, 139826117496831,
+STORE, 139826115395584, 139826117488639,
+STORE, 139826117488640, 139826117496831,
+ERASE, 139826117488640, 139826117496831,
+STORE, 139826117488640, 139826117496831,
+STORE, 139826113073152, 139826115244031,
+SNULL, 139826113073152, 139826113142783,
+STORE, 139826113142784, 139826115244031,
+STORE, 139826113073152, 139826113142783,
+SNULL, 139826115235839, 139826115244031,
+STORE, 139826113142784, 139826115235839,
+STORE, 139826115235840, 139826115244031,
+ERASE, 139826115235840, 139826115244031,
+STORE, 139826115235840, 139826115244031,
+STORE, 139826109861888, 139826113073151,
+SNULL, 139826109861888, 139826110939135,
+STORE, 139826110939136, 139826113073151,
+STORE, 139826109861888, 139826110939135,
+SNULL, 139826113036287, 139826113073151,
+STORE, 139826110939136, 139826113036287,
+STORE, 139826113036288, 139826113073151,
+ERASE, 139826113036288, 139826113073151,
+STORE, 139826113036288, 139826113073151,
+STORE, 139826107727872, 139826109861887,
+SNULL, 139826107727872, 139826107756543,
+STORE, 139826107756544, 139826109861887,
+STORE, 139826107727872, 139826107756543,
+SNULL, 139826109853695, 139826109861887,
+STORE, 139826107756544, 139826109853695,
+STORE, 139826109853696, 139826109861887,
+ERASE, 139826109853696, 139826109861887,
+STORE, 139826109853696, 139826109861887,
+STORE, 139826105417728, 139826107727871,
+SNULL, 139826105417728, 139826105622527,
+STORE, 139826105622528, 139826107727871,
+STORE, 139826105417728, 139826105622527,
+SNULL, 139826107719679, 139826107727871,
+STORE, 139826105622528, 139826107719679,
+STORE, 139826107719680, 139826107727871,
+ERASE, 139826107719680, 139826107727871,
+STORE, 139826107719680, 139826107727871,
+STORE, 139826136825856, 139826136842239,
+STORE, 139826103033856, 139826105417727,
+SNULL, 139826103033856, 139826103226367,
+STORE, 139826103226368, 139826105417727,
+STORE, 139826103033856, 139826103226367,
+SNULL, 139826105319423, 139826105417727,
+STORE, 139826103226368, 139826105319423,
+STORE, 139826105319424, 139826105417727,
+ERASE, 139826105319424, 139826105417727,
+STORE, 139826105319424, 139826105417727,
+STORE, 139826100916224, 139826103033855,
+SNULL, 139826100916224, 139826100932607,
+STORE, 139826100932608, 139826103033855,
+STORE, 139826100916224, 139826100932607,
+SNULL, 139826103025663, 139826103033855,
+STORE, 139826100932608, 139826103025663,
+STORE, 139826103025664, 139826103033855,
+ERASE, 139826103025664, 139826103033855,
+STORE, 139826103025664, 139826103033855,
+STORE, 139826098348032, 139826100916223,
+SNULL, 139826098348032, 139826098814975,
+STORE, 139826098814976, 139826100916223,
+STORE, 139826098348032, 139826098814975,
+SNULL, 139826100908031, 139826100916223,
+STORE, 139826098814976, 139826100908031,
+STORE, 139826100908032, 139826100916223,
+ERASE, 139826100908032, 139826100916223,
+STORE, 139826100908032, 139826100916223,
+STORE, 139826096234496, 139826098348031,
+SNULL, 139826096234496, 139826096246783,
+STORE, 139826096246784, 139826098348031,
+STORE, 139826096234496, 139826096246783,
+SNULL, 139826098339839, 139826098348031,
+STORE, 139826096246784, 139826098339839,
+STORE, 139826098339840, 139826098348031,
+ERASE, 139826098339840, 139826098348031,
+STORE, 139826098339840, 139826098348031,
+STORE, 139826094055424, 139826096234495,
+SNULL, 139826094055424, 139826094133247,
+STORE, 139826094133248, 139826096234495,
+STORE, 139826094055424, 139826094133247,
+SNULL, 139826096226303, 139826096234495,
+STORE, 139826094133248, 139826096226303,
+STORE, 139826096226304, 139826096234495,
+ERASE, 139826096226304, 139826096234495,
+STORE, 139826096226304, 139826096234495,
+STORE, 139826136817664, 139826136842239,
+STORE, 139826091937792, 139826094055423,
+SNULL, 139826091937792, 139826091954175,
+STORE, 139826091954176, 139826094055423,
+STORE, 139826091937792, 139826091954175,
+SNULL, 139826094047231, 139826094055423,
+STORE, 139826091954176, 139826094047231,
+STORE, 139826094047232, 139826094055423,
+ERASE, 139826094047232, 139826094055423,
+STORE, 139826094047232, 139826094055423,
+STORE, 139826136809472, 139826136842239,
+SNULL, 139826127781887, 139826127790079,
+STORE, 139826127765504, 139826127781887,
+STORE, 139826127781888, 139826127790079,
+SNULL, 139826094051327, 139826094055423,
+STORE, 139826094047232, 139826094051327,
+STORE, 139826094051328, 139826094055423,
+SNULL, 139826096230399, 139826096234495,
+STORE, 139826096226304, 139826096230399,
+STORE, 139826096230400, 139826096234495,
+SNULL, 139826098343935, 139826098348031,
+STORE, 139826098339840, 139826098343935,
+STORE, 139826098343936, 139826098348031,
+SNULL, 139826130001919, 139826130006015,
+STORE, 139826129997824, 139826130001919,
+STORE, 139826130001920, 139826130006015,
+SNULL, 139826100912127, 139826100916223,
+STORE, 139826100908032, 139826100912127,
+STORE, 139826100912128, 139826100916223,
+SNULL, 139826103029759, 139826103033855,
+STORE, 139826103025664, 139826103029759,
+STORE, 139826103029760, 139826103033855,
+SNULL, 139826105413631, 139826105417727,
+STORE, 139826105319424, 139826105413631,
+STORE, 139826105413632, 139826105417727,
+SNULL, 139826107723775, 139826107727871,
+STORE, 139826107719680, 139826107723775,
+STORE, 139826107723776, 139826107727871,
+SNULL, 139826109857791, 139826109861887,
+STORE, 139826109853696, 139826109857791,
+STORE, 139826109857792, 139826109861887,
+SNULL, 139826113044479, 139826113073151,
+STORE, 139826113036288, 139826113044479,
+STORE, 139826113044480, 139826113073151,
+SNULL, 139826115239935, 139826115244031,
+STORE, 139826115235840, 139826115239935,
+STORE, 139826115239936, 139826115244031,
+SNULL, 139826117492735, 139826117496831,
+STORE, 139826117488640, 139826117492735,
+STORE, 139826117492736, 139826117496831,
+SNULL, 139826119622655, 139826119626751,
+STORE, 139826119618560, 139826119622655,
+STORE, 139826119622656, 139826119626751,
+SNULL, 139826121744383, 139826121748479,
+STORE, 139826121740288, 139826121744383,
+STORE, 139826121744384, 139826121748479,
+SNULL, 139826123997183, 139826124001279,
+STORE, 139826123993088, 139826123997183,
+STORE, 139826123997184, 139826124001279,
+SNULL, 139826132398079, 139826132402175,
+STORE, 139826132381696, 139826132398079,
+STORE, 139826132398080, 139826132402175,
+SNULL, 139826134622207, 139826134626303,
+STORE, 139826134056960, 139826134622207,
+STORE, 139826134622208, 139826134626303,
+SNULL, 94077521309695, 94077521313791,
+STORE, 94077521305600, 94077521309695,
+STORE, 94077521309696, 94077521313791,
+SNULL, 139826136875007, 139826136879103,
+STORE, 139826136870912, 139826136875007,
+STORE, 139826136875008, 139826136879103,
+ERASE, 139826136842240, 139826136862719,
+STORE, 94077554049024, 94077554184191,
+STORE, 139826136543232, 139826136842239,
+STORE, 139826136276992, 139826136842239,
+STORE, 139826136010752, 139826136842239,
+STORE, 139826135744512, 139826136842239,
+SNULL, 139826136543231, 139826136842239,
+STORE, 139826135744512, 139826136543231,
+STORE, 139826136543232, 139826136842239,
+SNULL, 139826136543232, 139826136809471,
+STORE, 139826136809472, 139826136842239,
+STORE, 139826136543232, 139826136809471,
+       };
+       unsigned long set15[] = {
+STORE, 140737488347136, 140737488351231,
+STORE, 140722061451264, 140737488351231,
+SNULL, 140722061455359, 140737488351231,
+STORE, 140722061451264, 140722061455359,
+STORE, 140722061320192, 140722061455359,
+STORE, 94728600248320, 94728600289279,
+SNULL, 94728600276991, 94728600289279,
+STORE, 94728600248320, 94728600276991,
+STORE, 94728600276992, 94728600289279,
+ERASE, 94728600276992, 94728600289279,
+STORE, 94728600281088, 94728600289279,
+STORE, 139906806779904, 139906809032703,
+SNULL, 139906806923263, 139906809032703,
+STORE, 139906806779904, 139906806923263,
+STORE, 139906806923264, 139906809032703,
+ERASE, 139906806923264, 139906809032703,
+STORE, 139906809020416, 139906809028607,
+STORE, 139906809028608, 139906809032703,
+STORE, 140722061692928, 140722061697023,
+STORE, 140722061680640, 140722061692927,
+STORE, 139906809012224, 139906809020415,
+STORE, 139906804555776, 139906806779903,
+SNULL, 139906806206463, 139906806779903,
+STORE, 139906804555776, 139906806206463,
+STORE, 139906806206464, 139906806779903,
+SNULL, 139906806206464, 139906806775807,
+STORE, 139906806775808, 139906806779903,
+STORE, 139906806206464, 139906806775807,
+ERASE, 139906806206464, 139906806775807,
+STORE, 139906806206464, 139906806775807,
+ERASE, 139906806775808, 139906806779903,
+STORE, 139906806775808, 139906806779903,
+STORE, 139906808991744, 139906809012223,
+STORE, 139906802171904, 139906804555775,
+SNULL, 139906802171904, 139906802438143,
+STORE, 139906802438144, 139906804555775,
+STORE, 139906802171904, 139906802438143,
+SNULL, 139906804531199, 139906804555775,
+STORE, 139906802438144, 139906804531199,
+STORE, 139906804531200, 139906804555775,
+SNULL, 139906804531200, 139906804551679,
+STORE, 139906804551680, 139906804555775,
+STORE, 139906804531200, 139906804551679,
+ERASE, 139906804531200, 139906804551679,
+STORE, 139906804531200, 139906804551679,
+ERASE, 139906804551680, 139906804555775,
+STORE, 139906804551680, 139906804555775,
+STORE, 139906799955968, 139906802171903,
+SNULL, 139906799955968, 139906800054271,
+STORE, 139906800054272, 139906802171903,
+STORE, 139906799955968, 139906800054271,
+SNULL, 139906802147327, 139906802171903,
+STORE, 139906800054272, 139906802147327,
+STORE, 139906802147328, 139906802171903,
+SNULL, 139906802147328, 139906802155519,
+STORE, 139906802155520, 139906802171903,
+STORE, 139906802147328, 139906802155519,
+ERASE, 139906802147328, 139906802155519,
+STORE, 139906802147328, 139906802155519,
+ERASE, 139906802155520, 139906802171903,
+STORE, 139906802155520, 139906802171903,
+STORE, 139906796158976, 139906799955967,
+SNULL, 139906796158976, 139906797817855,
+STORE, 139906797817856, 139906799955967,
+STORE, 139906796158976, 139906797817855,
+SNULL, 139906799915007, 139906799955967,
+STORE, 139906797817856, 139906799915007,
+STORE, 139906799915008, 139906799955967,
+SNULL, 139906799915008, 139906799939583,
+STORE, 139906799939584, 139906799955967,
+STORE, 139906799915008, 139906799939583,
+ERASE, 139906799915008, 139906799939583,
+STORE, 139906799915008, 139906799939583,
+ERASE, 139906799939584, 139906799955967,
+STORE, 139906799939584, 139906799955967,
+STORE, 139906793897984, 139906796158975,
+SNULL, 139906793897984, 139906794049535,
+STORE, 139906794049536, 139906796158975,
+STORE, 139906793897984, 139906794049535,
+SNULL, 139906796142591, 139906796158975,
+STORE, 139906794049536, 139906796142591,
+STORE, 139906796142592, 139906796158975,
+SNULL, 139906796142592, 139906796150783,
+STORE, 139906796150784, 139906796158975,
+STORE, 139906796142592, 139906796150783,
+ERASE, 139906796142592, 139906796150783,
+STORE, 139906796142592, 139906796150783,
+ERASE, 139906796150784, 139906796158975,
+STORE, 139906796150784, 139906796158975,
+STORE, 139906791776256, 139906793897983,
+SNULL, 139906791776256, 139906791792639,
+STORE, 139906791792640, 139906793897983,
+STORE, 139906791776256, 139906791792639,
+SNULL, 139906793889791, 139906793897983,
+STORE, 139906791792640, 139906793889791,
+STORE, 139906793889792, 139906793897983,
+ERASE, 139906793889792, 139906793897983,
+STORE, 139906793889792, 139906793897983,
+STORE, 139906808983552, 139906808991743,
+STORE, 139906789646336, 139906791776255,
+SNULL, 139906789646336, 139906789675007,
+STORE, 139906789675008, 139906791776255,
+STORE, 139906789646336, 139906789675007,
+SNULL, 139906791768063, 139906791776255,
+STORE, 139906789675008, 139906791768063,
+STORE, 139906791768064, 139906791776255,
+ERASE, 139906791768064, 139906791776255,
+STORE, 139906791768064, 139906791776255,
+STORE, 139906787393536, 139906789646335,
+SNULL, 139906787393536, 139906787545087,
+STORE, 139906787545088, 139906789646335,
+STORE, 139906787393536, 139906787545087,
+SNULL, 139906789638143, 139906789646335,
+STORE, 139906787545088, 139906789638143,
+STORE, 139906789638144, 139906789646335,
+ERASE, 139906789638144, 139906789646335,
+STORE, 139906789638144, 139906789646335,
+STORE, 139906785222656, 139906787393535,
+SNULL, 139906785222656, 139906785292287,
+STORE, 139906785292288, 139906787393535,
+STORE, 139906785222656, 139906785292287,
+SNULL, 139906787385343, 139906787393535,
+STORE, 139906785292288, 139906787385343,
+STORE, 139906787385344, 139906787393535,
+ERASE, 139906787385344, 139906787393535,
+STORE, 139906787385344, 139906787393535,
+STORE, 139906782011392, 139906785222655,
+SNULL, 139906782011392, 139906783088639,
+STORE, 139906783088640, 139906785222655,
+STORE, 139906782011392, 139906783088639,
+SNULL, 139906785185791, 139906785222655,
+STORE, 139906783088640, 139906785185791,
+STORE, 139906785185792, 139906785222655,
+ERASE, 139906785185792, 139906785222655,
+STORE, 139906785185792, 139906785222655,
+STORE, 139906779877376, 139906782011391,
+SNULL, 139906779877376, 139906779906047,
+STORE, 139906779906048, 139906782011391,
+STORE, 139906779877376, 139906779906047,
+SNULL, 139906782003199, 139906782011391,
+STORE, 139906779906048, 139906782003199,
+STORE, 139906782003200, 139906782011391,
+ERASE, 139906782003200, 139906782011391,
+STORE, 139906782003200, 139906782011391,
+STORE, 139906777567232, 139906779877375,
+SNULL, 139906777567232, 139906777772031,
+STORE, 139906777772032, 139906779877375,
+STORE, 139906777567232, 139906777772031,
+SNULL, 139906779869183, 139906779877375,
+STORE, 139906777772032, 139906779869183,
+STORE, 139906779869184, 139906779877375,
+ERASE, 139906779869184, 139906779877375,
+STORE, 139906779869184, 139906779877375,
+STORE, 139906808975360, 139906808991743,
+STORE, 139906775183360, 139906777567231,
+SNULL, 139906775183360, 139906775375871,
+STORE, 139906775375872, 139906777567231,
+STORE, 139906775183360, 139906775375871,
+SNULL, 139906777468927, 139906777567231,
+STORE, 139906775375872, 139906777468927,
+STORE, 139906777468928, 139906777567231,
+ERASE, 139906777468928, 139906777567231,
+STORE, 139906777468928, 139906777567231,
+STORE, 139906773065728, 139906775183359,
+SNULL, 139906773065728, 139906773082111,
+STORE, 139906773082112, 139906775183359,
+STORE, 139906773065728, 139906773082111,
+SNULL, 139906775175167, 139906775183359,
+STORE, 139906773082112, 139906775175167,
+STORE, 139906775175168, 139906775183359,
+ERASE, 139906775175168, 139906775183359,
+STORE, 139906775175168, 139906775183359,
+STORE, 139906770497536, 139906773065727,
+SNULL, 139906770497536, 139906770964479,
+STORE, 139906770964480, 139906773065727,
+STORE, 139906770497536, 139906770964479,
+SNULL, 139906773057535, 139906773065727,
+STORE, 139906770964480, 139906773057535,
+STORE, 139906773057536, 139906773065727,
+ERASE, 139906773057536, 139906773065727,
+STORE, 139906773057536, 139906773065727,
+STORE, 139906768384000, 139906770497535,
+SNULL, 139906768384000, 139906768396287,
+STORE, 139906768396288, 139906770497535,
+STORE, 139906768384000, 139906768396287,
+SNULL, 139906770489343, 139906770497535,
+STORE, 139906768396288, 139906770489343,
+STORE, 139906770489344, 139906770497535,
+ERASE, 139906770489344, 139906770497535,
+STORE, 139906770489344, 139906770497535,
+STORE, 139906766204928, 139906768383999,
+SNULL, 139906766204928, 139906766282751,
+STORE, 139906766282752, 139906768383999,
+STORE, 139906766204928, 139906766282751,
+SNULL, 139906768375807, 139906768383999,
+STORE, 139906766282752, 139906768375807,
+STORE, 139906768375808, 139906768383999,
+ERASE, 139906768375808, 139906768383999,
+STORE, 139906768375808, 139906768383999,
+STORE, 139906808967168, 139906808991743,
+STORE, 139906764087296, 139906766204927,
+SNULL, 139906764087296, 139906764103679,
+STORE, 139906764103680, 139906766204927,
+STORE, 139906764087296, 139906764103679,
+SNULL, 139906766196735, 139906766204927,
+STORE, 139906764103680, 139906766196735,
+STORE, 139906766196736, 139906766204927,
+ERASE, 139906766196736, 139906766204927,
+STORE, 139906766196736, 139906766204927,
+STORE, 139906808958976, 139906808991743,
+SNULL, 139906799931391, 139906799939583,
+STORE, 139906799915008, 139906799931391,
+STORE, 139906799931392, 139906799939583,
+SNULL, 139906766200831, 139906766204927,
+STORE, 139906766196736, 139906766200831,
+STORE, 139906766200832, 139906766204927,
+SNULL, 139906768379903, 139906768383999,
+STORE, 139906768375808, 139906768379903,
+STORE, 139906768379904, 139906768383999,
+SNULL, 139906770493439, 139906770497535,
+STORE, 139906770489344, 139906770493439,
+STORE, 139906770493440, 139906770497535,
+SNULL, 139906802151423, 139906802155519,
+STORE, 139906802147328, 139906802151423,
+STORE, 139906802151424, 139906802155519,
+SNULL, 139906773061631, 139906773065727,
+STORE, 139906773057536, 139906773061631,
+STORE, 139906773061632, 139906773065727,
+SNULL, 139906775179263, 139906775183359,
+STORE, 139906775175168, 139906775179263,
+STORE, 139906775179264, 139906775183359,
+SNULL, 139906777563135, 139906777567231,
+STORE, 139906777468928, 139906777563135,
+STORE, 139906777563136, 139906777567231,
+SNULL, 139906779873279, 139906779877375,
+STORE, 139906779869184, 139906779873279,
+STORE, 139906779873280, 139906779877375,
+SNULL, 139906782007295, 139906782011391,
+STORE, 139906782003200, 139906782007295,
+STORE, 139906782007296, 139906782011391,
+SNULL, 139906785193983, 139906785222655,
+STORE, 139906785185792, 139906785193983,
+STORE, 139906785193984, 139906785222655,
+SNULL, 139906787389439, 139906787393535,
+STORE, 139906787385344, 139906787389439,
+STORE, 139906787389440, 139906787393535,
+SNULL, 139906789642239, 139906789646335,
+STORE, 139906789638144, 139906789642239,
+STORE, 139906789642240, 139906789646335,
+SNULL, 139906791772159, 139906791776255,
+STORE, 139906791768064, 139906791772159,
+STORE, 139906791772160, 139906791776255,
+SNULL, 139906793893887, 139906793897983,
+STORE, 139906793889792, 139906793893887,
+STORE, 139906793893888, 139906793897983,
+SNULL, 139906796146687, 139906796150783,
+STORE, 139906796142592, 139906796146687,
+STORE, 139906796146688, 139906796150783,
+SNULL, 139906804547583, 139906804551679,
+STORE, 139906804531200, 139906804547583,
+STORE, 139906804547584, 139906804551679,
+SNULL, 139906806771711, 139906806775807,
+STORE, 139906806206464, 139906806771711,
+STORE, 139906806771712, 139906806775807,
+SNULL, 94728600285183, 94728600289279,
+STORE, 94728600281088, 94728600285183,
+STORE, 94728600285184, 94728600289279,
+SNULL, 139906809024511, 139906809028607,
+STORE, 139906809020416, 139906809024511,
+STORE, 139906809024512, 139906809028607,
+ERASE, 139906808991744, 139906809012223,
+STORE, 94728620138496, 94728620273663,
+STORE, 139906808692736, 139906808991743,
+STORE, 139906808426496, 139906808991743,
+STORE, 139906808160256, 139906808991743,
+STORE, 139906807894016, 139906808991743,
+SNULL, 139906808692735, 139906808991743,
+STORE, 139906807894016, 139906808692735,
+STORE, 139906808692736, 139906808991743,
+SNULL, 139906808692736, 139906808958975,
+STORE, 139906808958976, 139906808991743,
+STORE, 139906808692736, 139906808958975,
+       };
+
+       unsigned long set16[] = {
+STORE, 94174808662016, 94174809321471,
+STORE, 94174811414528, 94174811426815,
+STORE, 94174811426816, 94174811430911,
+STORE, 94174811430912, 94174811443199,
+STORE, 94174841700352, 94174841835519,
+STORE, 140173257838592, 140173259497471,
+STORE, 140173259497472, 140173261594623,
+STORE, 140173261594624, 140173261611007,
+STORE, 140173261611008, 140173261619199,
+STORE, 140173261619200, 140173261635583,
+STORE, 140173261635584, 140173261778943,
+STORE, 140173263863808, 140173263871999,
+STORE, 140173263876096, 140173263880191,
+STORE, 140173263880192, 140173263884287,
+STORE, 140173263884288, 140173263888383,
+STORE, 140729801007104, 140729801142271,
+STORE, 140729801617408, 140729801629695,
+STORE, 140729801629696, 140729801633791,
+STORE, 140737488347136, 140737488351231,
+STORE, 140728166858752, 140737488351231,
+SNULL, 140728166862847, 140737488351231,
+STORE, 140728166858752, 140728166862847,
+STORE, 140728166727680, 140728166862847,
+STORE, 93912949866496, 93912950337535,
+SNULL, 93912950288383, 93912950337535,
+STORE, 93912949866496, 93912950288383,
+STORE, 93912950288384, 93912950337535,
+ERASE, 93912950288384, 93912950337535,
+STORE, 93912950292480, 93912950337535,
+STORE, 139921863385088, 139921865637887,
+SNULL, 139921863528447, 139921865637887,
+STORE, 139921863385088, 139921863528447,
+STORE, 139921863528448, 139921865637887,
+ERASE, 139921863528448, 139921865637887,
+STORE, 139921865625600, 139921865633791,
+STORE, 139921865633792, 139921865637887,
+STORE, 140728167899136, 140728167903231,
+STORE, 140728167886848, 140728167899135,
+STORE, 139921865601024, 139921865625599,
+STORE, 139921865592832, 139921865601023,
+STORE, 139921861251072, 139921863385087,
+SNULL, 139921861251072, 139921861279743,
+STORE, 139921861279744, 139921863385087,
+STORE, 139921861251072, 139921861279743,
+SNULL, 139921863376895, 139921863385087,
+STORE, 139921861279744, 139921863376895,
+STORE, 139921863376896, 139921863385087,
+ERASE, 139921863376896, 139921863385087,
+STORE, 139921863376896, 139921863385087,
+STORE, 139921858867200, 139921861251071,
+SNULL, 139921858867200, 139921859133439,
+STORE, 139921859133440, 139921861251071,
+STORE, 139921858867200, 139921859133439,
+SNULL, 139921861226495, 139921861251071,
+STORE, 139921859133440, 139921861226495,
+STORE, 139921861226496, 139921861251071,
+SNULL, 139921861226496, 139921861246975,
+STORE, 139921861246976, 139921861251071,
+STORE, 139921861226496, 139921861246975,
+ERASE, 139921861226496, 139921861246975,
+STORE, 139921861226496, 139921861246975,
+ERASE, 139921861246976, 139921861251071,
+STORE, 139921861246976, 139921861251071,
+STORE, 139921856675840, 139921858867199,
+SNULL, 139921856675840, 139921856765951,
+STORE, 139921856765952, 139921858867199,
+STORE, 139921856675840, 139921856765951,
+SNULL, 139921858859007, 139921858867199,
+STORE, 139921856765952, 139921858859007,
+STORE, 139921858859008, 139921858867199,
+ERASE, 139921858859008, 139921858867199,
+STORE, 139921858859008, 139921858867199,
+STORE, 139921854414848, 139921856675839,
+SNULL, 139921854414848, 139921854566399,
+STORE, 139921854566400, 139921856675839,
+STORE, 139921854414848, 139921854566399,
+SNULL, 139921856659455, 139921856675839,
+STORE, 139921854566400, 139921856659455,
+STORE, 139921856659456, 139921856675839,
+SNULL, 139921856659456, 139921856667647,
+STORE, 139921856667648, 139921856675839,
+STORE, 139921856659456, 139921856667647,
+ERASE, 139921856659456, 139921856667647,
+STORE, 139921856659456, 139921856667647,
+ERASE, 139921856667648, 139921856675839,
+STORE, 139921856667648, 139921856675839,
+STORE, 139921852284928, 139921854414847,
+SNULL, 139921852284928, 139921852313599,
+STORE, 139921852313600, 139921854414847,
+STORE, 139921852284928, 139921852313599,
+SNULL, 139921854406655, 139921854414847,
+STORE, 139921852313600, 139921854406655,
+STORE, 139921854406656, 139921854414847,
+ERASE, 139921854406656, 139921854414847,
+STORE, 139921854406656, 139921854414847,
+STORE, 139921850068992, 139921852284927,
+SNULL, 139921850068992, 139921850167295,
+STORE, 139921850167296, 139921852284927,
+STORE, 139921850068992, 139921850167295,
+SNULL, 139921852260351, 139921852284927,
+STORE, 139921850167296, 139921852260351,
+STORE, 139921852260352, 139921852284927,
+SNULL, 139921852260352, 139921852268543,
+STORE, 139921852268544, 139921852284927,
+STORE, 139921852260352, 139921852268543,
+ERASE, 139921852260352, 139921852268543,
+STORE, 139921852260352, 139921852268543,
+ERASE, 139921852268544, 139921852284927,
+STORE, 139921852268544, 139921852284927,
+STORE, 139921865584640, 139921865601023,
+STORE, 139921846272000, 139921850068991,
+SNULL, 139921846272000, 139921847930879,
+STORE, 139921847930880, 139921850068991,
+STORE, 139921846272000, 139921847930879,
+SNULL, 139921850028031, 139921850068991,
+STORE, 139921847930880, 139921850028031,
+STORE, 139921850028032, 139921850068991,
+SNULL, 139921850028032, 139921850052607,
+STORE, 139921850052608, 139921850068991,
+STORE, 139921850028032, 139921850052607,
+ERASE, 139921850028032, 139921850052607,
+STORE, 139921850028032, 139921850052607,
+ERASE, 139921850052608, 139921850068991,
+STORE, 139921850052608, 139921850068991,
+STORE, 139921844154368, 139921846271999,
+SNULL, 139921844154368, 139921844170751,
+STORE, 139921844170752, 139921846271999,
+STORE, 139921844154368, 139921844170751,
+SNULL, 139921846263807, 139921846271999,
+STORE, 139921844170752, 139921846263807,
+STORE, 139921846263808, 139921846271999,
+ERASE, 139921846263808, 139921846271999,
+STORE, 139921846263808, 139921846271999,
+STORE, 139921842036736, 139921844154367,
+SNULL, 139921842036736, 139921842053119,
+STORE, 139921842053120, 139921844154367,
+STORE, 139921842036736, 139921842053119,
+SNULL, 139921844146175, 139921844154367,
+STORE, 139921842053120, 139921844146175,
+STORE, 139921844146176, 139921844154367,
+ERASE, 139921844146176, 139921844154367,
+STORE, 139921844146176, 139921844154367,
+STORE, 139921839468544, 139921842036735,
+SNULL, 139921839468544, 139921839935487,
+STORE, 139921839935488, 139921842036735,
+STORE, 139921839468544, 139921839935487,
+SNULL, 139921842028543, 139921842036735,
+STORE, 139921839935488, 139921842028543,
+STORE, 139921842028544, 139921842036735,
+ERASE, 139921842028544, 139921842036735,
+STORE, 139921842028544, 139921842036735,
+STORE, 139921837355008, 139921839468543,
+SNULL, 139921837355008, 139921837367295,
+STORE, 139921837367296, 139921839468543,
+STORE, 139921837355008, 139921837367295,
+SNULL, 139921839460351, 139921839468543,
+STORE, 139921837367296, 139921839460351,
+STORE, 139921839460352, 139921839468543,
+ERASE, 139921839460352, 139921839468543,
+STORE, 139921839460352, 139921839468543,
+STORE, 139921865576448, 139921865601023,
+STORE, 139921865564160, 139921865601023,
+SNULL, 139921850044415, 139921850052607,
+STORE, 139921850028032, 139921850044415,
+STORE, 139921850044416, 139921850052607,
+SNULL, 139921839464447, 139921839468543,
+STORE, 139921839460352, 139921839464447,
+STORE, 139921839464448, 139921839468543,
+SNULL, 139921852264447, 139921852268543,
+STORE, 139921852260352, 139921852264447,
+STORE, 139921852264448, 139921852268543,
+SNULL, 139921842032639, 139921842036735,
+STORE, 139921842028544, 139921842032639,
+STORE, 139921842032640, 139921842036735,
+SNULL, 139921844150271, 139921844154367,
+STORE, 139921844146176, 139921844150271,
+STORE, 139921844150272, 139921844154367,
+SNULL, 139921846267903, 139921846271999,
+STORE, 139921846263808, 139921846267903,
+STORE, 139921846267904, 139921846271999,
+SNULL, 139921854410751, 139921854414847,
+STORE, 139921854406656, 139921854410751,
+STORE, 139921854410752, 139921854414847,
+SNULL, 139921856663551, 139921856667647,
+STORE, 139921856659456, 139921856663551,
+STORE, 139921856663552, 139921856667647,
+SNULL, 139921858863103, 139921858867199,
+STORE, 139921858859008, 139921858863103,
+STORE, 139921858863104, 139921858867199,
+SNULL, 139921861242879, 139921861246975,
+STORE, 139921861226496, 139921861242879,
+STORE, 139921861242880, 139921861246975,
+SNULL, 139921863380991, 139921863385087,
+STORE, 139921863376896, 139921863380991,
+STORE, 139921863380992, 139921863385087,
+SNULL, 93912950333439, 93912950337535,
+STORE, 93912950292480, 93912950333439,
+STORE, 93912950333440, 93912950337535,
+SNULL, 139921865629695, 139921865633791,
+STORE, 139921865625600, 139921865629695,
+STORE, 139921865629696, 139921865633791,
+ERASE, 139921865601024, 139921865625599,
+STORE, 93912968110080, 93912968245247,
+STORE, 139921828913152, 139921837355007,
+STORE, 139921865621504, 139921865625599,
+STORE, 139921865617408, 139921865621503,
+STORE, 139921865613312, 139921865617407,
+STORE, 139921865547776, 139921865564159,
+       };
+
+       unsigned long set17[] = {
+STORE, 94397057224704, 94397057646591,
+STORE, 94397057650688, 94397057691647,
+STORE, 94397057691648, 94397057695743,
+STORE, 94397075271680, 94397075406847,
+STORE, 139953169051648, 139953169063935,
+STORE, 139953169063936, 139953171156991,
+STORE, 139953171156992, 139953171161087,
+STORE, 139953171161088, 139953171165183,
+STORE, 139953171165184, 139953171632127,
+STORE, 139953171632128, 139953173725183,
+STORE, 139953173725184, 139953173729279,
+STORE, 139953173729280, 139953173733375,
+STORE, 139953173733376, 139953173749759,
+STORE, 139953173749760, 139953175842815,
+STORE, 139953175842816, 139953175846911,
+STORE, 139953175846912, 139953175851007,
+STORE, 139953175851008, 139953175867391,
+STORE, 139953175867392, 139953177960447,
+STORE, 139953177960448, 139953177964543,
+STORE, 139953177964544, 139953177968639,
+STORE, 139953177968640, 139953179627519,
+STORE, 139953179627520, 139953181724671,
+STORE, 139953181724672, 139953181741055,
+STORE, 139953181741056, 139953181749247,
+STORE, 139953181749248, 139953181765631,
+STORE, 139953181765632, 139953181863935,
+STORE, 139953181863936, 139953183956991,
+STORE, 139953183956992, 139953183961087,
+STORE, 139953183961088, 139953183965183,
+STORE, 139953183965184, 139953183981567,
+STORE, 139953183981568, 139953184010239,
+STORE, 139953184010240, 139953186103295,
+STORE, 139953186103296, 139953186107391,
+STORE, 139953186107392, 139953186111487,
+STORE, 139953186111488, 139953186263039,
+STORE, 139953186263040, 139953188356095,
+STORE, 139953188356096, 139953188360191,
+STORE, 139953188360192, 139953188364287,
+STORE, 139953188364288, 139953188372479,
+STORE, 139953188372480, 139953188462591,
+STORE, 139953188462592, 139953190555647,
+STORE, 139953190555648, 139953190559743,
+STORE, 139953190559744, 139953190563839,
+STORE, 139953190563840, 139953190830079,
+STORE, 139953190830080, 139953192923135,
+STORE, 139953192923136, 139953192939519,
+STORE, 139953192939520, 139953192943615,
+STORE, 139953192943616, 139953192947711,
+STORE, 139953192947712, 139953192976383,
+STORE, 139953192976384, 139953195073535,
+STORE, 139953195073536, 139953195077631,
+STORE, 139953195077632, 139953195081727,
+STORE, 139953195081728, 139953195225087,
+STORE, 139953197281280, 139953197318143,
+STORE, 139953197322240, 139953197326335,
+STORE, 139953197326336, 139953197330431,
+STORE, 139953197330432, 139953197334527,
+STORE, 140720477511680, 140720477646847,
+STORE, 140720478302208, 140720478314495,
+STORE, 140720478314496, 140720478318591,
+       };
+       unsigned long set18[] = {
+STORE, 140737488347136, 140737488351231,
+STORE, 140724953673728, 140737488351231,
+SNULL, 140724953677823, 140737488351231,
+STORE, 140724953673728, 140724953677823,
+STORE, 140724953542656, 140724953677823,
+STORE, 94675199266816, 94675199311871,
+SNULL, 94675199303679, 94675199311871,
+STORE, 94675199266816, 94675199303679,
+STORE, 94675199303680, 94675199311871,
+ERASE, 94675199303680, 94675199311871,
+STORE, 94675199303680, 94675199311871,
+STORE, 140222970605568, 140222972858367,
+SNULL, 140222970748927, 140222972858367,
+STORE, 140222970605568, 140222970748927,
+STORE, 140222970748928, 140222972858367,
+ERASE, 140222970748928, 140222972858367,
+STORE, 140222972846080, 140222972854271,
+STORE, 140222972854272, 140222972858367,
+STORE, 140724954365952, 140724954370047,
+STORE, 140724954353664, 140724954365951,
+STORE, 140222972841984, 140222972846079,
+STORE, 140222972833792, 140222972841983,
+STORE, 140222968475648, 140222970605567,
+SNULL, 140222968475648, 140222968504319,
+STORE, 140222968504320, 140222970605567,
+STORE, 140222968475648, 140222968504319,
+SNULL, 140222970597375, 140222970605567,
+STORE, 140222968504320, 140222970597375,
+STORE, 140222970597376, 140222970605567,
+ERASE, 140222970597376, 140222970605567,
+STORE, 140222970597376, 140222970605567,
+       };
+       unsigned long set19[] = {
+STORE, 140737488347136, 140737488351231,
+STORE, 140725182459904, 140737488351231,
+SNULL, 140725182463999, 140737488351231,
+STORE, 140725182459904, 140725182463999,
+STORE, 140725182328832, 140725182463999,
+STORE, 94730166636544, 94730166763519,
+SNULL, 94730166747135, 94730166763519,
+STORE, 94730166636544, 94730166747135,
+STORE, 94730166747136, 94730166763519,
+ERASE, 94730166747136, 94730166763519,
+STORE, 94730166751232, 94730166763519,
+STORE, 140656834555904, 140656836808703,
+SNULL, 140656834699263, 140656836808703,
+STORE, 140656834555904, 140656834699263,
+STORE, 140656834699264, 140656836808703,
+ERASE, 140656834699264, 140656836808703,
+STORE, 140656836796416, 140656836804607,
+STORE, 140656836804608, 140656836808703,
+STORE, 140725183389696, 140725183393791,
+STORE, 140725183377408, 140725183389695,
+STORE, 140656836788224, 140656836796415,
+STORE, 140656832331776, 140656834555903,
+SNULL, 140656833982463, 140656834555903,
+STORE, 140656832331776, 140656833982463,
+STORE, 140656833982464, 140656834555903,
+SNULL, 140656833982464, 140656834551807,
+STORE, 140656834551808, 140656834555903,
+STORE, 140656833982464, 140656834551807,
+ERASE, 140656833982464, 140656834551807,
+STORE, 140656833982464, 140656834551807,
+ERASE, 140656834551808, 140656834555903,
+STORE, 140656834551808, 140656834555903,
+STORE, 140656836763648, 140656836788223,
+STORE, 140656830070784, 140656832331775,
+SNULL, 140656830070784, 140656830222335,
+STORE, 140656830222336, 140656832331775,
+STORE, 140656830070784, 140656830222335,
+SNULL, 140656832315391, 140656832331775,
+STORE, 140656830222336, 140656832315391,
+STORE, 140656832315392, 140656832331775,
+SNULL, 140656832315392, 140656832323583,
+STORE, 140656832323584, 140656832331775,
+STORE, 140656832315392, 140656832323583,
+ERASE, 140656832315392, 140656832323583,
+STORE, 140656832315392, 140656832323583,
+ERASE, 140656832323584, 140656832331775,
+STORE, 140656832323584, 140656832331775,
+STORE, 140656827940864, 140656830070783,
+SNULL, 140656827940864, 140656827969535,
+STORE, 140656827969536, 140656830070783,
+STORE, 140656827940864, 140656827969535,
+SNULL, 140656830062591, 140656830070783,
+STORE, 140656827969536, 140656830062591,
+STORE, 140656830062592, 140656830070783,
+ERASE, 140656830062592, 140656830070783,
+STORE, 140656830062592, 140656830070783,
+STORE, 140656825724928, 140656827940863,
+SNULL, 140656825724928, 140656825823231,
+STORE, 140656825823232, 140656827940863,
+STORE, 140656825724928, 140656825823231,
+SNULL, 140656827916287, 140656827940863,
+STORE, 140656825823232, 140656827916287,
+STORE, 140656827916288, 140656827940863,
+SNULL, 140656827916288, 140656827924479,
+STORE, 140656827924480, 140656827940863,
+STORE, 140656827916288, 140656827924479,
+ERASE, 140656827916288, 140656827924479,
+STORE, 140656827916288, 140656827924479,
+ERASE, 140656827924480, 140656827940863,
+STORE, 140656827924480, 140656827940863,
+STORE, 140656821927936, 140656825724927,
+SNULL, 140656821927936, 140656823586815,
+STORE, 140656823586816, 140656825724927,
+STORE, 140656821927936, 140656823586815,
+SNULL, 140656825683967, 140656825724927,
+STORE, 140656823586816, 140656825683967,
+STORE, 140656825683968, 140656825724927,
+SNULL, 140656825683968, 140656825708543,
+STORE, 140656825708544, 140656825724927,
+STORE, 140656825683968, 140656825708543,
+ERASE, 140656825683968, 140656825708543,
+STORE, 140656825683968, 140656825708543,
+ERASE, 140656825708544, 140656825724927,
+STORE, 140656825708544, 140656825724927,
+STORE, 140656819806208, 140656821927935,
+SNULL, 140656819806208, 140656819822591,
+STORE, 140656819822592, 140656821927935,
+STORE, 140656819806208, 140656819822591,
+SNULL, 140656821919743, 140656821927935,
+STORE, 140656819822592, 140656821919743,
+STORE, 140656821919744, 140656821927935,
+ERASE, 140656821919744, 140656821927935,
+STORE, 140656821919744, 140656821927935,
+STORE, 140656836755456, 140656836763647,
+STORE, 140656817553408, 140656819806207,
+SNULL, 140656817553408, 140656817704959,
+STORE, 140656817704960, 140656819806207,
+STORE, 140656817553408, 140656817704959,
+SNULL, 140656819798015, 140656819806207,
+STORE, 140656817704960, 140656819798015,
+STORE, 140656819798016, 140656819806207,
+ERASE, 140656819798016, 140656819806207,
+STORE, 140656819798016, 140656819806207,
+STORE, 140656815382528, 140656817553407,
+SNULL, 140656815382528, 140656815452159,
+STORE, 140656815452160, 140656817553407,
+STORE, 140656815382528, 140656815452159,
+SNULL, 140656817545215, 140656817553407,
+STORE, 140656815452160, 140656817545215,
+STORE, 140656817545216, 140656817553407,
+ERASE, 140656817545216, 140656817553407,
+STORE, 140656817545216, 140656817553407,
+STORE, 140656812171264, 140656815382527,
+SNULL, 140656812171264, 140656813248511,
+STORE, 140656813248512, 140656815382527,
+STORE, 140656812171264, 140656813248511,
+SNULL, 140656815345663, 140656815382527,
+STORE, 140656813248512, 140656815345663,
+STORE, 140656815345664, 140656815382527,
+ERASE, 140656815345664, 140656815382527,
+STORE, 140656815345664, 140656815382527,
+STORE, 140656810037248, 140656812171263,
+SNULL, 140656810037248, 140656810065919,
+STORE, 140656810065920, 140656812171263,
+STORE, 140656810037248, 140656810065919,
+SNULL, 140656812163071, 140656812171263,
+STORE, 140656810065920, 140656812163071,
+STORE, 140656812163072, 140656812171263,
+ERASE, 140656812163072, 140656812171263,
+STORE, 140656812163072, 140656812171263,
+STORE, 140656807727104, 140656810037247,
+SNULL, 140656807727104, 140656807931903,
+STORE, 140656807931904, 140656810037247,
+STORE, 140656807727104, 140656807931903,
+SNULL, 140656810029055, 140656810037247,
+STORE, 140656807931904, 140656810029055,
+STORE, 140656810029056, 140656810037247,
+ERASE, 140656810029056, 140656810037247,
+STORE, 140656810029056, 140656810037247,
+STORE, 140656805343232, 140656807727103,
+SNULL, 140656805343232, 140656805535743,
+STORE, 140656805535744, 140656807727103,
+STORE, 140656805343232, 140656805535743,
+SNULL, 140656807628799, 140656807727103,
+STORE, 140656805535744, 140656807628799,
+STORE, 140656807628800, 140656807727103,
+ERASE, 140656807628800, 140656807727103,
+STORE, 140656807628800, 140656807727103,
+STORE, 140656836747264, 140656836763647,
+STORE, 140656802775040, 140656805343231,
+SNULL, 140656802775040, 140656803241983,
+STORE, 140656803241984, 140656805343231,
+STORE, 140656802775040, 140656803241983,
+SNULL, 140656805335039, 140656805343231,
+STORE, 140656803241984, 140656805335039,
+STORE, 140656805335040, 140656805343231,
+ERASE, 140656805335040, 140656805343231,
+STORE, 140656805335040, 140656805343231,
+STORE, 140656800661504, 140656802775039,
+SNULL, 140656800661504, 140656800673791,
+STORE, 140656800673792, 140656802775039,
+STORE, 140656800661504, 140656800673791,
+SNULL, 140656802766847, 140656802775039,
+STORE, 140656800673792, 140656802766847,
+STORE, 140656802766848, 140656802775039,
+ERASE, 140656802766848, 140656802775039,
+STORE, 140656802766848, 140656802775039,
+STORE, 140656798482432, 140656800661503,
+SNULL, 140656798482432, 140656798560255,
+STORE, 140656798560256, 140656800661503,
+STORE, 140656798482432, 140656798560255,
+SNULL, 140656800653311, 140656800661503,
+STORE, 140656798560256, 140656800653311,
+STORE, 140656800653312, 140656800661503,
+ERASE, 140656800653312, 140656800661503,
+STORE, 140656800653312, 140656800661503,
+STORE, 140656796364800, 140656798482431,
+SNULL, 140656796364800, 140656796381183,
+STORE, 140656796381184, 140656798482431,
+STORE, 140656796364800, 140656796381183,
+SNULL, 140656798474239, 140656798482431,
+STORE, 140656796381184, 140656798474239,
+STORE, 140656798474240, 140656798482431,
+ERASE, 140656798474240, 140656798482431,
+STORE, 140656798474240, 140656798482431,
+STORE, 140656836739072, 140656836763647,
+STORE, 140656836726784, 140656836763647,
+SNULL, 140656825700351, 140656825708543,
+STORE, 140656825683968, 140656825700351,
+STORE, 140656825700352, 140656825708543,
+SNULL, 140656798478335, 140656798482431,
+STORE, 140656798474240, 140656798478335,
+STORE, 140656798478336, 140656798482431,
+SNULL, 140656800657407, 140656800661503,
+STORE, 140656800653312, 140656800657407,
+STORE, 140656800657408, 140656800661503,
+SNULL, 140656802770943, 140656802775039,
+STORE, 140656802766848, 140656802770943,
+STORE, 140656802770944, 140656802775039,
+SNULL, 140656827920383, 140656827924479,
+STORE, 140656827916288, 140656827920383,
+STORE, 140656827920384, 140656827924479,
+SNULL, 140656805339135, 140656805343231,
+STORE, 140656805335040, 140656805339135,
+STORE, 140656805339136, 140656805343231,
+SNULL, 140656807723007, 140656807727103,
+STORE, 140656807628800, 140656807723007,
+STORE, 140656807723008, 140656807727103,
+SNULL, 140656810033151, 140656810037247,
+STORE, 140656810029056, 140656810033151,
+STORE, 140656810033152, 140656810037247,
+SNULL, 140656812167167, 140656812171263,
+STORE, 140656812163072, 140656812167167,
+STORE, 140656812167168, 140656812171263,
+SNULL, 140656815353855, 140656815382527,
+STORE, 140656815345664, 140656815353855,
+STORE, 140656815353856, 140656815382527,
+SNULL, 140656817549311, 140656817553407,
+STORE, 140656817545216, 140656817549311,
+STORE, 140656817549312, 140656817553407,
+SNULL, 140656819802111, 140656819806207,
+STORE, 140656819798016, 140656819802111,
+STORE, 140656819802112, 140656819806207,
+SNULL, 140656821923839, 140656821927935,
+STORE, 140656821919744, 140656821923839,
+STORE, 140656821923840, 140656821927935,
+SNULL, 140656830066687, 140656830070783,
+STORE, 140656830062592, 140656830066687,
+STORE, 140656830066688, 140656830070783,
+SNULL, 140656832319487, 140656832323583,
+STORE, 140656832315392, 140656832319487,
+STORE, 140656832319488, 140656832323583,
+SNULL, 140656834547711, 140656834551807,
+STORE, 140656833982464, 140656834547711,
+STORE, 140656834547712, 140656834551807,
+SNULL, 94730166759423, 94730166763519,
+STORE, 94730166751232, 94730166759423,
+STORE, 94730166759424, 94730166763519,
+SNULL, 140656836800511, 140656836804607,
+STORE, 140656836796416, 140656836800511,
+STORE, 140656836800512, 140656836804607,
+ERASE, 140656836763648, 140656836788223,
+STORE, 94730171318272, 94730171453439,
+STORE, 140656836784128, 140656836788223,
+STORE, 140656836780032, 140656836784127,
+STORE, 140656791920640, 140656796364799,
+STORE, 140656836775936, 140656836780031,
+STORE, 140656787476480, 140656791920639,
+STORE, 140656779083776, 140656787476479,
+SNULL, 140656779087871, 140656787476479,
+STORE, 140656779083776, 140656779087871,
+STORE, 140656779087872, 140656787476479,
+STORE, 140656836771840, 140656836775935,
+STORE, 140656774639616, 140656779083775,
+STORE, 140656766246912, 140656774639615,
+SNULL, 140656766251007, 140656774639615,
+STORE, 140656766246912, 140656766251007,
+STORE, 140656766251008, 140656774639615,
+ERASE, 140656791920640, 140656796364799,
+ERASE, 140656836780032, 140656836784127,
+ERASE, 140656787476480, 140656791920639,
+ERASE, 140656836775936, 140656836780031,
+STORE, 140656836780032, 140656836784127,
+STORE, 140656791920640, 140656796364799,
+STORE, 140656836775936, 140656836780031,
+STORE, 140656787476480, 140656791920639,
+ERASE, 140656774639616, 140656779083775,
+       };
+       unsigned long set20[] = {
+STORE, 140737488347136, 140737488351231,
+STORE, 140735952392192, 140737488351231,
+SNULL, 140735952396287, 140737488351231,
+STORE, 140735952392192, 140735952396287,
+STORE, 140735952261120, 140735952396287,
+STORE, 94849008947200, 94849009414143,
+SNULL, 94849009364991, 94849009414143,
+STORE, 94849008947200, 94849009364991,
+STORE, 94849009364992, 94849009414143,
+ERASE, 94849009364992, 94849009414143,
+STORE, 94849009364992, 94849009414143,
+STORE, 140590397943808, 140590400196607,
+SNULL, 140590398087167, 140590400196607,
+STORE, 140590397943808, 140590398087167,
+STORE, 140590398087168, 140590400196607,
+ERASE, 140590398087168, 140590400196607,
+STORE, 140590400184320, 140590400192511,
+STORE, 140590400192512, 140590400196607,
+STORE, 140735952850944, 140735952855039,
+STORE, 140735952838656, 140735952850943,
+STORE, 140590400180224, 140590400184319,
+STORE, 140590400172032, 140590400180223,
+STORE, 140590395809792, 140590397943807,
+SNULL, 140590395809792, 140590395838463,
+STORE, 140590395838464, 140590397943807,
+STORE, 140590395809792, 140590395838463,
+SNULL, 140590397935615, 140590397943807,
+STORE, 140590395838464, 140590397935615,
+STORE, 140590397935616, 140590397943807,
+ERASE, 140590397935616, 140590397943807,
+STORE, 140590397935616, 140590397943807,
+STORE, 140590393425920, 140590395809791,
+SNULL, 140590393425920, 140590393692159,
+STORE, 140590393692160, 140590395809791,
+STORE, 140590393425920, 140590393692159,
+SNULL, 140590395785215, 140590395809791,
+STORE, 140590393692160, 140590395785215,
+STORE, 140590395785216, 140590395809791,
+SNULL, 140590395785216, 140590395805695,
+STORE, 140590395805696, 140590395809791,
+STORE, 140590395785216, 140590395805695,
+ERASE, 140590395785216, 140590395805695,
+STORE, 140590395785216, 140590395805695,
+ERASE, 140590395805696, 140590395809791,
+STORE, 140590395805696, 140590395809791,
+STORE, 140590391234560, 140590393425919,
+SNULL, 140590391234560, 140590391324671,
+STORE, 140590391324672, 140590393425919,
+STORE, 140590391234560, 140590391324671,
+SNULL, 140590393417727, 140590393425919,
+STORE, 140590391324672, 140590393417727,
+STORE, 140590393417728, 140590393425919,
+ERASE, 140590393417728, 140590393425919,
+STORE, 140590393417728, 140590393425919,
+STORE, 140590388973568, 140590391234559,
+SNULL, 140590388973568, 140590389125119,
+STORE, 140590389125120, 140590391234559,
+STORE, 140590388973568, 140590389125119,
+SNULL, 140590391218175, 140590391234559,
+STORE, 140590389125120, 140590391218175,
+STORE, 140590391218176, 140590391234559,
+SNULL, 140590391218176, 140590391226367,
+STORE, 140590391226368, 140590391234559,
+STORE, 140590391218176, 140590391226367,
+ERASE, 140590391218176, 140590391226367,
+STORE, 140590391218176, 140590391226367,
+ERASE, 140590391226368, 140590391234559,
+STORE, 140590391226368, 140590391234559,
+STORE, 140590386843648, 140590388973567,
+SNULL, 140590386843648, 140590386872319,
+STORE, 140590386872320, 140590388973567,
+STORE, 140590386843648, 140590386872319,
+SNULL, 140590388965375, 140590388973567,
+STORE, 140590386872320, 140590388965375,
+STORE, 140590388965376, 140590388973567,
+ERASE, 140590388965376, 140590388973567,
+STORE, 140590388965376, 140590388973567,
+STORE, 140590384627712, 140590386843647,
+SNULL, 140590384627712, 140590384726015,
+STORE, 140590384726016, 140590386843647,
+STORE, 140590384627712, 140590384726015,
+SNULL, 140590386819071, 140590386843647,
+STORE, 140590384726016, 140590386819071,
+STORE, 140590386819072, 140590386843647,
+SNULL, 140590386819072, 140590386827263,
+STORE, 140590386827264, 140590386843647,
+STORE, 140590386819072, 140590386827263,
+ERASE, 140590386819072, 140590386827263,
+STORE, 140590386819072, 140590386827263,
+ERASE, 140590386827264, 140590386843647,
+STORE, 140590386827264, 140590386843647,
+STORE, 140590400163840, 140590400180223,
+STORE, 140590380830720, 140590384627711,
+SNULL, 140590380830720, 140590382489599,
+STORE, 140590382489600, 140590384627711,
+STORE, 140590380830720, 140590382489599,
+SNULL, 140590384586751, 140590384627711,
+STORE, 140590382489600, 140590384586751,
+STORE, 140590384586752, 140590384627711,
+SNULL, 140590384586752, 140590384611327,
+STORE, 140590384611328, 140590384627711,
+STORE, 140590384586752, 140590384611327,
+ERASE, 140590384586752, 140590384611327,
+STORE, 140590384586752, 140590384611327,
+ERASE, 140590384611328, 140590384627711,
+STORE, 140590384611328, 140590384627711,
+STORE, 140590378713088, 140590380830719,
+SNULL, 140590378713088, 140590378729471,
+STORE, 140590378729472, 140590380830719,
+STORE, 140590378713088, 140590378729471,
+SNULL, 140590380822527, 140590380830719,
+STORE, 140590378729472, 140590380822527,
+STORE, 140590380822528, 140590380830719,
+ERASE, 140590380822528, 140590380830719,
+STORE, 140590380822528, 140590380830719,
+STORE, 140590376595456, 140590378713087,
+SNULL, 140590376595456, 140590376611839,
+STORE, 140590376611840, 140590378713087,
+STORE, 140590376595456, 140590376611839,
+SNULL, 140590378704895, 140590378713087,
+STORE, 140590376611840, 140590378704895,
+STORE, 140590378704896, 140590378713087,
+ERASE, 140590378704896, 140590378713087,
+STORE, 140590378704896, 140590378713087,
+STORE, 140590374027264, 140590376595455,
+SNULL, 140590374027264, 140590374494207,
+STORE, 140590374494208, 140590376595455,
+STORE, 140590374027264, 140590374494207,
+SNULL, 140590376587263, 140590376595455,
+STORE, 140590374494208, 140590376587263,
+STORE, 140590376587264, 140590376595455,
+ERASE, 140590376587264, 140590376595455,
+STORE, 140590376587264, 140590376595455,
+STORE, 140590371913728, 140590374027263,
+SNULL, 140590371913728, 140590371926015,
+STORE, 140590371926016, 140590374027263,
+STORE, 140590371913728, 140590371926015,
+SNULL, 140590374019071, 140590374027263,
+STORE, 140590371926016, 140590374019071,
+STORE, 140590374019072, 140590374027263,
+ERASE, 140590374019072, 140590374027263,
+STORE, 140590374019072, 140590374027263,
+STORE, 140590400155648, 140590400180223,
+STORE, 140590400143360, 140590400180223,
+SNULL, 140590384603135, 140590384611327,
+STORE, 140590384586752, 140590384603135,
+STORE, 140590384603136, 140590384611327,
+SNULL, 140590374023167, 140590374027263,
+STORE, 140590374019072, 140590374023167,
+STORE, 140590374023168, 140590374027263,
+SNULL, 140590386823167, 140590386827263,
+STORE, 140590386819072, 140590386823167,
+STORE, 140590386823168, 140590386827263,
+SNULL, 140590376591359, 140590376595455,
+/*
+STORE, 140590376587264, 140590376591359,
+STORE, 140590376591360, 140590376595455,
+*/
+       };
+
+       int cnt = 0;
+       MA_STATE(mas, mt, 0, 0);
+
+       mt_set_non_kernel(3);
+       check_erase2_testset(mt, set, ARRAY_SIZE(set));
+       mtree_destroy(mt);
+
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set2, ARRAY_SIZE(set2));
+       start = 140735933894656;
+       MT_BUG_ON(mt, !!mt_find(mt, &start, 140735933906943UL));
+       mtree_destroy(mt);
+
+       mt_set_non_kernel(2);
+       mtree_init(mt, 0);
+       check_erase2_testset(mt, set3, ARRAY_SIZE(set3));
+       mtree_destroy(mt);
+
+       mtree_init(mt, 0);
+       check_erase2_testset(mt, set4, ARRAY_SIZE(set4));
+       rcu_read_lock();
+       mas_for_each(&mas, entry, ULONG_MAX) {
+               if (mas_retry(&mas, entry))
+                       continue;
+       }
+       rcu_read_unlock();
+       rcu_barrier();
+       mtree_destroy(mt);
+
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       mt_set_non_kernel(100);
+       check_erase2_testset(mt, set5, ARRAY_SIZE(set5));
+       rcu_barrier();
+       mtree_destroy(mt);
+
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set6, ARRAY_SIZE(set6));
+       rcu_barrier();
+       mtree_destroy(mt);
+
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set7, ARRAY_SIZE(set7));
+       rcu_barrier();
+       mtree_destroy(mt);
+
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set8, ARRAY_SIZE(set8));
+       rcu_barrier();
+       mtree_destroy(mt);
+
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set9, ARRAY_SIZE(set9));
+       rcu_barrier();
+       mtree_destroy(mt);
+
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set10, ARRAY_SIZE(set10));
+       rcu_barrier();
+       mtree_destroy(mt);
+
+       mas_reset(&mas);
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set11, ARRAY_SIZE(set11));
+       rcu_barrier();
+       mas_get_unmapped_area_rev(&mas, 12288, 140014592737280, 0x2000);
+       MT_BUG_ON(mt, mas.index != 140014592565248);
+       mtree_destroy(mt);
+
+       mas_reset(&mas);
+       mas.tree = mt;
+       cnt = 0;
+       mas.index = 0;
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set12, ARRAY_SIZE(set12));
+       rcu_barrier();
+       mas_for_each(&mas, entry, ULONG_MAX) {
+               if (mas_retry(&mas, entry))
+                       continue;
+               BUG_ON(cnt > 12);
+               cnt++;
+       }
+       mtree_destroy(mt);
+
+       mas_reset(&mas);
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set13, ARRAY_SIZE(set13));
+       mtree_erase(mt, 140373516443648);
+       rcu_read_lock();
+       mas_get_unmapped_area_rev(&mas, 0, 140373518663680, 4096);
+       rcu_read_unlock();
+       mtree_destroy(mt);
+
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set14, ARRAY_SIZE(set14));
+       rcu_barrier();
+       mtree_destroy(mt);
+
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set15, ARRAY_SIZE(set15));
+       rcu_barrier();
+       mtree_destroy(mt);
+
+       mt_set_non_kernel(99); // set16 was to find a bug on limit updating at slot 0.
+       mas_reset(&mas);
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set16, ARRAY_SIZE(set16));
+       rcu_barrier();
+       mas_get_unmapped_area_rev(&mas, 4096, 139921865637888, 0x6000);
+       MT_BUG_ON(mt, mas.index != 139921865523200);
+       mtree_destroy(mt);
+
+       /* set17 found a bug in walking backwards and not counting nulls at
+        * the end.  This could cause a gap to be missed if the null had any
+        * size.
+        */
+       mt_set_non_kernel(99);
+       mas_reset(&mas);
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set17, ARRAY_SIZE(set17));
+       rcu_barrier();
+       mas_get_unmapped_area_rev(&mas, 4096, 139953197334528, 0x1000);
+       MT_BUG_ON(mt, mas.index != 139953197318144);
+       mtree_destroy(mt);
+
+       /* set18 found a bug in walking backwards and not setting the max from
+        * the node, but using the parent node.  This was only an issue if the
+        * next slot in the parent had what we needed.
+        */
+       mt_set_non_kernel(99);
+       mas_reset(&mas);
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set18, ARRAY_SIZE(set18));
+       rcu_barrier();
+       mas_get_unmapped_area_rev(&mas, 4096, 140222972858368, 2215936);
+       MT_BUG_ON(mt, mas.index != 140222966259712);
+       mtree_destroy(mt);
+
+       /* set19 found 2 bugs in prev.
+        * 1. If we hit root without finding anything, then there was an
+        *    infinite loop.
+        * 2. The first ascending wasn't using the correct slot which may have
+        *    have caused missed entries.
+        */
+       mt_set_non_kernel(99);
+       mas_reset(&mas);
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set19, ARRAY_SIZE(set19));
+       rcu_barrier();
+       mas.index = 140656779083776;
+       entry = mas_find(&mas, ULONG_MAX);
+       MT_BUG_ON(mt, entry != xa_mk_value(140656779083776));
+       entry = mas_prev(&mas, 0);
+       MT_BUG_ON(mt, entry != xa_mk_value(140656766251008));
+       mtree_destroy(mt);
+
+       /* set20 found a bug in mas_may_move_gap due to the slot being
+        * overwritten during the __mas_add operation and setting it to zero.
+        */
+       mt_set_non_kernel(99);
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_erase2_testset(mt, set20, ARRAY_SIZE(set20));
+       rcu_barrier();
+       check_load(mt, 94849009414144, NULL);
+       mtree_destroy(mt);
+}
+
+static noinline void check_alloc_rev_range(struct maple_tree *mt)
+{
+       /* Generated by:
+        * cat /proc/self/maps | awk '{print $1}'|
+        * awk -F "-" '{printf "0x%s, 0x%s, ", $1, $2}'
+        */
+
+       unsigned long range[] = {
+       //      Inclusive     , Exclusive.
+               0x565234af2000, 0x565234af4000,
+               0x565234af4000, 0x565234af9000,
+               0x565234af9000, 0x565234afb000,
+               0x565234afc000, 0x565234afd000,
+               0x565234afd000, 0x565234afe000,
+               0x565235def000, 0x565235e10000,
+               0x7f36d4bfd000, 0x7f36d4ee2000,
+               0x7f36d4ee2000, 0x7f36d4f04000,
+               0x7f36d4f04000, 0x7f36d504c000,
+               0x7f36d504c000, 0x7f36d5098000,
+               0x7f36d5098000, 0x7f36d5099000,
+               0x7f36d5099000, 0x7f36d509d000,
+               0x7f36d509d000, 0x7f36d509f000,
+               0x7f36d509f000, 0x7f36d50a5000,
+               0x7f36d50b9000, 0x7f36d50db000,
+               0x7f36d50db000, 0x7f36d50dc000,
+               0x7f36d50dc000, 0x7f36d50fa000,
+               0x7f36d50fa000, 0x7f36d5102000,
+               0x7f36d5102000, 0x7f36d5103000,
+               0x7f36d5103000, 0x7f36d5104000,
+               0x7f36d5104000, 0x7f36d5105000,
+               0x7fff5876b000, 0x7fff5878d000,
+               0x7fff5878e000, 0x7fff58791000,
+               0x7fff58791000, 0x7fff58793000,
+       };
+
+       unsigned long holes[] = {
+               /*  Note: start of hole is INCLUSIVE
+                *        end of hole is EXCLUSIVE
+                *        (opposite of the above table.)
+                * Start of hole, end of hole,  size of hole (+1)
+                */
+               0x565234afb000, 0x565234afc000, 0x1000,
+               0x565234afe000, 0x565235def000, 0x12F1000,
+               0x565235e10000, 0x7f36d4bfd000, 0x28E49EDED000,
+       };
+
+       /* req_range consists of 4 values.
+        * 1. min index
+        * 2. max index
+        * 3. size
+        * 4. number that should be returned.
+        * 5. return value
+        */
+       unsigned long req_range[] = {
+               0x565234af9000, // Min
+               0x7fff58791000, // Max
+               0x1000,         // Size
+               0x7fff5878d << 12,  // First rev hole of size 0x1000
+               0,              // Return value success.
+
+               0x0,            // Min
+               0x565234AF1 << 12,    // Max
+               0x3000,         // Size
+               0x565234AEE << 12,  // max - 3.
+               0,              // Return value success.
+
+               0x0,            // Min
+               -1,             // Max
+               0x1000,         // Size
+               562949953421311 << 12,// First rev hole of size 0x1000
+               0,              // Return value success.
+
+               0x0,            // Min
+               0x7F36D510A << 12,    // Max
+               0x4000,         // Size
+               0x7F36D5106 << 12,    // First rev hole of size 0x4000
+               0,              // Return value success.
+
+               // Ascend test.
+               0x0,
+               34148798629 << 12,
+               19 << 12,
+               34148797418 << 12,
+               0x0,
+
+               // Too big test.
+               0x0,
+               18446744073709551615UL,
+               562915594369134UL << 12,
+               0x0,
+               -EBUSY,
+
+       };
+
+       int i, range_cnt = ARRAY_SIZE(range);
+       int req_range_cnt = ARRAY_SIZE(req_range);
+       unsigned long min = 0;
+
+       MA_STATE(mas, mt, 0, 0);
+
+
+       for (i = 0; i < range_cnt; i += 2) {
+               /* Inclusive, Inclusive (with the -1) */
+               /*
+               pr_debug("\t%s: Insert %lu-%lu\n", __func__, range[i] >> 12,
+                               (range[i + 1] >> 12) - 1);
+                               */
+               check_insert_range(mt, range[i] >> 12, (range[i + 1] >> 12) - 1,
+                               xa_mk_value(range[i] >> 12), 0);
+               mt_validate(mt);
+       }
+       //printk("Done insert\n");
+
+
+       for (i = 0; i < ARRAY_SIZE(holes); i += 3) {
+               /*
+               pr_debug("Search from %lu-%lu for gap %lu should be at %lu\n",
+                               min, holes[i+1]>>12, holes[i+2]>>12,
+                               holes[i] >> 12);
+                               */
+               MT_BUG_ON(mt, mas_get_unmapped_area_rev(&mas, min,
+                                       holes[i+1] >> 12,
+                                       holes[i+2] >> 12));
+               //printk("Found %lu %lu\n", mas.index, mas.last);
+               //printk("gap %lu %lu\n", (holes[i] >> 12),
+               //              (holes[i+1] >> 12));
+               MT_BUG_ON(mt, mas.last + 1 != (holes[i+1] >> 12));
+               MT_BUG_ON(mt, mas.index != (holes[i+1] >> 12) - (holes[i+2] >> 12));
+               min = holes[i+1] >> 12;
+               mas_reset(&mas);
+       }
+
+       for (i = 0; i < req_range_cnt; i += 5) {
+               /*
+               pr_debug("\tRequest between %lu-%lu size %lu, should get %lu\n",
+                               req_range[i] >> 12,
+                               (req_range[i + 1] >> 12) - 1,
+                               req_range[i+2] >> 12,
+                               req_range[i+3] >> 12);
+                               */
+               check_mtree_alloc_rrange(mt,
+                               req_range[i]   >> 12, // start
+                               req_range[i+1] >> 12, // end
+                               req_range[i+2] >> 12, // size
+                               req_range[i+3] >> 12, // expected address
+                               req_range[i+4],       // expected return
+                               xa_mk_value(req_range[i] >> 12)); // pointer
+               mt_validate(mt);
+       }
+
+       mtree_erase(mt, 34148798727); // create a deleted range.
+       check_mtree_alloc_rrange(mt, 0, 34359052173, 210253414,
+                       34148798725, 0, mt);
+
+       mtree_destroy(mt);
+}
+
+static noinline void check_alloc_range(struct maple_tree *mt)
+{
+       /* Generated by:
+        * cat /proc/self/maps|awk '{print $1}'|
+        * awk -F "-" '{printf "0x%s, 0x%s, ", $1, $2}'
+        */
+
+       unsigned long range[] = {
+       //      Inclusive     , Exclusive.
+               0x565234af2000, 0x565234af4000,
+               0x565234af4000, 0x565234af9000,
+               0x565234af9000, 0x565234afb000,
+               0x565234afc000, 0x565234afd000,
+               0x565234afd000, 0x565234afe000,
+               0x565235def000, 0x565235e10000,
+               0x7f36d4bfd000, 0x7f36d4ee2000,
+               0x7f36d4ee2000, 0x7f36d4f04000,
+               0x7f36d4f04000, 0x7f36d504c000,
+               0x7f36d504c000, 0x7f36d5098000,
+               0x7f36d5098000, 0x7f36d5099000,
+               0x7f36d5099000, 0x7f36d509d000,
+               0x7f36d509d000, 0x7f36d509f000,
+               0x7f36d509f000, 0x7f36d50a5000,
+               0x7f36d50b9000, 0x7f36d50db000,
+               0x7f36d50db000, 0x7f36d50dc000,
+               0x7f36d50dc000, 0x7f36d50fa000,
+               0x7f36d50fa000, 0x7f36d5102000,
+               0x7f36d5102000, 0x7f36d5103000,
+               0x7f36d5103000, 0x7f36d5104000,
+               0x7f36d5104000, 0x7f36d5105000,
+               0x7fff5876b000, 0x7fff5878d000,
+               0x7fff5878e000, 0x7fff58791000,
+               0x7fff58791000, 0x7fff58793000,
+       };
+       unsigned long holes[] = {
+               // Start of hole, end of hole,  size of hole (+1)
+               0x565234afb000, 0x565234afc000, 0x1000,
+               0x565234afe000, 0x565235def000, 0x12F1000,
+               0x565235e10000, 0x7f36d4bfd000, 0x28E49EDED000,
+       };
+
+       /* req_range consists of 4 values.
+        * 1. min index
+        * 2. max index
+        * 3. size
+        * 4. number that should be returned.
+        * 5. return value
+        */
+       unsigned long req_range[] = {
+               0x565234af9000, // Min
+               0x7fff58791000, // Max
+               0x1000,         // Size
+               0x565234afb000, // First hole in our data of size 1000.
+               0,              // Return value success.
+
+               0x0,            // Min
+               0x7fff58791000, // Max
+               0x1F00,         // Size
+               0x0,            // First hole in our data of size 2000.
+               0,              // Return value success.
+
+               // Test ascend.
+               34148797436 << 12, // Min
+               0x7fff587AF000,    // Max
+               0x3000,         // Size
+               34148798629 << 12,             // Expected location
+               0,              // Return value success.
+
+               // Test failing.
+               34148798623 << 12,  // Min
+               34148798683 << 12,  // Max
+               0x15000,            // Size
+               0,             // Expected location
+               -EBUSY,              // Return value failed.
+
+               // Test filling entire gap.
+               34148798623 << 12,  // Min
+               0x7fff587AF000,    // Max
+               0x10000,           // Size
+               34148798632 << 12,             // Expected location
+               0,              // Return value success.
+
+               // Test walking off the end of root.
+               0,                  // Min
+               -1,                 // Max
+               -1,                 // Size
+               0,                  // Expected location
+               -EBUSY,             // Return value failure.
+
+               // Test looking for too large a hole across entire range.
+               0,                  // Min
+               -1,                 // Max
+               4503599618982063UL << 12,  // Size
+               34359052178 << 12,  // Expected location
+               -EBUSY,             // Return failure.
+       };
+       int i, range_cnt = ARRAY_SIZE(range);
+       int req_range_cnt = ARRAY_SIZE(req_range);
+
+       for (i = 0; i < range_cnt; i += 2) {
+               /*
+               pr_debug("\tInsert %lu-%lu\n", range[i] >> 12,
+                        (range[i + 1] >> 12) - 1);
+                        */
+               check_insert_range(mt, range[i] >> 12, (range[i + 1] >> 12) - 1,
+                               xa_mk_value(range[i] >> 12), 0);
+               mt_validate(mt);
+       }
+       //printk("Checking stuff now\n\n");
+
+
+       MA_STATE(mas, mt, 0, 0);
+       unsigned long min = 0x565234af2000;
+       for (i = 0; i < ARRAY_SIZE(holes); i+= 3) {
+//             printk("\t check gap %i\n", i/3);
+               MT_BUG_ON(mt, mas_get_unmapped_area(&mas, min >> 12,
+                                       holes[i+1] >> 12,
+                                       holes[i+2] >> 12));
+               MT_BUG_ON(mt, mas.index != holes[i] >> 12);
+               min = holes[i+1];
+               mas_reset(&mas);
+       }
+       for (i = 0; i < req_range_cnt; i += 5) {
+#if 0
+               pr_debug("\tTest %d: %lu-%lu size %lu expected %lu\n", i/5,
+                               req_range[i]   >> 12,
+                               req_range[i + 1]   >> 12,
+                               req_range[i + 2]   >> 12,
+                               req_range[i + 3]   >> 12);
+#endif                         
+               check_mtree_alloc_range(mt,
+                               req_range[i]   >> 12, // start
+                               req_range[i+1] >> 12, // end
+                               req_range[i+2] >> 12, // size
+                               req_range[i+3] >> 12, // expected address
+                               req_range[i+4],       // expected return
+                               xa_mk_value(req_range[i] >> 12)); // pointer
+               mt_validate(mt);
+       }
+
+       mtree_destroy(mt);
+}
+
+static noinline void check_ranges(struct maple_tree *mt)
+{
+       unsigned long r[] = {
+               10, 15,
+               20, 25,
+               17, 22, // Overlaps previous range.
+               9, 1000, // Huge.
+               100, 200,
+               45, 168,
+                       };
+
+       MT_BUG_ON(mt, !mtree_empty(mt));
+       check_insert_range(mt, r[0], r[1], xa_mk_value(r[0]), 0);
+       check_insert_range(mt, r[2], r[3], xa_mk_value(r[2]), 0);
+       check_insert_range(mt, r[4], r[5], xa_mk_value(r[4]), -EEXIST);
+       // Store
+       check_store_range(mt, r[4], r[5], xa_mk_value(r[4]), 0);
+       check_store_range(mt, r[6], r[7], xa_mk_value(r[6]), 0);
+       check_store_range(mt, r[8], r[9], xa_mk_value(r[8]), 0);
+       mtree_destroy(mt);
+
+       check_seq(mt, 50, false);
+       mt_set_non_kernel(4);
+       check_store_range(mt, 5, 47,  xa_mk_value(47), 0);
+       mtree_destroy(mt);
+
+       // Create tree of 1-100
+       check_seq(mt, 100, false);
+       // Store 45-168
+       mt_set_non_kernel(10);
+       check_store_range(mt, r[10], r[11], xa_mk_value(r[10]), 0);
+       mtree_destroy(mt);
+//     rcu_barrier();
+
+       // Create tree of 1-200
+       check_seq(mt, 200, false);
+       // Store 45-168
+       //check_store_range(mt, r[10], r[11], xa_mk_value(r[10]), 0);
+       mtree_destroy(mt);
+
+       check_seq(mt, 30, false);
+       check_store_range(mt, 6, 18, xa_mk_value(6), 0);
+
+
+       // Interesting cases:
+       // 1. Overwrite the end of a node and end in the first entry of the next
+       // node.
+       // 2. Split a single range
+       // 3. Overwrite the start of a range
+       // 4. Overwrite the end of a range
+       // 5. Overwrite the entire range
+       // 6. Overwrite a range that causes multiple parent nodes to be
+       // combined
+       // 7. Overwrite a range that causes multiple parent nodes and part of
+       // root to be combined
+       // 8. Overwrite the whole tree
+       // 9. Try to overwrite the zero entry of an alloc tree.
+       // 10. Write a range larger than a nodes current pivot
+       mtree_destroy(mt);
+}
+
+static noinline void check_next_entry(struct maple_tree *mt)
+{
+       void *entry = NULL;
+       unsigned long limit = 30, i = 0;
+       MT_BUG_ON(mt, !mtree_empty(mt));
+       MA_STATE(mas, mt, i, i);
+
+       check_seq(mt, limit, false);
+       rcu_read_lock();
+
+       for (;i <= limit + 1; i++) {
+               entry = mas_next(&mas, limit);
+               if (i > limit)
+                       MT_BUG_ON(mt, entry != NULL);
+               else
+                       MT_BUG_ON(mt, xa_mk_value(i) != entry);
+               mas.index = mas.max = i;
+       }
+       rcu_read_unlock();
+       mtree_destroy(mt);
+}
+
+static noinline void check_prev_entry(struct maple_tree *mt)
+{
+       unsigned long index = 16;
+       void *value;
+       MA_STATE(mas, mt, index, index);
+
+       MT_BUG_ON(mt, !mtree_empty(mt));
+       check_seq(mt, 30, false);
+
+       rcu_read_lock();
+       value = mas_find(&mas, ULONG_MAX);
+       MT_BUG_ON(mt, value != xa_mk_value(index));
+       value = mas_prev(&mas, 0);
+       MT_BUG_ON(mt, value != xa_mk_value(index - 1));
+       rcu_read_unlock();
+       mtree_destroy(mt);
+
+}
+static noinline void check_gap_combining(struct maple_tree *mt)
+{
+       struct maple_enode *mn1, *mn2;
+       void *entry;
+       unsigned long index = 86;
+
+       MA_STATE(mas, mt, index, index);
+
+       MT_BUG_ON(mt, !mtree_empty(mt));
+       check_seq(mt, 100, false); // create 100 singletons.
+
+       mtree_test_erase(mt, 88);
+       check_load(mt, 88, NULL);
+       mtree_test_erase(mt, 87);
+       check_load(mt, 87, NULL);
+
+       rcu_read_lock();
+       entry = mas_find(&mas, ULONG_MAX);
+       MT_BUG_ON(mt, entry != xa_mk_value(index));
+       mn1 = mas.node;
+       entry = mas_next(&mas, ULONG_MAX);
+       MT_BUG_ON(mt, entry != xa_mk_value(index + 3));
+       mn2 = mas.node;
+       MT_BUG_ON(mt, mn1 == mn2);
+
+       // At this point, there is a gap of 2 in either 1 or 2 nodes.  Find a
+       // gap of size 2 from 100 down to 50.
+       mas_reset(&mas);
+       MT_BUG_ON(mt, mas_get_unmapped_area_rev(&mas, 50, 100, 2));
+       MT_BUG_ON(mt, mas.index != 87);
+       rcu_read_unlock();
+
+       mtree_test_erase(mt, 38);
+       check_load(mt, 38, NULL);
+       mtree_test_erase(mt, 39);
+       check_load(mt, 39, NULL);
+       mtree_test_erase(mt, 40);
+       index = 37;
+
+       rcu_read_lock();
+       mas.index = index;
+       mas.last = index;
+       mas_reset(&mas);
+       entry = mas_find(&mas, ULONG_MAX);
+       MT_BUG_ON(mt, entry != xa_mk_value(index));
+       mn1 = mas.node;
+       entry = mas_next(&mas, ULONG_MAX);
+       MT_BUG_ON(mt, entry != xa_mk_value(index + 4));
+       mn2 = mas.node;
+       MT_BUG_ON(mt, mn1 == mn2);
+
+       // At this point, there is a gap of 2 in either 1 or 2 nodes.  Find a
+       // gap of size 2 from 100 down to 50.
+       mas_reset(&mas);
+       MT_BUG_ON(mt, mas_get_unmapped_area_rev(&mas, 20, 50, 3));
+       MT_BUG_ON(mt, mas.index != 38);
+       rcu_read_unlock();
+
+       mtree_store(mt, 79, NULL, GFP_KERNEL);
+       check_load(mt, 79, NULL);
+       check_load(mt, 80, xa_mk_value(80));
+       mtree_store(mt, 80, NULL, GFP_KERNEL);
+       check_load(mt, 79, NULL);
+       check_load(mt, 80, NULL);
+
+       mas_reset(&mas);
+       rcu_read_lock();
+       MT_BUG_ON(mt, mas_get_unmapped_area_rev(&mas, 76, 81, 2));
+       MT_BUG_ON(mt, mas.index != 79);
+       mt_validate(mt);
+       rcu_read_unlock();
+
+       // Test retry entry in the start of a gap.
+       mtree_test_store_range(mt, 78, 80, NULL);
+       mtree_test_erase(mt, 81);
+       mas_reset(&mas);
+       rcu_read_lock();
+       MT_BUG_ON(mt, mas_get_unmapped_area_rev(&mas, 76, 85, 4));
+       rcu_read_unlock();
+       MT_BUG_ON(mt, mas.index != 78);
+       mt_validate(mt);
+
+       mtree_destroy(mt);
+       mtree_init(mt, MAPLE_ALLOC_RANGE);
+       check_seq(mt, 2000, false);
+       mtree_test_erase(mt, 1792);
+       mtree_test_erase(mt, 1791);
+
+       mas_reset(&mas);
+       rcu_read_lock();
+       MT_BUG_ON(mt, mas_get_unmapped_area_rev(&mas, 1700, 1800, 2));
+       MT_BUG_ON(mt, mas.index != 1791);
+       rcu_read_unlock();
+       mt_validate(mt);
+       mtree_destroy(mt);
+
+}
+
+
+static DEFINE_MTREE(tree);
+
+static int maple_tree_seed(void)
+{
+       unsigned long set[] = {5015, 5014, 5017, 25, 1000,
+                              1001, 1002, 1003, 1005, 0,
+                              5003, 5002};
+       void *ptr = &set;
+
+       pr_info("\nTEST STARTING\n\n");
+
+       mtree_init(&tree, 0);
+       check_new_node(&tree);
+       mtree_destroy(&tree);
+
+       /* Test ranges (store and insert) */
+       mtree_init(&tree, 0);
+       check_ranges(&tree);
+       mtree_destroy(&tree);
+
+       mtree_init(&tree, MAPLE_ALLOC_RANGE);
+       check_alloc_range(&tree);
+       mtree_destroy(&tree);
+
+       mtree_init(&tree, MAPLE_ALLOC_RANGE);
+       check_alloc_rev_range(&tree);
+       mtree_destroy(&tree);
+
+       mtree_init(&tree, 0);
+
+       check_load(&tree, set[0], NULL);       // See if 5015 -> NULL
+
+       check_insert(&tree, set[9], &tree);     // Insert 0
+       check_load(&tree, set[9], &tree);       // See if 0 -> &tree
+       check_load(&tree, set[0], NULL);       // See if 5015 -> NULL
+
+       check_insert(&tree, set[10], ptr);      // Insert 5003
+       check_load(&tree, set[9], &tree);       // See if 0 -> &tree
+       check_load(&tree, set[11], NULL);       // See if 5002 -> NULL
+       check_load(&tree, set[10], ptr);       // See if 5003 -> ptr
+
+       /* Clear out the tree */
+       mtree_destroy(&tree);
+
+       /* Try to insert, insert a dup, and load back what was inserted. */
+       mtree_init(&tree, 0);
+       check_insert(&tree, set[0], &tree);     // Insert 5015
+       check_dup_insert(&tree, set[0], &tree); // Insert 5015 again
+       check_load(&tree, set[0], &tree);       // See if 5015 -> &tree
+
+       /* Second set of tests try to load a value that doesn't exist, inserts
+        * a second value, then loads the value again
+        */
+       check_load(&tree, set[1], NULL);        // See if 5014 -> NULL
+       check_insert(&tree, set[1], ptr);       // insert 5014 -> ptr
+       check_load(&tree, set[1], ptr);         // See if 5014 -> ptr
+       check_load(&tree, set[0], &tree);       // See if 5015 -> &tree
+       /* Tree currently contains:
+        * p[0]: 14 -> (nil) p[1]: 15 -> ptr p[2]: 16 -> &tree p[3]: 0 -> (nil)
+        */
+       check_insert(&tree, set[6], ptr);       // insert 1002 -> ptr
+       check_insert(&tree, set[7], &tree);       // insert 1003 -> &tree
+
+       check_load(&tree, set[0], &tree);       // See if 5015 -> &tree
+       check_load(&tree, set[1], ptr);         // See if 5014 -> ptr
+       check_load(&tree, set[6], ptr);         // See if 1002 -> ptr
+       check_load(&tree, set[7], &tree);       // 1003 = &tree ?
+
+       /* Clear out tree */
+       mtree_destroy(&tree);
+
+       mtree_init(&tree, 0);
+       /* Test inserting into a NULL hole. */
+       check_insert(&tree, set[5], ptr);       // insert 1001 -> ptr
+       check_insert(&tree, set[7], &tree);       // insert 1003 -> &tree
+       check_insert(&tree, set[6], ptr);       // insert 1002 -> ptr
+       check_load(&tree, set[5], ptr);         // See if 1001 -> ptr
+       check_load(&tree, set[6], ptr);         // See if 1002 -> ptr
+       check_load(&tree, set[7], &tree);       // See if 1003 -> &tree
+
+       /* Clear out the tree */
+       mtree_destroy(&tree);
+       mtree_init(&tree, 0);
+       check_erase_testset(&tree);
+       mtree_destroy(&tree);
+
+       mtree_init(&tree, 0);
+/*
+ *       set[] = {5015, 5014, 5017, 25, 1000,
+ *               1001, 1002, 1003, 1005, 0,
+ *               5003, 5002};
+ */
+
+       check_insert(&tree, set[0], ptr); // 5015
+       check_insert(&tree, set[1], &tree); // 5014
+       check_insert(&tree, set[2], ptr); // 5017
+       check_insert(&tree, set[3], &tree); // 25
+       check_load(&tree, set[0], ptr);
+       check_load(&tree, set[1], &tree);
+       check_load(&tree, set[2], ptr);
+       check_load(&tree, set[3], &tree);
+       check_insert(&tree, set[4], ptr); // 1000 < Should split.
+       check_load(&tree, set[0], ptr);
+       check_load(&tree, set[1], &tree);
+       check_load(&tree, set[2], ptr);
+       check_load(&tree, set[3], &tree); //25
+       check_load(&tree, set[4], ptr);
+       check_insert(&tree, set[5], &tree); // 1001
+       check_load(&tree, set[0], ptr);
+       check_load(&tree, set[1], &tree);
+       check_load(&tree, set[2], ptr);
+       check_load(&tree, set[3], &tree);
+       check_load(&tree, set[4], ptr);
+       check_load(&tree, set[5], &tree);
+       check_insert(&tree, set[6], ptr);
+       check_load(&tree, set[0], ptr);
+       check_load(&tree, set[1], &tree);
+       check_load(&tree, set[2], ptr);
+       check_load(&tree, set[3], &tree);
+       check_load(&tree, set[4], ptr);
+       check_load(&tree, set[5], &tree);
+       check_load(&tree, set[6], ptr);
+       check_insert(&tree, set[7], &tree);
+       check_load(&tree, set[0], ptr);
+       check_insert(&tree, set[8], ptr);
+
+       check_insert(&tree, set[9], &tree);
+
+       check_load(&tree, set[0], ptr);
+       check_load(&tree, set[1], &tree);
+       check_load(&tree, set[2], ptr);
+       check_load(&tree, set[3], &tree);
+       check_load(&tree, set[4], ptr);
+       check_load(&tree, set[5], &tree);
+       check_load(&tree, set[6], ptr);
+       check_load(&tree, set[9], &tree);
+       mtree_destroy(&tree);
+
+       check_nomem(&tree);
+       check_seq(&tree, 16, false);
+       mtree_destroy(&tree);
+       check_seq(&tree, 1000, true);
+       mtree_destroy(&tree);
+
+       check_lower_bound_split(&tree);
+       check_upper_bound_split(&tree);
+       check_mid_split(&tree);
+
+       mtree_init(&tree, 0);
+       check_next_entry(&tree);
+       check_find(&tree);
+       check_find_2(&tree);
+       mtree_destroy(&tree);
+
+
+       mtree_init(&tree, MAPLE_ALLOC_RANGE);
+       check_prev_entry(&tree);
+
+       mtree_init(&tree, 0);
+       check_erase2_sets(&tree);
+       mtree_destroy(&tree);
+
+       mtree_init(&tree, MAPLE_ALLOC_RANGE);
+       check_gap_combining(&tree);
+       mtree_destroy(&tree);
+
+       rcu_barrier();
+       pr_info("maple_tree: %u of %u tests passed\n", maple_tree_tests_passed,
+                       maple_tree_tests_run);
+       return (maple_tree_tests_run == maple_tree_tests_passed) ? 0 : -EINVAL;
+}
+
+static void maple_tree_harvest(void)
+{
+
+}
+
+module_init(maple_tree_seed);
+module_exit(maple_tree_harvest);
+MODULE_AUTHOR("Liam R. Howlett <Liam.Howlett@Oracle.com>");
+MODULE_LICENSE("GPL");
index 3834899b6693764a142fbf4698bfe20b9691383a..85216f7d7b1527f68c1b65987a2f82d4aa67ceaf 100644 (file)
@@ -5,3 +5,5 @@ main
 multiorder
 radix-tree.c
 xarray
+maple
+ma_xa_benchmark
index 397d6b612502de8c13b6f4862e5b642d25f37ee1..018f7c3426fa86ab42b58d9d2a08cf2901b2b17c 100644 (file)
@@ -4,8 +4,8 @@ CFLAGS += -I. -I../../include -g -Og -Wall -D_LGPL_SOURCE -fsanitize=address \
          -fsanitize=undefined
 LDFLAGS += -fsanitize=address -fsanitize=undefined
 LDLIBS+= -lpthread -lurcu
-TARGETS = main idr-test multiorder xarray
-CORE_OFILES := xarray.o radix-tree.o idr.o linux.o test.o find_bit.o bitmap.o
+TARGETS = main idr-test multiorder xarray maple ma_xa_benchmark
+CORE_OFILES := xarray.o radix-tree.o idr.o linux.o test.o find_bit.o bitmap.o maple.o
 OFILES = main.o $(CORE_OFILES) regression1.o regression2.o regression3.o \
         regression4.o \
         tag_check.o multiorder.o idr-test.o iteration_check.o benchmark.o
@@ -28,6 +28,10 @@ idr-test: idr-test.o $(CORE_OFILES)
 
 xarray: $(CORE_OFILES)
 
+maple: $(CORE_OFILES)
+
+ma_xa_benchmark: ma_xa_benchmark.o $(CORE_OFILES)
+
 multiorder: multiorder.o $(CORE_OFILES)
 
 clean:
@@ -39,6 +43,7 @@ $(OFILES): Makefile *.h */*.h generated/map-shift.h \
        ../../include/linux/*.h \
        ../../include/asm/*.h \
        ../../../include/linux/xarray.h \
+       ../../../include/linux/maple_tree.h \
        ../../../include/linux/radix-tree.h \
        ../../../include/linux/idr.h
 
@@ -50,6 +55,10 @@ idr.c: ../../../lib/idr.c
 
 xarray.o: ../../../lib/xarray.c ../../../lib/test_xarray.c
 
+maple.o: ../../../lib/maple_tree.c ../../../lib/test_maple_tree.c
+
+ma_xa_benchmark.o:
+
 generated/map-shift.h:
        @if ! grep -qws $(SHIFT) generated/map-shift.h; then            \
                echo "#define XA_CHUNK_SHIFT $(SHIFT)" >                \
diff --git a/tools/testing/radix-tree/linux/maple_tree.h b/tools/testing/radix-tree/linux/maple_tree.h
new file mode 100644 (file)
index 0000000..dbf00f3
--- /dev/null
@@ -0,0 +1 @@
+#include "../../../../include/linux/maple_tree.h"
diff --git a/tools/testing/radix-tree/ma_xa_benchmark.c b/tools/testing/radix-tree/ma_xa_benchmark.c
new file mode 100644 (file)
index 0000000..1f7a0c7
--- /dev/null
@@ -0,0 +1,95 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * ma_rdx_time.c: userspace time test of maple tree and radix tree.
+ * Copyright (c) 2019 Liam R. Howlett <Liam.Howlett@Oracle.com>
+ */
+
+#define CONFIG_DEBUG_MAPLE_TREE
+#define XA_DEBUG
+#include "test.h"
+#include <time.h>
+#include <sys/resource.h>
+
+#define module_init(x)
+#define module_exit(x)
+#define MODULE_AUTHOR(x)
+#define MODULE_LICENSE(x)
+#define dump_stack()   assert(0)
+
+#include <linux/maple_tree.h>
+#include <linux/xarray.h>
+
+extern unsigned long kmem_cache_get_alloc(struct kmem_cache *);
+extern struct kmem_cache *radix_tree_node_cachep;
+unsigned long xa_get_alloc_size(void)
+{
+       return kmem_cache_get_alloc(radix_tree_node_cachep);
+}
+
+extern unsigned long mt_get_alloc_size(void);
+
+int __weak main(void)
+{
+       clock_t start, end;
+       double xa_t = 0, mt_t;
+       unsigned long xa_m = 0, mt_m;
+       void *entry = &main;
+       unsigned long i, max = 200000;
+       struct rusage sru, eru;
+
+       /*  xarray first */
+       radix_tree_init();
+       DEFINE_XARRAY(xa);
+
+       getrusage(RUSAGE_SELF, &sru);
+       for (i = 0; i <= max; i++) {
+               xa_store(&xa, i, entry, GFP_KERNEL);
+       }
+       getrusage(RUSAGE_SELF, &eru);
+
+       start = sru.ru_utime.tv_usec + sru.ru_utime.tv_sec * 1000000;
+       end = eru.ru_utime.tv_usec + eru.ru_utime.tv_sec * 1000000;
+       for (i = 0; i <= max; i++) {
+               BUG_ON(entry != xa_load(&xa, i));
+       }
+       rcu_barrier();
+       xa_t = ((double) (end - start)) / 1000000;
+       xa_m = xa_get_alloc_size();
+       printk("xa %lu inserts: %fs using %luK in %d allocations\n",
+               max, xa_t, xa_m/1024, nr_allocated);
+
+
+       xa_destroy(&xa);
+       radix_tree_cpu_dead(1);
+       rcu_barrier();
+       BUG_ON(nr_allocated);
+
+       /* Maple Tree tests*/
+       maple_tree_init();
+       DEFINE_MTREE(mt);
+       getrusage(RUSAGE_SELF, &sru);
+       for (i = 0; i <= max; i++) {
+               mtree_insert(&mt, i, entry, GFP_KERNEL);
+       }
+
+       getrusage(RUSAGE_SELF, &eru);
+       start = sru.ru_utime.tv_usec + sru.ru_utime.tv_sec * 1000000;
+       end = eru.ru_utime.tv_usec + eru.ru_utime.tv_sec * 1000000;
+       for (i = 0; i <= max; i++) {
+               BUG_ON(entry != mtree_load(&mt, i));
+       }
+
+       rcu_barrier();
+       mt_t = ((double) (end - start))/1000000;
+       mt_m = mt_get_alloc_size();
+       printk("mt %lu inserts: %fs using %luK in %d allocations\n",
+               max, mt_t, mt_m/1024, nr_allocated);
+       mtree_destroy(&mt);
+       rcu_barrier();
+       printk(" Delta : %f seconds (%f%% of xa time) %ldK\n",
+               mt_t - xa_t, mt_t/xa_t * 100,
+               (signed long)(mt_m - xa_m)/1024);
+       rcu_barrier();
+       BUG_ON(nr_allocated);
+       return 0;
+}
diff --git a/tools/testing/radix-tree/maple.c b/tools/testing/radix-tree/maple.c
new file mode 100644 (file)
index 0000000..f4a05b4
--- /dev/null
@@ -0,0 +1,58 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * maple_tree.c: Userspace shim for maple tree test-suite
+ * Copyright (c) 2018 Liam R. Howlett <Liam.Howlett@Oracle.com>
+ */
+
+#define CONFIG_DEBUG_MAPLE_TREE
+#include "test.h"
+
+#define module_init(x)
+#define module_exit(x)
+#define MODULE_AUTHOR(x)
+#define MODULE_LICENSE(x)
+#define dump_stack()   assert(0)
+
+#include "../../../lib/maple_tree.c"
+#undef CONFIG_DEBUG_MAPLE_TREE
+#include "../../../lib/test_maple_tree.c"
+
+void farmer_tests(void)
+{
+       struct maple_node *node;
+       DEFINE_MTREE(tree);
+
+       mt_dump(&tree);
+
+       tree.ma_root = xa_mk_value(0);
+       mt_dump(&tree);
+
+       node = mt_alloc_one(GFP_KERNEL);
+       node->parent = (void *)((unsigned long)(&tree) | 1);
+       node->slot[0] = xa_mk_value(0);
+       node->slot[1] = xa_mk_value(1);
+       node->mr64.pivot[0] = 0;
+       node->mr64.pivot[1] = 1;
+       node->mr64.pivot[2] = 0;
+       tree.ma_root = mt_mk_node(node, maple_leaf_64);
+       mt_dump(&tree);
+
+       ma_free(node);
+}
+
+void maple_tree_tests(void)
+{
+       farmer_tests();
+       maple_tree_seed();
+       maple_tree_harvest();
+}
+
+int __weak main(void)
+{
+       maple_tree_init();
+       maple_tree_tests();
+       rcu_barrier();
+       if (nr_allocated)
+               printf("nr_allocated = %d\n", nr_allocated);
+       return 0;
+}