// CHECK:
//   Mangled name: Outer
//   Public signature: /Outer|null[0]
class Outer {
  // CHECK:
  //   Mangled name: Outer.Inner
  //   Public signature: /Outer.Inner|null[0]
  inner class Inner {
    // CHECK:
    //   Mangled name: Outer.Inner.Inner2
    //   Public signature: /Outer.Inner.Inner2|null[0]
    inner class Inner2 {
      // CHECK:
      //   Mangled name: Outer.Inner.Inner2#<init>(){}
      //   Public signature: /Outer.Inner.Inner2.<init>|-5645683436151566731[0]
      //   Public signature debug description: <init>(){}
      constructor() /* primary */

      // CHECK:
      //   Mangled name: Outer.Inner.Inner2#test2(){}
      //   Public signature: /Outer.Inner.Inner2.test2|4279114864133353152[0]
      //   Public signature debug description: test2(){}
      fun test2(): Unit

      // CHECK:
      //   Mangled name: Outer.Inner.Inner2#test3@Outer(){}
      //   Public signature: /Outer.Inner.Inner2.test3|-491537560312526926[0]
      //   Public signature debug description: test3@Outer(){}
      fun Outer.test3(): Unit

    }

    // CHECK:
    //   Mangled name: Outer.Inner#<init>(){}
    //   Public signature: /Outer.Inner.<init>|-5645683436151566731[0]
    //   Public signature debug description: <init>(){}
    constructor() /* primary */

    // CHECK:
    //   Mangled name: Outer.Inner#test(){}
    //   Public signature: /Outer.Inner.test|6620506149988718649[0]
    //   Public signature debug description: test(){}
    fun test(): Unit

  }

  // CHECK:
  //   Mangled name: Outer#<init>(){}
  //   Public signature: /Outer.<init>|-5645683436151566731[0]
  //   Public signature debug description: <init>(){}
  constructor() /* primary */

  // CHECK:
  //   Mangled name: Outer#foo(){}
  //   Public signature: /Outer.foo|-1041209573719867811[0]
  //   Public signature debug description: foo(){}
  fun foo(): Unit

}

