// 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.

// @dart = 2.9

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();
