/**
 * @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/ka", ["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,
            ['შუაღამეს', 'შუადღეს', 'დილით', 'ნაშუადღევს', 'საღამოს', 'ღამით']
        ],
        [['შუაღამე', 'შუადღე', 'დილა', 'ნაშუადღევი', 'საღამო', 'ღამე'], u, u],
        ['00:00', '12:00', ['05:00', '12:00'], ['12:00', '18:00'], ['18:00', '21:00'], ['21:00', '05:00']]
    ];
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoia2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vbG9jYWxlcy9leHRyYS9rYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7Ozs7Ozs7Ozs7OztJQUVILHlDQUF5QztJQUN6QywrQ0FBK0M7SUFFL0MsSUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDO0lBRXBCLGtCQUFlO1FBQ2I7WUFDRSxDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQztZQUM3RCxDQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDO1NBQ25FO1FBQ0QsQ0FBQyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNyRSxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDbkcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG4vLyBUSElTIENPREUgSVMgR0VORVJBVEVEIC0gRE8gTk9UIE1PRElGWVxuLy8gU2VlIGFuZ3VsYXIvdG9vbHMvZ3VscC10YXNrcy9jbGRyL2V4dHJhY3QuanNcblxuY29uc3QgdSA9IHVuZGVmaW5lZDtcblxuZXhwb3J0IGRlZmF1bHQgW1xuICBbXG4gICAgWyfhg6jhg6Phg5Dhg6bhg5Dhg5vhg5Thg6EnLCAn4YOo4YOj4YOQ4YOT4YOmLicsICfhg5Phg5jhg5ouJywgJ+GDnOGDkOGDqOGDo+GDkOGDk+GDpi4nLCAn4YOh4YOQ4YOmLicsICfhg6bhg5Dhg5suJ10sIHUsXG4gICAgWyfhg6jhg6Phg5Dhg6bhg5Dhg5vhg5Thg6EnLCAn4YOo4YOj4YOQ4YOT4YOm4YOU4YOhJywgJ+GDk+GDmOGDmuGDmOGDlycsICfhg5zhg5Dhg6jhg6Phg5Dhg5Phg6bhg5Thg5Xhg6EnLCAn4YOh4YOQ4YOm4YOQ4YOb4YOd4YOhJywgJ+GDpuGDkOGDm+GDmOGDlyddXG4gIF0sXG4gIFtbJ+GDqOGDo+GDkOGDpuGDkOGDm+GDlCcsICfhg6jhg6Phg5Dhg5Phg6bhg5QnLCAn4YOT4YOY4YOa4YOQJywgJ+GDnOGDkOGDqOGDo+GDkOGDk+GDpuGDlOGDleGDmCcsICfhg6Hhg5Dhg6bhg5Dhg5vhg50nLCAn4YOm4YOQ4YOb4YOUJ10sIHUsIHVdLFxuICBbJzAwOjAwJywgJzEyOjAwJywgWycwNTowMCcsICcxMjowMCddLCBbJzEyOjAwJywgJzE4OjAwJ10sIFsnMTg6MDAnLCAnMjE6MDAnXSwgWycyMTowMCcsICcwNTowMCddXVxuXTtcbiJdfQ==