anchor.diff:     * `navKeys` parameter used to construct this object.
      */
     Stream<int> get navStream {
  -    if (_navStream == null) {
  -      _navStream = rawKeyCombinedStream.where((key) {
  +    return _streamMemos.putIfAbsent("nav", () {
  +      return rawKeyCombinedStream.where((key) {
           return key.type == KEY_DOWN && navKeys.containsKey(key.keyCode);
         }).map((key) => navKeys[key.keyCode]);
  -    }
  -
  -    return _navStream;
  +    });
     }
   
   
  
positive.code:    * such that they are prefixed by their modifiers.
     */
    Stream<String> get hotKeyStream {
      if (_hotKeyStream == null) {
        var hotKeyTransformer = new StreamTransformer(handleData: (KeyEvent key, sink) {
          var hk = '';
  
          if (key.type == KEY_UP) {
            if (key.altKey) {
              hk += 'alt+';
            }
            if (key.altGraphKey) {
              hk += 'altgr+';
            }
            if (key.ctrlKey) {
              hk += 'ctrl+';
            }
            if (key.metaKey) {
              hk += 'meta+';
            }
            if (key.shiftKey) {
              hk += 'shift+';
            }
  
            if (hk.length > 0) {
              if ((
                  key.keyCode >= 'A'.codeUnitAt(0)
                  && key.keyCode <= 'Z'.codeUnitAt(0)
                ) ||
                (
                  key.keyCode >= '0'.codeUnitAt(0)
                  && key.keyCode <= '9'.codeUnitAt(0)
                )
               ) {
                hk += new String.fromCharCode(key.keyCode);
              } else if (_COMBO_KEYS.containsKey(key.keyCode)) {
                hk += _COMBO_KEYS[key.keyCode];
              }
            }
  
            if (_SPECIAL_KEYS.containsKey(key.keyCode)) {
              hk += _SPECIAL_KEYS[key.keyCode];
            } else if (!allowShiftOnlyHotKeys && hk.startsWith('shift+')) {
              hk = '';
            }
  
            if (hk.length > 0 && !hk.endsWith('+')) {
              sink.add(hk);
            }
          }
        });
  
        _hotKeyStream = rawKeyCombinedStream.transform(hotKeyTransformer);
      }
  
      return _hotKeyStream;
    }
  
  }
  
negative.code:    * in the constructor
     */
    Stream<String> get keyStream {
      return _streamMemos.putIfAbsent("key", () {
        return rawKeyCombinedStream.where((key) {
          return (key.type == KEY_PRESS && !key.ctrlKey
              && ( !key.altKey || (allowAltKeyPress && key.altKey))
              && (allowEnterKeyPress || !_ENTER_KEYS.contains(key.keyCode)));
        }).map((key) => new String.fromCharCode(key.charCode));
      });
    }
  
    /**
  