/**
 * @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/ru-KZ", ["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 = [
        [
            ['полн.', 'полд.', 'утра', 'дня', 'веч.', 'ночи'],
            ['полн.', 'полд.', 'утра', 'дня', 'вечера', 'ночи'],
            ['полночь', 'полдень', 'утра', 'дня', 'вечера', 'ночи']
        ],
        [
            ['полн.', 'полд.', 'утро', 'день', 'веч.', 'ночь'], u,
            ['полночь', 'полдень', 'утро', 'день', 'вечер', 'ночь']
        ],
        ['00:00', '12:00', ['04:00', '12:00'], ['12:00', '18:00'], ['18:00', '24:00'], ['00:00', '04:00']]
    ];
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnUtS1ouanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vbG9jYWxlcy9leHRyYS9ydS1LWi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUVILHlDQUF5QztJQUN6QywrQ0FBK0M7SUFFL0MsSUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBRXBCLGtCQUFlO1FBQ2I7WUFDRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDO1lBQ2pELENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUM7WUFDbkQsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sQ0FBQztTQUN4RDtRQUNEO1lBQ0UsQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDckQsQ0FBQyxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQztTQUN4RDtRQUNELENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNuRyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8vIFRISVMgQ09ERSBJUyBHRU5FUkFURUQgLSBETyBOT1QgTU9ESUZZXG4vLyBTZWUgYW5ndWxhci90b29scy9ndWxwLXRhc2tzL2NsZHIvZXh0cmFjdC5qc1xuXG5jb25zdCB1ID0gdW5kZWZpbmVkO1xuXG5leHBvcnQgZGVmYXVsdCBbXG4gIFtcbiAgICBbJ9C/0L7Qu9C9LicsICfQv9C+0LvQtC4nLCAn0YPRgtGA0LAnLCAn0LTQvdGPJywgJ9Cy0LXRhy4nLCAn0L3QvtGH0LgnXSxcbiAgICBbJ9C/0L7Qu9C9LicsICfQv9C+0LvQtC4nLCAn0YPRgtGA0LAnLCAn0LTQvdGPJywgJ9Cy0LXRh9C10YDQsCcsICfQvdC+0YfQuCddLFxuICAgIFsn0L/QvtC70L3QvtGH0YwnLCAn0L/QvtC70LTQtdC90YwnLCAn0YPRgtGA0LAnLCAn0LTQvdGPJywgJ9Cy0LXRh9C10YDQsCcsICfQvdC+0YfQuCddXG4gIF0sXG4gIFtcbiAgICBbJ9C/0L7Qu9C9LicsICfQv9C+0LvQtC4nLCAn0YPRgtGA0L4nLCAn0LTQtdC90YwnLCAn0LLQtdGHLicsICfQvdC+0YfRjCddLCB1LFxuICAgIFsn0L/QvtC70L3QvtGH0YwnLCAn0L/QvtC70LTQtdC90YwnLCAn0YPRgtGA0L4nLCAn0LTQtdC90YwnLCAn0LLQtdGH0LXRgCcsICfQvdC+0YfRjCddXG4gIF0sXG4gIFsnMDA6MDAnLCAnMTI6MDAnLCBbJzA0OjAwJywgJzEyOjAwJ10sIFsnMTI6MDAnLCAnMTg6MDAnXSwgWycxODowMCcsICcyNDowMCddLCBbJzAwOjAwJywgJzA0OjAwJ11dXG5dO1xuIl19