             (nil? n)
             (if (<= cnt 8)
               (pack-array-node inode idx)
-              (ArrayNode. (dec cnt) (clone-and-set arr idx n)))
+              (ArrayNode. nil (dec cnt) (clone-and-set arr idx n)))
 
             :else
-            (ArrayNode. cnt (clone-and-set arr idx n))))
+            (ArrayNode. nil cnt (clone-and-set arr idx n))))
         inode)))
 
   (inode-find [inode shift hash key]

          (recur (+ i 2)))
        -1))))

(deftype HashCollisionNode [__hash cnt arr]
  Object
  (inode-assoc [inode shift hash key val added-leaf?]
    (if (== hash __hash)

            (aset new-arr len key)
            (aset new-arr (inc len) val)
            (aset added-leaf? 0 true)
            (HashCollisionNode. nil __hash (inc cnt) new-arr))
          (if (= (aget arr idx) val)
            inode
            (HashCollisionNode. nil __hash cnt (clone-and-set arr (inc idx) val)))))
      (.inode-assoc (BitmapIndexedNode. nil (bitpos __hash shift) (array nil inode))
                    shift hash key val added-leaf?)))

  (inode-without [inode shift hash key]
    (let [idx (hash-collision-node-find-index arr cnt key)]
      (cond (== idx -1) inode
            (== cnt 1)  nil
            :else (HashCollisionNode. nil __hash (dec cnt) (remove-pair arr (quot idx 2))))))

  (inode-find [inode shift hash key]
    (let [idx (hash-collision-node-find-index arr cnt key)]
