{"ast":null,"code":"// moment-hijri.js\n// author: Suhail Alkowaileet\n// This is a modified version of moment-jalaali by Behrang Noruzi Niya\n// license: MIT\n'use strict';\n/************************************\r\n    Expose Moment Hijri\r\n************************************/\n\n(function (root, factory) {\n  /* global define */\n  if (typeof define === 'function' && define.amd) {\n    define(['moment'], function (moment) {\n      root.moment = factory(moment);\n      return root.moment;\n    });\n  } else if (typeof exports === 'object') {\n    module.exports = factory(require('moment'));\n  } else {\n    root.moment = factory(root.moment);\n  }\n})(this, function (moment) {\n  // jshint ignore:line\n  if (moment == null) {\n    throw new Error('Cannot find moment');\n  }\n  /************************************\r\n       Constants\r\n   ************************************/\n\n\n  var ummalqura = {\n    ummalquraData: [28607, 28636, 28665, 28695, 28724, 28754, 28783, 28813, 28843, 28872, 28901, 28931, 28960, 28990, 29019, 29049, 29078, 29108, 29137, 29167, 29196, 29226, 29255, 29285, 29315, 29345, 29375, 29404, 29434, 29463, 29492, 29522, 29551, 29580, 29610, 29640, 29669, 29699, 29729, 29759, 29788, 29818, 29847, 29876, 29906, 29935, 29964, 29994, 30023, 30053, 30082, 30112, 30141, 30171, 30200, 30230, 30259, 30289, 30318, 30348, 30378, 30408, 30437, 30467, 30496, 30526, 30555, 30585, 30614, 30644, 30673, 30703, 30732, 30762, 30791, 30821, 30850, 30880, 30909, 30939, 30968, 30998, 31027, 31057, 31086, 31116, 31145, 31175, 31204, 31234, 31263, 31293, 31322, 31352, 31381, 31411, 31441, 31471, 31500, 31530, 31559, 31589, 31618, 31648, 31676, 31706, 31736, 31766, 31795, 31825, 31854, 31884, 31913, 31943, 31972, 32002, 32031, 32061, 32090, 32120, 32150, 32180, 32209, 32239, 32268, 32298, 32327, 32357, 32386, 32416, 32445, 32475, 32504, 32534, 32563, 32593, 32622, 32652, 32681, 32711, 32740, 32770, 32799, 32829, 32858, 32888, 32917, 32947, 32976, 33006, 33035, 33065, 33094, 33124, 33153, 33183, 33213, 33243, 33272, 33302, 33331, 33361, 33390, 33420, 33450, 33479, 33509, 33539, 33568, 33598, 33627, 33657, 33686, 33716, 33745, 33775, 33804, 33834, 33863, 33893, 33922, 33952, 33981, 34011, 34040, 34069, 34099, 34128, 34158, 34187, 34217, 34247, 34277, 34306, 34336, 34365, 34395, 34424, 34454, 34483, 34512, 34542, 34571, 34601, 34631, 34660, 34690, 34719, 34749, 34778, 34808, 34837, 34867, 34896, 34926, 34955, 34985, 35015, 35044, 35074, 35103, 35133, 35162, 35192, 35222, 35251, 35280, 35310, 35340, 35370, 35399, 35429, 35458, 35488, 35517, 35547, 35576, 35605, 35635, 35665, 35694, 35723, 35753, 35782, 35811, 35841, 35871, 35901, 35930, 35960, 35989, 36019, 36048, 36078, 36107, 36136, 36166, 36195, 36225, 36254, 36284, 36314, 36343, 36373, 36403, 36433, 36462, 36492, 36521, 36551, 36580, 36610, 36639, 36669, 36698, 36728, 36757, 36786, 36816, 36845, 36875, 36904, 36934, 36963, 36993, 37022, 37052, 37081, 37111, 37141, 37170, 37200, 37229, 37259, 37288, 37318, 37347, 37377, 37406, 37436, 37465, 37495, 37524, 37554, 37584, 37613, 37643, 37672, 37701, 37731, 37760, 37790, 37819, 37849, 37878, 37908, 37938, 37967, 37997, 38027, 38056, 38085, 38115, 38144, 38174, 38203, 38233, 38262, 38292, 38322, 38351, 38381, 38410, 38440, 38469, 38499, 38528, 38558, 38587, 38617, 38646, 38676, 38705, 38735, 38764, 38794, 38823, 38853, 38882, 38912, 38941, 38971, 39001, 39030, 39059, 39089, 39118, 39148, 39178, 39208, 39237, 39267, 39297, 39326, 39355, 39385, 39414, 39444, 39473, 39503, 39532, 39562, 39592, 39621, 39650, 39680, 39709, 39739, 39768, 39798, 39827, 39857, 39886, 39916, 39946, 39975, 40005, 40035, 40064, 40094, 40123, 40153, 40182, 40212, 40241, 40271, 40300, 40330, 40359, 40389, 40418, 40448, 40477, 40507, 40536, 40566, 40595, 40625, 40655, 40685, 40714, 40744, 40773, 40803, 40832, 40862, 40892, 40921, 40951, 40980, 41009, 41039, 41068, 41098, 41127, 41157, 41186, 41216, 41245, 41275, 41304, 41334, 41364, 41393, 41422, 41452, 41481, 41511, 41540, 41570, 41599, 41629, 41658, 41688, 41718, 41748, 41777, 41807, 41836, 41865, 41894, 41924, 41953, 41983, 42012, 42042, 42072, 42102, 42131, 42161, 42190, 42220, 42249, 42279, 42308, 42337, 42367, 42397, 42426, 42456, 42485, 42515, 42545, 42574, 42604, 42633, 42662, 42692, 42721, 42751, 42780, 42810, 42839, 42869, 42899, 42929, 42958, 42988, 43017, 43046, 43076, 43105, 43135, 43164, 43194, 43223, 43253, 43283, 43312, 43342, 43371, 43401, 43430, 43460, 43489, 43519, 43548, 43578, 43607, 43637, 43666, 43696, 43726, 43755, 43785, 43814, 43844, 43873, 43903, 43932, 43962, 43991, 44021, 44050, 44080, 44109, 44139, 44169, 44198, 44228, 44258, 44287, 44317, 44346, 44375, 44405, 44434, 44464, 44493, 44523, 44553, 44582, 44612, 44641, 44671, 44700, 44730, 44759, 44788, 44818, 44847, 44877, 44906, 44936, 44966, 44996, 45025, 45055, 45084, 45114, 45143, 45172, 45202, 45231, 45261, 45290, 45320, 45350, 45380, 45409, 45439, 45468, 45498, 45527, 45556, 45586, 45615, 45644, 45674, 45704, 45733, 45763, 45793, 45823, 45852, 45882, 45911, 45940, 45970, 45999, 46028, 46058, 46088, 46117, 46147, 46177, 46206, 46236, 46265, 46295, 46324, 46354, 46383, 46413, 46442, 46472, 46501, 46531, 46560, 46590, 46620, 46649, 46679, 46708, 46738, 46767, 46797, 46826, 46856, 46885, 46915, 46944, 46974, 47003, 47033, 47063, 47092, 47122, 47151, 47181, 47210, 47240, 47269, 47298, 47328, 47357, 47387, 47417, 47446, 47476, 47506, 47535, 47565, 47594, 47624, 47653, 47682, 47712, 47741, 47771, 47800, 47830, 47860, 47890, 47919, 47949, 47978, 48008, 48037, 48066, 48096, 48125, 48155, 48184, 48214, 48244, 48273, 48303, 48333, 48362, 48392, 48421, 48450, 48480, 48509, 48538, 48568, 48598, 48627, 48657, 48687, 48717, 48746, 48776, 48805, 48834, 48864, 48893, 48922, 48952, 48982, 49011, 49041, 49071, 49100, 49130, 49160, 49189, 49218, 49248, 49277, 49306, 49336, 49365, 49395, 49425, 49455, 49484, 49514, 49543, 49573, 49602, 49632, 49661, 49690, 49720, 49749, 49779, 49809, 49838, 49868, 49898, 49927, 49957, 49986, 50016, 50045, 50075, 50104, 50133, 50163, 50192, 50222, 50252, 50281, 50311, 50340, 50370, 50400, 50429, 50459, 50488, 50518, 50547, 50576, 50606, 50635, 50665, 50694, 50724, 50754, 50784, 50813, 50843, 50872, 50902, 50931, 50960, 50990, 51019, 51049, 51078, 51108, 51138, 51167, 51197, 51227, 51256, 51286, 51315, 51345, 51374, 51403, 51433, 51462, 51492, 51522, 51552, 51582, 51611, 51641, 51670, 51699, 51729, 51758, 51787, 51816, 51846, 51876, 51906, 51936, 51965, 51995, 52025, 52054, 52083, 52113, 52142, 52171, 52200, 52230, 52260, 52290, 52319, 52349, 52379, 52408, 52438, 52467, 52497, 52526, 52555, 52585, 52614, 52644, 52673, 52703, 52733, 52762, 52792, 52822, 52851, 52881, 52910, 52939, 52969, 52998, 53028, 53057, 53087, 53116, 53146, 53176, 53205, 53235, 53264, 53294, 53324, 53353, 53383, 53412, 53441, 53471, 53500, 53530, 53559, 53589, 53619, 53648, 53678, 53708, 53737, 53767, 53796, 53825, 53855, 53884, 53913, 53943, 53973, 54003, 54032, 54062, 54092, 54121, 54151, 54180, 54209, 54239, 54268, 54297, 54327, 54357, 54387, 54416, 54446, 54476, 54505, 54535, 54564, 54593, 54623, 54652, 54681, 54711, 54741, 54770, 54800, 54830, 54859, 54889, 54919, 54948, 54977, 55007, 55036, 55066, 55095, 55125, 55154, 55184, 55213, 55243, 55273, 55302, 55332, 55361, 55391, 55420, 55450, 55479, 55508, 55538, 55567, 55597, 55627, 55657, 55686, 55716, 55745, 55775, 55804, 55834, 55863, 55892, 55922, 55951, 55981, 56011, 56040, 56070, 56100, 56129, 56159, 56188, 56218, 56247, 56276, 56306, 56335, 56365, 56394, 56424, 56454, 56483, 56513, 56543, 56572, 56601, 56631, 56660, 56690, 56719, 56749, 56778, 56808, 56837, 56867, 56897, 56926, 56956, 56985, 57015, 57044, 57074, 57103, 57133, 57162, 57192, 57221, 57251, 57280, 57310, 57340, 57369, 57399, 57429, 57458, 57487, 57517, 57546, 57576, 57605, 57634, 57664, 57694, 57723, 57753, 57783, 57813, 57842, 57871, 57901, 57930, 57959, 57989, 58018, 58048, 58077, 58107, 58137, 58167, 58196, 58226, 58255, 58285, 58314, 58343, 58373, 58402, 58432, 58461, 58491, 58521, 58551, 58580, 58610, 58639, 58669, 58698, 58727, 58757, 58786, 58816, 58845, 58875, 58905, 58934, 58964, 58994, 59023, 59053, 59082, 59111, 59141, 59170, 59200, 59229, 59259, 59288, 59318, 59348, 59377, 59407, 59436, 59466, 59495, 59525, 59554, 59584, 59613, 59643, 59672, 59702, 59731, 59761, 59791, 59820, 59850, 59879, 59909, 59939, 59968, 59997, 60027, 60056, 60086, 60115, 60145, 60174, 60204, 60234, 60264, 60293, 60323, 60352, 60381, 60411, 60440, 60469, 60499, 60528, 60558, 60588, 60618, 60648, 60677, 60707, 60736, 60765, 60795, 60824, 60853, 60883, 60912, 60942, 60972, 61002, 61031, 61061, 61090, 61120, 61149, 61179, 61208, 61237, 61267, 61296, 61326, 61356, 61385, 61415, 61445, 61474, 61504, 61533, 61563, 61592, 61621, 61651, 61680, 61710, 61739, 61769, 61799, 61828, 61858, 61888, 61917, 61947, 61976, 62006, 62035, 62064, 62094, 62123, 62153, 62182, 62212, 62242, 62271, 62301, 62331, 62360, 62390, 62419, 62448, 62478, 62507, 62537, 62566, 62596, 62625, 62655, 62685, 62715, 62744, 62774, 62803, 62832, 62862, 62891, 62921, 62950, 62980, 63009, 63039, 63069, 63099, 63128, 63157, 63187, 63216, 63246, 63275, 63305, 63334, 63363, 63393, 63423, 63453, 63482, 63512, 63541, 63571, 63600, 63630, 63659, 63689, 63718, 63747, 63777, 63807, 63836, 63866, 63895, 63925, 63955, 63984, 64014, 64043, 64073, 64102, 64131, 64161, 64190, 64220, 64249, 64279, 64309, 64339, 64368, 64398, 64427, 64457, 64486, 64515, 64545, 64574, 64603, 64633, 64663, 64692, 64722, 64752, 64782, 64811, 64841, 64870, 64899, 64929, 64958, 64987, 65017, 65047, 65076, 65106, 65136, 65166, 65195, 65225, 65254, 65283, 65313, 65342, 65371, 65401, 65431, 65460, 65490, 65520, 65549, 65579, 65608, 65638, 65667, 65697, 65726, 65755, 65785, 65815, 65844, 65874, 65903, 65933, 65963, 65992, 66022, 66051, 66081, 66110, 66140, 66169, 66199, 66228, 66258, 66287, 66317, 66346, 66376, 66405, 66435, 66465, 66494, 66524, 66553, 66583, 66612, 66641, 66671, 66700, 66730, 66760, 66789, 66819, 66849, 66878, 66908, 66937, 66967, 66996, 67025, 67055, 67084, 67114, 67143, 67173, 67203, 67233, 67262, 67292, 67321, 67351, 67380, 67409, 67439, 67468, 67497, 67527, 67557, 67587, 67617, 67646, 67676, 67705, 67735, 67764, 67793, 67823, 67852, 67882, 67911, 67941, 67971, 68000, 68030, 68060, 68089, 68119, 68148, 68177, 68207, 68236, 68266, 68295, 68325, 68354, 68384, 68414, 68443, 68473, 68502, 68532, 68561, 68591, 68620, 68650, 68679, 68708, 68738, 68768, 68797, 68827, 68857, 68886, 68916, 68946, 68975, 69004, 69034, 69063, 69092, 69122, 69152, 69181, 69211, 69240, 69270, 69300, 69330, 69359, 69388, 69418, 69447, 69476, 69506, 69535, 69565, 69595, 69624, 69654, 69684, 69713, 69743, 69772, 69802, 69831, 69861, 69890, 69919, 69949, 69978, 70008, 70038, 70067, 70097, 70126, 70156, 70186, 70215, 70245, 70274, 70303, 70333, 70362, 70392, 70421, 70451, 70481, 70510, 70540, 70570, 70599, 70629, 70658, 70687, 70717, 70746, 70776, 70805, 70835, 70864, 70894, 70924, 70954, 70983, 71013, 71042, 71071, 71101, 71130, 71159, 71189, 71218, 71248, 71278, 71308, 71337, 71367, 71397, 71426, 71455, 71485, 71514, 71543, 71573, 71602, 71632, 71662, 71691, 71721, 71751, 71781, 71810, 71839, 71869, 71898, 71927, 71957, 71986, 72016, 72046, 72075, 72105, 72135, 72164, 72194, 72223, 72253, 72282, 72311, 72341, 72370, 72400, 72429, 72459, 72489, 72518, 72548, 72577, 72607, 72637, 72666, 72695, 72725, 72754, 72784, 72813, 72843, 72872, 72902, 72931, 72961, 72991, 73020, 73050, 73080, 73109, 73139, 73168, 73197, 73227, 73256, 73286, 73315, 73345, 73375, 73404, 73434, 73464, 73493, 73523, 73552, 73581, 73611, 73640, 73669, 73699, 73729, 73758, 73788, 73818, 73848, 73877, 73907, 73936, 73965, 73995, 74024, 74053, 74083, 74113, 74142, 74172, 74202, 74231, 74261, 74291, 74320, 74349, 74379, 74408, 74437, 74467, 74497, 74526, 74556, 74586, 74615, 74645, 74675, 74704, 74733, 74763, 74792, 74822, 74851, 74881, 74910, 74940, 74969, 74999, 75029, 75058, 75088, 75117, 75147, 75176, 75206, 75235, 75264, 75294, 75323, 75353, 75383, 75412, 75442, 75472, 75501, 75531, 75560, 75590, 75619, 75648, 75678, 75707, 75737, 75766, 75796, 75826, 75856, 75885, 75915, 75944, 75974, 76003, 76032, 76062, 76091, 76121, 76150, 76180, 76210, 76239, 76269, 76299, 76328, 76358, 76387, 76416, 76446, 76475, 76505, 76534, 76564, 76593, 76623, 76653, 76682, 76712, 76741, 76771, 76801, 76830, 76859, 76889, 76918, 76948, 76977, 77007, 77036, 77066, 77096, 77125, 77155, 77185, 77214, 77243, 77273, 77302, 77332, 77361, 77390, 77420, 77450, 77479, 77509, 77539, 77569, 77598, 77627, 77657, 77686, 77715, 77745, 77774, 77804, 77833, 77863, 77893, 77923, 77952, 77982, 78011, 78041, 78070, 78099, 78129, 78158, 78188, 78217, 78247, 78277, 78307, 78336, 78366, 78395, 78425, 78454, 78483, 78513, 78542, 78572, 78601, 78631, 78661, 78690, 78720, 78750, 78779, 78808, 78838, 78867, 78897, 78926, 78956, 78985, 79015, 79044, 79074, 79104, 79133, 79163, 79192, 79222, 79251, 79281, 79310, 79340, 79369, 79399, 79428, 79458, 79487, 79517, 79546, 79576, 79606, 79635, 79665, 79695, 79724, 79753, 79783, 79812, 79841, 79871, 79900, 79930, 79960, 79990]\n  };\n  var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?i(Mo|MM?M?M?|Do|DDDo|DD?D?D?|w[o|w]?|YYYYY|YYYY|YY|gg(ggg?)?)|(\\\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|SS?S?|X|zz?|ZZ?|.)/g,\n      localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n      parseTokenOneOrTwoDigits = /\\d\\d?/,\n      parseTokenOneToThreeDigits = /\\d{1,3}/,\n      parseTokenThreeDigits = /\\d{3}/,\n      parseTokenFourDigits = /\\d{1,4}/,\n      parseTokenSixDigits = /[+\\-]?\\d{1,6}/,\n      parseTokenWord = /[0-9]*['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]+(\\.?)|[\\u0600-\\u06FF\\/]+(\\s*?[\\u0600-\\u06FF]+){1,2}/i,\n      parseTokenTimezone = /Z|[\\+\\-]\\d\\d:?\\d\\d/i,\n      parseTokenT = /T/i,\n      parseTokenTimestampMs = /[\\+\\-]?\\d+(\\.\\d{1,3})?/,\n      unitAliases = {\n    hd: 'idate',\n    hm: 'imonth',\n    hy: 'iyear'\n  },\n      formatFunctions = {},\n      ordinalizeTokens = 'DDD w M D'.split(' '),\n      paddedTokens = 'M D w'.split(' '),\n      formatTokenFunctions = {\n    iM: function iM() {\n      return this.iMonth() + 1;\n    },\n    iMMM: function iMMM(format) {\n      return this.localeData().iMonthsShort(this, format);\n    },\n    iMMMM: function iMMMM(format) {\n      return this.localeData().iMonths(this, format);\n    },\n    iD: function iD() {\n      return this.iDate();\n    },\n    iDDD: function iDDD() {\n      return this.iDayOfYear();\n    },\n    iw: function iw() {\n      return this.iWeek();\n    },\n    iYY: function iYY() {\n      return leftZeroFill(this.iYear() % 100, 2);\n    },\n    iYYYY: function iYYYY() {\n      return leftZeroFill(this.iYear(), 4);\n    },\n    iYYYYY: function iYYYYY() {\n      return leftZeroFill(this.iYear(), 5);\n    },\n    igg: function igg() {\n      return leftZeroFill(this.iWeekYear() % 100, 2);\n    },\n    igggg: function igggg() {\n      return this.iWeekYear();\n    },\n    iggggg: function iggggg() {\n      return leftZeroFill(this.iWeekYear(), 5);\n    }\n  },\n      i;\n\n  function padToken(func, count) {\n    return function (a) {\n      return leftZeroFill(func.call(this, a), count);\n    };\n  }\n\n  function ordinalizeToken(func, period) {\n    return function (a) {\n      return this.localeData().ordinal(func.call(this, a), period);\n    };\n  }\n\n  while (ordinalizeTokens.length) {\n    i = ordinalizeTokens.pop();\n    formatTokenFunctions['i' + i + 'o'] = ordinalizeToken(formatTokenFunctions['i' + i], i);\n  }\n\n  while (paddedTokens.length) {\n    i = paddedTokens.pop();\n    formatTokenFunctions['i' + i + i] = padToken(formatTokenFunctions['i' + i], 2);\n  }\n\n  formatTokenFunctions.iDDDD = padToken(formatTokenFunctions.iDDD, 3);\n  /************************************\r\n       Helpers\r\n   ************************************/\n\n  function extend(a, b) {\n    var key;\n\n    for (key in b) {\n      if (b.hasOwnProperty(key)) a[key] = b[key];\n    }\n\n    return a;\n  }\n\n  function leftZeroFill(number, targetLength) {\n    var output = number + '';\n\n    while (output.length < targetLength) {\n      output = '0' + output;\n    }\n\n    return output;\n  }\n\n  function isArray(input) {\n    return Object.prototype.toString.call(input) === '[object Array]';\n  }\n\n  function normalizeUnits(units) {\n    return units ? unitAliases[units] || units.toLowerCase().replace(/(.)s$/, '$1') : units;\n  }\n\n  function setDate(moment, year, month, date) {\n    var utc = moment._isUTC ? 'UTC' : '';\n\n    moment._d['set' + utc + 'FullYear'](year);\n\n    moment._d['set' + utc + 'Month'](month);\n\n    moment._d['set' + utc + 'Date'](date);\n  }\n\n  function objectCreate(parent) {\n    function F() {}\n\n    F.prototype = parent;\n    return new F();\n  }\n\n  function getPrototypeOf(object) {\n    if (Object.getPrototypeOf) return Object.getPrototypeOf(object);else if (''.__proto__) // jshint ignore:line\n      return object.__proto__; // jshint ignore:line\n    else return object.constructor.prototype;\n  }\n  /************************************\r\n       Languages\r\n   ************************************/\n\n\n  extend(getPrototypeOf(moment.localeData()), {\n    _iMonths: ['Muharram', 'Safar', 'Rabi\\' al-Awwal', 'Rabi\\' al-Thani', 'Jumada al-Ula', 'Jumada al-Alkhirah', 'Rajab', 'Sha’ban', 'Ramadhan', 'Shawwal', 'Thul-Qi’dah', 'Thul-Hijjah'],\n    iMonths: function iMonths(m) {\n      return this._iMonths[m.iMonth()];\n    },\n    _iMonthsShort: ['Muh', 'Saf', 'Rab-I', 'Rab-II', 'Jum-I', 'Jum-II', 'Raj', 'Sha', 'Ram', 'Shw', 'Dhu-Q', 'Dhu-H'],\n    iMonthsShort: function iMonthsShort(m) {\n      return this._iMonthsShort[m.iMonth()];\n    },\n    iMonthsParse: function iMonthsParse(monthName) {\n      var i, mom, regex;\n      if (!this._iMonthsParse) this._iMonthsParse = [];\n\n      for (i = 0; i < 12; i += 1) {\n        // Make the regex if we don't have it already.\n        if (!this._iMonthsParse[i]) {\n          mom = hMoment([2000, (2 + i) % 12, 25]);\n          regex = '^' + this.iMonths(mom, '') + '$|^' + this.iMonthsShort(mom, '') + '$';\n          this._iMonthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n        } // Test the regex.\n\n\n        if (this._iMonthsParse[i].test(monthName)) return i;\n      }\n    }\n  });\n  var iMonthNames = {\n    iMonths: 'محرم_صفر_ربيع الأول_ربيع الثاني_جمادى الأولى_جمادى الآخرة_رجب_شعبان_رمضان_شوال_ذو القعدة_ذو الحجة'.split('_'),\n    iMonthsShort: 'محرم_صفر_ربيع ١_ربيع ٢_جمادى ١_جمادى ٢_رجب_شعبان_رمضان_شوال_ذو القعدة_ذو الحجة'.split('_')\n  }; // Default to the momentjs 2.12+ API\n\n  if (typeof moment.updateLocale === 'function') {\n    moment.updateLocale('ar-sa', iMonthNames);\n  } else {\n    var oldLocale = moment.locale();\n    moment.defineLocale('ar-sa', iMonthNames);\n    moment.locale(oldLocale);\n  }\n  /************************************\r\n       Formatting\r\n   ************************************/\n\n\n  function makeFormatFunction(format) {\n    var array = format.match(formattingTokens),\n        length = array.length,\n        i;\n\n    for (i = 0; i < length; i += 1) {\n      if (formatTokenFunctions[array[i]]) array[i] = formatTokenFunctions[array[i]];\n    }\n\n    return function (mom) {\n      var output = '';\n\n      for (i = 0; i < length; i += 1) {\n        output += array[i] instanceof Function ? '[' + array[i].call(mom, format) + ']' : array[i];\n      }\n\n      return output;\n    };\n  }\n  /************************************\r\n       Parsing\r\n   ************************************/\n\n\n  function getParseRegexForToken(token, config) {\n    switch (token) {\n      case 'iDDDD':\n        return parseTokenThreeDigits;\n\n      case 'iYYYY':\n        return parseTokenFourDigits;\n\n      case 'iYYYYY':\n        return parseTokenSixDigits;\n\n      case 'iDDD':\n        return parseTokenOneToThreeDigits;\n\n      case 'iMMM':\n      case 'iMMMM':\n        return parseTokenWord;\n\n      case 'iMM':\n      case 'iDD':\n      case 'iYY':\n      case 'iM':\n      case 'iD':\n        return parseTokenOneOrTwoDigits;\n\n      case 'DDDD':\n        return parseTokenThreeDigits;\n\n      case 'YYYY':\n        return parseTokenFourDigits;\n\n      case 'YYYYY':\n        return parseTokenSixDigits;\n\n      case 'S':\n      case 'SS':\n      case 'SSS':\n      case 'DDD':\n        return parseTokenOneToThreeDigits;\n\n      case 'MMM':\n      case 'MMMM':\n      case 'dd':\n      case 'ddd':\n      case 'dddd':\n        return parseTokenWord;\n\n      case 'a':\n      case 'A':\n        return moment.localeData(config._l)._meridiemParse;\n\n      case 'X':\n        return parseTokenTimestampMs;\n\n      case 'Z':\n      case 'ZZ':\n        return parseTokenTimezone;\n\n      case 'T':\n        return parseTokenT;\n\n      case 'MM':\n      case 'DD':\n      case 'YY':\n      case 'HH':\n      case 'hh':\n      case 'mm':\n      case 'ss':\n      case 'M':\n      case 'D':\n      case 'd':\n      case 'H':\n      case 'h':\n      case 'm':\n      case 's':\n        return parseTokenOneOrTwoDigits;\n\n      default:\n        return new RegExp(token.replace('\\\\', ''));\n    }\n  }\n\n  function addTimeToArrayFromToken(token, input, config) {\n    var a,\n        datePartArray = config._a;\n\n    switch (token) {\n      case 'iM':\n      case 'iMM':\n        datePartArray[1] = input == null ? 0 : ~~input - 1;\n        break;\n\n      case 'iMMM':\n      case 'iMMMM':\n        a = moment.localeData(config._l).iMonthsParse(input);\n        if (a != null) datePartArray[1] = a;else config._isValid = false;\n        break;\n\n      case 'iD':\n      case 'iDD':\n      case 'iDDD':\n      case 'iDDDD':\n        if (input != null) datePartArray[2] = ~~input;\n        break;\n\n      case 'iYY':\n        datePartArray[0] = ~~input + (~~input > 47 ? 1300 : 1400);\n        break;\n\n      case 'iYYYY':\n      case 'iYYYYY':\n        datePartArray[0] = ~~input;\n    }\n\n    if (input == null) config._isValid = false;\n  }\n\n  function dateFromArray(config) {\n    var g,\n        h,\n        hy = config._a[0],\n        hm = config._a[1],\n        hd = config._a[2];\n    if (hy == null && hm == null && hd == null) return [0, 0, 1];\n    hy = hy || 0;\n    hm = hm || 0;\n    hd = hd || 1;\n    if (hd < 1 || hd > hMoment.iDaysInMonth(hy, hm)) config._isValid = false;\n    g = toGregorian(hy, hm, hd);\n    h = toHijri(g.gy, g.gm, g.gd);\n    config._hDiff = 0;\n    if (~~h.hy !== hy) config._hDiff += 1;\n    if (~~h.hm !== hm) config._hDiff += 1;\n    if (~~h.hd !== hd) config._hDiff += 1;\n    return [g.gy, g.gm, g.gd];\n  }\n\n  function makeDateFromStringAndFormat(config) {\n    var tokens = config._f.match(formattingTokens),\n        string = config._i,\n        len = tokens.length,\n        i,\n        token,\n        parsedInput;\n\n    config._a = [];\n\n    for (i = 0; i < len; i += 1) {\n      token = tokens[i];\n      parsedInput = (getParseRegexForToken(token, config).exec(string) || [])[0];\n      if (parsedInput) string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n      if (formatTokenFunctions[token]) addTimeToArrayFromToken(token, parsedInput, config);\n    }\n\n    if (string) config._il = string;\n    return dateFromArray(config);\n  }\n\n  function makeDateFromStringAndArray(config, utc) {\n    var len = config._f.length,\n        i,\n        format,\n        tempMoment,\n        bestMoment,\n        currentScore,\n        scoreToBeat;\n\n    if (len === 0) {\n      return makeMoment(new Date(NaN));\n    }\n\n    for (i = 0; i < len; i += 1) {\n      format = config._f[i];\n      currentScore = 0;\n      tempMoment = makeMoment(config._i, format, config._l, utc);\n      if (!tempMoment.isValid()) continue;\n      currentScore += tempMoment._hDiff;\n      if (tempMoment._il) currentScore += tempMoment._il.length;\n\n      if (scoreToBeat == null || currentScore < scoreToBeat) {\n        scoreToBeat = currentScore;\n        bestMoment = tempMoment;\n      }\n    }\n\n    return bestMoment;\n  }\n\n  function removeParsedTokens(config) {\n    var string = config._i,\n        input = '',\n        format = '',\n        array = config._f.match(formattingTokens),\n        len = array.length,\n        i,\n        match,\n        parsed;\n\n    for (i = 0; i < len; i += 1) {\n      match = array[i];\n      parsed = (getParseRegexForToken(match, config).exec(string) || [])[0];\n      if (parsed) string = string.slice(string.indexOf(parsed) + parsed.length);\n\n      if (!(formatTokenFunctions[match] instanceof Function)) {\n        format += match;\n        if (parsed) input += parsed;\n      }\n    }\n\n    config._i = input;\n    config._f = format;\n  }\n  /************************************\r\n       Week of Year\r\n   ************************************/\n\n\n  function iWeekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) {\n    var end = firstDayOfWeekOfYear - firstDayOfWeek,\n        daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(),\n        adjustedMoment;\n\n    if (daysToDayOfWeek > end) {\n      daysToDayOfWeek -= 7;\n    }\n\n    if (daysToDayOfWeek < end - 7) {\n      daysToDayOfWeek += 7;\n    }\n\n    adjustedMoment = hMoment(mom).add(daysToDayOfWeek, 'd');\n    return {\n      week: Math.ceil(adjustedMoment.iDayOfYear() / 7),\n      year: adjustedMoment.iYear()\n    };\n  }\n  /************************************\r\n       Top Level Functions\r\n   ************************************/\n\n\n  function makeMoment(input, format, lang, utc) {\n    var config = {\n      _i: input,\n      _f: format,\n      _l: lang\n    },\n        date,\n        m,\n        hm;\n\n    if (format) {\n      if (isArray(format)) {\n        return makeDateFromStringAndArray(config, utc);\n      } else {\n        date = makeDateFromStringAndFormat(config);\n        removeParsedTokens(config);\n        format = 'YYYY-MM-DD-' + config._f;\n        input = leftZeroFill(date[0], 4) + '-' + leftZeroFill(date[1] + 1, 2) + '-' + leftZeroFill(date[2], 2) + '-' + config._i;\n      }\n    }\n\n    if (utc) m = moment.utc(input, format, lang);else m = moment(input, format, lang);\n    if (config._isValid === false) m._isValid = false;\n    m._hDiff = config._hDiff || 0;\n    hm = objectCreate(hMoment.fn);\n    extend(hm, m);\n    return hm;\n  }\n\n  function hMoment(input, format, lang) {\n    return makeMoment(input, format, lang, false);\n  }\n\n  extend(hMoment, moment);\n  hMoment.fn = objectCreate(moment.fn);\n\n  hMoment.utc = function (input, format, lang) {\n    return makeMoment(input, format, lang, true);\n  };\n  /************************************\r\n       hMoment Prototype\r\n   ************************************/\n\n\n  hMoment.fn.format = function (format) {\n    var i,\n        replace,\n        me = this;\n\n    if (format) {\n      i = 5;\n\n      replace = function replace(input) {\n        return me.localeData().longDateFormat(input) || input;\n      };\n\n      while (i > 0 && localFormattingTokens.test(format)) {\n        i -= 1;\n        format = format.replace(localFormattingTokens, replace);\n      }\n\n      if (!formatFunctions[format]) {\n        formatFunctions[format] = makeFormatFunction(format);\n      }\n\n      format = formatFunctions[format](this);\n    }\n\n    return moment.fn.format.call(this, format);\n  };\n\n  hMoment.fn.iYear = function (input) {\n    var lastDay, h, g;\n\n    if (typeof input === 'number') {\n      h = toHijri(this.year(), this.month(), this.date());\n      lastDay = Math.min(h.hd, hMoment.iDaysInMonth(input, h.hm));\n      g = toGregorian(input, h.hm, lastDay);\n      setDate(this, g.gy, g.gm, g.gd); //Workaround: sometimes moment wont set the date correctly if current day is the last in the month\n\n      if (this.month() !== g.gm || this.date() !== g.gd || this.year() !== g.gy) {\n        setDate(this, g.gy, g.gm, g.gd);\n      }\n\n      moment.updateOffset(this);\n      return this;\n    } else {\n      return toHijri(this.year(), this.month(), this.date()).hy;\n    }\n  };\n\n  hMoment.fn.iMonth = function (input) {\n    var lastDay, h, g;\n\n    if (input != null) {\n      if (typeof input === 'string') {\n        input = this.localeData().iMonthsParse(input);\n\n        if (input >= 0) {\n          input -= 1;\n        } else {\n          return this;\n        }\n      }\n\n      h = toHijri(this.year(), this.month(), this.date());\n      lastDay = Math.min(h.hd, hMoment.iDaysInMonth(h.hy, input));\n      this.iYear(h.hy + div(input, 12));\n      input = mod(input, 12);\n\n      if (input < 0) {\n        input += 12;\n        this.iYear(this.iYear() - 1);\n      }\n\n      g = toGregorian(this.iYear(), input, lastDay);\n      setDate(this, g.gy, g.gm, g.gd); //Workaround: sometimes moment wont set the date correctly if current day is the last in the month\n\n      if (this.month() !== g.gm || this.date() !== g.gd || this.year() !== g.gy) {\n        setDate(this, g.gy, g.gm, g.gd);\n      }\n\n      moment.updateOffset(this);\n      return this;\n    } else {\n      return toHijri(this.year(), this.month(), this.date()).hm;\n    }\n  };\n\n  hMoment.fn.iDate = function (input) {\n    var h, g;\n\n    if (typeof input === 'number') {\n      h = toHijri(this.year(), this.month(), this.date());\n      g = toGregorian(h.hy, h.hm, input);\n      setDate(this, g.gy, g.gm, g.gd); //Workaround: sometimes moment wont set the date correctly if current day is the last in the month\n\n      if (this.month() !== g.gm || this.date() !== g.gd || this.year() !== g.gy) {\n        setDate(this, g.gy, g.gm, g.gd);\n      }\n\n      moment.updateOffset(this);\n      return this;\n    } else {\n      return toHijri(this.year(), this.month(), this.date()).hd;\n    }\n  };\n\n  hMoment.fn.iDayOfYear = function (input) {\n    var dayOfYear = Math.round((hMoment(this).startOf('day') - hMoment(this).startOf('iYear')) / 864e5) + 1;\n    return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n  };\n\n  hMoment.fn.iDaysInMonth = function () {\n    return parseInt(hMoment(this).endOf('iMonth').format('iDD'));\n  };\n\n  hMoment.fn.iWeek = function (input) {\n    var week = iWeekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).week;\n    return input == null ? week : this.add((input - week) * 7, 'd');\n  };\n\n  hMoment.fn.iWeekYear = function (input) {\n    var year = iWeekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year;\n    return input == null ? year : this.add(input - year, 'y');\n  };\n\n  hMoment.fn.add = function (val, units) {\n    var temp;\n\n    if (units !== null && !isNaN(+units)) {\n      temp = val;\n      val = units;\n      units = temp;\n    }\n\n    units = normalizeUnits(units);\n\n    if (units === 'iyear') {\n      this.iYear(this.iYear() + val);\n    } else if (units === 'imonth') {\n      this.iMonth(this.iMonth() + val);\n    } else if (units === 'idate') {\n      this.iDate(this.iDate() + val);\n    } else {\n      moment.fn.add.call(this, val, units);\n    }\n\n    return this;\n  };\n\n  hMoment.fn.subtract = function (val, units) {\n    var temp;\n\n    if (units !== null && !isNaN(+units)) {\n      temp = val;\n      val = units;\n      units = temp;\n    }\n\n    units = normalizeUnits(units);\n\n    if (units === 'iyear') {\n      this.iYear(this.iYear() - val);\n    } else if (units === 'imonth') {\n      this.iMonth(this.iMonth() - val);\n    } else if (units === 'idate') {\n      this.iDate(this.iDate() - val);\n    } else {\n      moment.fn.subtract.call(this, val, units);\n    }\n\n    return this;\n  };\n\n  hMoment.fn.startOf = function (units) {\n    units = normalizeUnits(units);\n\n    if (units === 'iyear' || units === 'imonth') {\n      if (units === 'iyear') {\n        this.iMonth(0);\n      }\n\n      this.iDate(1);\n      this.hours(0);\n      this.minutes(0);\n      this.seconds(0);\n      this.milliseconds(0);\n      return this;\n    } else {\n      return moment.fn.startOf.call(this, units);\n    }\n  };\n\n  hMoment.fn.endOf = function (units) {\n    units = normalizeUnits(units);\n\n    if (units === undefined || units === 'milisecond') {\n      return this;\n    }\n\n    return this.startOf(units).add(1, units === 'isoweek' ? 'week' : units).subtract(1, 'milliseconds');\n  };\n\n  hMoment.fn.clone = function () {\n    return hMoment(this);\n  };\n\n  hMoment.fn.iYears = hMoment.fn.iYear;\n  hMoment.fn.iMonths = hMoment.fn.iMonth;\n  hMoment.fn.iDates = hMoment.fn.iDate;\n  hMoment.fn.iWeeks = hMoment.fn.iWeek;\n  /************************************\r\n       hMoment Statics\r\n   ************************************/\n\n  hMoment.iDaysInMonth = function (year, month) {\n    var i = getNewMoonMJDNIndex(year, month + 1),\n        daysInMonth = ummalqura.ummalquraData[i] - ummalqura.ummalquraData[i - 1];\n    return daysInMonth;\n  };\n\n  function toHijri(gy, gm, gd) {\n    var h = d2h(g2d(gy, gm + 1, gd));\n    h.hm -= 1;\n    return h;\n  }\n\n  function toGregorian(hy, hm, hd) {\n    var g = d2g(h2d(hy, hm + 1, hd));\n    g.gm -= 1;\n    return g;\n  }\n\n  hMoment.iConvert = {\n    toHijri: toHijri,\n    toGregorian: toGregorian\n  };\n  return hMoment;\n  /************************************\r\n       Hijri Conversion\r\n   ************************************/\n\n  /*\r\n     Utility helper functions.\r\n   */\n\n  function div(a, b) {\n    return ~~(a / b);\n  }\n\n  function mod(a, b) {\n    return a - ~~(a / b) * b;\n  }\n  /*\r\n     Converts a date of the Hijri calendar to the Julian Day number.\r\n  \n     @param hy Hijri year (1356 to 1500)\r\n     @param hm Hijri month (1 to 12)\r\n     @param hd Hijri day (1 to 29/30)\r\n     @return Julian Day number\r\n   */\n\n\n  function h2d(hy, hm, hd) {\n    var i = getNewMoonMJDNIndex(hy, hm),\n        mjdn = hd + ummalqura.ummalquraData[i - 1] - 1,\n        jdn = mjdn + 2400000;\n    return jdn;\n  }\n  /*\r\n     Converts the Julian Day number to a date in the Hijri calendar.\r\n  \n     @param jdn Julian Day number\r\n     @return\r\n       hy: Hijri year (1356 to 1500)\r\n       hm: Hijri month (1 to 12)\r\n       hd: Hijri day (1 to 29/30)\r\n   */\n\n\n  function d2h(jdn) {\n    var mjdn = jdn - 2400000,\n        i = getNewMoonMJDNIndexByJDN(mjdn),\n        totalMonths = i + 16260,\n        cYears = Math.floor((totalMonths - 1) / 12),\n        hy = cYears + 1,\n        hm = totalMonths - 12 * cYears,\n        hd = mjdn - ummalqura.ummalquraData[i - 1] + 1;\n    return {\n      hy: hy,\n      hm: hm,\n      hd: hd\n    };\n  }\n  /*\r\n     Calculates the Julian Day number from Gregorian or Julian\r\n     calendar dates. This integer number corresponds to the noon of\r\n     the date (i.e. 12 hours of Universal Time).\r\n     The procedure was tested to be good since 1 March, -100100 (of both\r\n     calendars) up to a few million years into the future.\r\n  \n     @param gy Calendar year (years BC numbered 0, -1, -2, ...)\r\n     @param gm Calendar month (1 to 12)\r\n     @param gd Calendar day of the month (1 to 28/29/30/31)\r\n     @return Julian Day number\r\n   */\n\n\n  function g2d(gy, gm, gd) {\n    var d = div((gy + div(gm - 8, 6) + 100100) * 1461, 4) + div(153 * mod(gm + 9, 12) + 2, 5) + gd - 34840408;\n    d = d - div(div(gy + 100100 + div(gm - 8, 6), 100) * 3, 4) + 752;\n    return d;\n  }\n  /*\r\n     Calculates Gregorian and Julian calendar dates from the Julian Day number\r\n     (hdn) for the period since jdn=-34839655 (i.e. the year -100100 of both\r\n     calendars) to some millions years ahead of the present.\r\n  \n     @param jdn Julian Day number\r\n     @return\r\n       gy: Calendar year (years BC numbered 0, -1, -2, ...)\r\n       gm: Calendar month (1 to 12)\r\n       gd: Calendar day of the month M (1 to 28/29/30/31)\r\n   */\n\n\n  function d2g(jdn) {\n    var j, i, gd, gm, gy;\n    j = 4 * jdn + 139361631;\n    j = j + div(div(4 * jdn + 183187720, 146097) * 3, 4) * 4 - 3908;\n    i = div(mod(j, 1461), 4) * 5 + 308;\n    gd = div(mod(i, 153), 5) + 1;\n    gm = mod(div(i, 153), 12) + 1;\n    gy = div(j, 1461) - 100100 + div(8 - gm, 6);\n    return {\n      gy: gy,\n      gm: gm,\n      gd: gd\n    };\n  }\n  /*\r\n     Returns the index of the modified Julian day number of the new moon\r\n     by the given year and month\r\n  \n     @param hy: Hijri year (1356 to 1500)\r\n     @param hm: Hijri month (1 to 12)\r\n     @return\r\n         i: the index of the new moon in modified Julian day number.\r\n   */\n\n\n  function getNewMoonMJDNIndex(hy, hm) {\n    var cYears = hy - 1,\n        totalMonths = cYears * 12 + 1 + (hm - 1),\n        i = totalMonths - 16260;\n    return i;\n  }\n  /*\r\n     Returns the nearest new moon\r\n  \n     @param jdn Julian Day number\r\n     @return\r\n       i: the index of a modified Julian day number.\r\n   */\n\n\n  function getNewMoonMJDNIndexByJDN(mjdn) {\n    for (var i = 0; i < ummalqura.ummalquraData.length; i = i + 1) {\n      if (ummalqura.ummalquraData[i] > mjdn) return i;\n    }\n  }\n});","map":null,"metadata":{},"sourceType":"script"}