anchor.diff:    // * Maps are encoded by first encoding their length in the expanding format,
     //   then follows the recursive encoding of each key/value pair, including the
     //   type byte for both (Maps are assumed to be heterogeneous).
  +  //
  +  // The type labels below must not change, since it's possible for this interface
  +  // to be used for persistent storage.
     static const int _valueNull = 0;
     static const int _valueTrue = 1;
     static const int _valueFalse = 2;
  
positive.code:   /// This method may be called recursively to serialize container values.
    ///
    /// Type discriminators 0 through 127 inclusive are reserved for use by the
    /// base class.
    ///
    /// The codec can be extended by overriding this method, calling super
    /// for values that the extension does not handle. Type discriminators
    /// used by extensions must be greater than or equal to 128 in order to avoid
    /// clashes with any later extensions to the base class.
    void writeValue(WriteBuffer buffer, dynamic value) {
      if (value == null) {
        buffer.putUint8(_valueNull);
  
negative.code:   //   * values 2^16+1..2^32 inclusive using five bytes, the first of which is
    //     255, the next four the usual unsigned representation of the value.
    // * null, true, and false have empty serialization; they are encoded directly
    //   in the type byte (using _valueNull, _valueTrue, _valueFalse)
    // * Integers representable in 32 bits are encoded using 4 bytes two's
    //   complement representation.
    // * Larger integers are encoded using 8 bytes two's complement
  