anchor.diff:    ..close().forEach((int s) => stateTokenBuffer.write(s.toRadixString(16)));
     String stateToken = stateTokenBuffer.toString();
     return stateToken;
  +}
  +
  +/**
  + * Simple OAuth2 class for making requests and storing credentials in memory.
  + */
  +class SimpleOAuth2 implements console_auth.OAuth2Console {
  +  final Logger logger = new Logger("SimpleOAuth2");
  +
  +  /// The URL from which the pub client will request an access token once it's
  +  /// been authorized by the user.
  +  Uri _tokenEndpoint = Uri.parse('https://accounts.google.com/o/oauth2/token');
  +  Uri get tokenEndpoint => _tokenEndpoint;
  +
  +  console_auth.Credentials _credentials;
  +  console_auth.Credentials get credentials => _credentials;
  +  void set credentials(value) {
  +    _credentials = value;
  +  }
  +  console_auth.SystemCache _systemCache;
  +  console_auth.SystemCache get systemCache => _systemCache;
  +
  +  void clearCredentials(console_auth.SystemCache cache) {
  +    logger.fine("clearCredentials(console_auth.SystemCache $cache)");
  +  }
  +
  +  Future withClient(Future fn(console_auth.Client client)) {
  +    logger.fine("withClient(Future ${fn}(console_auth.Client client))");
  +    console_auth.Client _httpClient = new console_auth.Client(CLIENT_ID, CLIENT_SECRET, _credentials);
  +    return fn(_httpClient);
  +  }
  +
  +  void close() {
  +    logger.fine("close()");
  +  }
   }
positive.code:   db.init(dbUrl)
    .then((_) {
      serverLogger.fine('DB connected, now starting up web server');
      return start(public: 'web', host: '0.0.0.0', port: port).then((app) {
        serverLogger.fine('HTTP server started');
        app.get('/games/:id').listen(getGame);
        app.post('/games').listen(createGame);
        // /index.html hanlders
        app.get('/').listen(getIndex);
        app.get('/index').listen(getIndex);
        app.get('/index.html').listen(getIndex);
      });
    })
    .catchError((e) => serverLogger.fine("error: $e"));
  }
  
  getIndex(Request req) {
    serverLogger.fine("getIndex");
  
  }
  
  getGame(Request req) {
    var id = req.params['id'];
    db.load(id, 'game').then((Map row) {
      if (row == null) {
        req.response.status(HttpStatus.NOT_FOUND);
        req.response.close();
      } else {
        req.response.json(row);
      }
    });
  }
  
  createGame(Request req) {
    HttpBodyHandler.processRequest(req.input)
      .then((HttpBody body) {
  
      })
      .catchError((e) {
        req.response
            ..status(500)
            ..close();
      });
  }
  
  //createCat(Request req, Response res) {
  //  HttpBodyHandler.processRequest(req.input)
  
negative.code: library hello_static;
  
  import 'dart:io';
  import 'dart:async';
  import 'dart:math';
  import 'dart:json' as JSON;
  
  import "package:logging/logging.dart";
  import "package:fukiya/fukiya.dart";
  import 'package:tilebasedwordsearch/persistable.dart' as db;
  import "package:google_oauth2_client/google_oauth2_console.dart" as console_auth;
  import 'package:http/http.dart' as http;
  import 'package:crypto/crypto.dart';
  import "package:html5lib/dom.dart";
  import "package:html5lib/dom_parsing.dart";
  
  // Needs to be the same one used on the client side.
  final String CLIENT_ID = "";
  