// Copyright (c) 2017, the R8 project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

package multidex002;

public class IntermediateClass {

  public static int get() {
    return new multidex002.manymethods.Big045().get45()
        + new multidex002.manymethods.Big046().get46()
        + new multidex002.manymethods.Big047().get47()
        + new multidex002.manymethods.Big048().get48()
        + new multidex002.manymethods.Big049().get49()
        + new multidex002.manymethods.Big050().get50()
        + new multidex002.manymethods.Big051().get51()
        + new multidex002.manymethods.Big052().get52()
        + new multidex002.manymethods.Big053().get53()
        + new multidex002.manymethods.Big054().get54()
        + new multidex002.manymethods.Big055().get55()
        + new multidex002.manymethods.Big056().get56()
        + new multidex002.manymethods.Big057().get57()
        + new multidex002.manymethods.Big058().get58()
        + new multidex002.manymethods.Big059().get59()
        + new multidex002.manymethods.Big060().get60()
        + new multidex002.manymethods.Big061().get61()
        + new multidex002.manymethods.Big062().get62()
        + new multidex002.manymethods.Big063().get63()
        + new multidex002.manymethods.Big064().get64()
        + new multidex002.manymethods.Big065().get65()
        + new multidex002.manymethods.Big066().get66()
        + new multidex002.manymethods.Big067().get67()
        + new multidex002.manymethods.Big068().get68()
        + new multidex002.manymethods.Big069().get69()
        + new multidex002.manymethods.Big070().get70()
        + new multidex002.manymethods.Big071().get71()
        + new multidex002.manymethods.Big072().get72()
        + new multidex002.manymethods.Big073().get73()
        + new multidex002.manymethods.Big074().get74()
        + new multidex002.manymethods.Big075().get75()
        + new multidex002.manymethods.Big076().get76()
        + new multidex002.manymethods.Big077().get77()
        + new multidex002.manymethods.Big078().get78()
        + new multidex002.manymethods.Big079().get79()
        + new multidex002.manymethods.Big080().get80();
  }
}
