anchor.diff:  import 'dart:async';
   import 'dart:convert';
   import 'dart:html';
  +import 'dart:typed_data';
   
   import 'package:shapeshift/shapeshift_frontend.dart';
   
   const String _storageApiBase =
       "https://www.googleapis.com/storage/v1/b/dart-archive/o";
   const String _storageBase = "https://storage.googleapis.com/dart-archive";
  +
  +const String _flavor = 'raw';
   
   final Map<int, Map<String, String>> _versionMaps =
       new Map<int, Map<String, String>>();
  
positive.code: 
      var path = versions[i];
  
      var versionString =
          await HttpRequest.getString("$_storageBase/${path}VERSION");
  
      var json = JSON.decode(versionString) as Map<String, String>;
  
  
negative.code: 
      // TODO: validate left is "before" right
  
      try {
        await _compareVersions(
            _versionMaps[left], _versionMaps[right], includeComments);
        _updateStatus();
      } catch (e, stack) {
        print('Error comparing versions');
        print(e);
        print(stack);
        _updateStatus('Error comparing versions. See console output.');
      }
    } finally {
      _goButton.disabled = false;
    }
  }
  
  Future _compareVersions(Map left, Map right, bool includeComments) async {
    var leftData = await _getData(left['channel'], left['revision']);
    var rightData = await _getData(right['channel'], right['revision']);
  
    _updateStatus('Calculating diff');
    compareZips(
        left, leftData, right, rightData, includeComments, _diffContainer);
  }
  
  Future<ByteBuffer> _getData(String channel, String revision) async {
    var uri = '$_storageBase/channels/$channel/${_flavor}/${revision}'
        '/api-docs/dart-api-docs.zip';
  
    _updateStatus('Downloading docs: $channel $revision');
    return await getBinaryContent(uri);
  }
  