interface A : B {
      attribute DOMString a;
    };

    interface B : C {
      [Default] object toJSON();
      attribute long b;
    };

    interface C {
      attribute DOMString c;
    };

    interface D : E {
      [Default] object toJSON();
      attribute float d;
    };

    interface E : F {
      attribute DOMString e;
    };

    interface F {
      [Default] object toJSON();
      attribute unrestricted double f;
    };

    interface G {
      [Default] object toJSON();
      attribute octet g;
    };

    interface H {
      [Default] object toJSON();
      attribute DOMString h;
    };

    interface I {
      [Default] object toJSON();
      attribute boolean i;
    };

    interface J {
      [Default] object toJSON();
      attribute D j;
    };

    A implements G;
    A implements H;
    B implements D;
    E implements I;
    H implements J;