anchor.diff:        while (8 < announcedNode.length) {
           announcedNode.removeAt(10);
         }
  -      for(KAnnounceInfo i in announcedNode) {
  +      for (KAnnounceInfo i in announcedNode) {
           node.sendAnnouncePeerQuery(i.ipAsString, i.port, 1, _infoHashId.id, i.token.id);
         }
       }
  
positive.code:   stop(KNode node) {
      _isStart = false;
    }
    maintenance(KNode node) {;}
  
    startSearchPeer(KNode node, KId infoHash) {
      ;
    }
  
    stopSearchPeer(KNode node, KId infoHash) {
      ;
    }
  
    onTicket(KNode node) {
      for(KNodeAIAnnounceTask t in taskList) {
        t.onTicket(node);
      }
    }
  
    onReceiveQuery(KNode node, HetiReceiveUdpInfo info, KrpcQuery query) {
      for(KNodeAIAnnounceTask t in taskList) {
        t.onReceiveQuery(node, info, query);
      }
    }
    onReceiveResponse(KNode node, HetiReceiveUdpInfo info, KrpcResponse response) {
      for(KNodeAIAnnounceTask t in taskList) {
        t.onReceiveResponse(node, info, response);
      }
    }
    
    onReceiveError(KNode node, HetiReceiveUdpInfo info, KrpcError message) {
      for(KNodeAIAnnounceTask t in taskList) {
        t.onReceiveError(node, info, message);
      }
    }
  
    onReceiveUnknown(KNode node, HetiReceiveUdpInfo info, KrpcMessage message) {
      for(KNodeAIAnnounceTask t in taskList) {
        t.onReceiveUnknown(node, info, message);
      }
    }
  }
  
  
  class KNodeAIAnnounceTask {
    bool _isStart = false;
  
negative.code:       announcedNode.sort((KAnnounceInfo a, KAnnounceInfo b) {
          if (a.infoHash == b.infoHash) {
            return 0;
          } else if (a.infoHash.xor(_infoHashId) > b.infoHash.xor(_infoHashId)) {
            return 1;
          } else {
            return -1;
  