// Copyright (c) 2020, the Dart 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.

import "split_constants_canonicalization_a_1.dart" deferred as a_1;
import "split_constants_canonicalization_a_2.dart" deferred as a_2;

loadChildren() async {
  await a_1.loadLibrary();
  await a_2.loadLibrary();
}

a_1_mint() => a_1.mint();
a_1_string() => a_1.string();
a_1_list() => a_1.list();
a_1_map() => a_1.map();
a_1_box() => a_1.box();
a_1_enum() => a_1.enumm();
a_1_type() => a_1.type();
a_1_closure() => a_1.closure();

a_2_mint() => a_2.mint();
a_2_string() => a_2.string();
a_2_list() => a_2.list();
a_2_map() => a_2.map();
a_2_box() => a_2.box();
a_2_enum() => a_2.enumm();
a_2_type() => a_2.type();
a_2_closure() => a_2.closure();
