///<reference path="../../../headers/common.d.ts" />
/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
System.register([], function(exports_1) {
    var AmbariMetricsConfigCtrl;
    return {
        setters:[],
        execute: function() {
            AmbariMetricsConfigCtrl = (function () {
                function AmbariMetricsConfigCtrl() {
                }
                AmbariMetricsConfigCtrl.templateUrl = 'partials/config.html';
                return AmbariMetricsConfigCtrl;
            })();
            exports_1("AmbariMetricsConfigCtrl", AmbariMetricsConfigCtrl);
        }
    }
});
//# sourceMappingURL=config_ctrl.js.map