   # leaf pages to get branch values.
 
   cursor: (exclusive, _) ->
-    @shared.push page = @io.lock 0, false, false, _
+    @locks.push page = @io.lock 0, false, false, _
 
     first = true
     while not page.penultimate

  constructor: (@strata, @object, @key, @operation) ->
    @io         = @strata._io
    @options    = @strata._io.options

    { @extractor, @comparator } = @options


    index = @io.find page, @key, 1, _
    index = ~index if index < 0
    first and= index is 0

    page = @io.lock page.addresses[index], exclusive, true, _
    index = @io.find page, @key, 0, _
    index = ~index if not (found = index >= 0)

    cursor = if exclusive then Mutator else Iterator
    cursor = new cursor(@io, page, index, @key, found, first, exclusive)

    @io.unlock page for page in @locks

    cursor

  key: (key) ->
    { io } = @
    (page, _) -> io.find page, key, 1, _

  iterate: (page) ->
    @first = false

  upgrade: (page) ->

  leftMost: (page) -> page.addresses[0]

  descend: (exclusive, next, stop, _) ->
    page @lock @address, exclusive, 
    @locks.push page = @io.lock 0, false, false, _

    while not (page.penultimate or stop(page))
      index = next page, _
      index = ~index if index < 0
      @first and= index is 0
      page = @io.lock 0, false, false, _

    index = @io.find page, @key, 1, _
    index = ~index if index < 0
    @first and= index is 0

    page = @io.lock page.addresses[index], exclusive, true, _
    index = @io.find page, @key, 0, _
