/**
 * @license
 * Copyright Google LLC All Rights Reserved.
 *
 * Use of this source code is governed by an MIT-style license that can be
 * found in the LICENSE file at https://angular.io/license
 */
(function (factory) {
    if (typeof module === "object" && typeof module.exports === "object") {
        var v = factory(null, exports);
        if (v !== undefined) module.exports = v;
    }
    else if (typeof define === "function" && define.amd) {
        define("@angular/common/locales/extra/si", ["require", "exports"], factory);
    }
})(function (require, exports) {
    "use strict";
    Object.defineProperty(exports, "__esModule", { value: true });
    // THIS CODE IS GENERATED - DO NOT MODIFY
    // See angular/tools/gulp-tasks/cldr/extract.js
    var u = undefined;
    exports.default = [
        [
            ['මැ', 'ම', 'පා', 'උ', 'ද', 'හ', 'රෑ', 'මැ'],
            ['මැදියම', 'මධ්\u200dයාහ්නය', 'පාන්දර', 'උදේ', 'දවල්', 'හවස', 'රෑ', 'මැදියමට පසු'], u
        ],
        [['මැදියම', 'මධ්\u200dයාහ්නය', 'පාන්දර', 'උදේ', 'දවල්', 'හවස', 'රෑ', 'මැදියමට පසු'], u, u],
        [
            '00:00', '12:00', ['01:00', '06:00'], ['06:00', '12:00'], ['12:00', '14:00'],
            ['14:00', '18:00'], ['18:00', '24:00'], ['00:00', '01:00']
        ]
    ];
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vbG9jYWxlcy9leHRyYS9zaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUVILHlDQUF5QztJQUN6QywrQ0FBK0M7SUFFL0MsSUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBRXBCLGtCQUFlO1FBQ2I7WUFDRSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7WUFDNUMsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxhQUFhLENBQUMsRUFBRSxDQUFDO1NBQ3RGO1FBQ0QsQ0FBQyxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLGFBQWEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDMUY7WUFDRSxPQUFPLEVBQUUsT0FBTyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQztZQUM1RSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUM7U0FDM0Q7S0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8vIFRISVMgQ09ERSBJUyBHRU5FUkFURUQgLSBETyBOT1QgTU9ESUZZXG4vLyBTZWUgYW5ndWxhci90b29scy9ndWxwLXRhc2tzL2NsZHIvZXh0cmFjdC5qc1xuXG5jb25zdCB1ID0gdW5kZWZpbmVkO1xuXG5leHBvcnQgZGVmYXVsdCBbXG4gIFtcbiAgICBbJ+C2uOC3kCcsICfgtrgnLCAn4La04LePJywgJ+C2iycsICfgtq8nLCAn4LeEJywgJ+C2u+C3kScsICfgtrjgt5AnXSxcbiAgICBbJ+C2uOC3kOC2r+C3kuC2uuC2uCcsICfgtrjgtrDgt4pcXHUyMDBk4La64LeP4LeE4LeK4Lax4La6JywgJ+C2tOC3j+C2seC3iuC2r+C2uycsICfgtovgtq/gt5onLCAn4Lav4LeA4La94LeKJywgJ+C3hOC3gOC3gycsICfgtrvgt5EnLCAn4La44LeQ4Lav4LeS4La64La44LanIOC2tOC3g+C3lCddLCB1XG4gIF0sXG4gIFtbJ+C2uOC3kOC2r+C3kuC2uuC2uCcsICfgtrjgtrDgt4pcXHUyMDBk4La64LeP4LeE4LeK4Lax4La6JywgJ+C2tOC3j+C2seC3iuC2r+C2uycsICfgtovgtq/gt5onLCAn4Lav4LeA4La94LeKJywgJ+C3hOC3gOC3gycsICfgtrvgt5EnLCAn4La44LeQ4Lav4LeS4La64La44LanIOC2tOC3g+C3lCddLCB1LCB1XSxcbiAgW1xuICAgICcwMDowMCcsICcxMjowMCcsIFsnMDE6MDAnLCAnMDY6MDAnXSwgWycwNjowMCcsICcxMjowMCddLCBbJzEyOjAwJywgJzE0OjAwJ10sXG4gICAgWycxNDowMCcsICcxODowMCddLCBbJzE4OjAwJywgJzI0OjAwJ10sIFsnMDA6MDAnLCAnMDE6MDAnXVxuICBdXG5dO1xuIl19